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

לפי התכנון, קבצי Android.bp הם פשוטים. הם אינם מכילים הצהרות תנאים או זרימת בקרה; כל המורכבות מטופלת על ידי לוגיקה לבנות שנכתבה ב-Go. במידת האפשר, התחביר והסמנטיקה של קבצי 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 Modules Reference .

סוגים

משתנים ומאפיינים מוקלדים היטב, כאשר משתנים מבוססים באופן דינמי על ההקצאה הראשונה, ומאפיינים מוגדרים באופן סטטי על ידי סוג המודול. הסוגים הנתמכים הם:

  • בוליאניות ( true או false )
  • מספרים שלמים ( int )
  • מחרוזות ( "string" )
  • רשימות של מחרוזות ( ["string1", "string2"] )
  • מפות ( {key1: "value1", key2: ["value2"]} )

מפות עשויות להכיל ערכים מכל סוג, כולל מפות מקוננות. לרשימות ומפות עשויות להיות פסיקים עוקבים אחרי הערך האחרון.

גלובס

מאפיינים שלוקחים רשימה של קבצים, כגון srcs , יכולים גם לקבל דפוסי גלוב. תבניות גלוב יכולות להכיל את התו הכללי הרגיל של UNIX * , למשל *.java . תבניות גלוב יכולות להכיל גם תו כללי ** בודד כרכיב נתיב, התואם לאפס רכיבי נתיב או יותר. לדוגמה, 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 יכולים // הערות /* */ ת בסגנון רב-קו.

מפעילים

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

תנאים

Soong אינו תומך בתנאים בקבצי Android.bp . במקום זאת, המורכבות בכללי בנייה שתדרוש תנאים מטופלים ב-Go, שם ניתן להשתמש בתכונות שפה ברמה גבוהה, וניתן לעקוב אחר תלות מרומזת שהוכנסה על ידי תנאים. רוב התניות מומרות למאפיין מפה, כאשר אחד מהערכים במפה נבחר ומצורף למאפיינים ברמה העליונה.

לדוגמה, כדי לתמוך בקבצים ספציפיים לארכיטקטורה:

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

מעצב

Soong כולל פורמט קנוני לקובצי Blueprint, בדומה ל- gofmt . כדי לאתחל מחדש באופן רקורסיבי את כל קבצי Android.bp בספרייה הנוכחית, הרץ:

bpfmt -w .

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