Build rules
Rust 代码通常使用 cargo
构建而成。为提高效率,Chromium 使用 gn
和 ninja
进行构建,其静态规则支持实现最大程度的并行处理。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.rs
。sources
是所有源文件的完整列表,ninja
需要用它来确定何时该进行重新构建。
(在 Rust 中,并不存在所谓的 Rust source_set
,因为整个 crate 就是一个编译单元。static_library
是最小的单元。)
学生可能会疑惑为何我们需要 gn 模板,而不使用 gn 内置的 Rust 静态库支持 进行操作。原因是此模板支持 CXX 互操作性、各项 Rust 功能以及单元测试,我们稍后便会用到其中的一些功能。