Build rules

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_root は Rust コンパイラに渡されるファイルで、コンパイル単位のルートファイル(通常は lib.rs)を表します。sources はすべてのソースファイルの完全なリストで、再ビルドが必要なタイミングを ninja が判断するために必要です。

(Rust ではクレート全体がコンパイル単位であるため、source_setと呼べるようなものは存在しません。static_library が最小単位です)。

受講者は、なぜ Rust の静的ライブラリに対する gn の組み込みサポート ではなく、gn テンプレートを使用する必要があるのか疑問に思うかもしれません。その答えは、このテンプレートが CXX 相互運用、Rustのfeatures、単体テストをサポートしているためです。その一部は後で使用します。