Rust

构建

有4种 GN 目标模板可以应用在 Rust 工程中:

  • rustc_library 定义一个库应用并可选一个单元测试目标。库应用可以被其它目标所依赖。
  • rustc_binary 定义一个可执行应用并可选一个单元测试目标。
  • rustc_test 定义一个仅测试目标。
  • rustc_macro 定义一个 过程宏 目标。

examples/rust 目录下有一些 Rust 包示例用到这些目标,比如 Rust FIDL examples

注意:示例 Rust BUILD.gn 文件 包含了一行 group(rust) ,这里的 rust 是指 .gn 文件所在的目录,而不是指 rust 语言。

自定义工具链构建

如果你想在 Fuchsia 测试你自己编译的 rustc 或 cargo 版本,可以给 fx set 设置 rustc_prefix 参数,比如:

  1. fx set core.x64 --release --args "rustc_prefix=\"/path/to/bin/dir\""

Cargo.toml

Fuchsia 的 Rust 目标并非由 cargo 构建而来。也就是说,你可以生成 Cargo.toml 文件用于外部工具。这个功能不能保证正常工作。

自动生成文档

只要你的目标有一个 Cargo.toml 文件,就可以运行下面的脚本来生成和浏览目标文档:

  1. fx rustdoc path/from/fuchsia/root/to/target:label --open

测试

你可以在已连接设备上使用 fx 来运行单元测试,具体是 fx test {package name} 命令。关于增加和运行测试,请参考 Testing Rust code 获取更多信息。

过程宏

过程宏目标在编译阶段就在主机上运行了。因此,它们不能依赖于其它只可用于设备上的 crates ,比如 zircon 。

负面测试,比如断言某个特定的错误导致宏编译失败,当前是不支持的。

告警和错误

我们的构建配置会默认把所有的 Rust 告警当成错误来处理。这个要求在开发过程中很繁重, 而你希望在你的本地机器上看到的是告警就是告警,从而让 CQ 强制执行硬边界。

GN 参数 rust_cap_lints 允许你在你的开发环境中控制这个行为。 在 fx args 中设置 rust_cap_lints = "warn" 或把 --args='rust_cap_lints = "warn"' 添加到你的 fx set 将允许你在本地开发时不会受阻于告警。

样式

当前我们没有针对 Rust 的样式向导,但是在提交之前,你应该运行 fx rustfmtfx format-code 。大多数情况下我们默认使用 rustfmt ,但是也有一些自定义设置

Rust 惯用语使用审查

如果你是 Rust 新手,希望有人来审查你的修改以验证你使用的是 Rust 惯用语,可以联系下边的人(或者添加他们,让他们成为你的修改的审查员。)

  • adamperry@google.com
  • belgum@google.com
  • dnordstrom@google.com
  • jamuraa@google.com
  • nickpollard@google.com
  • tmandry@google.com

(想要成为志愿审查员,请把你自己添加到上边的联系人列表,并以审查员身份上传上边所做的修改)。

交流渠道

公共讨论一般都发生在 rust-users@fuchsia.dev 邮件列表上。

{% dynamic if user.is_googler %}

[Googlers only] 是谷歌用户专用通道,请看 go/fuchsia-rust-googlers

{% dynamic endif %}

当前存在的 Fuchsia 上使用的 Rust 库

扩展