開発環境の設定

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 リポジトリのルートから次の呼び出しを行うと、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 ではデフォルトで有効になっていません。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)