显示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 |
|
#18 in #tetcoin
115 每月下载
用于 14 个crate(3个直接使用)
49KB
789 行
Wasm构建器是一个将项目构建为Wasm二进制的工具
Wasm构建器是一个将项目构建WASM二进制的流程整合到主cargo
构建过程的工具。
项目设置
应编译为Wasm二进制的项目需要
- 添加一个
build.rs
文件。 - 将
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_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 二进制时扩展传递给cargo build
的RUSTFLAGS
。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