Правила сборки
Код 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 нужны, чтобы определить, когда нужна пересборка.
(Такого понятия, как source_set для Rust, нет, потому что в Rust единица компиляции — это целый крейт. Наименьшая единица — static_library.)
Студенты могут задаться вопросом, зачем нам шаблон gn, вместо того чтобы использовать встроенную в gn поддержку статических библиотек Rust. Ответ: этот шаблон обеспечивает поддержку взаимодействия с CXX, возможностей Rust и модульных тестов, некоторые из которых мы будем использовать позже.