自動更新目錄和整合 LSP

軟體定義車輛 (SDV) 平台包含多個 VSIDL 目錄,遍布整個程式碼集。CATALOG_UPDATE 檔案為每個目錄提供集中式設定,可啟用自動更新和 IDE 整合。

CATALOG_UPDATE 檔案的作用

CATALOG_UPDATE 檔案有兩個主要用途:

  1. 自動更新:當編譯器或依附元件變更時,regenerator 工具可透過這個檔案,尋找並重新編譯系統中的所有目錄。
  2. 語言伺服器通訊協定 (LSP) 支援:VSIDL 語言伺服器會使用這個檔案,找出目錄根目錄並解析依附元件。這項功能可啟用「前往定義」、自動完成,以及即時驗證其他目錄中定義的類型等功能。

設定目錄

如要為 VSIDL 目錄啟用自動更新和 LSP 支援功能,請在目錄的根目錄中建立 CATALOG_UPDATE 檔案。這個檔案是文字 protobuf 檔案。

目錄設定欄位

  • output_path (字串,選用):從目錄根目錄到應放置產生的中介軟體程式碼的目錄的相對路徑。
  • dependency_catalog_paths (重複字串):其他目錄的相對路徑清單。LSP 伺服器會使用這些路徑解析外部類型。
  • vsidlc_gen_args (字串,選用):傳遞至 vsidlc 的引數。LSP 伺服器會檢查這些項目,以套用正確的驗證規則 (例如 "--apex")。
  • prebuilts_output_path (字串,選用):產生的執行階段設定預先建構項目路徑。
  • prebuilts_filegroup (字串,選用):預先建構項目的 Soong filegroup 名稱。

範例設定

# 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. 編譯器更新:當編譯器更新並修正錯誤或新增功能時,所有產生的程式碼和檔案 (不包含 Android.bp 檔案中的 genrule) 都應重新整理,以維持一致性。
  2. 依附元件管理:基礎目錄變更時,通常需要重新產生下游目錄。
  3. 準確度:自動更新可降低指定路徑和依附元件時的人為錯誤風險。

執行重新產生工具

regenerator 工具會從 SDV 根目錄開始遍歷目錄樹狀結構,並尋找名稱完全符合 CATALOG_UPDATE 的檔案。

如要更新所有已設定的目錄,請按照下列步驟操作:

  1. 建構工具:

    m regenerator
    
  2. 執行工具:

    regenerator
    

    您也可以選擇對特定目錄遞迴執行指令: console regenerator --root /path/to/directory

這項工具會更新產生的檔案,並執行完整建構作業 (m droid),確認變更與系統其他部分相容。