注意:現在はEmscriptenを利用しなくてもwasmへのコンパイルができます。
Rust は 1.14 から WebAssembly(以下、WASM) へコンパイルできるようになりました。(c.f. Rust 1.14 のリリースに関するアナウンス)
以前のバージョンでは、WASMへの出力にはRustコンパイラに加えて、Emscriptenも必要でした。ただ、現在はstable版のRustコンパイラのターゲットアーキテクチャにWASMを追加することで、RustからWebAssemblyを出力できます。
必要なソフトウェア
- rustup:Rust コンパイラのバージョン管理ツール
- rustc / Cargo:Rust コンパイラ / パッケージ管理ツール
これだけのソフトウェアをインストールします。
Rust コンパイラのインストール
rustup を利用して Rust コンパイラをインストールします。詳細はrustup で Rust コンパイラを簡単インストール を参照してください。
% curl https://sh.rustup.rs -sSf | sh
% source ~/.cargo/env
Rust にターゲットアーキテクチャを追加
rustup はコンパイラをインストールする以外に、ターゲットアーキテクチャの管理も行えます。WASM をコンパイルするためには、wasm32-unknown-emscripten というアーキテクチャを追加します。追加は次のように行います。
% rustup target add wasm32-unknown-unknown
Rust から WASM 出力
以上で準備は終了です。では実際に WASM を出力してみましょう。まず cargo コマンドで hello world を作成します。
% cargo new --bin hello
% cd hello
つぎにビルドをします。target
オプションを使ってwasm32-unknown-unknown
をターゲットアーキテクチャに指定し、ビルドします。
% cargo build --target=wasm32-unknown-unknown
ビルドされたバイナリーは、target/wasm32-unknown-unknown/debug
以下に出力されます。
% ls target/wasm32-unknown-unknown/debug
build examples hello-world.wasm native
deps hello-world.d incremental
まとめ
wasm32-unknown-unknown
をターゲットアーキテクチャに追加するのがポイントでした。--release
オプションをつけてビルドすることで、最適化されたバイナリが出力されます。