Build rules

Rust 代码通常使用 cargo 构建而成。为提高效率,Chromium 使用 gnninja 进行构建,其静态规则支持实现最大程度的并行处理。Rust 也不例外。

Adding Rust code to Chromium

在一些现有的 Chromium BUILD.gn 文件中,声明 rust_static_library

import("//build/rust/rust_static_library.gni")

rust_static_library("my_rust_lib") {
  crate_root = "lib.rs"
  sources = [ "lib.rs" ]
}

您还可以在其他 Rust 目标上添加 deps。稍后,我们通过该操作来使用第三方代码。

您必须 同时 指定 crate 根目录 完整的源代码列表。crate_root 是供 Rust 编译器使用的文件,表示编译单元的根文件,通常为 lib.rssources 是所有源文件的完整列表,ninja 需要用它来确定何时该进行重新构建。

(在 Rust 中,并不存在所谓的 Rust source_set,因为整个 crate 就是一个编译单元。static_library 是最小的单元。)

学生可能会疑惑为何我们需要 gn 模板,而不使用 gn 内置的 Rust 静态库支持 进行操作。原因是此模板支持 CXX 互操作性、各项 Rust 功能以及单元测试,我们稍后便会用到其中的一些功能。