Google arendab ehitussüsteemi , mis on mõeldud Androidi platvormi vanade ehitusskriptide asendamiseks, tuginedes utiliidi make kasutamisele. Soong soovitab kasutada lihtsat deklaratiivsust moodulite kokkupanemise reeglid, failides laiendiga “.bp” (plaanid). Failivorming on JSON-i lähedane ja võimalusel kordab koostefailide süntaksit ja semantikat . Kood on kirjutatud Go-s ja seda levitatakse Apache 2.0 litsentsi all.
Soong build failid ei toeta tingimuslauseid ja hargnevaid avaldisi, vaid kirjeldavad ainult projekti struktuuri, mooduleid ja ehitamisel kasutatavaid sõltuvusi. Ehitatavaid faile kirjeldatakse maskide abil ja rühmitatakse pakettideks, millest igaüks on failide kogum, millel on seotud sõltuvused. Muutujaid on võimalik defineerida. Muutujad ja omadused on rangelt tipitud (muutujate tüüp valitakse dünaamiliselt esmakordsel määramisel ja atribuutide puhul staatiliselt sõltuvalt mooduli tüübist). Montaažiloogika keerulised elemendid viiakse käitlejatesse, Go keeles.
Soong põimub suurema projektiga , mille raames arendatakse Androidiga mitteseotud metakoostesüsteemi, mis deklaratiivsete moodulite kirjeldustega failide põhjal genereerib montaažiskripte (make asendus), kirjeldades ehitamiseks käivitatavaid käske ja sõltuvusi. Selle asemel, et kasutada ehitusloogika määratlemiseks keerulisi reegleid või domeenispetsiifilist keelt, kasutab Blueprint projektipõhiseid käitlejaid Go-keeles (Soong on sisuliselt Androidi jaoks sarnaste töötlejate komplekt).
Selline lähenemine võimaldab suurte ja heterogeensete projektide (nt Android) puhul rakendada keerulisi montaažiloogika elemente koodis kõrgetasemelises programmeerimiskeeles, säilitades samal ajal võimaluse teha lihtsa deklaratiivse süntaksi abil muudatusi koostekorralduse ja projekti struktuuriga seotud moodulites. . Näiteks Soongis teeb kompilaatori lippude valiku töötleja , ja riistvaraarhitektuuridele spetsiifiliste sätete rakendamist teostab töötleja , kuid koodifailide linkimine toimub failis “.bp”.
cc_library {
...
srcs: ["generic.cpp"],
kaar: {
käsi: {
srcs: ["arm.cpp"],
},
x86:{
srcs: ["x86.cpp"],
},
},
}
Allikas: opennet.ru
