פלטפורמת Software Defined Vehicle (SDV) מכילה קטלוגים רבים של VSIDL בבסיס הקוד. קובץ CATALOG_UPDATE מספק תצורה מרכזית לכל קטלוג, ומאפשר עדכונים אוטומטיים ושילוב של IDE.
התפקיד של הקובץ CATALOG_UPDATE
לקובץ CATALOG_UPDATE יש שתי מטרות עיקריות:
- עדכונים אוטומטיים: הקובץ מאפשר לכלי
regeneratorלמצוא ולבצע קומפילציה מחדש של כל הקטלוגים במערכת כשהקומפיילר או התלויות משתנים. - תמיכה בפרוטוקול של שרת שפה (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(string, optional): The Soongfilegroupname for 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
הכלי מעדכן את הקבצים שנוצרו ומבצע בנייה מלאה (m droid) כדי לוודא שהשינויים תואמים לשאר המערכת.