Das Unternehmen Google entwickelt ein Build-System , das die alten Build-Scripte der Android-Plattform, die auf dem Einsatz des Make-Tools basierten, ersetzen soll. Soong bietet an, einfache deklarative Build-Regeln für Module in Dateien mit der Endung „.bp“ (Blueprints). Das Dateiformat ähnelt JSON und spiegelt nach Möglichkeit die Syntax und Semantik von Build-Dateien wider . Der Code ist in der Programmiersprache Go geschrieben und wird unter der Lizenz Apache 2.0 verbreitet.
Soong-Build-Dateien unterstützen keine bedingten Operatoren und Ausdrücke zur Verzweigung, sondern beschreiben lediglich die Struktur des Projekts, die zu verwendenden Module und Abhängigkeiten. Die zu buildenden Dateien werden mittels Masken beschrieben und in Paketen gruppiert, wobei jedes Paket eine Sammlung von Dateien mit Angabe der zugehörigen Abhängigkeiten darstellt. Variablen können definiert werden. Variablen und Eigenschaften sind streng typisiert (der Typ der Variablen wird dynamisch bei der ersten Zuweisung gewählt, während der Typ der Eigenschaften statisch je nach Modul-Typ festgelegt wird). Komplexe Elemente der Build-Logik werden in Handler ausgelagert, in der Programmiersprache Go.
Soong ist eng verbunden mit einem allgemeineren Projekt , in dessen Rahmen ein nicht an Android gebundenes Metasystem für Builds entwickelt wird, das auf Basis von Dateien mit deklarativen Beschreibungen von Modulen Build-Scripts erstellt, (Ersatz für Make), die die Befehle beschreiben, die zur Erstellung ausgeführt werden müssen, und die Abhängigkeiten. Anstelle von komplexen Regeln oder domänenspezifischen Sprachen zur Definition der Build-Logik werden in Blueprint projektspezifische Handler in der Programmiersprache Go angewendet (Soong ist im Wesentlichen eine Sammlung solcher Handler für Android).
Dieser Ansatz ermöglicht es großen und heterogenen Projekten wie Android, komplexe Elemente der Build-Logik in einem hochgradig abstrahierten Programmiercode zu implementieren, während gleichzeitig die Möglichkeit erhalten bleibt, mit einer einfachen deklarativen Syntax Änderungen an den Modulen vorzunehmen, die mit der Organisation des Builds und der Projektstruktur zusammenhängen. Zum Beispiel erfolgt die Auswahl der Compiler-Flags in Soong durch den Handler , während die spezifischen Einstellungen für Hardware-Architekturen durch den Handler , aber die Bindung der Dateien mit dem Code erfolgt in der Datei „.bp“.
cc_library {
…
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: [«arm.cpp»],
},
x86: {
srcs: [«x86.cpp»],
},
},
}
Quelle: opennet.ru
