Format pliku Android.bp

Pliki Android.bp są projektowane z myślą o prostym. Nie zawierają warunków warunkowych ani sterowanie instrukcjami przepływu; cała złożoność jest obsługiwana przez logikę kompilacji napisaną OK. Jeśli to możliwe, składnia i semantyka plików Android.bp są podobne do Pliki BUILD Bazel.

Moduły

Moduł w pliku Android.bp zaczyna się od typ modułu z następnie zestawem właściwości w formacie name: "value",:

cc_binary {
    name: "gzip",
    srcs: ["src/test/minigzip.c"],
    shared_libs: ["libz"],
    stl: "none",
}

Każdy moduł musi mieć właściwość name, a wartość musi być unikalna wszystkich plików Android.bp oprócz wartości właściwości name w przestrzeni nazw i gotowych modułów, które mogą się powtarzać.

Właściwość srcs określa pliki źródłowe użyte do utworzenia modułu jako plik listę ciągów. Możesz odwoływać się do danych wyjściowych innych modułów, które dają plików źródłowych, takich jak genrule lub filegroup, korzystając z odwołania do modułu składnię ":<module-name>".

Listę prawidłowych typów modułów i ich właściwości znajdziesz w Informacje o modułach utworu.

Typy

Zmienne i właściwości są wpisane dynamicznie, a zmienne zależą od typu w pierwszej kolejności, a także z właściwościami ustawionymi statycznie według typu modułu. obsługiwane typy to:

  • Wartość logiczna (true lub false)
  • Liczba całkowita (int)
  • Ciągi tekstowe ("string")
  • Lista ciągów znaków (["string1", "string2"])
  • Mapy ({key1: "value1", key2: ["value2"]})

Mapy mogą zawierać wartości dowolnego typu, w tym mapy zagnieżdżone. Listy i mapy mogą znajdują się przecinki po ostatniej wartości.

Kule

Właściwości, które przyjmują listę plików, takie jak srcs, również mogą przejąć plik glob wzorów. Wzorce kuli ziemskiej mogą zawierać normalny symbol wieloznaczny * systemu UNIX, na przykład *.java Wzorce kuli ziemskiej mogą też zawierać pojedynczy symbol wieloznaczny ** jako ścieżkę , który pasuje do 0 lub więcej elementów ścieżki. Przykład: java/**/*.java pasuje zarówno do java/Main.java, jak i do Wzorce: java/com/android/Main.java.

Zmienne

Plik Android.bp może zawierać przypisania zmiennych najwyższego poziomu:

gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
    name: "gzip",
    srcs: gzip_srcs,
    shared_libs: ["libz"],
    stl: "none",
}

Zmienne są ograniczone do pozostałej części pliku, w którym zostały zadeklarowane. jak dowolne podrzędne pliki planów. Zmiennej nie można zmienić z jednym wyjątkiem: można dołączyć do projektu +=, ale tylko przed wymienionych.

Komentarze

Pliki Android.bp mogą zawierać wielowierszowe style /* */ i C++ w stylu C komentarze w jednym wierszu //.

Operatorzy

Ciągi tekstowe, listy ciągów znaków oraz mapy można dołączać za pomocą operatora +. Całkowite można sumować za pomocą operatora +. Dołączenie mapy powoduje wygenerowanie sumy kluczy w obu mapach, z dołączeniem wartości wszystkich kluczy znajdujących się w obie te mapy.

Warunkowe

Utwór nie obsługuje warunków warunkowych w plikach Android.bp. Zamiast tego: złożoność reguł kompilacji, które wymagają warunków, są obsługiwane w Go, gdzie można stosować ogólne funkcje językowe, a także niejawne zależności wprowadzone przez warunki mogą być śledzone. Większość warunków warunkowych jest konwertowana na właściwość map, w której jedna z wartości na mapie jest wybrana i dołączona do usług najwyższego poziomu.

Aby na przykład zapewnić obsługę plików architektonicznych:

cc_library {
    ...
    srcs: ["generic.cpp"],
    arch: {
        arm: {
            srcs: ["arm.cpp"],
        },
        x86: {
            srcs: ["x86.cpp"],
        },
    },
}

Narzędzie formatujące

Soong zawiera kanoniczne narzędzie do formatowania plików Blueprint, podobne do gofmt. Aby cyklicznie zmieniać format wszystkich elementów Liczba plików w bieżącym katalogu: Android.bp, uruchom:

bpfmt -w .

Format kanoniczny obejmuje 4 wcięcia spacji i nowe wiersze po każdym elemencie na liście wieloelementowej, a na listach i w mapach – przecinek na końcu.