で mipsel-gcc をビルドしてみることにした。
ちなみに、使っている MinGW/MSYS 環境はずいぶん古い。最新の環境なら少し楽できるかも。
1. binutils-2.19
$ ./configure --target=mipsel --prefix=/mingw
$ make
これで良いはずだが、info が作れずエラー。
bfd/Makefile SUBDIRS から doc を除くことでビルドできた。
$ make install
2. gmp-4.3.2
gcc をビルドするには、gmp と mpfr が必要だが、古いのでない。
$ ./configure --prefix=/mingw
$ make
$ make install
3. mpfr-2.4.2
$ ./configure --prefix=/mingw
$ make
$ make install
4. gcc-4.2.4
最初に gcc-4.4.4 を試した。-- make-3.80 以上が必要なのだが、古い環境なので 3.79 。新しい make をビルドしても動かなかったので、gcc-4.2.4 に変更。
$ ./configure --target=mipsel --prefix=/mingw --enable-languages=c
$ make
libgcc2.c の _muldi3.o の make で
./tm.h:9:27: error: config/elfos.h: No such file or directory
./tm.h:10:31: error: config/mips/mips.h: No such file or directory
./tm.h:11:30: error: config/mips/elf.h: No such file or directory
./tm.h:12:23: error: defaults.h: No such file or directory
なんてエラー
gcc/Makefileの LIBGCC2_INCLUDES
LIBGCC2_INCLUDES = -I/d/AVR/gcc-4.2.4/gcc
なんて風に MinGW 流のパスを付けたら先に進んだ。
次に libssp/ssp.c で O_RDONLY や ssize_t がないとエラー。
gcc 自体の ビルドは終わっている。無視して
$ make instll
使わないはずなので、configure に --disable-libssp を追加しても良い。
確認
linux は、scripts の HOSTのプログラムのビルドでエラー。-- mmap 使っているので無理だった。
usbboot の xburst_stage1 は OK 。
ファイルが足りないかも知れないのだが ...
... そういえば、PIC32 も mips 。役に立つのだろうか?
"MPLABо C Compiler for PIC32 MCUs User's Guide" (pdf) に説明がある。汎用なので、PIC32 用のマクロが定義されていないぐらい? そういえば mips16/mips16e は気にしていなかった。.. チェックしたら binutils も含め mips16/mips16e は、使えなかった。
MIC32用のビルドは、--prefif,--enable-language に加えて、
--target=pic32mx --with-dwarf2 --enable-multilib --disable-libssp
ぐらいを付ければ良さそう。
再度ビルドに挑戦中。
ここみて、オプション変更。
1. binutils-2.19.1
OpenWRT のパッチ集が ここにある。
200-mips_non_pic.patch というのが気になる。関係ないのも多いが 一応数字の順に全部あてる。
$ mkdir build; cd build
$ ../configure --target=mipsel --prefix=/mingw --disable-nls \
--without-included-gettext
$ make
(info が作れずエラー) → bfd/Makefile SUBDIRS から doc を除く。
gas でも、info が作れずエラー。
gas/Makefile SUBDIRS から doc を除く。
ld も引っかかる。どうやら余計なパッチを当ててしまったようだ。
$ make install
gmp-4.3.2/mpfr-2.4.2 は上記参照
4. gcc-4.2.4
OpenWRT のパッチ集が ここにある。
随分多いのだが、当たらないものもあるし、c++ 用のものも多い。ビルドは、c だけにすることにして
820-libgcc_pic.patch
910-soft-float.patch
920-soft-float.patch
930-eabi_fixes.patch
951-bug_37014.patch
952-bug_34762.patch
だけにする。
$ mkdir build; cd build
$ ../configure --target=mipsel --prefix=/mingw \
--enable-languages=c \
--disable-multilib --disable-decimal-float --with-float=soft --with-abi=32 \
--with-tune=mips32 --with-dwarf2 \
--disable-__cxa_atexit --disable-libssp --disable-tls --enable-static \
--disable-nls --disable-threads
$ make
(libgcc2.c の _muldi3.o の make でエラー) → gcc/Makefileの LIBGCC2_INCLUDES 編集
$ make
$ make install
パッチは、tar+gzip で固めたのを 次に置いておく。
- openwrt-patches-42.tar.gz binutils-2.19.1 + gcc-4.2.4 用
- openwrt-patches-43.tar.gz binutils-2.20.1 + gcc-4.3.4 用 (一応保存)
バイナリ (最小限 -- 作成中)
mingw-mipsel-gcc.tar.bz2 (15.9MB)