פורמט הקובץ Android.bp

בזכות העיצוב של קובצי Android.bp, הם פשוטים. הם לא כוללים תנאים הצהרות בתהליכי בקרה; כל המורכבות מטופלת באמצעות לוגיקת build שכתובה מתחילים. כשהדבר אפשרי, התחביר והסמנטיקה של קובצי Android.bp יהיו דומים ל- קובצי Bazel BUILD.

מודולים

מודול בקובץ 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. דפוסי גלובוס יכולים להכיל את התו הכללי לחיפוש הרגיל של UNIX, *, לדוגמה *.java. דפוסי Glob יכולים להכיל גם תו כללי ** אחד כרכיב נתיב, שתואמת לאפס או יותר רכיבי נתיב. לדוגמה, הערך 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",
}

המשתנים מוגבלים לשאר הקובץ שבו הם מוצהרים, וגם כמו כל קובץ צאצא של שרטוטים. משתנים הם בלתי ניתנים לשינוי, מלבד חריג אחד: אפשר לצרף אליהם הקצאה של +=, אבל רק לפני שהם הוזכרו.

תגובות

Android.bp קבצים יכולים להכיל כמה שורות בסגנון C /* */ וסגנון C++ // תגובות בשורה אחת.

מפעילים

אפשר לצרף מחרוזות, רשימות של מחרוזות ומפות באמצעות האופרטור +. אפשר לסכם מספרים שלמים באמצעות האופרטור +. הוספת מפה יוצרת את האיחוד של המפתחות בשתי המפות, ומצרפת את הערכים של כל המפתחות שנמצאים בשתי המפות.

תנאים

התכונה Sung לא תומכת בתנאים ובהגבלות ב-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 .

הפורמט הקנוני כולל הכנסות של ארבעה רווחים, שורות חדשות אחרי כל רכיב ברשימת רכיבים מרובים, ופסיק בסוף ברשימות ובמפות.