Firma Google rozwija system budowy , mający na celu zastąpienie starych scenariuszy budowy platformy Android, opartych na wykorzystaniu narzędzia make. Soong proponuje użycie prostych deklaratywnych reguł budowy modułów, w plikach o rozszerzeniu „.bp” (blueprints). Format plików jest bliski JSON i w miarę możliwości odzwierciedla składnię i semantykę plików budowlanych . Kod napisany jest w języku Go i rozpowszechniany na licencji Apache 2.0.
Pliki budowlane Soong nie obsługują instrukcji warunkowych ani wyrażeń do rozgałęziania, a jedynie opisują strukturę projektu, stosowane przy budowie moduły i zależności. Pliki podlegające budowie są opisywane za pomocą masek i grupowane w pakiety, z których każdy przedstawia zbiór plików określających związane z nimi zależności. Możliwe jest definiowanie zmiennych. Zmienne i właściwości są ściśle typowane (typ zmiennych jest wybierany dynamicznie przy pierwszym przypisaniu, a dla właściwości statycznie w zależności od typu modułu). Złożone elementy logiki budowy są przenoszone do handlerów, w języku Go.
Soong współdzieli się z bardziej ogólnym projektem , w ramach którego rozwijana jest niepowiązana z Androidem meta-system budowy, który na podstawie plików z deklaratywnymi opisami modułów, tworzy scenariusze budowy (zastąpienie make), opisujące polecenia, które należy wykonać w celu budowy, oraz zależności. Zamiast stosować złożone zasady lub język specyficzny dla dziedziny do określenia logiki budowy, w Blueprint stosuje się specyficzne dla budowanych projektów handlery w języku Go (Soong jest w zasadzie zestawem takich handlerów dla Androida).
Takie podejście pozwala dla dużych i zróżnicowanych projektów, takich jak Android, zrealizować złożone elementy logiki budowy w kodzie w wysokopoziomowym języku, zachowując jednocześnie możliwość wprowadzania zmian w modułach związanych z organizacją budowy i strukturą projektu za pomocą prostego deklaratywnego składni. Na przykład, w Soong wybór flag kompilatora dokonywany jest przez handler , a zastosowanie specyficznych dla architektur sprzętowych ustawień odbywa się za pomocą handlera , ale powiązanie plików z kodem odbywa się w pliku „.bp”.
cc_library {
…
srcs: [„generic.cpp”],
arch: {
arm: {
srcs: [«arm.cpp»],
},
x86: {
srcs: [«x86.cpp»],
},
},
}
Źródło: opennet.ru
