Build rules

Rust 程式碼通常是以 cargo 建構。為提升建構效率,Chromium 會使用 gnninja,因為 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 功能和單元測試,其中一些項目稍後會用到。