Компанията Google разработва система за сглобяване , целяща да замени старите сценарии за сглобяване на платформата Android, основани на използването на утилитата make. Soong предлага използването на прости декларативни правила за сглобяване на модули, в файлове с разширение «.bp» (blueprints). Форматът на файловете е близък до JSON и, където е възможно, следва синтаксиса и семантиката на сглобяващите файлове . Кодът е написан на езика Go и се разпространява под лицензия Apache 2.0.
Сглобяващите файлове Soong не поддържат условни оператори и изрази за разклоняване, а просто описват структурата на проекта, модулите и зависимостите, които се използват при сглобяването. Файловете, подлежащи на сглобяване, са описани с маски и групирани в пакети, всеки от които представлява колекция от файлове с указание за свързаните с тях зависимости. Възможно е определяне на променливи. Променливите и свойствата са строго типизирани (типът на променливите се избира динамично при първоначално присвояване, а за свойствата статически, в зависимост от типа на модула). Сложните елементи на логиката за сглобяване са изнесени в обработчици, на езика Go.
Soong е свързан с по-общия проект , в рамките на който се развива не свързана с Android мета-система за сглобяване, която на базата на файлове с декларативни описания на модули, формира сценарии за сглобяване (замяна на make), описващи командите, които трябва да бъдат изпълнени за сглобяване, и зависимостите. Вместо да се прилагат сложни правила или предметно ориентиран език за определяне на логиката за сглобяване, в Blueprint се използват специфични за сглобяваните проекти обработчици на езика Go (Soong е на практика набор от такива обработчици за Android).
Този подход позволява за големи и различни проекти, като Android, да се реализират сложни елементи на логиката за сглобяване в код на високо ниво на програмиране, като същевременно се запазва възможността чрез прост декларативен синтаксис да се извършват промени в модулите, свързани с организацията на сглобяване и структурата на проекта. Например, в Soong изборът на флагове на компилатора се извършва от обработчика , а приложението на специфичните за хардуерните архитектури настройки се извършва от обработчика , но свързването на файлове с код се извършва в файла «.bp».
cc_library {
…
srcs: [«generic.cpp»],
arch: {
arm: {
srcs: [«arm.cpp»],
},
x86: {
srcs: [«x86.cpp»],
},
},
}
Източник: opennet.ru
