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
参数,比如:
fx set core.x64 --release --args "rustc_prefix=\"/path/to/bin/dir\""
Cargo.toml
Fuchsia 的 Rust 目标并非由 cargo 构建而来。也就是说,你可以生成 Cargo.toml 文件用于外部工具。这个功能不能保证正常工作。
自动生成文档
只要你的目标有一个 Cargo.toml 文件,就可以运行下面的脚本来生成和浏览目标文档:
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 rustfmt
或 fx 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 %}