ビルドルール

Rust コードは通常 cargo を使ってビルドします。Chromium は、効率のために gnninja でビルドします — その静的ルールにより、最大限の並列性が可能になります。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、ユニットテストをサポートしており、 この後その一部を使うからです。