การอัปเดตแคตตาล็อกอัตโนมัติและการผสานรวม LSP

แพลตฟอร์ม Software Defined Vehicle (SDV) มีแคตตาล็อก VSIDL จำนวนมากในฐานของโค้ด ไฟล์ CATALOG_UPDATE มีการกำหนดค่าแบบรวมศูนย์สำหรับแคตตาล็อกแต่ละรายการ ซึ่งช่วยให้ทั้งการอัปเดตอัตโนมัติและการผสานรวม IDE เป็นไปได้

บทบาทของไฟล์ CATALOG_UPDATE

ไฟล์ CATALOG_UPDATE มีวัตถุประสงค์หลัก 2 ประการ ดังนี้

  1. การอัปเดตอัตโนมัติ: ไฟล์นี้ช่วยให้เครื่องมือ regenerator ค้นหาและคอมไพล์แคตตาล็อกทั้งหมดในระบบอีกครั้งเมื่อคอมไพเลอร์หรือการขึ้นต่อกันมีการเปลี่ยนแปลง
  2. การรองรับโปรโตคอล Language Server Protocol (LSP): Language Server ของ VSIDL ใช้ไฟล์นี้เพื่อค้นหารูทของแคตตาล็อกและแก้ไขการขึ้นต่อกัน ซึ่งจะเปิดใช้ฟีเจอร์ต่างๆ เช่น "ไปที่คำจำกัดความ" การเติมข้อความอัตโนมัติ และการตรวจสอบแบบเรียลไทม์สำหรับประเภทที่กำหนดไว้ในแคตตาล็อกอื่นๆ

กำหนดค่าแคตตาล็อก

หากต้องการเปิดใช้การอัปเดตอัตโนมัติและการรองรับ LSP สำหรับแคตตาล็อก VSIDL ให้สร้างไฟล์ CATALOG_UPDATE ในไดเรกทอรีรูทของแคตตาล็อก ไฟล์นี้เป็นไฟล์ข้อความ Protobuf

ช่องการกำหนดค่าแคตตาล็อก

  • output_path (สตริง ไม่บังคับ): เส้นทางแบบสัมพัทธ์จากรูทของแคตตาล็อกไปยังไดเรกทอรีที่ควรวางโค้ดมิดเดิลแวร์ที่สร้างขึ้น
  • dependency_catalog_paths (สตริงซ้ำ): รายการเส้นทางแบบสัมพัทธ์ไปยังไดเรกทอรีแคตตาล็อกอื่นๆ เซิร์ฟเวอร์ LSP ใช้เส้นทางเหล่านี้เพื่อแก้ไขประเภทภายนอก
  • vsidlc_gen_args (สตริง ไม่บังคับ): อาร์กิวเมนต์ที่ส่งไปยัง vsidlc เซิร์ฟเวอร์ LSP จะตรวจสอบอาร์กิวเมนต์เหล่านี้เพื่อใช้กฎการตรวจสอบที่ถูกต้อง (เช่น "--apex")
  • prebuilts_output_path (สตริง ไม่บังคับ): เส้นทางสำหรับ Prebuilt ของการกำหนดค่ารันไทม์ที่สร้างขึ้น
  • prebuilts_filegroup (สตริง ไม่บังคับ): ชื่อ filegroup ของ Soong สำหรับ Prebuilt

การกำหนดค่าตัวอย่าง

# 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. ความแม่นยำ: การอัปเดตอัตโนมัติช่วยลดความเสี่ยงที่ผู้ปฏิบัติงานจะป้อนเส้นทางและทรัพยากร Dependency ผิดพลาด

เรียกใช้เครื่องมือ Regenerator

เครื่องมือ regenerator จะสำรวจแผนผังไดเรกทอรีโดยเริ่มจากรูทของ SDV และมองหาไฟล์ที่มีชื่อว่า CATALOG_UPDATE

วิธีอัปเดตแคตตาล็อกที่กำหนดค่าไว้ทั้งหมด

  1. สร้างเครื่องมือโดยทำดังนี้

    m regenerator
    
  2. เรียกใช้เครื่องมือโดยทำดังนี้

    regenerator
    

    หรือจะเรียกใช้แบบเรียกซ้ำสำหรับไดเรกทอรีที่เฉพาะเจาะจงก็ได้: console regenerator --root /path/to/directory

เครื่องมือจะอัปเดตไฟล์ที่สร้างขึ้นและทำการสร้างแบบเต็ม (m droid) เพื่อตรวจสอบว่าการเปลี่ยนแปลงเข้ากันได้กับส่วนอื่นๆ ของระบบ