
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 をインストール済みでない場合はエラーとなります。
以下を参考に導入しておきましょう。