פלטפורמת Software Defined Vehicle (SDV) מכילה קטלוגים רבים של VSIDL בבסיס הקוד. הקובץ CATALOG_UPDATE מספק הגדרה מרוכזת לכל קטלוג, ומאפשר עדכונים אוטומטיים ושילוב של IDE.
התפקיד של קובץ CATALOG_UPDATE
לקובץ CATALOG_UPDATE יש שתי מטרות עיקריות:
- עדכונים אוטומטיים: הקובץ מאפשר לכלי
regeneratorלמצוא את כל הקטלוגים במערכת ולקמפל אותם מחדש כשהקומפיילר או יחסי התלות משתנים. - תמיכה בפרוטוקול Language Server Protocol (LSP): שרת השפה של VSIDL משתמש בקובץ הזה כדי לגלות את שורש הקטלוג ולפתור יחסי תלות. כך אפשר להשתמש בתכונות כמו "מעבר להגדרה", השלמה אוטומטית ואימות בזמן אמת של סוגים שמוגדרים בקטלוגים אחרים.
הגדרת קטלוג
כדי להפעיל עדכונים אוטומטיים ותמיכה ב-LSP בקטלוג VSIDL, צריך ליצור קובץ CATALOG_UPDATE בתיקיית השורש של הקטלוג. הקובץ הזה הוא קובץ text protobuf.
שדות תצורה של קטלוג
output_path(מחרוזת, אופציונלי): הנתיב היחסי מהשורש של הקטלוג לספרייה שבה צריך למקם את קוד התוכנה המתווכת שנוצר.-
dependency_catalog_paths(מחרוזת חוזרת): רשימה של נתיבים יחסיים לספריות קטלוג אחרות. שרת ה-LSP משתמש בנתיבים האלה כדי לפתור סוגים חיצוניים. -
vsidlc_gen_args(מחרוזת, אופציונלי): ארגומנטים שמועברים אלvsidlc. שרת ה-LSP בודק אותם כדי להחיל את כללי האימות הנכונים (לדוגמה,"--apex"). -
prebuilts_output_path(מחרוזת, אופציונלי): נתיב לקובצי הגדרות מובנים מראש שנוצרו בזמן הריצה. -
prebuilts_filegroup(מחרוזת, אופציונלי): השם של Soongfilegroupל-prebuilts.
הגדרה לדוגמה
# proto-file: //system/software_defined_vehicle/tools/regenerator/proto/catalog.proto
# proto-message: Catalog
output_path: ".."
dependency_catalog_paths: "../../../../../automotive_services/diagnostics/vsidl/v1"
vsidlc_gen_args: "--apex"
למה צריך עדכונים אוטומטיים
ניהול ידני של קוד שנוצר לכל קטלוג הוא בעייתי מכמה סיבות:
- עדכוני קומפיילר: כשמעדכנים את הקומפיילר עם תיקוני באגים או תכונות חדשות, צריך לרענן את כל הקבצים והקוד שנוצרו ולא נכללים ב-
genruleבקובץAndroid.bpכדי לשמור על עקביות. - ניהול תלויות: שינויים בקטלוג בסיס בדרך כלל מחייבים ליצור מחדש את הקטלוגים שבהמשך השרשרת.
- דיוק: עדכונים אוטומטיים מפחיתים את הסיכון לטעויות אנוש כשמציינים נתיבים ויחסי תלות.
הפעלת הכלי ליצירה מחדש
הכלי regenerator עובר על עץ הספרייה החל מהשורש של ה-SDV ומחפש קבצים שנקראים בדיוק CATALOG_UPDATE.
כדי לעדכן את כל הקטלוגים שהוגדרו:
מפתחים את הכלי:
m regeneratorמפעילים את הכלי:
regeneratorאפשר גם להריץ את הפקודה באופן רקורסיבי לספרייה ספציפית:
console regenerator --root /path/to/directory
הכלי מעדכן את הקבצים שנוצרו ומבצע גרסת build מלאה (m droid) כדי לוודא שהשינויים תואמים לשאר המערכת.