Build rules
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_root は Rust コンパイラに渡されるファイルで、コンパイル単位のルートファイル(通常は lib.rs)を表します。sources はすべてのソースファイルの完全なリストで、再ビルドが必要なタイミングを ninja が判断するために必要です。
(Rust ではクレート全体がコンパイル単位であるため、source_setと呼べるようなものは存在しません。static_library が最小単位です)。
受講者は、なぜ Rust の静的ライブラリに対する gn の組み込みサポート ではなく、gn テンプレートを使用する必要があるのか疑問に思うかもしれません。その答えは、このテンプレートが CXX 相互運用、Rustのfeatures、単体テストをサポートしているためです。その一部は後で使用します。