公式ドキュメント:
cmake
sudo apt install cmake ninja-build
ghq get llvm/llvm-project
cd src/github.com/llvm/llvm-project
mkdir build
cd build
cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=On -DLLVM_BUILD_LLVM_DYLIB=On -G Ninja --install-prefix /opt/llvm-14 ../llvm
-G "Unix Makefiles"
だとrace conditionか何かでうまくリンクできなかったのでninjaに変えた。
LLVM_BUILD_LLVM_DYLIB
を使っているのは、libclangのsoはデフォルトで生成されるもののLLVMのsoは生成されず、両方ないとうまいことClangを使うプログラムがリンクできなかったため。その後、 https://stackoverflow.com/questions/51474188/using-shared-object-so-by-command-opt-in-llvm も見て -DBUILD_SHARED_LIBS=On
も追加。
ninja
ninja
-jなしで並列ビルドされる。ビルドが終盤になるとメモリの使用量が増えてきて64GB RAMと2GBのスワップを使い切りマシンがクラッシュしたりldがSIGKILLされたりするので、htopでメモリ使用量を監視し、適当な場所でC-cし、以下のように並列度を下げる。
ninja -j 3
なお、↑でも上手くいかない場合は ninja -l 5
のようにやるとload averageを見て負荷を抑えることができる。
ninja install
sudo ninja install
リンク
g++ $(/opt/llvm-14/bin/llvm-config --cxxflags) compile.cc -c
g++ compile.o $(/opt/llvm-14/bin/llvm-config --ldflags --libs) /opt/llvm-14/lib/libclang-cpp.so
そもそもカスタムプレフィクスは諦めた方がよさそう