こんにちは|こんばんは。カエルのアイコンで活動しております @kyamaz です。
はじめに
macOSでは、xcode-select --install
すれば Xcode とともにコンパイラであるclang
コマンドがインストールされます。Xcode はデフォルトではコマンドは/Library/Developer/CommandLineTools/usr/bin
フォルダに置かれます。
また、別の手段としては、homebrewを使ってbrew install llvm
でインストールして/opt/homebrew/opt/llvm/bin
にPATHを通して使います。
本稿では、LLVMをソースコードからビルドして/opt/local/bin
にインストールする手順を書きます。参考にしたQiitaの2つのエントリのリンクを次に挙げしておきます。環境が違っておりますが、本稿ではほぼ同様の手順を紹介します。
本稿の環境
本稿のために使用した環境は以下となります。
- macOS: Sonoma 14.2.1 (chip: Apple M1)
- gcc/g++: Apple clang version 15.0.0 (clang-1500.1.0.2.5)
- Homebrew 4.2.9
- Ninja 1.11.1(homebrewにてインストール)
- CMake 3.28.2(homebrewにてインストール)
作業ディレクトリは作業ユーザーのホームディレクトリの下の~/work
で作業します。各環境に合わせて読み替えてください。
ビルドの手順
本家LLVMのサイトのGetting Started with the LLVM System ページの Stand-alone Buildsの項に従って進めます。
LLVMのソースコードを入手する
作業ディレクトリでgit clone
を実行してソースコードを入手します。
$ cd ~/work
$ git clone https://github.com/llvm/llvm-project.git
$ cd llvm-project
LLVMをビルドする
ビルド設定を行う
cmakeでビルドのための設定を行います。
-DLLVM_ENABLE_PROJECTS
にclangとlldを指定して同時にビルドできるようにしましょう。
$ cmake -G Ninja -S llvm -B build \
-DLLVM_INSTALL_UTILS=ON -DCMAKE_INSTALL_PREFIX=/opt/local \
-DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS='clang;lld'
cmakeのオプションの説明
-S : ソースディレクトリのパス。
-B : ビルド生成物の格納パス。指定したディレクトリは自動で生成されます。(本稿ではbuild
を指定。)
-G : ビルド用のコード生成ツールを指定します。(本稿ではNinja
を指定。)
-D : キャッシュ・エントリーの情報(CMakeCache.txt)の定数定義を追加又は更新します。
-DCMAKE_INSTALL_PREFIX=directory : ツール及びライブラリのインストール先をフルパスで指定します。(本稿では/opt/local
を指定。)
-DCMAKE_BUILD_TYPE=type : ビルドの種類を指定します。(本稿ではRelease
を指定。)
【公開後の追記】
- lldb,libcを追加する場合は、次のように
-DLLVM_ENABLE_RUNTIMES
や-DLLDB_USE_SYSTEM_DEBUGSERVER
を指定する必要があります。
cmake -G Ninja -S llvm -B build \
-DLLVM_INSTALL_UTILS=ON -DCMAKE_INSTALL_PREFIX=/opt/local \
-DLLVM_ENABLE_PROJECTS="clang;lld;lldb;libc" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_RUNTIMES="libc;libunwind;libcxxabi;libcxx" \
-DLLDB_USE_SYSTEM_DEBUGSERVER=ON
- openmpを指定してビルドしようとすると、macOSの著者環境では、Cross-compiling libomp fails with missing symbol "___divdc3"の問題が発生してビルドできませんでした。
ビルド&インストールする
cmakeコマンドでビルドしたのち、ninjaコマンドでインストールします。それぞれビルド生成物の格納パス(本稿では"build")を指定して実行します。
$ cmake --build build -j$(nproc)
:
(ビルドには多少時間がかかります)
:
$ ninja -C build install
コンパイル中に警告がでることもありますが、ほとんど無視してもよい(ignoring)警告だと思います。ただし、ビルドに問題がないかは都度判断が必要です。
コマンドを実行する
正しくインストールされていればコマンドが正常に実行されます。本稿ではいくつかのコマンドのバージョン表示を確認します。
$ /opt/local/bin/clang --version
clang version 19.0.0git (https://github.com/llvm/llvm-project.git XXX...)
Target: arm64-apple-darwin23.2.0
Thread model: posix
InstalledDir: /opt/local/bin
$ /opt/local/bin/ld64.lld --version
LLD 19.0.0
$ /opt/local/bin/llc --version
LLVM (http://llvm.org/):
LLVM version 19.0.0git
Optimized build.
Default target: arm64-apple-darwin23.2.0
Host CPU: apple-m1
:
:
おわりに
本稿では、/opt/local/bin
にソースコードから最新の LLVM clang-19 をインストールしました。「はじめに」に記載したとおり、macOSでは次のフォルダにもclangコマンドが存在します。
- /Library/Developer/CommandLineTools/usr/bin
- /opt/homebrew/opt/llvm/bin
インストールしたものと本稿でビルドしたものが混在することになりますが、PATHなどの環境変数を指定して、混乱しないように十分注意しましょう。
(●)(●) Happy Hacking!
/"" __""\