Android.bp
dosyaları, tasarım gereği basittir. Bu dosyalar koşullu ifadeler veya kontrol akışı ifadeleri içermez. Tüm karmaşıklık, Go'da yazılmış derleme mantığı tarafından ele alınır. Mümkün olduğunda Android.bp
dosyalarının söz dizimi ve semantikleri Bazel BUILD dosyalarına benzer.
Modüller
Android.bp
dosyasındaki bir modül, modül türü ile başlar ve ardından name: "value",
biçiminde bir dizi özellik gelir:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Her modülün bir name
mülkü olmalıdır ve değer, ad alanlarında ve önceden oluşturulmuş modüllerdeki name
mülk değerleri (yinelenebilir) hariç tüm Android.bp
dosyalarında benzersiz olmalıdır.
srcs
mülkü, modülü oluşturmak için kullanılan kaynak dosyalarını dize listesi olarak belirtir. genrule
veya filegroup
gibi kaynak dosyalar oluşturan diğer modüllerin çıkışına, modül referansı söz dizimini ":<module-name>"
kullanarak referans verebilirsiniz.
Geçerli modül türlerinin ve özelliklerinin listesi için Soong Modülleri Referansı başlıklı makaleyi inceleyin.
Türler
Değişkenler ve özellikler güçlü şekilde yazılmıştır. Değişkenler ilk atamaya göre dinamik olarak, özellikler ise modül türüne göre statik olarak ayarlanır. Desteklenen türler şunlardır:
- Boole (
true
veyafalse
) - Tam sayılar (
int
) - Dize (
"string"
) - Dize listeleri (
["string1", "string2"]
) - Haritalar (
{key1: "value1", key2: ["value2"]}
)
Haritalar, iç içe yerleştirilmiş haritalar dahil olmak üzere her türden değer içerebilir. Listeler ve haritalar, son değerin ardından virgül içerebilir.
Baloncuklar
srcs
gibi dosya listesi alan özellikler, genel desenleri de alabilir. Glob kalıpları, normal UNIX joker karakterini *
içerebilir (ör. *.java
). Glob kalıpları, yol öğesi olarak sıfır veya daha fazla yol öğesiyle eşleşen tek bir **
joker karakteri de içerebilir. Örneğin, java/**/*.java
hem java/Main.java
hem de java/com/android/Main.java
kalıplarıyla eşleşir.
Değişkenler
Android.bp
dosyaları üst düzey değişken atamalarını içerebilir:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
Değişkenler, tanımlandıkları dosyanın geri kalanı ve tüm alt Blueprint dosyaları için kapsamlandırılır. Değişkenler bir istisna dışında değiştirilemez: +=
atamayla eklenebilirler ancak yalnızca referans verilmeden önce.
Yorumlar
Android.bp
dosyaları C tarzı çok satırlı /* */
ve C++ tarzı tek satırlı //
yorumlar içerebilir.
Operatörler
+ operatörü kullanılarak dize, dize listesi ve harita eklenebilir.
Tam sayılar +
operatörü kullanılarak toplanabilir. Bir haritayı eklemek, her iki haritada da bulunan anahtarların değerlerini ekleyerek her iki haritada da bulunan anahtarların birleşimini oluşturur.
Koşullu ifadeler
Soong, Android.bp
dosyalarındaki koşullu ifadeleri desteklemez. Bunun yerine, koşullu ifadeleri gerektiren derleme kurallarındaki karmaşıklık Go'da ele alınır. Go'da üst düzey dil özellikleri kullanılabilir ve koşullu ifadeler tarafından oluşturulan gizli bağımlılıklar izlenebilir. Koşullu ifadelerin çoğu, haritada yer alan değerlerden birinin seçilip üst düzey özelliklere eklendiği bir harita özelliğine dönüştürülür.
Örneğin, mimariye özel dosyaları desteklemek için:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Biçimlendirici
Soong, gofmt'a benzer şekilde Blueprint dosyaları için standart bir biçimlendirici içerir. Mevcut dizindeki tüm Android.bp
dosyalarını yinelemeli olarak yeniden biçimlendirmek için:
bpfmt -w .
Standart biçim, dört boşluk girintisi, çok öğeli bir listenin her öğesinden sonra yeni satır ve listelerde ve haritalarda sonuna virgül içerir.