קבצים מסוג Android.bp
פשוטים מטבעם. הם לא מכילים תנאים או הצהרות לזרימת בקרה. כל המורכבות מטופלת על ידי לוגיקה של build שנכתבה ב-Go. כשהדבר אפשרי, התחביר והסמנטיקה של קובצי Android.bp
דומים לקובצי BUILD של Bazel.
מודולים
מודול בקובץ Android.bp
מתחיל בסוג המודול, ואחריו קבוצה של מאפיינים בפורמט name: "value",
:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
לכל מודול צריך להיות מאפיין name
, והערך צריך להיות ייחודי בכל קובצי Android.bp
, מלבד ערכי המאפיין name
במרחבי שמות ובמודולים מוכנים מראש, שיכולים לחזור על עצמם.
המאפיין srcs
מציין את קובצי המקור ששימשו ליצירת המודול, כרשימת מחרוזות. אפשר להפנות לפלט של מודולים אחרים שיוצרים קובצי מקור, כמו genrule
או filegroup
, באמצעות התחביר של הפניה למודול ":<module-name>"
.
רשימה של סוגי המודולים התקינים והמאפיינים שלהם מופיעה במאמר חומר עזר בנושא מודולים של Soong.
סוגים
למשתנים ולמאפיינים יש סוגים מוגדרים, והמשתנים מבוססים באופן דינמי על ההקצאה הראשונה, והמאפיינים מוגדרים באופן סטטי לפי סוג המודול. הסוגים הנתמכים הם:
- ערכים בוליאניים (
true
אוfalse
) - מספרים שלמים (
int
) - מחרוזות (
"string"
) - רשימות של מחרוזות (
["string1", "string2"]
) - מפות (
{key1: "value1", key2: ["value2"]}
)
מפות יכולות להכיל ערכים מכל סוג, כולל מפות בתצוגת עץ. אפשר להוסיף פסיק בסוף הערך האחרון ברשימות ובמפות.
Globs
נכסים שמקבלים רשימת קבצים, כמו srcs
, יכולים לקבל גם דפוסי glob. דפוסי Glob יכולים להכיל את התו הכללי לחיפוש ב-UNIX *
, לדוגמה *.java
. תבניות Glob יכולות להכיל גם תו Wildcard יחיד מסוג **
כרכיב נתיב, שתואמת לאפס או יותר רכיבי נתיב. לדוגמה, הערך java/**/*.java
תואם גם לדפוס java/Main.java
וגם לדפוס java/com/android/Main.java
.
משתנים
קובץ Android.bp
יכול להכיל הקצאות משתנים ברמה העליונה:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
ההיקף של המשתנים הוא שאר הקובץ שבו הם הוגדרו, וגם כל קובץ צאצא של Blueprint. משתנים הם בלתי ניתנים לשינוי, מלבד חריג אחד: אפשר לצרף אליהם הקצאה של +=
, אבל רק לפני שהם הוזכרו.
תגובות
קבצים מסוג Android.bp
יכולים להכיל תגובות /* */
מרובות שורות בסגנון C ותגובות //
בשורה אחת בסגנון C++.
מפעילים
אפשר לצרף מחרוזות, רשימות של מחרוזות ומפות באמצעות האופרטור +.
אפשר לסכם מספרים שלמים באמצעות האופרטור +
. הוספת מפה יוצרת את האיחוד של המפתחות בשתי המפות, ומצרפת את הערכים של כל המפתחות שנמצאים בשתי המפות.
תנאים
מערכת Soong לא תומכת בתנאי בקובצי Android.bp
. במקום זאת, מורכבות של כללי build שדורשת תנאים מותנים מטופלת ב-Go, שבו אפשר להשתמש בתכונות שפה ברמה גבוהה ולעקוב אחרי יחסי תלות משתמעים שנוצרים על ידי תנאים מותנים. רוב התנאים המותנים מומרים למאפיין מפה, שבו אחד מהערכים במפה נבחר ומצורף לנכסים ברמה העליונה.
לדוגמה, כדי לתמוך בקבצים ספציפיים לארכיטקטורה:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
פורמטטור
Soong כולל פורמט קנוני של קובצי Blueprint, בדומה ל-gofmt. כדי לעצב מחדש באופן רקורסיבי את כל קובצי Android.bp
בספרייה הנוכחית, מריצים את הפקודה:
bpfmt -w .
הפורמט הקנוני כולל הכנסות של ארבעה רווחים, שורות חדשות אחרי כל רכיב ברשימת רכיבים מרובים ופסיק בסוף ברשימות ובמפות.