Raspberry PI OS (64-bit) で最新のClangを使う
Raspberry PI OS (64-bit) で最新のClangを使う
すでにいろいろなところで同じ内容のことが書かれていると思うが、数年ぶりに自分で実施したのでここに記載する。
公式のclang+llvmを使う
ここではArch64のClang+llvmのバイナリをこちらからダウンロードする。これを記載時の最新版は15.0.1なので、clang+llvm-15.0.1-aarch64-linux-gnu.tar.xz
をダウンロードした。
バイナリのダウンロード
以下のような方法でダンロードしたファイルを展開する。
$ mkdir workplace && cd workplace $ tar -Jxvf clang+llvm-15.0.1-aarch64-linux-gnu.tar.xz
バイナリの移動
展開したバイナリを好きな場所に移動する。
$ sudo mv clang+llvm-15.0.1-aarch64-linux-gnu /usr/local/clang-15.0.1-official
環境変数の設定
このままではコンパイラを実行できないので、シェルの環境変数の$PATHと$LD_LIBRARY_PATHにパスをセットする。
以下のコマンドまたはエディタでパスを追加する。ただ記載を間違えたときは、間違っていた箇所を修正してもう一度sourceコマンドを実行するのではなく、いったんログアウトしてログインし直す。
$ cd ~ $ echo 'export PATH=/usr/local/clang-15.0.1-official/bin:$PATH' >> .bashrc $ echo 'export LD_LIBRARY_PATH=/usr/local/clang-15.0.1-official/lib:$LD_LIBRARY_PATH' >> .bashrc $ source ~/.bashrc
パスの確認
最後にパスが通っているか確認する。
$ which clang
/usr/local/clang-15.0.1-official/bin/clang
自分でclangをビルドする
前述の公式からダウンロードしたバイナリをそのまま使ってもよいが、やはり自分でビルドしないと気持ちがわるいので、次に説明する方法でビルドすることにした。
ninjaのビルド
clangをビルドにするにはninjaが必要なので、はじめにninjaが使えるようにする。ビルドの方法はソースファイルのREADME.md にすべて書いてあるが、以下にcmakeを使う方法の抜粋を記載する。
ソース
$ cd ~/workplace
$ git clone https://github.com/ninja-build/ninja.git
Cmake&ビルド
$ cd ninja $ cmake -Bbuild-cmake $ cmake --build build-cmake $ make
テスト
ビルドした結果を以下の方法でチェックすることができる。
$ ./build-cmake/ninja_test
インストール
いつも通りインストールする。デフォルトのインストール先は/usr/local/binでした。
$ sudo make install $ sudo ldconfig
clangのビルド 1回目
ソース
$ git clone https://github.com/llvm/llvm-project.git $ cd llvm-project $ git tag -l
Cmake
今回のビルドの条件は以下のオプションの通りで、clangだけでなく、libcxx、libcxxabi、lldも同時にビルドする。インストール先は/usr/local/clang-15.0.1-1st
である。
$ CC=/usr/local/clang-15.0.1-official/bin/clang CXX=/usr/local/clang-15.0.1-official/bin/clang++ cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;lld" -DCMAKE_INSTALL_PREFIX=/usr/local/clang-15.0.1-1st -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD=AArch64 ../llvm
ビルド&インストール
$ ninja -j$(nproc) $ sudo ninja install $ sudo ldconfig
環境変数の設定
シェルの環境変数をいまビルドしたclangをインストールしたパスに変更し、環境変数を反映する
PATH=/usr/local/clang-15.0.1-1st/bin:$PATH LD_LIBRARY_PATH=/usr/local/clang-15.0.1-1st/lib:$LD_LIBRARY_PATH
clangのビルド2回目
Cmake
先ほどビルドしたファイルを削除してもう一度ビルドし直す。ビルドの条件はインストール先以外は同じである。
$ cd ~/workplace/llvm-project $ rm -rf build #前回の削除 $ mkdir build && cd build $ CC=/usr/local/clang-15.0.1-1st/bin/clang CXX=/usr/local/clang-15.0.1-1st/bin/clang++ cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;lld" -DCMAKE_INSTALL_PREFIX=/usr/local/clang-15.0.1 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD=AArch64 ../llvm
ビルド&インストール
$ ninja -j$(nproc) $ sudo ninja install $ sudo ldconfig
環境変数の設定
シェルの環境変数をいまビルドしたclangのパスに変更する
PATH=/usr/local/clang-15.0.1/bin:$PATH LD_LIBRARY_PATH=/usr/local/clang-15.0.1/lib:$LD_LIBRARY_PATH