Home

Awesome

No longer maintained.

Focused on the LuaJIT implementation at omniajit.

Omnia -- Batteries included Lua

Compile Lua, Fennel and MoonScript source code into standalone executables. This makes it easy to use Lua/Fennel/Moonscript for system programming and general purpose scripting.

Another Lua 5.3 build system for standalone executables.

This was made possible by luastatic

Similar projects:<br> LuaDist<br/> luabuild

Requires: GNU Make, a compiler and binutils (or equivalent). Installing development tools e.g. the package build-essential should have everything you need. Does not require autotools.<br/> Note: Linux and OS X only. xBSD soon.

Getting started

  1. Download a release or clone the repo: git clone --depth 1 https://github.com/tongson/omnia

  2. Edit the following space delimited variables in the top-level Makefile<br/> MAIN: The "main" script in the bin/ directory<br/> SRC: Modules that are specific to your application. Copy these to src/lua. <br/> SRC_DIR: Directories containing modules that are specific to your application. Copy these to src/lua.</br> SRC_C: C modules that are specific to your application. Copy these to src/c.<br/> VENDOR: 3rd party modules<br/> VENDOR_DIR: directories containing 3rd party modules<br/> VENDOR_C: 3rd party C modules<br/>

  3. Copy the main source file into the bin/ directory.

  4. Copy modules into src/lua/ or vendor/lua/.

The SRC, VENDOR split is just for organization. Underneath they are using the same Make routines.

Run make during development or make release for the final executable without debug symbols in bin/.<br/> If you want to link statically run make release STATIC=1<br/>

You can also use omnia as a base of the monorepo of your Lua/Fennel/Moonscript code.

Adding plain Lua, Fennel and MoonScript modules. (NOTE: VENDOR and SRC are interchangeable.)

Adding plain modules is trivial. $(NAME) is the name of the module passed to VENDOR.

  1. Copy the module to vendor/lua/$(NAME).{lua,fnl,moon}<br/> example: cp ~/Downloads/dkjson.lua vendor/lua
  2. Add $(NAME) to VENDOR<br/> example: VENDOR= re dkjson

For modules that are split into multile files, such as Penlight:

  1. Copy the directory of the Lua module to vendor/lua/$(NAME)<br/> example: cp -R ~/Download/Penlight-1.3.1/lua/pl vendor/lua
  2. Add $(NAME) to VENDOR_DIR<br/> example: VENDOR_DIR= pl

For modules with multiple levels of directories you will have to pass each directory. Example:<br/> VENDOR_DIR= ldoc ldoc/builtin ldoc/html

Lua does not have the facilities to traverse directories and I'd like to avoid shell out functions.

Adding C modules

  1. Provide a Makefile in vendor/c/$(NAME)/Makefile. See existing modules such as luaposix and lpeg for pointers.
  2. Add $(NAME) to VENDOR_C

Development

The default make target is development which runs Luacheck against your Lua source code.

Luacov is also integrated. Just run the your test code with Luacov loaded e.g. bin/lua -lluacov tests.lua. Then bin/luacov.lua to generate the report.

Example application using omnia

The included Lua script might be too simplistic to demonstrate Omnia. For a more complicated application check my 'fork' of LDoc

Fennel and MoonScript support

Just treat Fennel/MoonScript source the same as Lua source. The Make routines will handle the compilation of Fennel/MoonScript sources and link the appropriate compiled Lua source to the final executable.

The MoonScript standard library is included but you have to add moon to the VENDOR line in the Makefile.

A copy of the MoonScript REPL moor is also included. To compile, run make bin/moor. A copy of the upstream Fennel REPL and compiler is also included. To compile, run make bin/fennel.

Included projects

ProjectVersionLicense
Lua5.3.5MIT
luastatic0.0.9-devCC0
FennelHEADMIT
MoonScript0.5.0MIT
moorHEADMIT
linenoiselua-linenoiseBSD 2C
moonpickHEADMIT
luacheck0.19.0MIT
luacov0.12.0MIT

Available modules (Feel free to open a Github issue if you want help with adding a new Lua module.)

ModuleVersionLicense
Luaposix[1]34.0MIT
Linotify0.5MIT
LPeg1.0.1MIT
lsocket[2]1.4MIT
luafilesystem1.6.3MIT
lua-linenoise0.9MIT
inspect.lua3.1.0MIT
cimicidaHEADMIT
libHEADMIT
u-testHEADMIT
pxHEADMIT
factidHEADMIT
Lua-cURLv3b4d1d79MIT
plcHEADMIT
argparse0.5.0MIT
dkjsonc23a579MIT
lua-ConciseSerialization0.2.1MIT
luaproxy6d7bb0cBSD 3C
luatweetnacl0.5-1MIT
lua-array676ba83MIT
lpty1.2.2MIT
uuidHEADApache
ftcsv1.1.6MIT

[1] posix.deprecated and posix.compat removed<br/> [2] Does not include the async resolver<br/>