odcctools on OpenBSD 4.6

LLVMは無事通ったが、第一の問題はこれだ。
Linuxコンパイルできるようにと、中にBSD系のヘッダを抱えているので、タチが悪い。

まずは、標準ではコンパイルに必要なautomake, autoconf がないので、pkg_addしておく。automakeを突っ込めば勝手に対応するautoconfが入るので、autoconfには触れなくていい。触れない。
パッケージを揃えたら、iphone-devを落としに行く。

$ sudo -s
# cd /usr/local/src
# svn checkout http://iphone-dev.googlecode.com/svn/trunk/ iphone-dev

落とせたら、ビルド用のディレクトリに潜って、configureする。

# mkdir -p build/odcctools
# cd build/odcctools
# ../../odcctools/configure --target=arm-apple-darwin --disable-ld64

ここまでは、LLVM同様マニュアル通りだが、ここからがダークネスな耐久ゲームが始まる。
とりあえず、主要な小細工をあげると、

_types.h

システムヘッダとダダ被り。Machだから仕方ない。
〜_t系型の多重定義を回避するために#ifマジックをいじる必要がある。
また、OpenBSD固有のヘッダでこけるので、Makefileで-D_LITTLE_ENDIANにする。

appleapiopt.h

Appleからappleapiopt.hを貰ってきてinclude/sys/に入れる。
システムには入れたらだめ。絶対。

ar/...

ENOSUP未対応。ar/Makefileで-DENOSUP=48 にする。どうせ使われないけど。

dylib_root.c

errnoがない。じゃなくて、です。

ld/passX.c

vm_msync使用回避のために、-D_POSIX_C_SOURCEをつける。Machじゃないのに、なんで使う分岐に行くんだコイツ。
さらに、L_SETなどという骨董品を使っていて困るので、vi等でSEEK_SETに置換する。

ARM

アサーションで死ぬ。MLの報告に因れば、OpenBSD mallocが割り付けランダムな所為じゃないのかと言われているけど、ランダムにされてラリってるのはいかがな物か。
半々の確率で成功するらしいので、ディレクトリを下って、ひたすらgmakeすべし。

あと細かな修正がいくつかあるけど、何とかすればビルド終了まで行ける。
今日はここまで。ダークネスな吸い出しだとか、SDKだとか、本命のLLVM-gcc for iPhoneはまた今度にする。