https://github.com/rsms/js-wasmc
Simplifies building of WebAssembly modules in C/C++ and JS
https://github.com/rsms/js-wasmc
wasm webassembly
Last synced: 9 months ago
JSON representation
Simplifies building of WebAssembly modules in C/C++ and JS
- Host: GitHub
- URL: https://github.com/rsms/js-wasmc
- Owner: rsms
- License: mit
- Created: 2018-07-23T08:10:23.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-03-04T05:12:46.000Z (over 3 years ago)
- Last Synced: 2025-03-15T21:17:05.570Z (over 1 year ago)
- Topics: wasm, webassembly
- Language: JavaScript
- Homepage:
- Size: 2.53 MB
- Stars: 57
- Watchers: 3
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# wasmc
Simplifies building of WebAssembly modules from C and C++
- Handles compiling, linking and packaging of C and C++ WASM/JS projects
- Zero dependencies -- portable single-file program
- Includes `rollup` and `uglify` functionality, producing very small products
## Usage
```
usage: wasmc [options] []
usage: wasmc [-C ] -T [ ...]
options:
-debug, -g Disable optimizations and include data for debuggers.
-watch, -w Watch source files and rebuild as needed.
-config Load config file from instead of /wasmc.js
-clean Rebuild even when product and sources are up to date.
-quiet, -q Do not print information to stdout except for warnings and errors
-help, -h Show help message and exit
-C Change working directory; as if wasmc was invoked from .
-T Run instead of building. -T for list of tools.
The module directory. Defaults to "." (dirname() with -config)
```
### Example
> See the [`example`](examples/example/) directory for a complete example.
Input `foo.c`:
```c
#include
export void hello() {
printf("Hello from wasm\n");
}
```
Input `foo.js`:
```js
export const ready = Module.ready
export function hello() {
_hello() // Call WASM function "hello"
}
```
Config file `wasmc.js`
```js
module({
name: "foo",
out: "dist/foo.js",
jsentry: "foo.js",
sources: "*.c",
})
```
Build:
```
$ wasmc
```
Generated `dist/foo.js`:
```js
(function(exports){
"use strict";
// -- emscripten bootstrap code here --
Object.defineProperty(exports,"__esModule",{value:!0});
exports.ready = Module.ready;
exports.hello = function() {
_hello();
};
})(typeof exports!='undefined'?exports:this["foo"]={})
//# sourceMappingURL=foo.js.map
```
Run:
```
$ node -e 'require("./out/foo.js").ready.then(m => m.hello())'
Hello from wasm
```
### Configuration file
wasmc looks for `wasmc.js` in the project directory and evaluates it.
You can define modules (WASM products) and "libs" (collection of C and/or C++ files
compiled with certain flags) in this file.
- See [`examples/example/wasmc.js`](examples/example/wasmc.js) for an example.
- See [`misc/config-file.d.ts`](misc/config-file.d.ts) for a complete API description of the configuration file.
## Building from source
```
npm install
./misc/build.sh
```
- Release product: `wasmc`
- Debug product: `wasmc.g`
- Build only the debug product: `./misc/build.sh -g`
- Build debug product while watching source files: `./misc/build.sh -w`