clangを試してみる。
clangは簡単にいうと、LLVM専用のフロントエンドでCとかC++とかが扱えるらしい。LLVM-GCCが上手くいかないので、こんどはこっちを試してみる。コンパイル方法についてはClang - Getting Startedを参照。
llvmをコンパイル。
まずは、LLVMをsvnのrepoからもらってきてコンパイル。
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm_trunk cd llvm_trunk ./configure --prefix=$HOME/opt --enable-optimized --build=powerpc-unknown-linux-gnu make -j2 make install
ちなみに取得したrevisionは54992。
clangをコンパイル。
次にclangをsvnのrepoからもらってくる。
cd tools svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
チェックアウトしたrevisionは54998だった。
インストールガイドに指示がある通り、includeパスを直書きするため、gccの使っているインクルードパスを調べる。
touch empty.c gcc -v empty.c -fsyntax-only
... 略 ... #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc/powerpc-unknown-linux-gnu/4.1.2/include /usr/include End of search list. GNU C version 4.1.2 (Gentoo 4.1.2 p1.1) (powerpc-unknown-linux-gnu) compiled by GNU C version 4.1.2 (Gentoo 4.1.2 p1.1). GGC heuristics: --param ggc-min-expand=44 --param ggc-min-heapsize=27323 Compiler executable checksum: 922ca30f21edbfcd351f4dd12b7e97b3
/usr/lib/gcc/powerpc-unknown-linux-gnu/4.1.2/includeが多分それなので、clang/Device/clang.cppの1095行目あたりに追加する。
AddPath("/usr/lib/gcc/powerpc-unknown-linux-gnu/4.1.2/include", System, false, false, false, Headers);
後はてきとーにビルド。
cd clang make make install
実験。
そして実験。
なにもしないtest.cを作って、
int main(void) { return 0; }
clang test.c -emit-llvm -o - | llvm-as | opt -std-compile-opts | llc -march=cellspu > test_llvm.s cat test_llvm.s
.text .align 3 .global main .type main, @function main: il $3, 0 bi $lr .size main,.-main .ident "(llvm 2.2+) STI CBEA Cell SPU backend"
SPUのアセンブリが出てきた。