45个版本 (23个重大版本变更)
24.0.0 | 2024年7月18日 |
---|---|
23.0.0 | 2024年6月21日 |
22.0.1 | 2024年6月13日 |
21.0.0 | 2024年4月8日 |
1.0.4 | 2019年7月8日 |
#1190 in 神奇豆子
每月下载量 8,157
用于 49 个crate(36个直接使用)
605KB
4.5K SLoC
Wasm构建器是一个将项目构建为Wasm二进制文件的实用工具
Wasm构建器是一个工具,它将构建项目WASM二进制文件的过程集成到主cargo
构建过程中。
项目设置
应该编译为Wasm二进制文件的项目需要
- 添加一个
build.rs
文件。 - 将
wasm-builder
添加到build-dependencies
中的依赖项。
build.rs
文件需要包含以下代码
use substrate_wasm_builder::WasmBuilder;
fn main() {
// Builds the WASM binary using the recommended defaults.
// If you need more control, you can call `new` or `init_with_defaults`.
WasmBuilder::build_using_defaults();
}
作为最后一步,您需要将以下内容添加到项目中
include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));
这将包含生成的 Wasm 二进制文件作为两个常量 WASM_BINARY
和 WASM_BINARY_BLOATY
。前者是一个紧凑的 Wasm 二进制文件,后者是编译器生成的 Wasm 二进制文件。这两个变量都具有 Option<&'static [u8]>
类型。
特性
Wasm 构建器支持在构建 Wasm 二进制文件时启用 cargo 特性。默认情况下,它将启用所有为原生构建启用的 wasm 构建特性,除了 default
和 std
特性。除此之外,wasm 构建器还支持特殊的 runtime-wasm
特性。当 wasm 构建器编译 Wasm 二进制文件时,将启用此 runtime-wasm
特性。如果此特性不存在,则不会启用。
环境变量
通过使用环境变量,您可以配置要构建哪些 Wasm 二进制文件以及如何构建
SKIP_WASM_BUILD
- 跳过构建任何 Wasm 二进制文件。当只应该重新编译原生代码时非常有用。如果这是第一次运行且不存在 Wasm 二进制文件,这将设置两个变量为None
。WASM_BUILD_TYPE
- 设置构建 Wasm 二进制文件的构建类型。支持的值是release
或debug
。默认情况下,构建类型与主构建使用的构建类型相同。FORCE_WASM_BUILD
- 可以设置为强制进行 Wasm 构建。在后续调用中,变量的值需要更改。由于 wasm-builder 指示cargo
监视文件更改,因此此环境变量仅在特定情况下需要。WASM_BUILD_RUSTFLAGS
- 在构建 wasm 二进制文件时扩展RUSTFLAGS
给cargo build
。WASM_BUILD_NO_COLOR
- 禁用 wasm 构建的颜色输出。WASM_TARGET_DIRECTORY
- 将构建的任何 Wasm 二进制文件复制到指定的目录。路径必须是绝对路径。WASM_BUILD_TOOLCHAIN
- 用于构建 Wasm 二进制文件的工具链。格式需要与 cargo 使用的格式相同,例如nightly-2020-02-20
。WASM_BUILD_WORKSPACE_HINT
- 提示正在构建的工作空间。通常不需要,因为我们从目标目录向上遍历,直到找到Cargo.toml
。如果目标目录更改以进行构建,则可以使用此环境变量指向实际的工作空间。WASM_BUILD_STD
- 设置是否构建 Rust 的标准库 crate。这是确保标准库 crate 仅使用我们的执行器支持的确切 WASM 特性集所必需的。默认启用。CARGO_NET_OFFLINE
- 如果true
,则将--offline
传递给启动的所有进程以防止网络访问。在离线环境中非常有用。
每个项目都可以通过使用环境变量SKIP_PROJECT_NAME_WASM_BUILD
单独跳过。其中PROJECT_NAME
需要替换为cargo项目的名称,例如kitchensink-runtime
将被替换为NODE_RUNTIME
。
先决条件
构建Wasm二进制文件需要以下先决条件
- rust nightly +
wasm32-unknown-unknown
工具链
或者
- rust stable且版本至少为1.68.0 +
wasm32-unknown-unknown
工具链
如果使用rustup
安装了特定的rust,那么确保安装了wasm目标也是非常重要的。例如,如果使用2020年2月20日的rust版本,使用以下命令安装rustup install nightly-2020-02-20
,则需要安装wasm目标rustup target add wasm32-unknown-unknown --toolchain nightly-2020-02-20
。
依赖
~19–35MB
~599K SLoC