Google udvikler et bygge-system , der skal erstatte de gamle byggescripts til Android-platformen, som er baseret på brug af make-værktøjet. Soong tilbyder at bruge enkle deklarative byggeregler for moduler, i filer med endelsen «.bp» (blueprints). Filformatet ligner JSON og forsøger så vidt muligt at efterligne syntaksen og semantikken i byggefilerne . Koden er skrevet i Go og distribueres under Apache 2.0-licensen.
Soong-byggefiler understøtter ikke betingede operatorer og udtryk til at forgrene, men beskriver blot projektstrukturen, de moduler der anvendes under bygningen, og afhængighederne. Filerne der skal bygges beskrives ved hjælp af masker og grupperes i pakker, hvor hver pakke er en samling af filer med angivelse af tilknyttede afhængigheder. Det er muligt at definere variable. Variable og egenskaber er strengt typede (variable typer vælges dynamisk ved første tildeling, mens egenskaber types statisk afhængig af modultypen). Komplekse elementer i byggelogikken er flyttet til håndterere, i Go.
Soong væves ind i et mere generelt projekt , hvor der udvikles et uafhængigt metabegribelsessystem for bygning, der, baseret på filer med deklarative beskrivelser af moduler, danner bygningsscripts (erstatning af make), der beskriver de kommandoer, der skal udføres for at bygge, og afhængighederne. I stedet for at anvende komplekse regler eller domænespecifikke sprog til at definere byggelogik, anvendes der specifikke håndterere på Go-sproget i Blueprint (Soong er i bund og grund et sæt af sådanne håndterere til Android).
Denne tilgang gør det muligt at implementere komplekse elementer i byggelogikken i kodning med et højniveau programmeringssprog til store og heterogene projekter som Android, samtidig med at man bevarer muligheden for at anvende enkle deklarative syntakser til at foretage ændringer i modulerne, der vedrører byggeorganisation og projektstruktur. For eksempel i Soong vælges compiler-flags af håndtereren , mens anvendelsen af specifikke indstillinger for hardwarearkitekturer håndteres af , men bindingen af filer med kode sker i filen «.bp».
cc_library {
…
srcs: [«generic.cpp»],
ark: {
arm: {
srcs: [«arm.cpp»],
},
x86: {
srcs: [«x86.cpp»],
},
},
}
Kilde: opennet.ru
