Build WASM
Build for Browsers
wasm-pack
Building rust program to WebAssembly for browsers uses wasm-pack.
Run cargo install wasm-pack or installer is available at github releases or here.
Run this command to build WebAssembly.
More command line options can be found at wasm-pack build.
wasm-pack build --release --out-name prime --target web
This command generate prime.js , prime_bg.wasm in ./pkg directory.
Generated prime_bg.wasm can be run as standalone wasm.
wasm32-unknown-emscripten
When building wasm with emscripten targeting wasm32-unknown-emscripten.
wasm32-unknown-emscripten target have to be installed.
This command shows all of the targets supported by rust.
Check that wasm32-unknown-emscripten is installed.
rustup target list
// omit...
wasm32-unknown-emscripten (installed)
// omit...
Or, you can install target with
rustup target add wasm32-unknown-emscripten
Additionally, emscripten have to be installed.
Then add link option in .cargo/config.toml (see Configuration - The Cargo Book).
This command build and generate prime.wasm.
cargo build --release --target wasm32-unknown-emscripten
Build for Standalone
prime_bg.wasm which is generated by wasm-pack can be used as standalone wasm.
Here show the ways to build WebAssembly using cargo build.
Before building standalone wasm, we need to check the build targets installed.
This command shows all of the targets supported by rust.
rustup target list
// omit...
wasm32-unknown-unknown (installed)
wasm32-wasi (installed)
// omit...
These targets are briefly expalined here.
You can install target using rustup command.
rustup target add wasm32-unknown-unknowns
Now, let's build standalone wasm.
First, we need to comment out or remove the wasm_bindgen attribute and unused import because wasm_bindgen adds or removes symbols for combining JavaScript.
More document on wasm_bindgen can be found at The wasm-bindgen Guide, wasm-bindgen - crates.io.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
wasm32-unknown-unknown
This command build standalone wasm for WASI and generates prime_standalone.wasm
Then we can use .wasm standalone.
cargo build --release --target wasm32-unknown-unknown
wasm32-wasi
When targeting wasm32-wasi, it may requires wasi crate and may requires fixing source code.
cargo build --release --target wasm32-wasi
This command generates prime_standalone.wasm.