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:
LuaDist
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.
Note: Linux and OS X only. xBSD soon.
-
Download a release or clone the repo:
git clone --depth 1 https://github.com/tongson/omnia
-
Edit the following space delimited variables in the top-level Makefile
MAIN: The "main" script in thebin/
directory
SRC: Modules that are specific to your application. Copy these tosrc/lua
.
SRC_DIR: Directories containing modules that are specific to your application. Copy these tosrc/lua
.
SRC_C: C modules that are specific to your application. Copy these tosrc/c
.
VENDOR: 3rd party modules
VENDOR_DIR: directories containing 3rd party modules
VENDOR_C: 3rd party C modules -
Copy the main source file into the
bin/
directory. -
Copy modules into
src/lua/
orvendor/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/
.
If you want to link statically run make release STATIC=1
You can also use omnia as a base of the monorepo of your Lua/Fennel/Moonscript code.
Adding plain modules is trivial. $(NAME) is the name of the module passed to VENDOR
.
- Copy the module to
vendor/lua/$(NAME).{lua,fnl,moon}
example:cp ~/Downloads/dkjson.lua vendor/lua
- Add
$(NAME)
toVENDOR
example:VENDOR= re dkjson
For modules that are split into multile files, such as Penlight:
- Copy the directory of the Lua module to
vendor/lua/$(NAME)
example:cp -R ~/Download/Penlight-1.3.1/lua/pl vendor/lua
- Add
$(NAME)
toVENDOR_DIR
example:VENDOR_DIR= pl
For modules with multiple levels of directories you will have to pass each directory. Example:
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.
- Provide a Makefile in
vendor/c/$(NAME)/Makefile
. See existing modules such as luaposix and lpeg for pointers. - Add
$(NAME)
toVENDOR_C
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.
The included Lua script might be too simplistic to demonstrate Omnia. For a more complicated application check my 'fork' of LDoc
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
.
Project | Version | License |
---|---|---|
Lua | 5.3.4 | MIT |
luastatic | 0.0.9-dev | CC0 |
Fennel | HEAD | MIT |
MoonScript | 0.5.0 | MIT |
moor | HEAD | MIT |
linenoise | c894b9e | BSD 2C |
moonpick | HEAD | MIT |
luacheck | 0.19.0 | MIT |
luacov | 0.12.0 | MIT |
Module | Version | License |
---|---|---|
Luaposix[1] | 34.0 | MIT |
Linotify | 0.5 | MIT |
LPeg | 1.0.1 | MIT |
lsocket[2] | 1.4 | MIT |
luafilesystem | 1.6.3 | MIT |
lua-linenoise | f30fa48 | MIT |
inspect.lua | 3.1.0 | MIT |
cimicida | HEAD | MIT |
lib | HEAD | MIT |
u-test | HEAD | MIT |
px | HEAD | MIT |
factid | HEAD | MIT |
Lua-cURLv3 | 0.3.5 | MIT |
plc | HEAD | MIT |
argparse | 0.5.0 | MIT |
dkjson | c23a579 | MIT |
lua-ConciseSerialization | 0.2.0 | MIT |
luaproxy | 6d7bb0c | BSD 3C |
luatweetnacl | 0.5-1 | MIT |
lua-array | 676ba83 | MIT |
lpty | 1.2.2 | MIT |
uuid | HEAD | Apache |
[1] posix.deprecated and posix.compat removed
[2] Does not include the async resolver