【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

NetBSDでodcctools

Mac OS Xではバイナリ処理にGNU binutilsではなくcctoolsという独自のものを用いています(asはbinutils派生)。Appleはソースを以下で公開しています。

Appleが公開しているものはMac OS Xでビルドすることしか考慮されていないため、他のOSで動かすには色々補う必要があります。

OpenDarwinによってautotools化されたodcctoolsが存在しますが、OpenDarwinはプロジェクト自体が活動を停止しました。今は誰がメンテしているのか不明ですが、iphone-devで配布されているものがよく使われているようです。

NetBSDiphone-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さんの記事がとても参考になりました。

この場を借りてお礼を申し上げます。