Правила побудови
Код Rust зазвичай збирається за допомогою cargo
. Chromium збирає за допомогою gn
та ninja
для ефективності --- його статичні правила дозволяють максимальний паралелізм. Rust не є винятком.
Додавання коду Rust до Chromium
У деякому існуючому файлі 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" ]
}
Ви також можете додати deps
на інших цілях Rust. Пізніше ми будемо використовувати це для залежності від стороннього коду.
Ви маєте вказати одночасно і корінь крейту, і повний список вхідних кодів. crate_root
- це файл, який передається компілятору Rust, що представляє собою кореневий файл блоку компіляції --- зазвичай це lib.rs
. sources
- це повний список усіх вхідних файлів, який потрібен ninja
для того, щоб визначити, коли потрібна перезбірка.
(У Rust не існує такого поняття, як source_set
, оскільки у Rust одиницею компіляції є цілий крейт. Найменшою одиницею є static_library
).
Студентам може бути цікаво, навіщо нам потрібен шаблон gn, а не використання вбудованої підтримки статичних бібліотек Rust у gn. Відповідь полягає у тому, що цей шаблон надає підтримку взаємодії CXX, функцій Rust та модульних тестів, деякі з яких ми використаємо пізніше.