LLVMを試そうとして失敗
The LLVM Compiler Infrastructure Projectというコンパイラインフラストラクチャがある。
これは、私自身正直あまりよくわかっていないが、言語処理系の最適化を研究するための汎用的な中間言語およびその実装で、GCCフロントエンドを使えるようにしてあったり、中間言語を各種プロセッサのマシン語に変換できたりもするので、全体としてふつーのCコンパイラとして使えるというもの。
噂によると結構速いコード生成するらしい&Cellに対応しているらしいので、Getting Started with the LLVM System — LLVM 9 documentationを参考にしながら試してみる。
試した環境は以下の通り。
ソースコードのダウンロード
まずは、最新版のLLVM 2.2関係のソースコードをダウンロードする。
wget http://llvm.org/releases/2.2/llvm-2.2.tar.gz wget http://llvm.org/releases/2.2/llvm-gcc4.2-2.2.source.tar.gz
llvmのビルド
参考ページを見てもどれからビルドしていいのかよくわからなかったが、まぁアセンブラみたいなものからだろうと決めつけてllvm-2.2.tar.gzを最初にビルドする。いきなりOS側にいれるのも恐いので、configureで~/Optを指定しておく。
tar xzf llvm-2.2.tar.gz cd llvm-2.2 ./configure --prefix=$HOME/Opt make make install
…ってビルド始めてみたら相当な数のソースコードがあるみたいで、いつまでたっても終わらないので気長に待つ。結局1時間以上かかった。
llvm-gccのビルド
そしてgccのフロントエンドをビルドする。
tar xzf llvm-gcc4.2-2.2.source.tar.gz cd llvm-gcc4.2-2.2.source ./configure --prefix=$HOME/Opt make
するとすぐにエラーとなってしまう。
GNUmakefile:16: /CoreOS/Standard/Standard.make: No such file or directory make: *** No rule to make target `/CoreOS/Standard/Standard.make'. Stop.
よくよくドキュメントを探してみると、http://llvm.org/docs/GCCFEBuildInstrs.htmlにやり方がのってるするようなのであわせる。
まずはllvm側
mv llvm-2.2 llvm mkdir llvm-objects cd llvm-objects ../llvm/configure --prefix=$HOME/Opt make make install
その後GCCフロントエンド。configureのオプションは微妙に変える。(cとadaだけじゃなくでc++も使いたいから)
mv llvm-gcc4.2-2.2.source llvm-gcc-4.2 mkdir llvm-gcc-4.2-objects cd llvm-gcc-4.2-objects ../llvm-gcc-4.2/configure --prefix=$HOME/Opt --enable-checking --enable-llvm=$PWD/../llvm-objects --disable-shared --disable-bootstrap --disable-multilib make
とやってGCCのフロントエンドをビルドする…んだけどrs6000.cがコンパイルできずにエラーで止まってしまう。
何が悪いんだろ?