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 神奇豆子

Download history 1684/week @ 2024-04-16 1723/week @ 2024-04-23 2107/week @ 2024-04-30 1409/week @ 2024-05-07 1787/week @ 2024-05-14 1843/week @ 2024-05-21 3121/week @ 2024-05-28 2366/week @ 2024-06-04 2158/week @ 2024-06-11 2128/week @ 2024-06-18 2754/week @ 2024-06-25 957/week @ 2024-07-02 1846/week @ 2024-07-09 2262/week @ 2024-07-16 1909/week @ 2024-07-23 2026/week @ 2024-07-30

每月下载量 8,157
用于 49 个crate(36个直接使用)

Apache-2.0 和可能 GPL-3.0-or-later…

605KB
4.5K SLoC

Wasm构建器是一个将项目构建为Wasm二进制文件的实用工具

Wasm构建器是一个工具,它将构建项目WASM二进制文件的过程集成到主cargo构建过程中。

项目设置

应该编译为Wasm二进制文件的项目需要

  1. 添加一个build.rs文件。
  2. 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_BINARYWASM_BINARY_BLOATY。前者是一个紧凑的 Wasm 二进制文件,后者是编译器生成的 Wasm 二进制文件。这两个变量都具有 Option<&'static [u8]> 类型。

特性

Wasm 构建器支持在构建 Wasm 二进制文件时启用 cargo 特性。默认情况下,它将启用所有为原生构建启用的 wasm 构建特性,除了 defaultstd 特性。除此之外,wasm 构建器还支持特殊的 runtime-wasm 特性。当 wasm 构建器编译 Wasm 二进制文件时,将启用此 runtime-wasm 特性。如果此特性不存在,则不会启用。

环境变量

通过使用环境变量,您可以配置要构建哪些 Wasm 二进制文件以及如何构建

  • SKIP_WASM_BUILD - 跳过构建任何 Wasm 二进制文件。当只应该重新编译原生代码时非常有用。如果这是第一次运行且不存在 Wasm 二进制文件,这将设置两个变量为 None
  • WASM_BUILD_TYPE - 设置构建 Wasm 二进制文件的构建类型。支持的值是 releasedebug。默认情况下,构建类型与主构建使用的构建类型相同。
  • FORCE_WASM_BUILD - 可以设置为强制进行 Wasm 构建。在后续调用中,变量的值需要更改。由于 wasm-builder 指示 cargo 监视文件更改,因此此环境变量仅在特定情况下需要。
  • WASM_BUILD_RUSTFLAGS - 在构建 wasm 二进制文件时扩展 RUSTFLAGScargo 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