2010年07月17日

GCC 4.5のビルド

それでは、GCC 4.5をビルドします。

1. MinGW環境について
GCCを自前でビルドしようという方は、MinGW環境もすでにあるという前提で、細かい説明は省略します。

MinGW環境については、こちらもお読みいただくと参考になると思います。
MinGW環境のアップデート (2011/04/12)
MSYS環境のアップデート (2011/04/12)

追加で、FlexとTexinfoをインストールします。
以下のファイルを、
C:\msys\1.0\
に、解凍します。

・flex-2.5.35-2
http://sourceforge.net/projects/mingw/files/MSYS/Extension/flex/flex-2.5.35-2/
flex-2.5.35-2-msys-1.0.13-bin.tar.lzma

・texinfo-4.13a-2
http://sourceforge.net/projects/mingw/files/MSYS/Base/texinfo/texinfo-4.13a-2/
texinfo-4.13a-2-msys-1.0.13-bin.tar.lzma

・regex-1.20090805-2
http://sourceforge.net/projects/mingw/files/MSYS/Base/regex/regex-1.20090805-2/
libregex-1.20090805-2-msys-1.0.13-dll-1.tar.lzma

2012/03/23 追記
Git for Windowsがインストール済みで、MSYSから使用できるようにパスを通していると、GCCのconfigureの時にGit for Windowsのbisonが応答しなくなって、固まる場合があります。
その場合は、MSYSにbisonをインストールしてください。
・bison-2.4.2-1
http://sourceforge.net/projects/mingw/files/MSYS/Extension/bison/bison-2.4.2-1/
bison-2.4.2-1-msys-1.0.13-bin.tar.lzma


2. ライブラリのインストール
以下のライブラリは、あらかじめインストールしておいてください。
最新版は、各ライブラリのページで確認してください。
pthreads-w32 release 2.9.0
zlib-1.2.5
libiconv-1.13.1
gmp-5.0.1
mpfr-3.0.0
mpc-0.8.2
polylib-5.22.5
ppl-0.10.2(旧版)
ppl-0.11.1
cloog-ppl-0.15.9

必要なライブラリなどについては、こちらも参照してください。
Prerequisites for GCC
http://gcc.gnu.org/install/prerequisites.html


3. ソースコードの準備
GCC4.5のソースコードは、このページから適当なサーバを選んでダウンロードしてください。
http://gcc.gnu.org/mirrors.html

この辺りから、
ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.5.3/
gcc-core-4.5.3.tar.bz2
gcc-g++-4.5.3.tar.bz2
gcc-objc-4.5.3.tar.bz2
を、ダウンロードします。

ada、java、fortranは、あまり使用しないので省略します。

ファイルを適当な場所に保存して、解凍します。
$ tar xjf gcc-core-4.5.3.tar.bz2
$ tar xjf gcc-g++-4.5.3.tar.bz2
$ tar xjf gcc-objc-4.5.3.tar.bz2

次に、
libgomp用のpthreadsスタティックライブラリパッチ
libgomp-pthreads.diff

make-temp-fileパッチ
make-temp-file.diff
を適用します。

2011/04/22 追記
libgomp/configureのパッチは不要でしたので、削除しました。

2010/09/02 追記
ppl-0.11をインストールしていると、configureのバージョンチェックで見つけられず、
checking for version 0.10 of PPL... no
となるのを修正するパッチを追加しました。
configure-ppl-version.diff


2011/05/10 追記
gcc-4.5.3で、ppl-0.11用のパッチは不要になりました。

$ cd gcc-4.5.3
$ patch -p1 < ../libgomp-configure.diff
$ patch -p1 < ../configure-ppl-version.diff
$ patch -p1 < ../make-temp-file.diff


4. GCCのビルド
ここまで準備ができましたら、GCCをビルドします。

ソースコードとビルド用のディレクトリは、分けておいた方がよいと思います。

私の場合は、こんな感じにしています。
/usr/local/src/gcc-4.5.3/
/usr/local/src/build/
(/usr/local/src/ は、Windows上では、C:\msys\1.0\local\src\ です。)

ビルド用のディレクトリで、configureを実行します。

2012/01/11 追記
configureオプションに「--enable-fully-dynamic-string」を追加しました。

