cargo-wasi とは
cargo-wasi は Cargo のサブコマンドとして利用でき、Rust コードの WebAssembly コンパイルを簡単にします。
cargo-wasi を利用することで、以下に示すビルトインのデフォルト処理が行われます
wasm32-wasi
ターゲットの管理- ランタイム
wasmtime
がインストールされていることを確認する - カーゴを
wasm32-wasi
用に自動的に設定する - WebAssembly を
wasm-opt
でさらに最適化する - WebAssembly Interface Types のための
wasm-bindgen
の実行 - リリースモードでの DWARF デバッグ情報の削除
- name` セクションの Rust シンボルの分離
name
とproducers
のカスタムセクションの設定
cargo-wasi の導入
以下でインストールします。
$ cargo install cargo-wasi
$ cargo wasi --version
アップデートとアンインストールは以下で可能です。
- cargo wasi のアップデート
$ cargo install cargo-wasi --force
- cargo wasi のアンインストール
$ cargo wasi self clean $ cargo uninstall cargo-wasi
cargo-wasi コマンド
通常の cargo コマンドに wasi を付けて実行します。
build
$ cargo wasi build
リリースビルドは --release
を付けるなど、通常の cargo ビルドと同様です。
check
$ cargo wasi check
run
$ cargo wasi run $ cargo wasi run arg1 arg2
test
$ cargo wasi test
bench
$ cargo wasi bench
cargo-wasi の実行例
プロジェクトを作成します。
$ cargo new wasi-hello-world Created binary (application) `wasi-hello-world` package $ cd wasi-hello-world
実行は以下のようにするだけです。
$ cargo wasi run info: downloading component 'rust-std' for 'wasm32-wasi' info: installing component 'rust-std' for 'wasm32-wasi' Compiling wasi-hello-world v0.1.0 (/code/wasi-hello-world) Finished dev [unoptimized + debuginfo] target(s) in 0.15s Running `/.cargo/bin/cargo-wasi target/wasm32-wasi/debug/wasi-hello-world.wasm` Running `target/wasm32-wasi/debug/wasi-hello-world.wasm` Hello, world!
cargo wasi run
により、コンパイルターゲット wasm32-wasi
が存在しない場合は自動で導入されます。
実行には wasmtime が利用されます。wasmtime をインストール済みでない場合はエラーとなります。
以下を参考に導入しておきましょう。