ビルドルール
Rust コードは通常 cargo を使ってビルドします。Chromium は、効率のために gn と ninja でビルドします — その静的ルールにより、最大限の並列性が可能になります。Rust も 例外ではありません。
Chromium に Rust コードを追加する
既存の 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 の Rust 静的ライブラリ向け組み込みサポート を使うのではなく、なぜ gn テンプレートが必要なのか疑問に思う人もいるかもしれません。その答えは、この テンプレートが CXX 相互運用、Rust の feature、ユニットテストをサポートしており、 この後その一部を使うからです。