Mises à jour automatiques du catalogue et intégration des LSP

La plate-forme SDV (Software Defined Vehicle) contient de nombreux catalogues VSIDL dans la codebase. Le fichier CATALOG_UPDATE fournit une configuration centralisée pour chaque catalogue, ce qui permet à la fois les mises à jour automatisées et l'intégration de l'IDE.

Rôle du fichier CATALOG_UPDATE

Le fichier CATALOG_UPDATE a deux objectifs principaux :

  1. Mises à jour automatisées : le fichier permet à l'outil regenerator de rechercher et de recompiler tous les catalogues du système lorsque le compilateur ou les dépendances changent.
  2. Compatibilité avec le protocole LSP (Language Server Protocol) : le serveur de langage VSIDL utilise ce fichier pour découvrir la racine du catalogue et résoudre les dépendances. Cela permet d'activer des fonctionnalités telles que "Accéder à la définition", la saisie semi-automatique et la validation en temps réel pour les types définis dans d'autres catalogues.

Configurer un catalogue

Pour activer les mises à jour automatiques et la compatibilité LSP pour un catalogue VSIDL, créez un fichier CATALOG_UPDATE dans le répertoire racine du catalogue. Il s'agit d'un fichier protobuf textuel.

Champs de configuration du catalogue

  • output_path (chaîne, facultatif) : chemin d'accès relatif de la racine du catalogue au répertoire dans lequel le code du middleware généré doit être placé.
  • dependency_catalog_paths (chaîne répétée) : liste de chemins relatifs à d'autres répertoires de catalogue. Le serveur LSP utilise ces chemins pour résoudre les types externes.
  • vsidlc_gen_args (chaîne, facultatif) : arguments transmis à vsidlc. Le serveur LSP les inspecte pour appliquer les règles de validation appropriées (par exemple, "--apex").
  • prebuilts_output_path (chaîne, facultatif) : chemin d'accès aux fichiers précompilés de configuration d'exécution générés.
  • prebuilts_filegroup (chaîne, facultatif) : nom Soong filegroup pour les précompilations.

Exemple de configuration

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

Pourquoi les mises à jour automatiques sont-elles nécessaires ?

La maintenance manuelle du code généré pour chaque catalogue est problématique pour plusieurs raisons :

  1. Mises à jour du compilateur : lorsque le compilateur est mis à jour avec des corrections de bugs ou de nouvelles fonctionnalités, l'ensemble du code et des fichiers générés qui ne sont pas couverts par un genrule dans un fichier Android.bp doit être actualisé pour maintenir la cohérence.
  2. Gestion des dépendances : les modifications apportées à un catalogue de base nécessitent souvent de régénérer les catalogues en aval.
  3. Précision : les mises à jour automatisées réduisent le risque d'erreur humaine lors de la spécification des chemins d'accès et des dépendances.

Exécuter l'outil de régénération

L'outil regenerator parcourt l'arborescence du répertoire à partir de la racine SDV et recherche les fichiers nommés exactement CATALOG_UPDATE.

Pour mettre à jour tous les catalogues configurés :

  1. Créez l'outil :

    m regenerator
    
  2. Exécutez l'outil :

    regenerator
    

    Vous pouvez également l'exécuter de manière récursive pour un répertoire spécifique : console regenerator --root /path/to/directory

L'outil met à jour les fichiers générés et effectue une compilation complète (m droid) pour vérifier que les modifications sont compatibles avec le reste du système.