$ ../gcc-4.5.3/configure --prefix=/mingw --build=mingw32 --with-arch=i686 --with-tune=generic --enable-languages=c,c++,objc,obj-c++ --enable-libgomp --disable-werror --enable-threads --disable-nls --disable-win32-registry --disable-sjlj-exceptions --with-dwarf2 --enable-lto --with-system-zlib --with-host-libstdcxx=-lstdc++ --enable-libstdcxx-debug --enable-cxx-flags='-fno-function-sections -fno-data-sections' --disable-libstdcxx-pch --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-bootstrap

configureオプションについては、こちらを参照してください。
Installing GCC: Configuration
http://gcc.gnu.org/install/configure.html

--with-arch=i686 --with-tune=generic
のところは、-marchと-mtuneのデフォルト値が
-march=i686 -mtune=generic
になるので、自分の環境に合わせて、
--with-arch=core2 --with-tune=core2
とか、
--with-arch=athlon64 --with-tune=athlon64
などとすると良いかもしれません。

自分の環境でしか使用しない場合は、
--with-arch=native --with-tune=native
でも良いかもしれません。

--with-arch、--with-tuneオプション無しの場合は、--build=mingw32 が指定されていると、
-march=i386 -mtune=i386
がデフォルト値になります。


configureが終了したら、makeします。

$ make CFLAGS="-O2 -D__USE_MINGW_ACCESS" CFLAGS_FOR_TARGET="-O2 -D__USE_MINGW_ACCESS" CXXFLAGS="-mthreads -O2" CXXFLAGS_FOR_TARGET="-mthreads -O2" LDFLAGS="-s" 2>err.log 1>out.log

そのままmakeだけすると、デバッグシンボル入りの巨大なバイナリになってしまうため、フラグを変えています。

メッセージをログに保存して、何か問題があった時に参照できるようにしています。


5. GCCのインストール
そのままmake installするのはちょっと危険です。
私の場合、TDMさんだったか誰かのインストールスクリプトを参考に、以下のように、実行環境とは別のディレクトリにインストールしています。

$ make DESTDIR=/develop/sandpit/dw2 install

MSYSから見ると、
/develop/sandpit/dw2/mingw/

実際のディレクトリは、
C:\msys\1.0\develop\sandpit\dw2\mingw\
に、インストールされます。

あとは、ディレクトリ構造を変えずに、そのままMinGW環境に上書きすれば完了です。

configureからmake installまでの流れは、けっこう時間がかかりますので、私はスクリプトで流しています。
参考までに、こちらに置いておきます。
gcc-4.5.0-build-dw2-generic.sh

2012/01/11 追記
ビルドス用のスクリプトを更新しました。
configureオプションに「--enable-fully-dynamic-string」を追加しました。
gcc-4.5.3-build-dw2-generic-2.sh


【補足】
gcc-4.5.1から、Windowsバイナリ(PE-COFF)用のLTO(Link Time Optimization)が正式に使えるようになるらしいですが、snapshot 4.5-20100624版から使えるようになっています。

configureオプションのどこかに、
--enable-lto
を追加してビルドすると、gccのコンパイルオプションに-fltoが使えるようになります。
snapshot 4.5-20100708版でビルド確認済みです。

FFmpegのコンパイルで試してみたのですが、LTOの効果の程はいまいち分かりませんでした。

新しいものをいち早く試してみたいという方はどうぞ。

2011/03/10 追記
gcc-4.5.2で、--enable-lto を追加し、ビルドして確認済みです。


【更新履歴】を見る
posted by あべちん at 15:51 | Comment(3) | TrackBack(0) | GCC自前ビルド
この記事へのコメント
あべちんさん、おはようございます。

PPLのビルドの時に、ライブラリがビルドできているのがわかったので、ppl_lcddは放置することに決めました。

で、現在GCC本体に取り掛かろうとしているのですが、regexのリンク先が404で、どこにも見当たらないのです。

どこかにないものでしょうか…
Posted by Kazuki Ashiya at 2010年08月06日 08:07
あべちんさん、こんばんは。

探してみたところ、BaseSystemに統合されたようです。
http://sourceforge.net/downloads/mingw/MSYS/BaseSystem/regex/regex-1.20090805-1/
リンクを書いておきます。
Posted by Kazuki Ashiya at 2010年08月06日 19:57
Kazuki Ashiyaさん、こんにちは。管理人です。

ぉぉ、いつのまにかURLが変わっていたんですね。
情報ありがとうございました。
Posted by あべちん at 2010年08月07日 19:45
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/39678197
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック