clangd로 LSP 설정
배경
Emacs, Vim, VS Code와 같은 편집기는 언어 서버 프로토콜인 LSP를 통해 코드 탐색, 코드 완성, 인라인 컴파일러 오류 메시지 등의 기능을 지원합니다. LSP를 지원하는 일반적인 언어 서버는 clangd입니다. 이 서버는 프로젝트의 각 파일에 대한 컴파일 명령 기록이 있는 JSON 파일인 compile_commands.json의 존재에 의존합니다.
XLA 소스 코드의 compile_commands.json를 생성하려면 어떻게 해야 하나요?
build_tools/lint/generate_compile_commands.py 스크립트를 사용합니다. XLA 저장소 루트에서 다음 호출은 bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py 위치에 compile_commands.json 파일을 생성합니다.
빌드 클리너
Google 내부의 XLA CI는 모든 타겟이 BUILD 파일에 모든 종속 항목을 올바르게 나열하는지 확인하기 위해 추가 검사를 실행합니다. 이 검사는 OSS Bazel CI에서는 기본적으로 사용 설정되지 않습니다. XLA팀에 PR을 보내기 전에 다음 명령어를 실행하면 PR을 병합하는 데 걸리는 시간이 크게 단축됩니다. 그렇지 않으면 Google 직원이 내부적으로 이 문제를 수정하거나 Google 직원의 의견을 기반으로 문제를 수정하기 위해 몇 차례 더 PR 검토를 거쳐야 합니다.
레이어링 확인
--features=layering_check로 빌드하면 타겟 종속 항목에 나열하지 않고 전이 종속 항목을 통해 실수로 헤더를 포함하지 않게 됩니다.
BUILD 파일에서 사용하지 않는 종속 항목 삭제
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)