2014年9月17日水曜日

llvm3.5が出てたのでMBAにllvm/clang環境再構築(何度目

LLVM 3.5リリース

参照:http://lists.cs.uiuc.edu/pipermail/llvm-announce/2014-September/000055.html
い ま さ ら 感。2014.9.4くらいにリリースされてた。

LLVMプロジェクトの各ホームページを見るといくつか更新があるようだ。libc++とlibc++abiにも更新が!
前回(3月かよ)はミスや勘違いいろいろあったし、そもそもライブラリのリンクを十分に理解してなかったようなのでもう一度やり直す。

libc++abiがCMake対応

参照:http://libcxxabi.llvm.org/
LLVMのビルドツリーにチェックアウトすると、LLVMのビルドで一緒にビルドされるようになってる。素敵。

libc++もツリー内ビルドの記述がわかりやすく

参照:http://libcxx.llvm.org/
trunkからビルドされたlibc++のリンクのさせ方とかもわかりやすくなった。

MBAにllvm/clang環境再構築

せっかくなのでチェックアウトから

libcxxabiのチェックアウト場所を変えたので、すべてチェックアウトする。もちろん面倒なので実際にはしていない。 大事なのはディレクトリ"llvm"以下の構造。ディレクトリ"~/Projects"に"llvm"をチェックアウトするのは趣味。

cd ~/Projects
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi
svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra

更新するときは

こんな感じ。主に自分の備忘録。

cd ~/Projects
svn update llvm
cd llvm
svn update projects/{compiler-rt,libcxxabi,libcxx}
cd tools/clang
svn update {.,tools/extra}

ビルド&インストール

最新のclangで最新のclangをビルドするとか面倒すぎて嫌になってきたので(意味もよく分かってないし)、一回でビルドする。 なお、"~/bin"はパス通してる。

cd ~/Projects/llvm
mkdir build
cd build
cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=$HOME/opt/llvm \
..
make -j5 && make -j5 check && make install

ln -Fs ~/opt/llvm/bin/* ~/bin
ln -Fs ~/opt/llvm/lib/* ~/lib
ln -Fs ~/opt/llvm/include/* ~/include

デフォルトでC++14まで有効になってる。以前に比べてだいぶすっきり。 それもこれもlibc++とlibc++abiがツリー内ビルドできるおかげ。

試しに使ってみる

which clang++

% which clang++
/Users/skystar0227/bin/clang++

よさそう

includeパスの検索順序を調べてみる

% clang++ -v -c -x c++ -o /dev/null /dev/null
clang version 3.6.0 (217873)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
 "/Users/skystar0227/opt/llvm/bin/clang-3.6" (省略) -x c++ /dev/null
clang -cc1 version 3.6.0 based upon LLVM 3.6.0svn default target x86_64-apple-darwin13.3.0
ignoring nonexistent directory "/usr/include/c++/v1"
#include "..." search starts here:
#include <...> search starts here:
 /Users/skystar0227/opt/llvm/bin/../include/c++/v1
 /usr/local/include
 /Users/skystar0227/opt/llvm/bin/../lib/clang/3.6.0/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.

よさそう

ライブラリのリンクを確認する

普通にコンパイル&リンクすると

% clang++ -std=c++14 helloworld.cpp
% otool -L a.out 
a.out:
 /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
 /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

trunkからビルドしたlibc++およびlibc++abiをリンクすると

% DYLD_LIBRARY_PATH=$HOME/lib \
> clang++ -std=c++14 -stdlib=libc++ -L $HOME/lib -l c++abi helloworld.cpp
% otool -L a.out 
a.out:
 @rpath/libc++abi.1.dylib (compatibility version 1.0.0, current version 1.0.0)
 @rpath/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)
 /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

よさそう

結論

環境構築あっさりできたので僕は満足です。そろそろコード書きたい… 月に一回は更新したい…

0 件のコメント:

コメントを投稿