ちょっと llvm に興味があったんだがなかなか進展しなかった。
OSX だと macports に llvm, llvm-gcc があるな。 debian だと sid オンリー。さらに会社の某所だと、野良 build かバイナリ転がすか・・・。 gcc フロントエンドの build が微妙にうまく通らないんだよな・・・。
Cのコードだと特に問題ないが、 C++ で書いただけで何故かハマる。 header と libstdc++ のパスを明示してやってやっと通る。
yagimac{yagi(s000)}2316: cat ttest.cc zsh
#include
int 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+"$@"}