勉強用にcygwinで動くsparc向けのクロスコンパイル環境を作りました。
インストールは途中でエラー終了してしまいましたが、勉強には十分なので整理してみました。実際の開発に耐えられる物ではないので、注意してください。
gmp-4.1のインストール
GCCの4.3.0をインストールしようとすると、gmp-4.1とmpfr-2.3.1が必要と言われます。まずはこの2つを入れましょう。
http://cs.nyu.edu/exact/core/gmp/
から、gmp-static-cygwin-4.1.tar.gz をダウンロードします。
解凍したあと、libフォルダーをcygwinの/usr/libへ、includeフォルダーをcygwinの/usr/include にコピーすれば終了です。
mpfr-2.3.1のインストール
http://www.mpfr.org/mpfr-current/
から、mpfr-2.3.1.tar.gz をダウンロードします。
YUKI.N> tar -xvzf mpfr-2.3.1.tar.gz
YUKI.N> cd mpfr-2.3.1
YUKI.N> ./configure
YUKI.N>make
YUKI.N>make install
で問題なくできました。
binutils-2.18のインストール
http://ftp.gnu.org/gnu/binutils/
総本山からbinutils-2.18.tar.gz をダウンロードします。
YUKI.N>tar -xvzf binutils-2.18.tar.gz
YUKI.N>cd binutils-2.18/
YUKI.N>mkdir objdir
YUKI.N>cd objdir/
YUKI.N>../configure --target=sparc-elf --prefix=/usr/local/sparc-elf
YUKI.N>make
YUKI.N>make install
でインストールできました。
GCC-4.3.0のインストール
ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.3.0/
ミラーサイトからgcc-4.3.0.tar.gzをダウンロードします。
YUKI.N>tar -xvzf gcc-4.3.0.tar.gz
YUKI.N>mkdir objdir
YUKI.N>cd objdir/
YUKI.N>../configure --target=sparc-elf --prefix=/usr/local/sparc-elf
YUKI.N>make
でエラーがでますが、それっぽいバイナリはできているので、きにせずmake installしました。
最後に、C:\cygwin\usr\local\sparc-elf\binにパスを通せば、コンパイルできるようになりました。
コンパイルのコマンドは、sparc-elf-gccです。
GCCのインストールで発生するエラー
make中に発生するエラーはこれです。
checking for shl_load... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.
エラーメッセージで検索してみると、いっぱい引っかかります。言われるがままに、パッチを当ててconfigureからやり直しても、同じ結果になるので、深追いするのは止めました。たくさん報告が上がっているので、そのうちに修正されるでしょう。
この状態で、gccを起動するとこのようになります。
YUKI.N>sparc-elf-gcc imm.c
/usr/local/sparc-elf/lib/gcc/sparc-elf/4.3.0/../../../../sparc-elf/bin/ld: crt0.o: No such file: No such file or directory
collect2: ld returned 1 exit status
各コマンドは動いているようですが、ライブラリができていないようです。
Cのソースがどのようなマシン語を出すかを見るには十分なので、このままにしておきます。
個別のコマンドは動いているので、一個ずつライブラリを作っていけば問題は解決できると思います。
バイナリパッケージの配布
最後にバイナリをzipにしてまとめました。
http://pub.idisk-just.com/fview/HvBXAY5C7-4Xt3TuhJzHksYmsUt1FDy7biIiRVQTNolP68HLy5NefU-Jeo83WgnW
解凍したフォルダーをcygwinの/usr/local以下にコピー(C:\cygwin\usr\local\sparc-elf\binに各コマンドが来る)すれば、パスの設定だけ動くはずです。