# Developing/Testing the `wasm32` Target Since there is no native host platform for WebAssembly, developing/targeting requires a bit more setup than a vanilla Rust toolchain environment. To build/target this library outside a `wasm-pack` context, you can do the following: * Install toolchain with `wasm32-wasi` or `wasm32-unknown-unknown` (e.g. `rustup target add wasm32-wasi`). * `wasm32-wasi` is a nice target because it gives us the capability to run the tests as-is with a WASM runtime. * Install a WASM runtime (e.g. [Wasmer]/[Wasmtime]/[WAVM]). * Install `wasm-runner` a simple runner wrapper to run WASM targeted code with a WASM runtime: ``` $ cargo install wasm-runner ``` * Add a Cargo configuration file to target `wasm` and allow the unit tests to be run with a WASM VM *by default*: ``` [build] target = "wasm32-wasi" rustflags = "-C target-feature=+simd128" [target.'cfg(target_arch="wasm32")'] runner = ["wasm-runner", "wasmer"] ``` * Run the build/tests: ``` $ cargo test $ cargo test --all-features ``` You can do this without configuration as well: ``` $ RUSTFLAGS="-C target-feature=+simd128" \ CARGO_TARGET_WASM32_WASI_RUNNER="wasm-runner wasmer" \ cargo test --target wasm32-wasi $ RUSTFLAGS="-C target-feature=+simd128" \ CARGO_TARGET_WASM32_WASI_RUNNER="wasm-runner wasmer" \ cargo test --target wasm32-wasi --all-features ``` [wasmer]: https://wasmer.io/ [wasmtime]: https://wasmtime.dev/ [wavm]: https://wavm.github.io/