wasm32-wasip2

层级:2

wasm32-wasip2 目标是一个新的,并且(截至 2024 年 1 月)仍然处于实验阶段的目标。此目标是 wasm32-wasip1 目标的扩展,最初被称为 wasm32-wasi。它是 wasi(WebAssembly 系统接口)发展的下一步,它使用 WebAssembly 组件模型,以允许一组标准化的系统调用,旨在赋予 WebAssembly 二进制文件本地主机功能。

目标维护者

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

要求

此目标是交叉编译的。该目标完全支持 std

平台要求

WebAssembly 运行时应支持 wasi preview 2 API 集。运行时还必须支持组件,因为此目标输出的是一个组件,而不是核心 wasm 模块。在撰写本文时,Wasmtime 17 及以上版本能够本地运行此目标,无需任何额外标志。

构建目标

要构建此目标,首先获取 wasi-sdk 的副本。目前,最低版本需要 22。

接下来,配置 WASI_SDK_PATH 环境变量,以指向安装它的位置。例如

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

接下来,请确保从源代码构建 Rust 时启用 LLD,因为在将 WebAssembly 代码链接在一起时需要 LLVM 的 LLD wasm-ld 驱动程序。Rust 的构建系统将自动从 WASI_SDK_PATH 中拾取任何必要的二进制文件和程序。

测试

目前此目标未在 CI 中进行测试。可以在本地使用 PATH 中的 wasmtime 二进制文件进行测试,如下所示

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

有条件地编译代码

建议使用以下方式为此目标有条件地编译代码

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

启用的 WebAssembly 功能

当前为编译启用的默认 WebAssembly 功能集与 wasm32-unknown-unknown 相同。有关更多信息,请参阅该处的文档。