ごめんなさい
この記事はそもそも不要でした。
CentOSでclangdを使う場合配布バイナリを入れるだけでOKです。
2021/02/07現在の最新版はこちら。
https://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.1/clang+llvm-11.0.1-x86_64-linux-sles12.4.tar.xz
(SUSE向けのバイナリダウンロードが正解ってのは気づきませんでした)
ここから下の記載は不要だけども、誰かの役に立つかもなので一応取っておく。
いや、やっぱり11.0.0以降はCentOS7だとglibのバージョンが合わないので、この手順は必要なようだ。
10.0.0以前なら多分以下のダウンロードのみで動くが、clangdは進化が早いのでなるべく最新をビルドしたほうがいい。
https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang+llvm-10.0.0-x86_64-linux-sles11.3.tar.xz
やりたいこと
- clangdをCentOS7で使いたい
- でもCentOS7向けのバイナリ配布が無いのでビルドが必要
こちらでバイナリ配布があるが、CentOS7だとほんの僅かにglibcが古くてダメ
https://github.com/clangd/clangd/releases/download/10.0.0/clangd-linux-10.0.0.zip - CentOS7のgcc, cmakeのバージョンがかなり古い
- 個人的な理由からyumのリポジトリ追加は避けたい(SCL使えばもっと楽なはず)
- よって、gcc, cmakeのビルドからやってみる
手順
大まかな流れは以下の通り。
- 必要なパッケージのインストール
- gccをビルドする
- cmakeをビルドする
- clangdをビルドする
環境
こんな環境でやりました。
- CentOS7
まっさらな環境から試したかったのでdockerでクリーンな環境を作った。
dockerのホストはubuntu20.04 - メモリ 8GB
最低限以下のレベルだと思う。最低16GBは欲しい。
何もせずにやるとメモリ枯渇でリンクが死ぬので、今回の手順ではホストのswapを増やして頑張った。 - SSD
clangdだけでも30GB位空き容量が欲しい。
clang-tidyとかclang-formatとかclangそのものまでビルドすると確か50GBとかもっと使う。
Debugビルドにしてたのが原因ぽい。Releaseなら10GBくらいでOK。
必要なパッケージのインストール
wgetは普通にブラウザダウンロードするなら不要。openssh-develはcmakeが必要というので入れる。
yum install gcc gcc-c++ make cmake bzip2 wget openssl-devel
gccをビルドする
gccのバージョンは適当。5.1.0以上なら何でもいいはず。
makeの-jオプションは環境に合わせて適当に調整する。cpuのコア数-1位がいいと思う。何でもよければ数字を消すだけでもOK
wget http://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-7.3.0/gcc-7.3.0.tar.gz
tar xf gcc-7.3.0.tar.gz
cd gcc-7.3.0
./contrib/download_prerequisites
./configure --prefix=/opt/gcc --disable-multilib --enable-languages=c,c++
make -j 3
make install
cmakeをビルドする
cmakeはビルド済バイナリの配布があったと思うので別に無理してビルドする必要は無いが、ついでなのでビルドしておく。
こっちもバージョンは適当(今の最新かな?)。3.4.3以上である必要がある。
wget https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3.17.3.tar.gz
tar xf cmake-3.17.3.tar.gz
cd cmake-3.17.3
./bootstrap --prefix=/opt/cmake
make -j 3
make install
clangdをビルドする
clangdは凄い勢いで開発進んでいるので、新しい方が機能多くていいと思う。今回は最新安定版の10.0.0をビルドする。
メモリ容量が微妙な人は後述の手順でswapを増やしてから行った方がいいと思う。
あと、このビルドは結構時間がかかる。2h以上は見ておいた方がいい。
PATH=/opt/gcc/bin/:/opt/cmake/bin/:$PATH
wget https://github.com/llvm/llvm-project/archive/llvmorg-12.0.0.tar.gz
tar xf llvmorg-12.0.0.tar.gz
cd llvm-project-llvmorg-12.0.0
mkdir build
cd build
CC=/opt/gcc/bin/gcc CXX=/opt/gcc/bin/g++ cmake ../llvm -DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,/opt/gcc/lib64 -L/opt/gcc/lib64" -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/clang
make -j 3
自分の環境だとメモリが8GBしか無く、後半のリンクでメモリが枯渇するのでswapを増やす。
以下の手順はホストPC(ubuntu20.04)で行った。他の環境だと手順が違うかもしれない。「仮想メモリ 増やし方」とかで適当にググって欲しい。
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
clangdをインストールする
/opt/clang/bin/にインストールされるので後は適当にパスを通しておしまい。
sudo make install
参考