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
相同。有关更多信息,请参阅该处的文档。