Configurer LSP avec clangd
Arrière-plan
Les éditeurs tels qu'Emacs, Vim ou VS Code sont compatibles avec des fonctionnalités telles que la navigation dans le code, la saisie automatique du code, les messages d'erreur du compilateur en ligne, etc., grâce au LSP (Language Server Protocol). clangd est un serveur de langage courant compatible avec LSP. Il s'appuie sur la présence de compile_commands.json, un fichier JSON contenant un enregistrement des commandes de compilation pour chaque fichier d'un projet.
Comment générer compile_commands.json pour le code source XLA ?
Utilisez le script build_tools/lint/generate_compile_commands.py. L'invocation suivante à partir de la racine du dépôt XLA génère un fichier compile_commands.json sur place : bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py
Nettoyant de compilation
L'intégration continue XLA au sein de Google exécute des vérifications supplémentaires pour s'assurer que toutes les cibles listent correctement toutes les dépendances dans les fichiers BUILD, qui ne sont pas activées par défaut dans l'intégration continue Bazel OSS. L'exécution des commandes suivantes avant d'envoyer la demande d'extraction à l'équipe XLA accélérera considérablement le temps nécessaire à la fusion de la demande d'extraction. Sinon, vous aurez besoin d'un Googler pour effectuer ces corrections en interne, ou de quelques cycles supplémentaires d'examen de la demande d'extraction pour les corriger en fonction des commentaires des Googlers.
Vérification de la superposition
La compilation avec --features=layering_check vous permet de vous assurer de ne pas inclure accidentellement un en-tête via une dépendance transitive sans le lister dans les dépendances de votre cible.
Supprimer les dépendances inutilisées des fichiers BUILD
Installez l'outil Buildozer :
sudo curl -fsSL -o /usr/bin/buildozer https://github.com/bazelbuild/buildtools/releases/download/6.0.0/buildozer-linux-amd64
sudo chmod 755 /usr/bin/buildozer
Installez l'outil Bant :
# To some writable directory that does not require root access
bazel build -c opt //bant && install -D --strip bazel-bin/bant/bant ~/bin/bant
# For a system directory that requires root-access
sudo install -D --strip bazel-bin/bant/bant /usr/local/bin/bant
Utilisez bant pour générer des commandes buildozer permettant de supprimer les dépendances inutilisées :
bant dwyu //xla/core/collectives:symmetric_memory
Si vous vous sentez chanceux, vous pouvez les exécuter directement :
. <(bant dwyu //xla/core/collectives:symmetric_memory)