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 de 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 com o ambiente de desenvolvimento integrado.

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 recompile todos os catálogos no sistema quando o compilador ou as dependências mudarem.
  2. Suporte ao protocolo de servidor de linguagem (LSP): o servidor de linguagem VSIDL usa esse arquivo para descobrir a raiz do catálogo e resolver dependências. Isso ativa recursos como "Ir para definição", preenchimento automático e validação em tempo real para tipos definidos em outros catálogos.

Configurar um catálogo

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

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 arquivos para aplicar as regras de validação corretas (por exemplo, "--apex").
  • prebuilts_output_path (string, opcional): caminho para as pré-compilações de configuração de ambiente de execução geradas.
  • prebuilts_filegroup (string, opcional): o nome do Soong filegroup para pré-compilados.

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

Manter manualmente o código gerado para cada catálogo é problemático 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 um 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 base geralmente exigem que os catálogos downstream sejam gerados novamente.
  3. Precisão: as atualizações automatizadas reduzem o risco de erros humanos ao especificar caminhos e dependências.

Executar a ferramenta de regeneração

A ferramenta regenerator percorre a árvore de diretórios a partir da raiz do SDV e procura arquivos chamados exatamente CATALOG_UPDATE.

Para atualizar todos os catálogos configurados:

  1. Crie a ferramenta:

    m regenerator
    
  2. Execute a ferramenta:

    regenerator
    

    Se quiser, execute-o 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.