ユーザ用ツール

サイト用ツール


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