全体の流れ
- ソースのダウンロード
- llvmのビルドとインストール
- llvm-gccのビルド
- llvmをllvm-gccを使ってビルドしてインストール
ディレクトリ構成
- ビルド作業ルート
- /usr/local/src
- SRC_ROOT (LLVMのソースファイル)
- /usr/local/src/llvm-2.2
- OBJ_ROOT (LLVMオブジェクト ファイル作成用)
- /usr/local/src/llvm-obj
- LLVMDIR (LLVMインストールディレクトリ)
- /usr/local/llvm
- GCC_SRC_ROOT (LLVM GCCのソースファイル)
- /usr/local/src/llvm-gcc4.2-2.2.source
- GCC_OBJ_ROOT (LLVM GCCのオブジェクト ファイル作成用)
- /usr/local/src/llvm-gcc-obj
- LLVMGCCDIR (llvm-gccインストール)
- /usr/local/llvm-gcc
/usr/local でなくて一般ユーザーの $HOME の下で作業しても良い。
ソースのダウンロード
/usr/local/src にダウンロードする。ダウンロードページ http://llvm.org/releases/download.html#2.2
- llvm-2.2.tar.gz - LLVM source code (5.4M)
- llvm-gcc4.2-2.2.source.tar.gz - LLVM-GCC 4.2 Front End Source Code (49M)
llvmのビルド
# cd /usr/local/src
# tar zxf llvm-2.2.tar.gz
# mkdir $OBJ_ROOT (/usr/local/src/llvm-obj)
# cd $OBJ_ROOT
# ${SRC_ROOT}/configure --prefix=${LLVMDIR} --enable-optimized
# make -j3 (-j オプションは任意)
# make install
llvm-gccのビルド
# tar zxf llvm-gcc4.2-2.2.source.tar.gz
# mkdir $GCC_OBJ_ROOT (/usr/local/src/llvm-gcc-obj)
# cd $GCC_OBJ_ROOT
# ${GCC_SRC_ROOT}/configure --prefix=${LLVMGCCDIR} \
--enable-languages=c,c++ \
--enable-llvm=${OBJ_ROOT} \
--program-prefix=llvm-
# make -j3
# make install
llvm-gccを使ってllvmをビルド
# cd $OBJ_ROOT
# ${SRC_ROOT}/configure --prefix=${LLVMDIR} \
--enable-optimized \
--with-llvmgccdir=${LLVMGCCDIR} \
--enable-targets=native # クロスコンパイル環境なし(指定しなくても良い)
# make -j3
# make install
ノート
llvm-g++ で出来あがった実行ファイルは /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libstdc++.so.6: version `GLIBCXX_3.4.9' not found のようにエラーを吐くので LD_LIBRARY_PATH を指定するか static でビルドする。
- llvm-g++ コンパイルオプション
- -L/usr/local/llvm-gcc/lib -I/usr/local/llvm-gcc/include -lstdc++
- LD_LIBRARY_PATH を指定して実行
- LD_LIBRARY_PATH=/usr/local/llvm-gcc/lib ./foobar
- static にコンパイル
- -static オプションを付ける。
- 自分の環境だけの設定
- ~/.bashrc などで LD_LIBRARY_PATH を設定する。export LD_LIBRARY_PATH=/usr/local/llvm-gcc/lib:$LD_LIBRARY_PATH
- システムワイドな設定
- /etc/env.d に gcc-i686-pc-linux-gnu より優先するファイルを作成する。ここでは 00lvm としよう。内容は以下の通り。
00lvm
PATH="/usr/local/llvm/bin:/usr/local/llvm-gcc/bin" LDPATH="/usr/local/llvm/lib:/usr/local/llvm-gcc/lib" MANPATH="/usr/local/llvm/share/man:/usr/local/llvm-gcc/man" INFOPATH="/usr/local/llvm-gcc/info"
env-update の実行を忘れずに。env.d を使った場合、システム全体に影響するので何をやっているのかわからない人は止めておこう。
参考サイト
Getting Started with LLVM System http://llvm.org/docs/GettingStarted.html
Leopardを先取り(5) - LLVMに未来を見た http://journal.mycom.co.jp/column/osx/232/index.html
llvmとllvm-gccのコンパイルのしかた http://d.hatena.ne.jp/tueda_wolf/20080212
