Formato file Android.bp

Per impostazione predefinita, i file Android.bp sono semplici. Non contengono condizionali o istruzioni del flusso di controllo; tutta la complessità è gestita dalla logica di compilazione scritta in Go. Quando possibile, la sintassi e la semantica dei file Android.bp sono simili ai file Bazel BUILD.

Moduli

Un modulo in un file Android.bp inizia con un tipo di modulo followed by a set of properties in name: "value", format:

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

Ogni modulo deve avere una proprietà name e il valore deve essere univoco in tutti i file Android.bp, ad eccezione dei valori della proprietà name negli spazi dei nomi e nei moduli predefiniti, che possono ripetersi.

La proprietà srcs specifica i file di origine utilizzati per compilare il modulo come elenco di stringhe. Puoi fare riferimento all'output di altri moduli che producono file di origine, come genrule o filegroup, utilizzando la sintassi di riferimento del modulo ":<module-name>".

Per un elenco dei tipi di moduli validi e delle relative proprietà, consulta il riferimento ai moduli Soong.

Tipi

Le variabili e le proprietà sono tipicamente tipiche, con variabili basate dinamicamente sulla prima assegnazione e proprietà impostate in modo statico in base al tipo di modulo. I tipi supportati sono:

  • Valori booleani (true o false)
  • Numeri interi (int)
  • Stringhe ("string")
  • Elenchi di stringhe (["string1", "string2"])
  • Mappe ({key1: "value1", key2: ["value2"]})

Le mappe possono contenere valori di qualsiasi tipo, comprese le mappe nidificate. Gli elenchi e le mappe possono avere virgole finali dopo l'ultimo valore.

Glob

Le proprietà che accettano un elenco di file, come srcs, possono anche accettare pattern di glob. I pattern glob possono contenere il normale carattere jolly UNIX *, ad esempio *.java. I pattern glob possono contenere anche una singola carattere jolly ** come elemento percorso, che corrisponde a zero o più elementi percorso. Ad esempio, java/**/*.java corrisponde sia ai pattern java/Main.java sia java/com/android/Main.java.

Variabili

Un file Android.bp può contenere assegnazioni di variabili di primo livello:

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

L'ambito delle variabili è limitato al resto del file in cui sono dichiarate, nonché a eventuali file Blueprint secondari. Le variabili sono immutabili con un'eccezione: possono essere aggiunte con un'assegnazione +=, ma solo prima che vengano richiamate.

Commenti

I file Android.bp possono contenere commenti /* */ su più righe in stile C e commenti // su una riga in stile C++.

Operatori

Le stringhe, gli elenchi di stringhe e le mappe possono essere aggiunte utilizzando l'operatore +. I numeri interi possono essere sommati utilizzando l'operatore +. L'aggiunta di una mappa produce la unione delle chiavi in entrambe le mappe, aggiungendo i valori di eventuali chiavi presenti in entrambe le mappe.

Condizionali

prestog non supporta le condizionali nei file Android.bp. Al contrario, la complessità delle regole di compilazione che richiederebbero condizioni viene gestita in Go, dove è possibile utilizzare funzionalità di linguaggio di alto livello e monitorare le dipendenze implicite introdotte dalle condizioni. La maggior parte delle espressioni condizionali viene convertita in una proprietà mappa, in cui uno dei valori della mappa viene selezionato e aggiunto alle proprietà di primo livello.

Ad esempio, per supportare i file specifici dell'architettura:

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

Formatter

Presto include un formattatore canonico per i file Blueprint, simile a gofmt. Per riformattare in modo ricorsivo tutti i file Android.bp nella directory corrente, esegui:

bpfmt -w .

Il formato canonico include rientri di quattro spazi, nuove righe dopo ogni elemento di un elenco di più elementi e una virgola finale in elenchi e mappe.