#子命令 #cargo #bazel #cargo-subcommand #generate #workspace #raze

app cargo-proto-raze

一个 Cargo 子命令,帮助将 Cargo 依赖集成到 Bazel 项目中

2 个版本

使用旧的 Rust 2015

0.1.1 2017 年 4 月 27 日
0.1.0 2017 年 4 月 27 日

#696Cargo 插件

Apache-2.0

77KB
1K SLoC

Bazel 507 SLoC // 0.8% comments Rust 502 SLoC // 0.0% comments

cargo-raze

为 cargo 依赖生成 bazel 规则。

这个工具是实验性的,不能保证它一定能工作。它在当前仓库中的一个示例中工作。它是作为一个峰值项目来测试一个工具实现的可能工作流程。

使用模式

生成 WORKSPACE 内容

示例调用(在一个包含 Cargo.toml+Cargo.lock 的目录中)

cargo install raze
cargo raze --overrides log-0.3.7:@custom-log//log:log --generate

一个 generate 调用会在 ./raze.WORKSPACE 中生成一系列新的 new_http_archive 调用,可以包含在仓库的 WORKSPACE 文件中,以自动包含所选的 crate,并生成构建规则。提供了一个 overrides 标志,允许用户用自己的定义规则覆盖所选依赖项的引用。当自动生成的构建规则编译失败时,这是一个有用的功能。通常,具有复杂系统库依赖项或以有趣方式利用 build.rs 的规则将需要自定义覆盖。以这种方式进行的覆盖需要可以从您的 WORKSPACE 访问,这意味着它们不能存在于根 WORKSPACE 中。

不建议用户手动编辑生成的规则,因为这些编辑将需要在 generate 重新运行时持久化。

将 vendoring 放入 ./raze/ 或其他目录

示例调用(在一个包含 Cargo.toml+Cargo.lock 的目录中)

cargo install raze
cargo raze --overrides log-0.3.7:@custom-log//log:log --vendor ./raze

一个 vendor 调用会在一个选定的目录中生成完整的源代码,包括 BUILD 文件。这些规则与正常源代码的功能相同。提供了一个 override 功能来防止将某些依赖项 vendoring,而是使用用户自定义的依赖项。如果依赖项以某种新颖的方式利用 build.rs,则通常需要这样做。

支持的功能

未来功能

  • 平台检测(当前平台被硬编码为通用Linux)。
  • 目标平台规范,而不是当前系统平台
  • Cargo.toml中直接指定的包的alias规则
  • (可能)延迟构建文件生成,以延迟特定平台的依赖项解析。
  • (可能)生成build.rs代理规则,而不是在build_dependencies存在时强制使用--override

依赖项

~42MB
~765K SLoC