Настройка среды разработки

Настройка LSP с помощью clangd

Фон

Редакторы, такие как Emacs, Vim или VS Code, поддерживают такие функции, как навигация по коду, автозавершение кода, встроенные сообщения об ошибках компилятора и другие, через LSP (Language Server Protocol). Распространенным языковым сервером с поддержкой LSP является clangd , который использует файл compile_commands.json , содержащий список команд компиляции для каждого файла в проекте.

Как сгенерировать compile_commands.json для исходного кода XLA?

Используйте скрипт build_tools/lint/generate_compile_commands.py . Следующий вызов из корневой директории репозитория XLA сгенерирует файл compile_commands.json на месте: bazel aquery "mnemonic(CppCompile, //xla/...)" --output=jsonproto | python3 build_tools/lint/generate_compile_commands.py

Сборка очистителя

Встроенная в Google система XLA CI выполняет дополнительные проверки, чтобы убедиться, что все цели корректно перечисляют все зависимости в файлах BUILD, которые по умолчанию не включены в OSS Bazel CI. Выполнение следующих команд перед отправкой запроса на слияние (PR) команде XLA значительно ускорит процесс слияния, поскольку в противном случае вам потребуется помощь сотрудника Google для внесения этих исправлений внутри компании или несколько дополнительных раундов проверки запросов на слияние с учетом отзывов сотрудников Google.

Проверка многослойности

Сборка с --features=layering_check гарантирует, что вы случайно не включите заголовочный файл через транзитивную зависимость, не указав его в списке зависимостей целевой системы.

Удалите неиспользуемые зависимости из файлов сборки.

Установите инструмент 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

Установите инструмент 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

Используйте bant для генерации команд Buildozer для удаления неиспользуемых зависимостей:

bant dwyu //xla/core/collectives:symmetric_memory

Если вам повезёт, вы сможете выполнить их напрямую:

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