PDA

Просмотр полной версии : Google развивает модульную сборочную систему Soong для Android


Suicide
29.10.2019, 20:42
Компания Google развивает сборочную систему Soong (https://android.googlesource.com/platform/build/soong/), призванную заменить собой старые сценарии сборки платформы Android, основанные на использовании утилиты make. Soong предлагает использовать простые декларативные описания (https://source.android.com/compatibility/tests/development/blueprints) правил сборки модулей, задаваемые (https://android.googlesource.com/platform/build/soong/+/refs/heads/master/Android.bp) в файлах с расширением ".bp" (blueprints). Формат файлов близок к JSON и по возможности повторяет синтаксис и семантику сборочных файлов Bazel (https://www.opennet.ru/opennews/art.shtml?num=51650). Код написан на языке Go и распространяется под лицензией Apache 2.0.

Сборочные файлы Soong не поддерживают условных операторов и выражений для ветвления, а только описывают структуру проекта, применяемые при сборке модули и зависимости. Подлежащие сборке файлы описываются при помощи масок и группируются в пакеты, каждый из который представляет собой коллекцию файлов с указанием связанных с ними зависимостей. Возможно определение переменных. Переменные и свойства строго типизированы (тип переменных выбирается динамически при первом присвоении, а для свойств статически в зависимости от типа модуля). Сложные элементы сборочной логики вынесены в обработчики, написанные (https://android.googlesource.com/platform/build/soong/+/refs/heads/master/android/) на языке Go.

Soong переплетается с более общим проектом Blueprint (https://github.com/google/blueprint), в рамках которого развивается не привязанная к Android мета-система сборки, которая на основе файлов с декларативными описаниями модулей, формирует сборочные сценарии Ninja (https://www.opennet.ru/opennews/art.shtml?num=29525) (замена make), описывающие команды, которые необходимо выполнить для сборки, и зависимости. Вместо применения сложных правил или предметно ориентированного языка для определения логики сборки, в Blueprint применяются специфичные для собираемых проектов обработчики на языке Go (Soong является по сути набором подобных обработчиков для Android).

Подобный подход позволяет для больших и разнородных проектов, таких как Android, реализовать сложные элементы сборочной логики в коде на высокоуровневом языке программирования, при этом сохраняя возможность при помощи простого декларативного синтаксиса вносить в модули изменения, связанные с организацией сборки и структурой проекта. Например, в Soong выбор флагов компилятора производится обработчиком llvm.go (https://android.googlesource.com/platform/external/llvm/+/master/soong/llvm.go), а применение специфичных для аппаратных архитектур настроек производится обработчиком art.go (https://android.googlesource.com/platform/art/+/master/build/art.go), но привязка файлов с кодом осуществляется в файле ".bp".

cc_library {

...

srcs: ["generic.cpp"],

arch: {

arm: {

srcs: ["arm.cpp"],

},

x86: {

srcs: ["x86.cpp"],

},

},

}

29.10.2019

http://www.opennet.ru/opennews/art.shtml?num=51769