emcc -O3 -s WASM=1 -s SIDE_MODULE=1 -o sum.wasm sum.c
を実行して、次のCコードからかなり小さい(203バイト)wasmファイルを生成できます。Rustで最小限のwasmファイルを生成するにはどうすればよいですか?
#include <emscripten/emscripten.h>
int EMSCRIPTEN_KEEPALIVE sum(int a, int b) {
return a + b;
}
逆アセンブル出力:
(module
(type $0 (func (param i32 i32) (result i32)))
... trim 9 lines ...
(export "_sum" (func $0))
(func $0 (type $0) (param $var$0 i32) (param $var$1 i32) (result i32)
(i32.add
(get_local $var$1)
(get_local $var$0)
)
)
... trim 17 lines ...
)
しかし、次の錆コード
pub fn main() {}
#[no_mangle]
pub extern fn sum(a: i32, b: i32) -> i32 {
a + b
}
を与えられた私は、似た何かを生み出すように見えることはできません。
rustc -O --target=wasm32-unknown-emscripten sum.rs
が動作しますが、私には85k wasmファイルと128k jsファイルが与えられます。
私はEMMAKEN_CFLAGS='-s WASM=1 -s SIDE_MODULE=1'
を輸出しようとしましたが、それが存在している「/tmp/.../rust.metadata.bin」私に
入力ファイルのような警告の数を与えるが、適切なLLVMのビットコードファイルではありませんでしたEmscriptenのために。おそらく誤ってEmscriptenでネイティブの組み込みオブジェクトファイルを混在させるでしょうか?
リンクできません。
私の錆のバージョンは1.22.0-nightly (c6884b12d 2017-09-30)
で、emccのバージョンは1.37.21
です。
私は間違っていますか?
ほら、検索し、私は何を見つけることの週。それから、この質問を投稿してから数分後に、私は[これ](https://gist.github.com/LukasKalbertodt/821ab8b85a25f4c54544cc43bed2c39f)を見つけました。私はそれをテストして戻ってきます。 – zakm
[このファイル](https://github.com/rust-lang/rust/blob/0defa208dcb5a0f3c1ca5bc4df7acf52759ece44/src/librustc_back/target/wasm32_unknown_emscripten.rs)では、Rustのemscriptenターゲットに関するほとんどすべてが定義されています。また、ここでは(https://github.com/rust-lang/rust/blob/b2f67c8d5676d13d83523316ac95a7056dbd19c6/src/librustc_back/target/mod.rs)、このコメントによれば、JSONファイルを書き込むことによってターゲットを追加することができます(再コンパイルせずにさとうきび!)。ですから、 'SIDE_MODULE'フラグをemccに渡すカスタムターゲットを追加することができます。私は適切な答えを書くだろうが、今は時間がない。申し訳ありません:< –