#tetcoin #framework #blockchain #crypto #wasm-build #env-var #cargo-build

wasm-builder

Tetcore 构建WASM二进制文件的实用工具

显示crate…

4个稳定版本

3.0.1 2021年5月20日
3.0.0 2021年3月8日
2.1.2 2021年6月23日
1.0.9 2021年4月6日
0.0.0 2021年3月8日

#18 in #tetcoin

Download history 71/week @ 2024-03-11 34/week @ 2024-03-18 35/week @ 2024-03-25 80/week @ 2024-04-01 23/week @ 2024-04-08 47/week @ 2024-04-15 53/week @ 2024-04-22 29/week @ 2024-04-29 33/week @ 2024-05-06 32/week @ 2024-05-13 23/week @ 2024-05-20 28/week @ 2024-05-27 29/week @ 2024-06-03 19/week @ 2024-06-10 25/week @ 2024-06-17 40/week @ 2024-06-24

115 每月下载
用于 14 个crate(3个直接使用)

Apache-2.0

49KB
789

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

Wasm构建器是一个将项目构建WASM二进制的流程整合到主cargo构建过程的工具。

项目设置

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

  1. 添加一个build.rs文件。
  2. wasm-builder作为依赖项添加到build-dependencies

build.rs文件需要包含以下代码

use wasm_builder::WasmBuilder;

fn main() {
    WasmBuilder::new()
        // Tell the builder to build the project (crate) this `build.rs` is part of.
        .with_current_project()
        // Make sure to export the `heap_base` global, this is required by Tetcore
        .export_heap_base()
        // Build the Wasm file so that it imports the memory (need to be provided by at instantiation)
        .import_memory()
        // Build it.
        .build()
}

作为最终步骤,您需要将以下内容添加到项目中

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 二进制时扩展传递给 cargo buildRUSTFLAGS
  • WASM_BUILD_NO_COLOR - 禁用 Wasm 构建的颜色输出。
  • WASM_TARGET_DIRECTORY - 将构建的任何 Wasm 二进制复制到指定的目录。路径必须是绝对路径。
  • WASM_BUILD_TOOLCHAIN - 用于构建 Wasm 二进制的工具链。格式需要与 cargo 使用的格式相同,例如 nightly-2020-02-20

可以使用环境变量 SKIP_PROJECT_NAME_WASM_BUILD 分别跳过每个项目。其中 PROJECT_NAME 需要替换为 cargo 项目的名称,例如 node-runtime 将被替换为 NODE_RUNTIME

先决条件

Wasm 构建器构建 Wasm 二进制需要以下先决条件

  • rust 夜间 + wasm32-unknown-unknown 工具链

如果使用 rustup 安装了特定的 rust 夜间版本,那么同时安装 wasm 目标也很重要。例如,如果使用 rustup install nightly-2020-02-20 安装 2020 年 2 月 20 日的 rust 夜间版本,则需要安装 wasm 目标 rustup target add wasm32-unknown-unknown --toolchain nightly-2020-02-20

许可:Apache-2.0

依赖项

~5–16MB
~203K SLoC