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

クロス開発環境構築

UNIX系OS上でMINIXのクロス開発環境を構築する方法です。ACKは後回しにして今回はgccだけです。

MINIXはバイナリファイル形式としてa.outを使用しているため、binutilsgccに独自のパッチを当てています。パッチ適用済みのソースはMinix Portsにまとめてあります。

targetオプションを付けてビルドすればクロス化できます。

binutils

MINIXのヘッダからa.out.hを持って来て、ansi.hをコメントアウトします。

これをbinutilsの中に入れてmakeします。

tar xvjf binutils-2.16.1.tar.bz2 ← MINIX用ソースを展開
cp a.out.h binutils-2.16.1/include ← a.out.hをコピー
cd binutils-2.16.1
./configure --target=i386-pc-minix ← 適宜prefixを指定
make
make install

上の例ではprefixを指定していないため/usr/local以下にインストールされます。

ヘッダとライブラリ

インストール済みのMINIXからヘッダとライブラリを取り出します。/usr/libはACK用のため不要です。

  • /usr/include
  • /usr/gnu/include
  • /usr/gnu/lib

/usr/includeはACK用のためそのままではgccで不具合があります。以下のディレクトリでオーバーライドしています。

パスが分散すると参照が面倒です。とりあえずACKは使用しないため、上書きコピーで統合しました。

こうして準備したincludeとlibを/usr/local/i386-pc-minixに入れます。私の方でまとめたincludeとlibを置いておきます。

gcc

ソースはMINIXでセルフコンパイルすることが前提で修正されているため、いくつかパッチを当てる必要があります。以下のパッチファイルを参照してください。

targetを指定してサブディレクトリで作業します。

tar xvjf gcc-4.1.1.tar.bz2 ← MINIX用ソースを展開
(パッチを適用)
cd gcc-4.1.1
mkdir build ← 作業用のサブディレクトリを作成
cd build
../configure --target=i386-pc-minix ← 適宜prefixを指定
make
make install

使用方法

コマンドにi386-pc-minix-というプレフィックスを付けます。

例:
【セルフ】gcc -o hello hello.c
【クロス】i386-pc-minix-gcc -o hello hello.c

Interix

Interix用に自動ビルドシステムを用意しました。Debian/Interixと組み合わせて使います。

独自システムはやめてdebに移行しようかと思いましたが、他のOSでも簡単な修正で使用できるなど独立によるメリットもあるので(レポジトリには他のOS用のブランチが入っています)、このまま様子を見ようと思います。