Presented by Matjaž Drolc / @MatjazDrolc / github.com/drola
Source: https://hacks.mozilla.org/2017/02/a-crash-course-in-assembly/
# Install dependencies
sudo apt-get install git cmake build-essential python2.7 nodejs default-jre
wget https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz
tar -zxvf emsdk-portable.tar.gz
cd ./emsdk-portable
./emsdk update
./emsdk install sdk-incoming-64bit #If you are getting "collect2: error: ld returned 1 exit status" error, try running ./emsdk install -j1 sdk-incoming-64bit
./emsdk activate sdk-incoming-64bit
cd emcscripten/incoming
./embuilder.py build binaryen
cd ../..
source ./emsdk_env.sh
EMSCRIPTEN_BINDINGS(my_module) {
emscripten::function("findBiggestPrimeLessThan",
&findBiggestPrimeLessThan);
myWasmLibrary().then(function(myWasmLibrary) {
//WASM module has been loaded and initialized.
var result = myWasmLibrary.findBiggestPrimeLessThan(1000);
});
More examples:
emcc -O3 --llvm-lto 3 `#Highest optimization level` \
-s ALLOW_MEMORY_GROWTH=1 `#Allow memory growth from default 16MB if needed` \
-s USE_CLOSURE_COMPILER=1 `#Use closure compiler to reduce size of .js file` \
-s EXPORTED_RUNTIME_METHODS=[] `#Don't export any runtime methods` \
-s WASM=1 `#Generate WebAssembly` \
-s MODULARIZE=1 `#Wrap in module` \
-s NO_EXIT_RUNTIME=1 `#Don't destroy runtime after main() finishes` \
-s EXPORT_NAME="'myWasmLibrary'" `#Export as 'myWasmLibrary'` \
-std=c++11 `#Use C++11 standard` \
--bind `#Generate bindings` \
-o wasm.js `#Output to wasm.js` \
findBiggestPrimeLessThan.cpp #Input file(s)
No | In development | Yes |
---|---|---|
|
|
|
Hack, write documentation, expand boundaries.
Slides and links:
https://drola.si/webassembly