Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Правила сборки

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