Rust

Build

应对 Rust 项目使用四个 GN 目标模板:

  • rustc_library 定义了一个库,并视需要定义一个单元测试目标。其他目标可以依赖于该库。
  • rustc_binary 定义了可执行文件和(可选)单元测试目标。
  • rustc_test 定义了仅用于测试的目标。
  • rustc_macro 定义了一个过程宏目标。

examples/rust 目录包含使用这些目标的 Rust 软件包的一些示例,Rust FIDL 示例也是如此。

另请参阅:使用自定义 Rust 工具链构建 Fuchsia

Cargo.toml

Fuchsia Rust 目标不是使用 cargo 构建的。也就是说,您可以生成 Cargo.toml 文件以用于外部工具。不能保证此功能一定能正常运行。

自动生成的文档

有了目标的 Cargo.toml,您可以通过运行以下命令生成和浏览目标及其依赖项的 HTML 文档:

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

测试

您可以使用 fx 通过 fx test {package name} 命令在已连接的设备上运行单元测试。如需了解如何添加和运行测试,请参阅测试 Rust 代码

过程宏

程序化宏目标在编译时会在主机上执行。因此,它们不能依赖于仅在设备上提供的其他 crate,例如锆石。

目前不支持否定测试,例如断言宏无法编译并出现特定错误的情况。

警告和错误

默认情况下,我们的构建配置会将所有 Rust 警告变成错误。在开发期间,此要求可能非常繁重,并且在您的本地计算机上,您可能希望以警告形式看到警告,并让 CQ 强制执行硬边界。

借助 deny_warnings GN 参数,您可以在开发环境中控制此行为。在 fx args 中设置 deny_warnings = false 或将 --args=deny_warnings=false 添加到 fx set 后,您可以在本地进行开发,而不受警告的阻止。您可以在检出时将该参数添加到 local/args.gn,这样它就会应用于所有 build,而不必每次都在终端中输入它。

风格

我们目前没有 Rust 的样式指南,但您应在提交之前运行 fx rustfmtfx format-code。我们主要使用 rustfmt 默认设置,但有一些自定义设置

Rust 惯用用法回顾

如果您刚开始接触 Rust,或者希望他人检查您的更改以验证您对 Rust 的使用是否符合习惯,请在 Gerrit 中将“Fuchsia Rust Reviewers”添加为审核者,然后分配给您的 CL。

如有任何问题,请发送电子邮件至 tq-rust-reviewers@google.com。

通信渠道

公开讨论通过 rust-users@fuchsia.dev 邮寄名单进行。

现有 Fuchsia Rust 库

更进一步