La empresa Google está desarrollando un sistema de compilación , destinado a reemplazar los antiguos scripts de compilación de la plataforma Android, basados en el uso de la utilidad make. Soong propone utilizar descripciones declarativas simples de compilación de módulos, en archivos con la extensión «.bp» (blueprints). El formato de los archivos es similar a JSON y, en la medida de lo posible, sigue la sintaxis y semántica de los archivos de compilación . El código está escrito en el lenguaje Go y se distribuye bajo la licencia Apache 2.0.
Los archivos de compilación Soong no soportan operadores condicionales ni expresiones para ramificarse, solo describen la estructura del proyecto, los módulos utilizados durante la compilación y sus dependencias. Los archivos a compilar se describen mediante máscaras y se agrupan en paquetes, cada uno de los cuales representa una colección de archivos con sus dependencias relacionadas. Es posible definir variables. Las variables y propiedades son estrictamente tipadas (el tipo de las variables se elige dinámicamente al primer asignación, mientras que para las propiedades se elige estáticamente en función del tipo de módulo). Los elementos complejos de la lógica de compilación se han extraído a controladores, en el lenguaje Go.
Soong se entrelaza con un proyecto más general , en el marco del cual se desarrolla un sistema de compilación no vinculado a Android, que, a partir de archivos con descripciones declarativas de módulos, genera scripts de compilación (reemplazo de make), que describen los comandos que deben ejecutarse para la compilación y sus dependencias. En lugar de aplicar reglas complejas o un lenguaje de dominio específico para definir la lógica de compilación, en Blueprint se utilizan controladores específicos de los proyectos a compilar en el lenguaje Go (Soong es en esencia un conjunto de tales controladores para Android).
Este enfoque permite, para proyectos grandes y heterogéneos como Android, implementar elementos complejos de la lógica de compilación en código de un lenguaje de programación de alto nivel, mientras se conserva la posibilidad, mediante una sintaxis declarativa simple, de hacer modificaciones en los módulos relacionadas con la organización de la compilación y la estructura del proyecto. Por ejemplo, en Soong, la selección de las banderas del compilador se realiza mediante el controlador , mientras que la aplicación de configuraciones específicas para arquitecturas de hardware se lleva a cabo mediante el controlador , pero la vinculación de archivos con el código se realiza en el archivo «.bp».
cc_library {
…
srcs: [«generic.cpp»],
arquitectura: {
arm: {
srcs: [«arm.cpp»],
},
x86: {
srcs: [«x86.cpp»],
},
},
}
Fuente: opennet.ru
