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、単体テストをサポートしているためです。その一部は後で使用します。