Actualizaciones automáticas del catálogo e integración del LSP

La plataforma de vehículos definidos por software (SDV) contiene numerosos catálogos de VSIDL en toda la base de código. El archivo CATALOG_UPDATE proporciona una configuración centralizada para cada catálogo, lo que habilita las actualizaciones automáticas y la integración del IDE.

Función del archivo CATALOG_UPDATE

El archivo CATALOG_UPDATE tiene dos propósitos principales:

  1. Actualizaciones automáticas: El archivo permite que la herramienta de regenerator busque y vuelva a compilar todos los catálogos del sistema cuando cambian el compilador o las dependencias.
  2. Compatibilidad con el protocolo de servidor de lenguaje (LSP): El servidor de lenguaje de VSIDL usa este archivo para descubrir la raíz del catálogo y resolver las dependencias. Esto habilita funciones como "Ir a la definición", la finalización automática y la validación en tiempo real para los tipos definidos en otros catálogos.

Configura un catálogo

Para habilitar las actualizaciones automáticas y la compatibilidad con LSP para un catálogo de VSIDL, crea un archivo CATALOG_UPDATE en el directorio raíz del catálogo. Este archivo es un archivo protobuf de texto.

Campos de configuración del catálogo

  • output_path (cadena, opcional): Es la ruta de acceso relativa desde la raíz del catálogo hasta el directorio en el que se debe colocar el código de middleware generado.
  • dependency_catalog_paths (cadena repetida): Es una lista de rutas de acceso relativas a otros directorios del catálogo. El servidor LSP usa estas rutas de acceso para resolver los tipos externos.
  • vsidlc_gen_args (cadena, opcional): Son los argumentos que se pasan a vsidlc. El servidor de LSP los inspecciona para aplicar las reglas de validación correctas (por ejemplo, "--apex").
  • prebuilts_output_path (cadena, opcional): Es la ruta de acceso para los archivos compilados previamente de configuración del entorno de ejecución generados.
  • prebuilts_filegroup (cadena, opcional): Es el nombre de Soong filegroup para los módulos compilados previamente.

Configuración de ejemplo

# 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 qué se necesitan las actualizaciones automáticas

Mantener de forma manual el código generado para cada catálogo es problemático por varios motivos:

  1. Actualizaciones del compilador: Cuando el compilador se actualiza con correcciones de errores o funciones nuevas, todos los archivos y el código generados que no estén cubiertos por un genrule en un archivo Android.bp deben actualizarse para mantener la coherencia.
  2. Administración de dependencias: Los cambios en un catálogo base suelen requerir que se vuelvan a generar los catálogos descendentes.
  3. Precisión: Las actualizaciones automatizadas reducen el riesgo de errores humanos cuando se especifican rutas de acceso y dependencias.

Ejecuta la herramienta de regeneración

La herramienta regenerator recorre el árbol de directorios a partir de la raíz de SDV y busca archivos que se llamen exactamente CATALOG_UPDATE.

Para actualizar todos los catálogos configurados, haz lo siguiente:

  1. Compila la herramienta:

    m regenerator
    
  2. Ejecuta la herramienta:

    regenerator
    

    De manera opcional, ejecútalo de forma recurrente para un directorio específico: console regenerator --root /path/to/directory

La herramienta actualiza los archivos generados y realiza una compilación completa (m droid) para verificar que los cambios sean compatibles con el resto del sistema.