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
Сборочные файлы 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