Skip to content
Webpack loader that compiles some c/c++ file into a wasm using Emscripten.
TypeScript JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
test
.editorconfig
.gitignore
LICENSE initial commit. Feb 23, 2018
README.md
index.js
package-lock.json
package.json version 0.0.3 Mar 15, 2018
rollup.config.js
tsconfig.json
tslint.json Rollup! Mar 15, 2018

README.md

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 <stdio.h>
#include <emscripten/emscripten.h>

#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.

You can’t perform that action at this time.