ちょっと llvm に興味があったんだがなかなか進展しなかった。
OSX だと macports に llvm, llvm-gcc があるな。 debian だと sid オンリー。さらに会社の某所だと、野良 build かバイナリ転がすか・・・。 gcc フロントエンドの build が微妙にうまく通らないんだよな・・・。
Cのコードだと特に問題ないが、 C++ で書いただけで何故かハマる。 header と libstdc++ のパスを明示してやってやっと通る。
yagimac{yagi(s000)}2316: cat ttest.cc zsh #includeint main(void) { std::cout << "TEST" << std::endl; } yagimac{yagi(s000)}2317: cat Makefile zsh CXX1=g++-mp-4.2 CXX2=llvm-g++-4.2 -I/usr/include/c++/4.0.0/i686-apple-darwin9/ -L/usr/lib/gcc/i686-apple-darwin9/4.0.1 -emit-llvm all: ttest ttest.bi ttest: ttest.cc $(CXX1) -o $@ $< ttest.bi: ttest.cc $(CXX2) -o $@ -c $< test: echo "native" ./ttest echo "via lli" lli ttest.bi yagimac{yagi(s000)}2318: make all zsh g++-mp-4.2 -o ttest ttest.cc llvm-g++-4.2 -I/usr/include/c++/4.0.0/i686-apple-darwin9/ -L/usr/lib/gcc/i686-apple-darwin9/4.0.1 -emit-llvm -o ttest.bi -c ttest.cc yagimac{yagi(s000)}2319: make test zsh echo "native" native ./ttest TEST echo "via lli" via lli lli ttest.bi TEST yagimac{yagi(s000)}2320: file ttest ttest.bi zsh ttest: Mach-O executable i386 ttest.bi: data
llvm-ld でリンクできる。
yagimac{yagi(s000)}2331: make all zsh llvm-ld -o ttest2 ttest.bi yagimac{yagi(s000)}2332: make test zsh echo "native" native ./ttest TEST echo "via lli" via lli lli ttest.bi TEST echo "direct" direct ./ttest2 TEST yagimac{yagi(s000)}2333: file ttest2* zsh ttest2: Bourne shell script text executable ttest2.bc: data yagimac{yagi(s000)}2334: cat ttest2 zsh #!/bin/sh lli=${LLVMINTERP-lli} exec $lli \ $0.bc ${1+"$@"}