软件定义型汽车 (SDV) 平台在整个代码库中包含许多 VSIDL 目录。CATALOG_UPDATE 文件为每个目录提供集中式配置,从而实现自动化更新和 IDE 集成。
CATALOG_UPDATE 文件的作用
CATALOG_UPDATE 文件主要有以下两种用途:
- 自动更新:当编译器或依赖项发生更改时,该文件允许
regenerator工具查找并重新编译系统中的所有目录。 - 语言服务器协议 (LSP) 支持:VSIDL 语言服务器使用此文件来发现目录根并解析依赖项。这样一来,您就可以使用“前往定义”等功能,并针对其他目录中定义的类型进行自动补全和实时验证。
配置目录
如需为 VSIDL 目录启用自动更新和 LSP 支持,请在目录的根目录中创建一个 CATALOG_UPDATE 文件。此文件是一个文本 protobuf 文件。
目录配置字段
output_path(字符串,可选):从目录根目录到应放置生成的中间件代码的目录的相对路径。dependency_catalog_paths(重复字符串):指向其他目录目录的相对路径列表。LSP 服务器使用这些路径来解析外部类型。vsidlc_gen_args(字符串,可选):传递给vsidlc的实参。LSP 服务器会检查这些实参,以应用正确的验证规则(例如"--apex")。prebuilts_output_path(字符串,可选):生成的运行时配置预构建件的路径。prebuilts_filegroup(字符串,可选):预构建的 Soongfilegroup名称。
配置示例
# 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"
为什么需要自动更新
手动维护每个目录的生成代码存在以下几个问题:
- 编译器更新:当编译器更新并包含 bug 修复或新功能时,所有未被
Android.bp文件中的genrule涵盖的生成代码和文件都应刷新,以保持一致性。 - 依赖项管理:基础目录中的更改通常需要重新生成下游目录。
- 准确性:自动更新可降低指定路径和依赖项时出现人为错误的风险。
运行再生器工具
regenerator 工具会从 SDV 根目录开始遍历目录树,并查找名为 CATALOG_UPDATE 的文件。
如需更新所有已配置的目录,请执行以下操作:
构建工具:
m regenerator运行该工具:
regenerator(可选)针对特定目录以递归方式运行:
console regenerator --root /path/to/directory
该工具会更新生成的文件并执行完整 build (m droid),以验证更改是否与系统的其余部分兼容。