Build rules
Rust 程式碼通常是以 cargo
建構。為提升建構效率,Chromium 會使用 gn
和 ninja
,因為 Chromium 的靜態規則允許最大程度的平行處理。Rust 也不例外。
將 Rust 程式碼新增至 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 的 source_set
這種東西,因為在 Rust 中,整個 Crate 就是編譯單元。static_library
是最小單元。)
學生可能會想知道為何需要 gn 範本,而不是使用 gn 內建的 Rust 靜態程式庫支援功能。答案是這個範本可支援 CXX 互通性、Rust 功能和單元測試,其中一些項目稍後會用到。