46 lines
1.4 KiB
Markdown
46 lines
1.4 KiB
Markdown
# 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/ |