Atualizações automáticas do catálogo e integração do LSP

A plataforma de veículo definido por software (SDV, na sigla em inglês) contém vários catálogos VSIDL na base de código. O arquivo CATALOG_UPDATE fornece uma configuração centralizada para cada catálogo, permitindo atualizações automatizadas e integração de IDE.

Função do arquivo CATALOG_UPDATE

O arquivo CATALOG_UPDATE tem duas finalidades principais:

  1. Atualizações automatizadas:o arquivo permite que a ferramenta regenerator encontre e recompilasse todos os catálogos no sistema quando o compilador ou as dependências mudam.
  2. Suporte ao protocolo do servidor de linguagem (LSP, na sigla em inglês):o servidor de linguagem VSIDL usa esse arquivo para descobrir a raiz do catálogo e resolver dependências. Isso permite recursos como "Acessar definição", preenchimento automático e validação em tempo real para tipos definidos em outros catálogos.

Configurar um catálogo

Para ativar atualizações automáticas e suporte a LSP para um catálogo VSIDL, crie um arquivo CATALOG_UPDATE no diretório raiz do catálogo. Esse arquivo é um protobuf de texto arquivo.

Campos de configuração do catálogo

  • output_path (string, opcional): o caminho relativo da raiz do catálogo para o diretório em que o código de middleware gerado precisa ser colocado.
  • dependency_catalog_paths (string repetida): uma lista de caminhos relativos para outros diretórios de catálogo. O servidor LSP usa esses caminhos para resolver tipos externos.
  • vsidlc_gen_args (string, opcional): argumentos transmitidos para vsidlc. O servidor LSP inspeciona esses argumentos para aplicar as regras de validação corretas (por exemplo, "--apex").
  • prebuilts_output_path (string, opcional): caminho para pré-builds de configuração de ambiente de execução gerados.
  • prebuilts_filegroup (string, opcional): o nome filegroup do Soong para pré-builds.

Exemplo de configuração

# 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"

Por que as atualizações automáticas são necessárias

A manutenção manual do código gerado para cada catálogo é problemática por vários motivos:

  1. Atualizações do compilador:quando o compilador é atualizado com correções de bugs ou novos recursos, todos os códigos e arquivos gerados que não estão cobertos por uma genrule em um arquivo Android.bp precisam ser atualizados para manter a consistência.
  2. Gerenciamento de dependências:as mudanças em um catálogo de base geralmente exigem que os catálogos downstream sejam regenerados.
  3. Precisão:as atualizações automatizadas reduzem o risco de erro humano ao especificar caminhos e dependências.

Executar a ferramenta regenerator

A ferramenta regenerator percorre a árvore de diretórios começando pela raiz da SDV e procura arquivos nomeados exatamente CATALOG_UPDATE.

Para atualizar todos os catálogos configurados:

  1. Crie a ferramenta:

    m regenerator
    
  2. Execute a ferramenta:

    regenerator
    

    Opcionalmente, execute-a de forma recursiva para um diretório específico: console regenerator --root /path/to/directory

A ferramenta atualiza os arquivos gerados e realiza um build completo (m droid) para verificar se as mudanças são compatíveis com o restante do sistema.