31 Oct 2014

gcc 4.9.2 をビルドした

gcc 4.9.2 がリリースされたのでビルドした.

ビルド用のスクリプトはこんな感じ ( https://github.com/nak5124/build_env/tree/master/gcc_build ).

toolchainをどこに配置してもライブラリ検索パスやインクルードパスが想定したものになるようにしてある.
windowsではパスがドライブ依存(各ドライブにドライブレターが存在する)であるためバイナリに(posixな形式ではないwindowsな)絶対パスが埋め込まれてtoolcain全体を配置するパスにより挙動が変わる(最悪起動できない)といったことが起こりうる.
例えばmingw-buildやMSYS2により配布されるバイナリも実はこのような仕様になっている.
上記のビルドスクリプトではそのようなことが生じないようにした.
また,EXEC_PREFIX/../../../../local/{lib,include} をデフォルトでサーチできるようにした.

あとビルド時に旧toolchain下のディレクトリ(つまりbuildtoolchain下)を検索しないようにしたり,exeビルド時32bitの時は自動的に--large-address-aware有効にしたりnxcompat及び(HE)ASLRをデフォルトで有効にしたりいろいろ.

あと今回のこととは直接関係無いですがx264などでslim ltoを使うとリンク時にコケる場合はplugin supportを有効にしたbinutilsを使ってplugin用のディレクトリ(デフォルトでは{mingw_rootdir}/lib/bfd-plugins)にEXEC_PREFIXにあるliblto_plugin-0.dllのリンクを張っておくといい.

最近はx264などのバイナリを配布することも無くなったので基本全部shared onlyでビルドするようになった.
sharedの何がいいかというとAPIの変更などが無い限りライブラリだけの更新のためにバイナリをビルドし直すといったことをしなくて済む.例えばL-SMASH Worksに使うffmpegライブラリの更新の度にLSMASHSource.dllなども再ビルドするといったことをしなくて良い.
あとシステム全体で見た時の全バイナリサイズが小さくできる.

No comments:

Post a Comment