Автоматическое обновление каталога и интеграция с LSP.

Платформа Software Defined Vehicle (SDV) содержит множество каталогов VSIDL по всей кодовой базе. Файл CATALOG_UPDATE обеспечивает централизованную конфигурацию для каждого каталога, что позволяет как автоматически обновлять его, так и интегрировать с IDE.

Роль файла CATALOG_UPDATE

Файл CATALOG_UPDATE выполняет две основные функции:

  1. Автоматические обновления: Этот файл позволяет инструменту regenerator находить и перекомпилировать все каталоги в системе при изменении компилятора или зависимостей.
  2. Поддержка протокола LSP (Language Server Protocol): Языковой сервер VSIDL использует этот файл для определения корневого каталога и разрешения зависимостей. Это обеспечивает такие функции, как «Перейти к определению», автозавершение и проверку в реальном времени для типов, определенных в других каталогах.

Настройте каталог

Для включения автоматических обновлений и поддержки LSP для каталога VSIDL создайте файл CATALOG_UPDATE в корневом каталоге каталога. Этот файл представляет собой текстовый файл protobuf .

Поля конфигурации каталога

  • output_path (строка, необязательно): Относительный путь от корня каталога до каталога, куда следует поместить сгенерированный код промежуточного ПО.
  • dependency_catalog_paths (повторяющаяся строка): Список относительных путей к другим каталогам. LSP-сервер использует эти пути для разрешения внешних типов.
  • vsidlc_gen_args (строка, необязательно): Аргументы, передаваемые в vsidlc . LSP-сервер проверяет их, чтобы применить правильные правила проверки (например, "--apex" ).
  • prebuilts_output_path (строка, необязательно): Путь к сгенерированным предустановленным конфигурациям среды выполнения.
  • prebuilts_filegroup (строка, необязательно): Имя filegroup Soong для предварительно созданных файлов.

Пример конфигурации

# 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 ), чтобы убедиться в совместимости изменений с остальной частью системы.