14 个不稳定版本 (6 个破坏性版本)
0.116.1 | 2024 年 3 月 31 日 |
---|---|
0.116.0 | 2023 年 10 月 19 日 |
0.114.2 | 2023 年 10 月 18 日 |
0.114.0 | 2023 年 7 月 31 日 |
0.0.0 | 2022 年 7 月 17 日 |
#1 in #passes
每月下载量 202,408
用于 100 个包 (直接使用 24 个)
6MB
126K SLoC
Rust 对 Binaryen 的 wasm-opt
的绑定
wasm-opt
是 Binaryen 工具套件中的一个组件,用于优化 WebAssembly 模块。它是用 C++ 编写的。
lib.rs
:
对 wasm-opt
WebAssembly 优化器的 Rust 绑定。
wasm-opt
是 Binaryen 工具套件中的一个组件,用于优化 WebAssembly 模块。它是用 C++ 编写的。
本项目提供了一个 Rust 包,可以构建 wasm-opt
并
- 通过
cargo install
安装其命令行界面, - 提供 API 以程序化访问。
安装二进制文件
cargo install wasm-opt --locked
它的行为应该与从其他来源安装的 wasm-opt
完全相同。
使用库
该包提供了一个 OptimizationOptions
类型,该类型遵循构建器模式,其选项与 wasm-opt
的命令行选项非常相似。构建完成后,调用 OptimizationOptions::run
加载、优化并写入优化后的模块。
use wasm_opt::OptimizationOptions;
let infile = "hello_world.wasm";
let outfile = "hello_world_optimized.wasm";
OptimizationOptions::new_optimize_for_size()
.run(infile, outfile)?;
提供了所有典型优化配置的构造函数
OptimizationOptions::new_optimize_for_size
·-Os
或-O
OptimizationOptions::new_optimize_for_size_aggressively
·-Oz
OptimizationOptions::new_opt_level_0
·-O0
,或者没有-O*
参数。OptimizationOptions::new_opt_level_1
·-O1
OptimizationOptions::new_opt_level_2
·-O2
OptimizationOptions::new_opt_level_3
·-O3
OptimizationOptions::new_opt_level_4
·-O4
默认情况下,`run` 方法将读取二进制 `wasm` 或文本 `wat` 文件,检查前几个字节以获取二进制头并适当选择,并将其写入二进制 `wasm` 文件。这种行为可以通过 `OptimizationOptions::reader_file_type
` 和 `OptimizationOptions::writer_file_type
` 来更改。
启用和禁用 WASM 功能
WebAssembly 规范具有 可选功能,由 Feature
枚举表示。当已知时,`Feature` 变体将链接到每个功能的相应规范。《wasm-opt》可以通过使用 `OptimizationOptions::enable_feature
` 和 `OptimizationOptions::disable_feature
` 方法单独配置对这些功能的支持。
默认情况下,Binaryen(以及这个 crate)默认启用这些常用功能
没有附加功能的原始 WebAssembly 规范被称为 MVP 规范。要仅启用 MVP 功能,请调用 OptimizationOptions::mvp_features_only
。
将功能重置为 MVP 后,对 enable_feature
的额外调用将向 MVP 功能集添加功能。
自定义遍历
所有 Binaryen 优化过程都表示在 Pass
枚举中,并且可以通过 OptimizationOptions::add_pass
方法添加到 OptimizationOptions
。这些优化过程在默认过程集合之后添加,默认情况下,大多数 OptimizationOptions
构造函数都启用了默认过程。默认过程可以通过 OptimizationOptions::new_opt_level_0
构造函数禁用,或者通过调用 OptimizationOptions::add_default_passes
并传入 false
参数来实现。
use wasm_opt::{OptimizationOptions, Pass};
let infile = "hello_world.wasm";
let outfile = "hello_world_optimized.wasm";
// Just run the inliner.
OptimizationOptions::new_opt_level_0()
.add_pass(Pass::InliningOptimizing)
.run(infile, outfile)?;
请注意,尽管这个crate公开了所有的Binaryen过程,但其中一些可能实际上并不适合使用——Binaryen是一个面向命令行的工具,其中一些过程是用于调试目的或直接打印到控制台。
与现有工具集成
为了方便与通过CLI使用 wasm-opt
的现有工具集成,这个crate提供了一个 integration
模块,它提供了一个与 std
的 Command
兼容的API。这允许客户端代码使用与执行 wasm-opt
CLI和基于crate的API相同的代码路径。
Cargo特性
默认启用,dwarf
特性启用与DWARF调试信息相关的过程。启用时,此crate包含来自LLVM项目的C++代码。当同时链接到LLVM时,这可能会引起重复符号链接错误。禁用时,此代码不会构建,因此可以成功链接到LLVM,但Binaryen DWARF过程将不会执行任何操作。
依赖关系
~2–11MB
~136K SLoC