Write and compile as WebAssembly program by lua script.
1.6K
Write and compile as WebAssembly program by lua script.
Note: this project is still under development. We have to do more improvement
To avoid to polute your environment, we prefer to use prebuilt docker image on docker image.
Here is example Hello World script:
function hello_world()
return 'Hello, WebAssembly Lua!'
end
Make sure the function declares as global in order to access from C program. And, also you can spcify some function arguments like:
function hell_something(something):
return ('Hello, %s!'):format(something)
end
Then, you need to rememeber what type of argument should be supplied and what type of value will return (supports string or int for now).
definition.ymlThe definition.yml is configuration for generate / compile WebAssembly binary. Format is following:
dependencies:
- luaposix
functions:
hello_something:
return : string
args:
- string
entry_file: hello_world.lua
Describes each fields:
| Field | Type | Default | description |
|---|---|---|---|
| dependencies | array | - | program dependencies. the list of modules will be installed via luarocks. |
| functions | object | - | Function definitions. The key is function name which will be exported on WASM. |
| functions[name].return | string | - | Define function return type. |
| functions[name].args | array | - | Defined function argument type list. |
| entry_file | strring | main.lua | the file name of program entry. |
On docker image, the image has emcc-lua command:
$ docker pull ysugimoto/webassembly-lua
$ docker run --rm -v $PWD:/src ysugimoto/webassembly-lua emcc-lua
The emcc-lua finds definition.yml in current working directory (in this case, $PWD) and start to build. If build successfully, you can see a hello_world.[html,js,wasm]in your directory. The output file is named byentry_file` in definition.yml.
Open created or write HTML to run compiled WebAssembly program like:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>WebAssembly Lua</title>
</head>
<body>
<script src="./hello_world.js"></script>
<script>
Module.onRuntimeInitialized = () => {
// call your function through the Module.cwrap()
const helloSomething = Module.cwrap('hello_something', 'string', ['string']);
console.log(helloSomething('WebAssembly Lua'));
};
</script>
</body>
</html>
And run local server in your favorite way (e.g python -m http.server) and access to http://localhost:8000/hello_world.html (port may need), then you can see Hello, WebAssembly Lua! message in your browser console.
luaposix, it's fine to work)Yoshiaki Sugimoto
MIT
Content type
Image
Digest
Size
651.5 MB
Last updated
over 4 years ago
docker pull ysugimoto/webassembly-lua