Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mezum/emcc-loader

Webpack loader that compiles some c/c++ file into a wasm using Emscripten.
https://github.com/mezum/emcc-loader

Last synced: 3 days ago
JSON representation

Webpack loader that compiles some c/c++ file into a wasm using Emscripten.

Awesome Lists containing this project

README

        

# emcc-loader
Webpack loader that compiles some c/c++ files into a wasm using Emscripten.

## Install

```
npm install --save-dev emcc-loader
```

## Usage
First of all, create .clist file written relative paths from the clist to c/c++ file like this:

```
# comment
foobar.c

# indent is also ok.
foo/bar.cpp
baz.cc
qux.cxx

# --pre-js
^pre.js

# --post-js
$post.js
```

Ofcourse, write c/c++ files!

```
#include
#include

#ifdef __cplusplus
extern "C" {
#endif

EMSCRIPTEN_KEEPALIVE
void sayHello() {
printf("hello!\n");
}

#ifdef __cplusplus
}
#endif
```

Next, edit your webpack.config.js:

```
loaders: [
{
test: /\.clist$/,
use: [
{
loader: 'emcc-loader',
options: {
buildDir: `${__dirname}/build`,
commonFlags: [ '-O2' ],
cFlags: [ '-std=c11' ],
cxxFlags: [ '-std=c++14' ],
ldFlags: [
'-s', "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap']",
'-s', 'DEMANGLE_SUPPORT=1',
]
}
}
]
}
]
```

Now, you can import a wasm file like this:

```
import wasm from './module.clist';

wasm.initialize().then(module => {
module._sayHello();
});
```

## Options
emcc-loader is configuable on webpack.config.js.

- buildDir : string
-- [Required] absolute path to temporary directory used by emcc.
- cc : string
-- [default=emcc] c compiler path.
- cxx : string
-- [default=em++] c++ compiler path.
- ld : string
-- [default=emcc] linker path.
- commonFlags : string[]
-- [default=[]] array of flags passed to all emcc/em++ commands.
- cFlags : string[]
-- [default=[]] array of flags passed to emcc compiling C.
- cxxFlags : string[]
-- [default=[]] array of flags passed to em++ compiling C++.
- ldFlags : string[]
-- [default=[]] array of flags passed to emcc linking all object files.

## Dependencies
- Emscripten

## License
MIT License

## Inspiration
Inspired by [cpp-wasm-loader](https://github.com/kobzol/cpp-wasm-loader).