Mac OS Xではバイナリ処理にGNU binutilsではなくcctoolsという独自のものを用いています(asはbinutils派生)。Appleはソースを以下で公開しています。
- http://www.opensource.apple.com/ (Developer Tools)
Appleが公開しているものはMac OS Xでビルドすることしか考慮されていないため、他のOSで動かすには色々補う必要があります。
OpenDarwinによってautotools化されたodcctoolsが存在しますが、OpenDarwinはプロジェクト自体が活動を停止しました。今は誰がメンテしているのか不明ですが、iphone-devで配布されているものがよく使われているようです。
NetBSDでiphone-devのodcctoolsのビルドに挑戦してみました。
ダウンロード
iphone-devはSubversionでのみ配布されているようです。
$ svn checkout http://iphone-dev.googlecode.com/svn/trunk/ iphone-dev
リポジトリを丸ごと取ってくると、llvm-gccなども含まれており巨大です。odcctoolsだけを抜き出して置いておきます。
パッチ
私が適当に作ったパッチです。
odcctoolsに入る手前のディレクトリでパッチを当てます。
$ patch -p0 < odcctools-netbsd.diff
ビルド
私の目的はiPhoneではなくi386/x86_64です。とりあえずi386をターゲットにビルドします。
$ cd odcctools $ ./configure --target=i386-darwin $ gmake (エラー) $ gmake (再度configure後にビルドが始まる) $ sudo gmake install
バグ
アセンブラがエラーで起動しません。
$ i386-darwin-as FATAL:error constructing pseudo-op table (exists)
NetBSDへの移植が失敗したからではなく、iphone-devはiPhoneが目的のためARMでしか検証されておらず、i386のバグが見落とされているようです。
今回はビルドを通すことが目的のため、修正方法は回を改めます。
謝辞
ビルドを通すだけでもかなり大変でした。anon_193さんの記事がとても参考になりました。
- odcctools on OpenBSD 4.6
http://d.hatena.ne.jp/anon_193/20100804/1280929593
この場を借りてお礼を申し上げます。