0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CentOS7でclangdをビルドする

Last updated at Posted at 2020-06-07

ごめんなさい

この記事はそもそも不要でした。
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のビルドからやってみる

手順

大まかな流れは以下の通り。

  1. 必要なパッケージのインストール
  2. gccをビルドする
  3. cmakeをビルドする
  4. 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

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?