Formato file Android.bp

I file Android.bp sono progettati per essere semplici. Non contengono condizioni o istruzioni sul flusso di controllo; tutta la complessità viene gestita dalla logica di compilazione scritta Vai. Quando possibile, la sintassi e la semantica dei file Android.bp sono simili a file Bazel BUILD.

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 tra tutti i file Android.bp, ad eccezione dei valori delle proprietà name in e moduli predefiniti, che possono ripetersi.

La proprietà srcs specifica i file di origine utilizzati per creare il modulo, come 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 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. La i tipi supportati sono:

  • 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 contengono 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 anche contenere un singolo carattere jolly ** come percorso che corrisponde a zero o più elementi del percorso. Ad esempio: java/**/*.java corrisponde sia a java/Main.java che a java/com/android/Main.java pattern.

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",
}

Le variabili hanno come ambito il resto del file in cui vengono dichiarate. dei progetti secondari. Le variabili sono immutabili, con una sola eccezione: possono essere aggiunte a un compito +=, ma solo prima che siano state a cui viene fatto riferimento.

Commenti

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

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

prestog non supporta le 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 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.