Formato file Android.bp

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

Moduli

Un modulo in un file Android.bp inizia con un tipo di modulo seguito da un insieme di proprietà nel formato name: "value",:

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 nei namespace 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 generano file di origine, come genrule o filegroup, utilizzando il riferimento del modulo sintassi ":<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 digitate, con variabili basate dinamicamente su la prima assegnazione e le proprietà impostate in modo statico dal 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, incluse mappe nidificate. Gli elenchi e le mappe possono avere virgole finali dopo l'ultimo valore.

Glob

Anche le proprietà che accettano un elenco di file, come srcs, possono assumere glob pattern. 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 una sola eccezione: può essere aggiunto a un compito +=, ma solo prima che siano stati a cui viene fatto riferimento.

Commenti

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

Operatori

È possibile aggiungere stringhe, elenchi di stringhe e mappe utilizzando l'operatore +. I numeri interi possono essere sommati utilizzando l'operatore +. L'aggiunta di una mappa produce di chiavi in entrambe le mappe, aggiungendo i valori di qualsiasi chiave entrambe le mappe.

Condizionali

Soong non supporta i condizionali nei file Android.bp. Invece, le regole di creazione che richiederebbero condizionali vengono gestite in Go, in cui è possibile usare funzionalità linguistiche di alto livello e dipendenze implicite. introdotte da condizionali possono essere tracciate. La maggior parte dei condizionali viene convertita proprietà map, 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"],
        },
    },
}

Formattatore

prestog include un formattatore canonico per i file di Blueprint, simile al gofmt. Per riformattare tutti gli elementi Android.bp file nella directory corrente, esegui:

bpfmt -w .

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