カタログの自動更新と LSP の統合

ソフトウェア定義車両(SDV)プラットフォームには、コードベース全体に多数の VSIDL カタログが含まれています。CATALOG_UPDATE ファイルは、各カタログの一元的な構成を提供し、自動更新と IDE 統合の両方を可能にします。

CATALOG_UPDATE ファイルの役割

CATALOG_UPDATE ファイルには、主に次の 2 つの目的があります。

  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)を実行して、変更がシステムの残りの部分と互換性があることを確認します。