https://github.com/tongson/omnia
Batteries included Lua
https://github.com/tongson/omnia
lua
Last synced: about 2 months ago
JSON representation
Batteries included Lua
- Host: GitHub
- URL: https://github.com/tongson/omnia
- Owner: tongson
- License: other
- Archived: true
- Created: 2015-04-15T13:21:26.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2020-11-05T01:13:06.000Z (about 5 years ago)
- Last Synced: 2024-05-02T13:19:59.291Z (over 1 year ago)
- Topics: lua
- Language: C
- Homepage:
- Size: 1.38 MB
- Stars: 46
- Watchers: 8
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- my-awesome-lua - Omnia - Compile Lua, Fennel and MoonScript source code into standalone executables. Using ``luastatic``. (Resources / Batteries Included)
- awesome-lua - omnia - A batteries-included creator of standalone executables, built on top of luastatic. (Resources / Build Tools and Standalone Makers)
README
#### No longer maintained.
Focused on the LuaJIT implementation at [omniajit](https://github.com/tongson/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](https://github.com/ers35/luastatic)
Similar projects:
[LuaDist](http://luadist.org/)
[luabuild](https://github.com/stevedonovan/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.
#### 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
MAIN: The "main" script in the `bin/` directory
SRC: Modules that are specific to your application. Copy these to `src/lua`.
SRC_DIR: Directories containing modules that are specific to your application. Copy these to `src/lua`.
SRC_C: C modules that are specific to your application. Copy these to `src/c`.
VENDOR: 3rd party modules
VENDOR_DIR: directories containing 3rd party modules
VENDOR_C: 3rd party C modules
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/`.
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 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}`
example: `cp ~/Downloads/dkjson.lua vendor/lua`
1. Add `$(NAME)` to `VENDOR`
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)`
example: `cp -R ~/Download/Penlight-1.3.1/lua/pl vendor/lua`
1. Add `$(NAME)` to `VENDOR_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.
#### Adding C modules
1. Provide a Makefile in `vendor/c/$(NAME)/Makefile`. See existing modules such as luaposix and lpeg for pointers.
1. 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](https://github.com/tongson/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
Project | Version | License
------------------------------------------------------------|-----------------|---------
[Lua](http://www.lua.org) | 5.3.5 | MIT
[luastatic](https://github.com/ers35/luastatic) | 0.0.9-dev | CC0
[Fennel](https://github.com/bakpakin/Fennel) | HEAD | MIT
[MoonScript](http://moonscript.org) | 0.5.0 | MIT
[moor](https://github.com/Nymphium/moor) | HEAD | MIT
[linenoise](http://github.com/antirez/linenoise) | lua-linenoise | BSD 2C
[moonpick](https://github.com/nilnor/moonpick) | HEAD | MIT
[luacheck](https://github.com/mpeterv/luacheck) | 0.19.0 | MIT
[luacov](https://github.com/keplerproject/luacov) | 0.12.0 | MIT
#### Available modules (Feel free to open a Github issue if you want help with adding a new Lua module.)
Module | Version | License
----------------------------------------------------------------------------------|-----------------|---------
[Luaposix](https://github.com/luaposix/luaposix)[1] | 34.0 | MIT
[Linotify](https://github.com/hoelzro/linotify) | 0.5 | MIT
[LPeg](http://www.inf.puc-rio.br/~roberto/lpeg/) | 1.0.1 | MIT
[lsocket](http://tset.de/lsocket/)[2] | 1.4 | MIT
[luafilesystem](https://github.com/keplerproject/luafilesystem) | 1.6.3 | MIT
[lua-linenoise](https://github.com/hoelzro/lua-linenoise) | 0.9 | MIT
[inspect.lua](https://github.com/kikito/inspect.lua) | 3.1.0 | MIT
[cimicida](https://github.com/Configi/configi) | HEAD | MIT
[lib](https://github.com/Configi/configi) | HEAD | MIT
[u-test](https://github.com/IUdalov/u-test/) | HEAD | MIT
[px](https://github.com/Configi/configi) | HEAD | MIT
[factid](https://github.com/Configi/configi) | HEAD | MIT
[Lua-cURLv3](https://github.com/Lua-cURL/Lua-cURLv3) | b4d1d79 | MIT
[plc](https://github.com/philanc/plc) | HEAD | MIT
[argparse](https://github.com/mpeterv/argparse) | 0.5.0 | MIT
[dkjson](http://dkolf.de/src/dkjson-lua.fsl/home) | c23a579 | MIT
[lua-ConciseSerialization](https://framagit.org/fperrad/lua-ConciseSerialization) | 0.2.1 | MIT
[luaproxy](https://github.com/arcapos/luaproxy) | 6d7bb0c | BSD 3C
[luatweetnacl](https://github.com/philanc/luatweetnacl) | 0.5-1 | MIT
[lua-array](https://github.com/cloudwu/lua-array) | 676ba83 | MIT
[lpty](http://tset.de/lpty/index.html) | 1.2.2 | MIT
[uuid](https://github.com/Configi/configi) | HEAD | Apache
[ftcsv](https://github.com/FourierTransformer/ftcsv) | 1.1.6 | MIT
[1] posix.deprecated and posix.compat removed
[2] Does not include the async resolver