Como configurar o ambiente de desenvolvimento

Como configurar o LSP com clangd

Contexto

Editores como Emacs, Vim ou VS Code oferecem suporte a recursos como navegação e preenchimento automático de código, mensagens de erro do compilador inline e outros, usando o LSP (em inglês), o protocolo do servidor de linguagem. Um servidor de linguagem comum com suporte a LSP é o clangd, que depende da presença de compile_commands.json, um arquivo JSON com um registro dos comandos de compilação para cada arquivo em um projeto.

Como gerar compile_commands.json para o código-fonte XLA?

Use o script build_tools/lint/generate_compile_commands.py. A seguinte invocação da raiz do repositório XLA gera um arquivo compile_commands.json no lugar: bazel aquery "mnemonic(CppCompile, //xla/...)" --output=jsonproto | python3 build_tools/lint/generate_compile_commands.py

Build Cleaner

A CI do XLA no Google executa outras verificações para verificar se todas as metas listam corretamente todas as dependências nos arquivos BUILD, que não são ativadas por padrão na CI do Bazel OSS. Executar os comandos a seguir antes de enviar a solicitação de pull (PR, na sigla em inglês) à equipe do XLA vai acelerar muito o tempo necessário para mesclar a PR. Caso contrário, você precisará que um Googler faça essas correções internamente ou mais algumas rodadas de revisões de PR para corrigir com base no feedback dos Googlers.

Verificação de camadas

Ao criar com --features=layering_check, você garante que não vai incluir acidentalmente um cabeçalho por uma dependência transitiva sem listá-lo nas dependências de destino.

Remover dependências não utilizadas dos arquivos BUILD

Instale a ferramenta 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

Instale a ferramenta 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

Use bant para gerar comandos do buildozer e remover dependências não usadas:

bant dwyu //xla/core/collectives:symmetric_memory

Se você estiver com sorte, execute-os diretamente:

. <(bant dwyu //xla/core/collectives:symmetric_memory)