LLVM r42498 on OpenBSD 4.6

折角iPod Touchをいじり始めたのだから、iPhoneアプリケーションの開発環境を整備しようと思った。
しかし、手元にあるマシンはと言うと、Windows XPのオンボロ据え置きと、Windows XP/Ubuntu(ネットブック仕様)のネットブック君と、あと一つ、OpenBSDのサーバ機君だけだ。iPhoneアプリケーションの開発環境はMac OS Xの物しか提供されていないわけで、これではどう開発した物か。
調べてみると、Cygwin on Windows XPや、*NIX上で環境を構築する方法が幾つか載っている。方法はあるにはあるようだ。iPhoneの中身を吸ったりだとか、割りとダークネスだが……

早速、ツールチェインの一つ、iphone-devを、OpenBSD君に突っ込むことに決めた。CygwinMinGW?しらない。

まずは、LLVMの準備から始める。標準ではパッケージの入手、およびコンパイルに必要な
bison, gmake, subversion がないので、pkg_addしておく。
パッケージを揃えたら、SVNリポジトリから拾って野良ビルド用のディレクトリに展開する。

$ sudo -s
# cd /usr/local/src
# svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm-svn -r 42498

ビルド用のディレクトリを掘って、そこでconfigure。ここまではマニュアル通りに進めていけば良いだけだった。

# cd llvm-svn
# ./configure --enable-optimized

さて、ここからが地獄の始まりだ……OpenBSDの呪いは恐ろしい。

gmakeするに当たって必要な小細工をあげていく。

intptr_tの定義切れ

エラー元は何処かのシステムヘッダでインクルードされていることを期待しているようだ。configure機構を採用しているのに、こういうシステム依存べったりなのは疑問だが、これは単にヘッダを追加するだけで終わる。

ADT/DenseMap.h

uintptr_t(T) が通らない。OpenBSDのuintptr_tはこういう使い方が出来ないようだ。諦めてC style castにしておく。

Bitcode/Writer/BitWriter.cpp

__gnu_cxx::stdio_bufが旧仕様。stdc++が古い、古すぎる。
コンストラクタのパラメータを旧仕様に合わせる。盛るパラメータは、新仕様のコードを見る限りdel=false, size=BUFSIZでいい様だ。

あとは、幾つか些末な不具合を取り除けばビルドが通るはずだ。
〆に

# make install

で、インストール完了。デフォルトでは、/usr/local/上にインストールされる。