Правила побудови

Код 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 та модульних тестів, деякі з яких ми використаємо пізніше.