wasm32-wasip2

Tier: 3

The wasm32-wasip2 target is a new and still (as of January 2024) an experimental target. This target is an extension to wasm32-wasip1 target, originally known as wasm32-wasi. It is the next evolution in the development of wasi (the WebAssembly System Interface) that uses the WebAssembly component model to allow for a standardized set of syscalls that are intended to empower WebAssembly binaries with native host capabilities.

Target maintainers

  • Alex Crichton, https://github.com/alexcrichton
  • Ryan Levick, https://github.com/rylev

Requirements

This target is cross-compiled. The target supports std fully.

Platform requirements

The WebAssembly runtime should support the wasi preview 2 API set. Runtimes also are required to support components since this target outputs a component as opposed to a core wasm module. As of the time of this writing Wasmtime 17 and above is able to run this target natively with no extra flags.

Building the target

To build this target first acquire a copy of wasi-sdk. At this time version 22 is the minimum needed.

Next configure the WASI_SDK_PATH environment variable to point to where this is installed. For example:

export WASI_SDK_PATH=/path/to/wasi-sdk-22.0

Next be sure to enable LLD when building Rust from source as LLVM's wasm-ld driver for LLD is required when linking WebAssembly code together. Rust's build system will automatically pick up any necessary binaries and programs from WASI_SDK_PATH.

Testing

This target is not tested in CI at this time. Locally it can be tested with a wasmtime binary in PATH like so:

./x.py test --target wasm32-wasip2 tests/ui

Conditionally compiling code

It's recommended to conditionally compile code for this target with:

#[cfg(all(target_os = "wasi", target_env = "p2"))]

Enabled WebAssembly features

The default set of WebAssembly features enabled for compilation is currently the same as wasm32-unknown-unknown. See the documentation there for more information.