עדכונים אוטומטיים של הקטלוג ושילוב של ספק שירותי שפה (LSP)

פלטפורמת Software Defined Vehicle‏ (SDV) מכילה קטלוגים רבים של VSIDL בבסיס הקוד. קובץ CATALOG_UPDATE מספק תצורה מרכזית לכל קטלוג, ומאפשר עדכונים אוטומטיים ושילוב של IDE.

התפקיד של הקובץ CATALOG_UPDATE

לקובץ CATALOG_UPDATE יש שתי מטרות עיקריות:

  1. עדכונים אוטומטיים: הקובץ מאפשר לכלי regenerator למצוא ולבצע קומפילציה מחדש של כל הקטלוגים במערכת כשהקומפיילר או התלויות משתנים.
  2. תמיכה בפרוטוקול של שרת שפה (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 Soong filegroup name 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"

למה צריך עדכונים אוטומטיים

תחזוקה ידנית של קוד שנוצר לכל קטלוג היא בעייתית מכמה סיבות:

  1. עדכוני קומפיילר: כשמעדכנים את הקומפיילר עם תיקוני באגים או תכונות חדשות, צריך לרענן את כל הקוד והקבצים שנוצרו שלא מכוסים על ידי genrule בקובץ Android.bp כדי לשמור על עקביות.
  2. ניהול תלות: שינויים בקטלוג בסיסי מחייבים לעיתים קרובות יצירה מחדש של קטלוגים במורד הזרם.
  3. דיוק: עדכונים אוטומטיים מצמצמים את הסיכון לטעויות אנוש כשמציינים נתיבים ותלות.

הפעלת הכלי ליצירה מחדש

הכלי regenerator עובר על עץ הספריות החל מהספרייה הראשית של SDV ומחפש קבצים ששמם הוא בדיוק CATALOG_UPDATE.

כדי לעדכן את כל הקטלוגים שהוגדרו:

  1. בונים את הכלי:

    m regenerator
    
  2. מריצים את הכלי:

    regenerator
    

    אופציונלי, מריצים אותו באופן רקורסיבי לספרייה ספציפית: console regenerator --root /path/to/directory

הכלי מעדכן את הקבצים שנוצרו ומבצע בנייה מלאה (m droid) כדי לוודא שהשינויים תואמים לשאר המערכת.