Configurer l'environnement de développement

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)