L'azienda Google sta sviluppando un sistema di build , destinato a sostituire i vecchi script di build della piattaforma Android, basati sull'utilizzo dello strumento make. Soong offre l'approccio di utilizzare semplici dichiarative regole di build dei moduli, in file con estensione «.bp» (blueprints). Il formato dei file è simile a JSON e cerca di ripetere, per quanto possibile, la sintassi e la semantica dei file di build . Il codice è scritto in linguaggio Go e distribuito con licenza Apache 2.0.
I file di build Soong non supportano operatori condizionali e espressioni per il branching, ma descrivono solo la struttura del progetto, i moduli utilizzati nella build e le dipendenze. I file da costruire sono descritti tramite maschere e raggruppati in pacchetti, ognuno dei quali rappresenta una collezione di file con le rispettive dipendenze. È possibile definire variabili. Le variabili e le proprietà sono tipizzate in modo rigoroso (il tipo delle variabili è scelto dinamicamente al primo assegnamento, mentre per le proprietà è statico in base al tipo del modulo). Elementi complessi della logica di build sono estratti in gestori, in linguaggio Go.
Soong è intrecciato con un progetto più ampio , nell'ambito del quale si sviluppa un meta-sistema di build non legato ad Android, che, sulla base di file con descrizioni dichiarative dei moduli, genera script di build (sostituto di make), descrivendo i comandi da eseguire per la compilazione e le dipendenze. Invece di applicare regole complesse o un linguaggio a oggetti per definire la logica di build, in Blueprint si utilizzano gestori specifici per i progetti in fase di build in linguaggio Go (Soong è fondamentalmente un insieme di tali gestori per Android).
Questo approccio consente di implementare elementi complessi della logica di build in codice scritto in un linguaggio di programmazione ad alto livello, per progetti ampi e eterogenei come Android, mantenendo la possibilità di apportare modifiche ai moduli relative all'organizzazione della build e alla struttura del progetto tramite una semplice sintassi dichiarativa. Ad esempio, in Soong la scelta dei flag del compilatore viene effettuata dal gestore , mentre l'applicazione di impostazioni specifiche per le architetture hardware viene effettuata dal gestore , ma l'associazione dei file di codice è effettuata nel file «.bp».
cc_library {
…
srcs: [«generic.cpp»],
arch: {
arm: {
srcs: [«arm.cpp»],
},
x86: {
srcs: [«x86.cpp»],
},
},
}
Fonte: opennet.ru
