Format file Android.bp

Secara desain, file Android.bp sederhana. Mereka tidak berisi pernyataan kondisional atau aliran kontrol; semua kompleksitas ditangani oleh logika build yang ditulis dalam Go. Jika memungkinkan, sintaksis dan semantik file Android.bp mirip dengan file Bazel BUILD .

Modul

Modul dalam file Android.bp dimulai dengan tipe modul diikuti dengan sekumpulan properti dalam name: "value", format:

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

Setiap modul harus memiliki properti name , dan nilainya harus unik di semua file Android.bp , kecuali untuk nilai properti name di namespace dan modul bawaan, yang mungkin berulang.

Properti srcs menentukan file sumber yang digunakan untuk membangun modul, sebagai daftar string. Anda dapat mereferensikan output modul lain yang menghasilkan file sumber, seperti genrule atau filegroup , dengan menggunakan sintaks referensi modul ":<module-name>" .

Untuk daftar jenis modul yang valid dan propertinya, lihat Referensi Modul Soong .

Jenis

Variabel dan properti diketik dengan kuat, dengan variabel secara dinamis berdasarkan pada penugasan pertama, dan properti diatur secara statis berdasarkan tipe modul. Jenis yang didukung adalah:

  • Boolean ( true atau false )
  • Bilangan bulat ( int )
  • Senar ( "string" )
  • Daftar string ( ["string1", "string2"] )
  • Peta ( {key1: "value1", key2: ["value2"]} )

Peta mungkin berisi nilai jenis apa pun, termasuk peta bertingkat. Daftar dan peta mungkin memiliki tanda koma setelah nilai terakhir.

Gumpalan

Properti yang mengambil daftar file, seperti srcs , juga dapat mengambil pola glob. Pola glob dapat berisi wildcard UNIX normal * , misalnya *.java . Pola glob juga dapat berisi satu karakter pengganti ** sebagai elemen jalur, yang cocok dengan nol atau lebih elemen jalur. Misalnya, java/**/*.java cocok dengan pola java/Main.java dan java/com/android/Main.java .

Variabel

File Android.bp mungkin berisi penetapan variabel tingkat atas:

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

Variabel dicakup ke seluruh file yang dideklarasikannya, serta file Blueprint turunan apa pun. Variabel tidak dapat diubah dengan satu pengecualian: variabel dapat ditambahkan dengan penugasan += , namun hanya sebelum variabel tersebut direferensikan.

Komentar

File Android.bp dapat berisi komentar /* */ multiline gaya C dan komentar // baris tunggal gaya C++.

Operator

String, daftar string, dan peta dapat ditambahkan menggunakan operator +. Bilangan bulat dapat dijumlahkan menggunakan operator + . Menambahkan peta menghasilkan gabungan kunci di kedua peta, menambahkan nilai kunci apa pun yang ada di kedua peta.

Persyaratan

Soong tidak mendukung persyaratan dalam file Android.bp . Sebaliknya, kompleksitas dalam aturan build yang memerlukan kondisional ditangani di Go, di mana fitur bahasa tingkat tinggi dapat digunakan, dan dependensi implisit yang diperkenalkan oleh kondisional dapat dilacak. Sebagian besar kondisional dikonversi menjadi properti peta, di mana salah satu nilai dalam peta dipilih dan ditambahkan ke properti tingkat atas.

Misalnya, untuk mendukung file khusus arsitektur:

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

Pemformat

Soong menyertakan pemformat kanonik untuk file Blueprint, mirip dengan gofmt . Untuk memformat ulang semua file Android.bp di direktori saat ini secara rekursif, jalankan:

bpfmt -w .

Format kanonik mencakup indentasi empat spasi, baris baru setelah setiap elemen daftar multielemen, dan tanda koma di akhir daftar dan peta.