Android.bp-Dateiformat

Android.bp-Dateien sind standardmäßig einfach. Sie enthalten keine Bedingungen oder Anweisungen zur Ablaufsteuerung; wird die gesamte Komplexität von Build-Logik Los. Wenn möglich ähneln Syntax und Semantik von Android.bp-Dateien Folgendem: Bazel-Build-Dateien vom Typ "Build"

Module

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

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

Jedes Modul muss ein name-Attribut haben, wobei der Wert in allen Bereichen eindeutig sein muss alle Android.bp-Dateien mit Ausnahme der name-Attributwerte in Namespaces und vordefinierte Module, die sich wiederholen können.

Das Attribut srcs gibt die Quelldateien an, die zum Erstellen des Moduls verwendet werden, Liste mit Zeichenfolgen. Sie können auf die Ergebnisse anderer Module verweisen, Quelldateien wie genrule oder filegroup mithilfe der Modulreferenz ":<module-name>".

Eine Liste der gültigen Modultypen und ihrer Eigenschaften finden Sie in der Referenz zu Soong-Modulen

Typen

Variablen und Eigenschaften sind stark typisiert, wobei Variablen dynamisch basierend auf die erste Zuweisung und Eigenschaften, die statisch durch den Modultyp festgelegt werden. Die Unterstützte Typen sind:

  • Boolesch (true oder false)
  • Ganzzahlen (int)
  • Strings ("string")
  • Stringlisten (["string1", "string2"])
  • Karten ({key1: "value1", key2: ["value2"]})

Karten können Werte beliebiger Typen enthalten, einschließlich verschachtelter Karten. Listen und Karten können Nach dem letzten Wert stehen Kommas.

Globs

Attribute wie srcs, die eine Liste von Dateien enthalten, können auch Glob übernehmen. Muster zu erkennen. Glob-Muster können beispielsweise den normalen UNIX-Platzhalter * enthalten. *.java. Glob-Muster können auch einen einzelnen **-Platzhalter als Pfad enthalten -Element, das mit null oder mehr Pfadelementen übereinstimmt. Beispiel: java/**/*.java stimmt sowohl mit java/Main.java als auch mit java/com/android/Main.java-Muster.

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. als untergeordnete Blueprint-Dateien. Variablen sind mit einer Ausnahme unveränderlich: Sie können mit einer +=-Aufgabe angehängt werden, aber nur bevor sie auf die verwiesen wird.

Kommentare

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

Netzbetreiber

Strings, Stringlisten und Zuordnungen können mithilfe des Operators + (+) angehängt werden. Ganzzahlen können mit dem +-Operator addiert werden. Durch das Anhängen einer Karte wird die Union von Schlüsseln in beiden Zuordnungen, wobei die Werte aller Schlüssel angehängt werden, die in beiden Karten.

Bedingungen

Bedingungen in Android.bp-Dateien werden von Song nicht unterstützt. Stattdessen die Komplexität von Regeln zu definieren, für die Bedingungen erforderlich sind, in denen High-Level-Sprachfunktionen verwendet werden können, und implizite Abhängigkeiten die durch Bedingungen erzeugt werden, nachverfolgt werden können. Die meisten Bedingungen werden in einen map -Eigenschaft, bei der einer der Werte in der Karte ausgewählt und angehängt wird. zu den übergeordneten Properties.

So werden beispielsweise architekturspezifische Dateien unterstützt:

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

Formatierer

Soong verfügt über einen kanonischen Formatierer für Blueprint-Dateien, ähnlich wie gofmt Um alle Elemente rekursiv neu zu formatieren, Android.bp-Dateien im aktuellen Verzeichnis führen Sie folgenden Befehl aus:

bpfmt -w .

Das kanonische Format umfasst Einzüge mit vier Leerzeichen, neue Zeilen nach jedem Element. Multielement-Liste und eines nachgestellten Kommas in Listen und Zuordnungen.