building gcc4 on MinGW -> failure

MinGW + MSYS で gcc4.4.3 を build しようとして失敗した経緯まとめ。とりあえず成功例のない platform ( cross compile での用語でいうなら build ) での gcc の build は生半可な知識じゃ無理だということがわかっただけでもかなりの収穫だった。 cygwin だと成功例があるので ( http://gcc.gnu.org/gcc-4.4/buildstat.html ) 手っ取り早くやりたいなら cygwin を使えばいいんだろうけどいやな思い出しかない software No.1 を今 install する気はさらさらないので失敗談を書いておくだけにする。この路線で頑張るなら configure script や Makefile をいじるための勘所を養うというのが次の段階だと思うんだけどもうここらへんのことやるのに飽きたのでしばらくやらないつもり。

ここから log まとめ。目的はとりあえず動く binary を作ること。あと以下のことを考慮して作業は gcc 3.4.5 で行う。

http://gcc.gnu.org/install/prerequisites.html を参考にしつつ作業開始。 PPC や CLooG はなくてもいいようなのでいれてない。 "make" に指定してる "-j2" という option は core2 なのでこうすると早いというだけ。

  1. 以下を install ( 括弧内は実際の file )
    • MinGW ( MinGW-5.1.6.exe )
    • MSYS ( MSYS-1.0.11.exe )
    • msysDTK ( msysDTK-1.0.1.exe )
  2. 以下を MSYS を install した directory 以下に unpack ( 括弧内は実際の file )
    • msysCORE ( msysCORE-1.0.13-2-msys-1.0.13-bin.tar.lzma )
    • libregex ( libregex-1.20090805-1-msys-1.0.11-dll-1.tar.lzma )
    • bison ( bison-2.4.1-1-msys-1.0.11-bin.tar.lzma )
    • flex ( flex-2.5.35-1-msys-1.0.11-bin.tar.lzma )
  3. GMP ( http://gmplib.org/ )
    1. tar xjvf gmp-4.3.2.tar.bz2
    2. cd gmp-4.3.2
    3. ./.bootstrap
    4. ./configure --prefix=/mingw
    5. make -j2
    6. make -j2 check 2>&1 | tee makecheck.log
    7. make install
  4. MPFR ( http://www.mpfr.org/ )
    1. tar xjvf mpfr-2.4.2.tar.bz2
    2. cd mpfr-2.4.2
    3. ./configure --prefix=/mingw --with-gmp=/mingw
    4. make -j2
    5. make -j2 check 2>&1 | tee makecheck.log
    6. make install
  5. MPC ( http://www.multiprecision.org/ )
    1. tar xzvf mpc-0.8.1.tar.gz
    2. cd mpc-0.8.1
    3. ./configure --prefix=/mingw
    4. make -j2
    5. make -j2 check 2>&1 | tee makecheck.log
    6. make install
  6. gcc ( http://gcc.gnu.org/ )
    1. tar xjvf gcc-core-4.4.3.tar.bz2
    2. mkdir objdir
    3. cd objdir
    4. ../gcc-4.4.3/configure --prefix=/mingw --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --enable-languages=c,c++ --enable-threads --with-gcc --with-gnu-ld --with-gnu-as --with-build-time-tools=/mingw/bin --disable-nls --disable-shared --enable-sjlj-exceptions --enable-libstdcxx-debug --enable-version-specific-runtime-libs
    5. make -j2

ここで止まる。どうも stage2 の xgcc を使った check で MinGW 側の library path が渡されてないらしく "cannot create executable" が出て終了する。ちなみに stage 1 でも configure option の "--with-gnu-ld" がないと同じ理由で終了する。でまぁ working directory の "prev-gcc" というところに "/mingw/lib" 以下を copy してやる ( cp /mingw/lib/* prev-gcc/ ) と stage3 までいくもののやはり同じ理由で終了。ここでも stage2 と同じ解決方法でいけるかと思いきやダメだったので ( make し直すと以前の作業結果を消してしまうぽい ) あきらめた次第で。一応 "--disable-bootstrap" も試してみたんだけどやっぱり同じ理由で止まったのでそもそもダメみたい。

とはいえ http://smalltree.blog79.fc2.com/blog-entry-11.htmlhttp://alohakun.blog7.fc2.com/blog-entry-990.html ではできたということなので根本的におれが間違っている可能性もあるんだけど。まぁ gcc 4.4.0 でも問題ないしできるかどうかちょっと試してみただけだし。とか強がってみる。