77 个稳定版本
新 1.216.0 | 2024 年 8 月 22 日 |
---|---|
1.215.0 | 2024 年 7 月 31 日 |
1.212.0 | 2024 年 6 月 27 日 |
1.202.0 | 2024 年 3 月 26 日 |
1.0.3 | 2022 年 2 月 17 日 |
577 在 WebAssembly 中
4,379 每月下载量
4MB
85K SLoC
wasm-tools
Bytecode Alliance 项目
用于低级操作 WebAssembly 模块的 CLI 和 Rust 库
安装
每个版本都提供了在 CI 上构建的预编译工件,可用于下载。
要从源代码构建,首先 为您的平台安装 Rust,然后使用包含的 Cargo 软件包管理器进行安装
$ cargo install wasm-tools
或者如果您使用 cargo binstall
,则可以使用它来安装 预编译工件
$ cargo binstall wasm-tools
可以使用以下命令确认安装
$ wasm-tools --version
可以使用以下命令探索子命令
$ wasm-tools help
示例
基本验证/打印
# Validate a WebAssembly file
$ wasm-tools validate foo.wasm
# Validate a WebAssembly module in the text format, automatically converting to
# binary.
$ wasm-tools validate foo.wat
# Validate a WebAssembly file enabling an off-by-default feature
$ wasm-tools validate foo.wasm --features=exception-handling
# Validate a WebAssembly file with a default-enabled feature disabled
$ wasm-tools validate foo.wasm --features=-simd
# Print the text format of a module to stdout
$ wasm-tools print foo.wasm
# Convert a binary module to text
$ wasm-tools print foo.wasm -o foo.wat
简单的突变以及将命令组合在一起
# Mutate a WebAssembly module and print its text representation to stdout
$ wasm-tools mutate foo.wasm -t
# Mutate a WebAssembly module with a non-default seed and validate that the
# output is a valid module.
$ wasm-tools mutate foo.wasm --seed 192 | wasm-tools validate
# Demangle Rust/C++ symbol names in the `name` section, strip all other custom
# sections, and then print out what binary sections remain.
$ wasm-tools demangle foo.wasm | wasm-tools strip | wasm-tools objdump
与组件一起工作
# Print the WIT interface of a component
$ wasm-tools component wit component.wasm
# Convert WIT text files to a binary-encoded WIT package, printing the result to
# stdout
$ wasm-tools component wit ./wit -t
# Convert a WIT document to JSON
$ wasm-tools component wit ./wit --json
# Round trip WIT through the binary-encoded format to stdout.
$ wasm-tools component wit ./wit --wasm | wasm-tools component wit
# Convert a core WebAssembly binary into a component. Note that this requires
# WIT metadata having previously been embedded in the core wasm module.
$ wasm-tools component new my-core.wasm -o my-component.wasm
# Convert a core WebAssembly binary which uses WASI to a component.
$ wasm-tools component new my-core.wasm -o my-component.wasm --adapt wasi_snapshot_preview1.reactor.wasm
CLI 习惯用法
所有 CLI 命令都遵循一些约定
- 所有子命令都使用
-h
打印“简短帮助”,使用--help
打印“长帮助”。 - 如果没有指定文件输入,则默认从 stdin 读取输入(当适用时)。
- 如果没有提供
-o
或--output
标志,则默认将输出发送到 stdout。然而,默认情况下不将二进制 WebAssembly 打印到 tty。 - 输出 WebAssembly 二进制的命令都支持
-t
或--wat
标志以生成 WebAssembly 文本格式。 - 可以通过传递
-v
或--verbose
标志来启用工具中的日志消息。可以通过多次传递标志来提高详细程度,例如-vvv
。 - 默认情况下,对于基于 TTY 的输出,错误信息和控制台输出的颜色是启用的,并且可以通过
--color
参数进行配置。
包含的工具
wasm-tools
二进制文件内部包含多个子命令,用于处理 wasm 模块和组件。许多子命令还附带 Rust 包,可以编程方式使用。
命令行界面 | Rust 包 | 沙盒 | 描述 |
---|---|---|---|
wasm-tools validate |
wasmparser | 验证 WebAssembly 文件 | |
wasm-tools parse |
wat 和 wast | parse | 将 WebAssembly 文本格式转换为二进制 |
wasm-tools print |
wasmprinter | 将 WebAssembly 二进制格式转换为文本 | |
wasm-tools smith |
wasm-smith | 从输入种子生成有效的 WebAssembly 模块 | |
wasm-tools mutate |
wasm-mutate | 将输入的 wasm 文件转换为新有效的 wasm 文件 | |
wasm-tools shrink |
wasm-shrink | 在保留谓词的同时缩小 wasm 文件 | |
wasm-tools dump |
打印关于二进制格式的调试信息 | ||
wasm-tools objdump |
打印关于节标题的调试信息 | ||
wasm-tools strip |
从 WebAssembly 文件中删除自定义节 | ||
wasm-tools demangle |
在 name 节中取消 Rust 和 C++ 符号名称的混淆 |
||
wasm-tools compose |
wasm-compose | 将 wasm 组件组合在一起(已弃用) | |
wasm-tools component new |
wit-component | 从核心 wasm 二进制文件创建组件 | |
wasm-tools component wit |
从组件中提取 *.wit 接口 |
||
wasm-tools component embed |
将 component-type 自定义节嵌入核心 wasm 二进制文件中 |
||
wasm-tools metadata show |
wasm-metadata | 在组件或模块中显示名称和生产者元数据 | |
wasm-tools metadata add |
向组件或模块添加名称或生产者元数据 | ||
wasm-tools metadata unbundle |
从组件中提取核心 wasm 模块 | ||
wasm-tools addr2line |
使用 DWARF 将 wasm 偏移量转换为文件名/行号 | ||
wasm-tools completion |
为 wasm-tools 生成 shell 完成脚本 |
||
wasm-tools json-from-wast |
将 *.wast 文件转换为 JSON 命令 |
wasm-tools
命令行界面包含用于调试 WebAssembly 模块和组件的有用工具。各个子命令都有 --help
解释文本,描述其功能。
库
如上所述,许多 wasm-tools
命令行界面工具在此存储库中也有库实现。这些库包括
wasmparser
- 解析 WebAssembly 二进制的库wat
- 解析 WebAssembly 文本格式的库wast
- 与wat
类似,但提供了 ASTwasmprinter
- 以字符串形式打印 WebAssembly 二进制wasm-mutate
- 一个 WebAssembly 测试用例变异器wasm-shrink
- 一个 WebAssembly 测试用例缩小器wasm-smith
- 一个 WebAssembly 测试用例生成器wasm-encoder
- 用于生成二进制 WebAssembly 模块的 cratewit-parser
- 用于解析和管理*.wit
文件和接口的 crate。wit-component
- 用于从核心 WebAssembly 模块创建组件的 crate。wasm-metadata
- 用于操作 WebAssembly 模块或组件中的名称和生产者元数据(自定义部分)的 crate。
建议在嵌入到独立项目时直接使用库,而不是 CLI 工具。
C/C++ 绑定
使用 CMakeLists.txt
在 crates/c-api
中,可以通过 wasm-tools.h
头文件 使用 wasm-tools
。请注意,这些绑定目前并不全面覆盖此存储库的所有功能,但如果您发现某些函数有用,请随时贡献更多内容!
版本控制和发布
此存储库同时具有一个 CLI 和一系列发布到 crates.io(Rust 的包管理器)的 crates。此存储库使用的版本控制方案如下所示
wasm-tools
- CLI 遵循1.X.Y
的版本模式。通常Y
为 0,而X
作为此存储库发布的部分进行升级。wat
- 此 Rust crate 以1.X.Y
进行版本控制,并与wasm-tools
版本匹配。wast
- 此 Rust crate 以X.0.Y
进行版本控制。这里的X
与wasm-tools
的1.X.Y
中的X
匹配。- 所有其他 crates - 此存储库中的所有其他 crates 都以
0.X.Y
进行版本控制,其中X
与wasm-tools
的1.X.Y
匹配。
请注意,上述所有版本的 Y
都将与该存储库的任何发布版本匹配。这种版本方案旨在反映 CLI 和 wat
crate 在 API 稳定性方面的稳定性。然而,其他 crate 都会进行主要版本号的升级,并且这些版本在所有发布版本上都不能自动被认为是 API 兼容的。这反映了 WebAssembly 本身是一个不断发展的标准,而不是一个一成不变的基础。此存储库中的所有 crate 都适合“生产使用”,但请注意,API 稳定性在时间上不能保证。如果您在升级版本时遇到困难,请随时提交一个问题,我们可以提供帮助。
此外,该存储库目前没有严格的发布节奏。发布是根据需要进行的。如果您希望进行发布,请随时在 Zulip 上联系,提交一个问题,在 PR 上留下评论,或以其他方式联系维护者。
对于维护者,发布过程如下
- 访问 此链接
- 在 UI 中点击“运行工作流程”。
- 使用默认的
bump
参数,然后点击“运行工作流程”。 - 等待 CI 创建 PR。您可以通过“操作”选项卡查看是否出错。
- 当 PR 打开时,关闭它然后重新打开它。不要提问。
- 审查 PR,批准它,然后排队合并。
应该就是这样,但请务必关注 CI,以防出现任何问题。
贡献
有关向此存储库贡献的更多信息,请参阅 CONTRIBUTING.md。
许可协议
本项目由 Apache 2/ Apache 2 with LLVM exceptions/ MIT 许可证三重许可。这样做的原因是
- Apache 2/ MIT 在 Rust 生态系统很常见。
- Apache 2/ MIT 在 Rust 编译器中使用,并且一些代码可能被迁移到那里。
- 一些代码可能用于编译器输出,Apache 2 with LLVM exceptions 许可证对此很有用。
有关更多详细信息,请参阅
贡献
除非您明确声明,否则您提交给此项目以供包含在内的任何贡献(根据 Apache 2/ Apache 2 with LLVM exceptions/ MIT 许可证定义),应按上述方式许可,不附加任何其他条款或条件。
依赖关系
~9–21MB
~291K SLoC