software:webassembly
WebAssembly
Emscripten (emsdk)
Emscripten (emsdk) を使うと、通常の C++ Toolchain の代わりとしてビルドができるようになります。
- command
- emcc
- em++
- emar
emar を使用して lib の生成も可能。
Emscripten は JavaScript による独自のランタイムを使用し、ブラウザ上での実行を可能にしています。 実行コードの事前コンパイルと最適化のために WebAssembly を使用します。
#include <stdio.h> #if __EMSCRIPTEN__ # include <emscripten.h> #endif int main() { #if __EMSCRIPTEN__ EM_ASM( FS.mkdir( '/cur' ); FS.mount( NODEFS, { root: '.' }, '/cur' ); FS.chdir( '/cur' ); ); #endif FILE* fp= fopen( "test.txt", "r" ); if( fp ){ char buffer[128]; fread( buffer, 10, 1, fp ); buffer[10]= '\0'; printf( "[%s]\n", buffer ); fclose( fp ); } return 0; }
$ emcc main.cpp -O3 -c $ emcc main.o -lnodefs.js $ node a.out.js
WASI
Emscripten とは異なり、共通の Systemcall を使用した wasm の実行環境があります。
$ $WASI_SDK_ROOT/bin/clang --target=wasm32-wasi --sysroot=$WASI_SDK_ROOT/share/wasi-sysroot main.cpp $ wasmtime a.out
- 実行するには専用のランタイムが必要です。
software/webassembly.txt · 最終更新: 2021/10/29 23:06 by oga