Aggiornamenti automatici del catalogo e integrazione del fornitore di servizi linguistici

La piattaforma Software Defined Vehicle (SDV) contiene numerosi cataloghi VSIDL nel codebase. Il file CATALOG_UPDATE fornisce una configurazione centralizzata per ogni catalogo, consentendo sia gli aggiornamenti automatici sia l'integrazione dell'IDE.

Ruolo del file CATALOG_UPDATE

Il file CATALOG_UPDATE ha due scopi principali:

  1. Aggiornamenti automatici: il file consente allo strumento regenerator di trovare e ricompilare tutti i cataloghi nel sistema quando il compilatore o le dipendenze cambiano.
  2. Supporto del protocollo LSP (Language Server Protocol): il server di linguaggio VSIDL utilizza questo file per scoprire la radice del catalogo e risolvere le dipendenze. Ciò consente funzionalità come "Vai alla definizione", il completamento automatico e la convalida in tempo reale per i tipi definiti in altri cataloghi.

Configurare un catalogo

Per attivare gli aggiornamenti automatici e il supporto LSP per un catalogo VSIDL, crea un file CATALOG_UPDATE nella directory principale del catalogo. Questo file è un file protobuf di testo.

Campi di configurazione del catalogo

  • output_path (stringa, facoltativo): il percorso relativo dalla radice del catalogo alla directory in cui deve essere inserito il codice middleware generato.
  • dependency_catalog_paths (stringa ripetuta): un elenco di percorsi relativi ad altre directory di cataloghi. Il server LSP utilizza questi percorsi per risolvere i tipi esterni.
  • vsidlc_gen_args (stringa, facoltativo): argomenti passati a vsidlc. Il server LSP li esamina per applicare le regole di convalida corrette (ad esempio, "--apex").
  • prebuilts_output_path (stringa, facoltativo): percorso per i prebuilt di configurazione di runtime generati.
  • prebuilts_filegroup (stringa, facoltativo): il nome del filegroup Soong per i prebuilt.

Configurazione di esempio

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

Perché sono necessari gli aggiornamenti automatici

La manutenzione manuale del codice generato per ogni catalogo è problematica per diversi motivi:

  1. Aggiornamenti del compilatore: quando il compilatore viene aggiornato con correzioni di bug o nuove funzionalità, tutti i file e il codice generati non coperti da una genrule in un file Android.bp devono essere aggiornati per mantenere la coerenza.
  2. Gestione delle dipendenze: le modifiche in un catalogo di base spesso richiedono la rigenerazione dei cataloghi downstream.
  3. Accuratezza: gli aggiornamenti automatici riducono il rischio di errori umani durante la specifica di percorsi e dipendenze.

Eseguire lo strumento regenerator

Lo strumento regenerator percorre l'albero delle directory a partire dalla radice SDV e cerca i file denominati esattamente CATALOG_UPDATE.

Per aggiornare tutti i cataloghi configurati:

  1. Crea lo strumento:

    m regenerator
    
  2. Esegui lo strumento:

    regenerator
    

    Facoltativamente, eseguilo in modo ricorsivo per una directory specifica: console regenerator --root /path/to/directory

Lo strumento aggiorna i file generati ed esegue una build completa (m droid) per verificare che le modifiche siano compatibili con il resto del sistema.