Правила сборки
Система сборки Android (Soong) поддерживает Rust через несколько модулей:
| Тип модуля | Описание |
|---|---|
rust_binary | Создаёт бинарный файл Rust. |
rust_library | Создаёт библиотеку Rust и предоставляет варианты rlib и dylib. |
rust_ffi | Создаёт библиотеку C на Rust, которую могут использовать модули cc; предоставляет статический и динамический варианты. |
rust_proc_macro | Создаёт библиотеку Rust типа proc-macro. Они аналогичны плагинам компилятора. |
rust_test | Создаёт бинарный файл тестов Rust, который использует стандартную тестовую обвязку (test harness) Rust. |
rust_fuzz | Создаёт бинарный файл Rust для фаззинга на основе libfuzzer. |
rust_protobuf | Генерирует исходный код и создаёт библиотеку Rust, которая предоставляет интерфейс для конкретного protobuf. |
rust_bindgen | Генерирует исходный код и создаёт библиотеку Rust с привязками к библиотекам C. |
Дальше мы рассмотрим rust_binary и rust_library.
Дополнительные моменты, которые может упомянуть докладчик:
-
Cargo не оптимизирован для репозиториев с несколькими языками, а также загружает пакеты из интернета.
-
Из соображений соответствия требованиям и производительности Android должен хранить крейты внутри дерева исходников. Кроме того, он должен взаимодействовать с кодом на C/C++/Java. Soong восполняет этот пробел.
-
Soong во многом похож на Bazel, который представляет собой открытый вариант Blaze (используемого в google3).
-
Забавный факт: Data из «Звёздного пути» — Android типа Soong.