cygwinでmingwをビルドしてみる

setup.exeから入るmingwgccはバージョン3なので
gcc4.4を自力でビルドしてみる。

参考
http://bitwalk.hp.infoseek.co.jp/

必要なアーカイブを入手

https://sourceforge.net/projects/mingw/files/

  • binutils-2.19.1-src.tar.gz
  • mingwrt-3.15.2-mingw32-dev.tar.gz
  • mingwrt-3.15.2-mingw32-dll.tar.gz
  • w32api-3.13-mingw32-dev.tar.gz
  • gcc-4.4.0-src.tar.bz2

target名を決める。

今回は、後で隣のLinuxとdistccを使いたいのもあるので
統一するためにi686-mingw32とした。
i386-mingw32やi686-pc-mingw32というのもあるが、pcは在っても無くていいのかよくわからない。
pcの有無はi686-mingw32-c++.exeがi686-pc-mingw32-c++.exeになったりするので
影響はあるがビルドすることはできる様子。

binutils

順番が前後するがまずbinutilsのビルドから。

$ tar zxf binutils-2.19.1-src.tar.gz
$ mkdir build_binutils
$ cd build_binutils
$ ../configure --prefix=/usr/local --target=i686-mingw32 -v
$ make
$ make install
$ cd /usr/local/bin
$ ls i686-mingw32-*
i686-mingw32-addr2line.exe*  i686-mingw32-dllwrap.exe*  i686-mingw32-objdump.exe*  i686-mingw32-strip.exe*
i686-mingw32-ar.exe*         i686-mingw32-gprof.exe*    i686-mingw32-ranlib.exe*   i686-mingw32-windmc.exe*
i686-mingw32-as.exe*         i686-mingw32-ld.exe*       i686-mingw32-readelf.exe*  i686-mingw32-windres.exe*
i686-mingw32-c++filt.exe*    i686-mingw32-nm.exe*       i686-mingw32-size.exe*
i686-mingw32-dlltool.exe*    i686-mingw32-objcopy.exe*  i686-mingw32-strings.exe*

gcc依存パッケージ

通常の開発環境(gcc-4とかmake, bison, flexその他諸々)
に加えてgccのビルドに必要なパッケージを追加する。
setup.exeで以下のものを追加した。

  • libgpm-devel(Math)
  • libmpfr-devel(Math)
  • ppl-devel(Math)
  • libcloog-devel(Devel)

上のふたつは必須で、下のふたつはgcc-4.4からの最適化機構Graphiteを
有効にするのに要るらしい。
http://alohakun.blog7.fc2.com/blog-entry-990.html

ロスコンパイル用ランタイム

mingwとwin32apiのruntimeを展開する

$ tar -C /usr/local/i686-mingw32 -zxf w32api-3.13-mingw32-dev.tar.gz
$ tar -C /usr/local/i686-mingw32 -zxf mingwrt-3.15.2-mingw32-dll.tar.gz
$ tar -C /usr/local/i686-mingw32 -zxf mingwrt-3.15.2-mingw32-dev.tar.gz
# 展開先を間違えていたのを修正。

gccのビルド

$ tar jxf gcc-4.4.0-src.tar.bz2
$ mkdir build_gcc
$ cd build_gcc
$ ../gcc-4.4.0/configure --prefix=/usr/local --target=i686-mingw32 --enable-languages=c,c++ -v
$ make

うちのマシンでは数時間かかるので寝てる間にできるように仕込み。
うまくいっているとよいが。

$ make install
$ cd /usr/local/bin
$ ls i686-mingw32-*
i686-mingw32-addr2line.exe*  i686-mingw32-cpp.exe*        i686-mingw32-gcc.exe*    i686-mingw32-nm.exe*       i686-mingw32-size.exe*
i686-mingw32-ar.exe*         i686-mingw32-dlltool.exe*    i686-mingw32-gccbug*     i686-mingw32-objcopy.exe*  i686-mingw32-strings.exe*
i686-mingw32-as.exe*         i686-mingw32-dllwrap.exe*    i686-mingw32-gcov.exe*   i686-mingw32-objdump.exe*  i686-mingw32-strip.exe*
i686-mingw32-c++.exe*        i686-mingw32-g++.exe*        i686-mingw32-gprof.exe*  i686-mingw32-ranlib.exe*   i686-mingw32-windmc.exe*
i686-mingw32-c++filt.exe*    i686-mingw32-gcc-4.4.0.exe*  i686-mingw32-ld.exe*     i686-mingw32-readelf.exe*  i686-mingw32-windres.exe*

問題なし