動機
MicroSoftが提唱したLanguageServerProtocolがテキストエディターの補完ツールやLintingツールとして普及して久しいですね。もはやこうしたツールなしでは生きていけない体にされている人も多いと思います。これを使ってフォーマットをする方も多いでしょう。ある変数の定義にジャンプするのもコマンド一発でいけます。
しかし困ったことに、CUDA C/C++で公式のLanguageServerが提供されていないのです。そこで今回はclangdを使ってcudaでもLanguageServerを使う方法を紹介していきたいと思います。
動作環境:ubuntu18.04
clangd: version 8
CUDA : 10.0
clangdの設定
clangdの設定ファイルはcompile_commands.json
、もしくは、compile_flags.txt
です[1]。compile_commands.json
は一つ一つのファイルに対して細かくコマンドを指定できるんですが今回は全部のファイルで一括のオプションを指定するcompile_flags.txt
を使います。
compile_flags.txt
を以下のようにします。
c++
-x
cuda
--std=c++14
これをプロジェクトのルートに配置します。
すると、.cppを開いても.hppを開いても、.cuを開いてもLanguageServerの恩恵を受けられるようになります。
実例
NeoVim+LanguageClient-neovim+deoplete.nvim+neosnippetの場合
設定については、人によって大きく異なると思われるので、LanguageClient-neovimのwikiを参照。
cudaの関数の補完ができている様子。そして、__global__
等が入っていても指摘してこないことから、しっかりとCUDAとして認識していることがわかる。
ヘッダファイルでもしっかりLintingが働き、定義元へのジャンプもできます。
VSCodeでも同様のことがvscode-clangdを使うとできる。
以上、CUDAでもVisualStudio等の重量級IDEを使わずとも補完できるようにする方法でした。
参考資料
[1] Getting started with clangd — Extra Clang Tools 11 documentation https://clang.llvm.org/extra/clangd/Installation.html