Android.bp-Dateiformat

Android.bp Dateien sind vom Design her einfach. Sie enthalten keine Bedingungen oder Kontrollflussanweisungen; Die gesamte Komplexität wird durch die in Go geschriebene Build-Logik bewältigt. Wenn möglich, ähneln Syntax und Semantik von Android.bp Dateien denen von Bazel BUILD-Dateien .

Module

Ein Modul in einer Android.bp Datei beginnt mit einem Modultyp , gefolgt von einer Reihe von Eigenschaften im name: "value", Format:

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

Jedes Modul muss über eine name verfügen und der Wert muss in allen Android.bp Dateien eindeutig sein, mit Ausnahme der name in Namespaces und vorgefertigten Modulen, die sich wiederholen können.

Die Eigenschaft srcs gibt die zum Erstellen des Moduls verwendeten Quelldateien als Liste von Zeichenfolgen an. Sie können auf die Ausgabe anderer Module verweisen, die Quelldateien erzeugen, wie z. B. genrule oder filegroup , indem Sie die Modulreferenzsyntax ":<module-name>" verwenden.

Eine Liste der gültigen Modultypen und ihrer Eigenschaften finden Sie in der Soong Modules Reference .

Typen

Variablen und Eigenschaften sind stark typisiert, wobei Variablen dynamisch auf der ersten Zuweisung basieren und Eigenschaften statisch durch den Modultyp festgelegt werden. Die unterstützten Typen sind:

  • Boolesche Werte ( true oder false )
  • Ganze Zahlen ( int )
  • Zeichenfolgen ( "string" )
  • Listen von Strings ( ["string1", "string2"] )
  • Karten ( {key1: "value1", key2: ["value2"]} )

Karten können Werte jeglicher Art enthalten, einschließlich verschachtelter Karten. Listen und Karten können nach dem letzten Wert Kommas enthalten.

Kugeln

Eigenschaften, die eine Liste von Dateien annehmen, wie z. B. srcs , können auch Glob-Muster annehmen. Glob-Muster können den normalen UNIX-Platzhalter * enthalten, zum Beispiel *.java . Glob-Muster können auch einen einzelnen ** Platzhalter als Pfadelement enthalten, der mit null oder mehr Pfadelementen übereinstimmt. Beispielsweise entspricht java/**/*.java sowohl den Mustern java/Main.java als auch java/com/android/Main.java .

Variablen

Eine Android.bp Datei kann Variablenzuweisungen der obersten Ebene enthalten:

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

Variablen gelten für den Rest der Datei, in der sie deklariert sind, sowie für alle untergeordneten Blueprint-Dateien. Variablen sind mit einer Ausnahme unveränderlich: Sie können mit einer += Zuweisung angehängt werden, jedoch nur, bevor auf sie verwiesen wurde.

Kommentare

Android.bp Dateien können mehrzeilige /* */ im C-Stil und einzeilige // Kommentare im C++-Stil enthalten.

Betreiber

Strings, String-Listen und Karten können mit dem +-Operator angehängt werden. Ganzzahlen können mit dem + -Operator summiert werden. Das Anhängen einer Karte erzeugt die Vereinigung der Schlüssel in beiden Karten und fügt die Werte aller Schlüssel an, die in beiden Karten vorhanden sind.

Bedingungen

Soong unterstützt keine Bedingungen in Android.bp Dateien. Stattdessen wird die Komplexität von Build-Regeln, die Bedingungen erfordern würden, in Go behandelt, wo Hochsprachenfunktionen verwendet werden können und implizite Abhängigkeiten, die durch Bedingungen eingeführt werden, verfolgt werden können. Die meisten Bedingungen werden in eine Karteneigenschaft umgewandelt, wobei einer der Werte in der Karte ausgewählt und an die Eigenschaften der obersten Ebene angehängt wird.

Um beispielsweise architekturspezifische Dateien zu unterstützen:

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

Formatierer

Soong enthält einen kanonischen Formatierer für Blueprint-Dateien, ähnlich wie gofmt . Führen Sie Folgendes aus, um alle Android.bp Dateien im aktuellen Verzeichnis rekursiv neu zu formatieren:

bpfmt -w .

Das kanonische Format umfasst Einzüge mit vier Leerzeichen, neue Zeilen nach jedem Element einer Liste mit mehreren Elementen und ein abschließendes Komma in Listen und Karten.