EmscriptenでCライブラリをjavascriptから呼び出します。

今回参考にしたのは、ここ「Emscripting a C library to Wasm

フィボナッチ数を計算するCのプログラムを書いて、それをjavascriptで呼び出してみます。

ソース

fib.c

#include <emscripten.h>

EMSCRIPTEN_KEEPALIVE
int fib(int n) {
    int i, t, a = 0, b = 1;
    for (i=0; i < n; i++) {
        t = a + b;
        a = b;
        b = t;
    }
    return b;
}

index.html

<script src="a.out.js"></script>
<script>
    Module.onRuntimeInitialized = _ => {
        const fib = Module.cwrap("fib", 'number', ['number']);
        console.log(fib(12));
    };
</script>

コンパイル

コンパイルは、このdocker image 「trzeci/emscripten」をつかってます。

docker run --rm -v $(pwd):/src trzeci/emscripten emcc -03 -s WASM=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap"]' fib.c

動作確認

http-serverとかで、サーバーを起動して、ブラウザのログに 「223」がでればOK。