ちょーっとイレギュラーな方法かもしれないけど、これが一番お手軽かも。
#!/bin/sh _OBJDIR=/c/mozbuild/deerpark151/obj # change PGI to PGO of config/autoconf.mk mv $_OBJDIR/config/autoconf.mk $_OBJDIR/config/autoconf.mk.pgi sed 's/PGI/PGU/g' $_OBJDIR/config/autoconf.mk.pgi > $_OBJDIR/config/autoconf.mk # nspr4.dll cd $_OBJDIR/nsprpub/pr/src rm nspr4.dll make # plc4.dll cd $_OBJDIR/nsprpub/lib/libc/src rm plc4.dll make # plds4.dll cd $_OBJDIR/nsprpub/lib/ds rm plds4.dll make # xpcom.dll cd $_OBJDIR/xpcom/stub rm xpcom.dll make # xpcom_compat.dll cd $_OBJDIR/xpcom/obsolete rm xpcom_compat.dll make # xpcom_core.dll cd $_OBJDIR/xpcom/build rm xpcom_core.dll make # xpicleanup.exe cd $_OBJDIR/xpinstall/cleanup rm xpicleanup.exe make # xpistub.dll cd $_OBJDIR/xpinstall/stub rm xpistub.dll make # xpinstall.dll cd $_OBJDIR/xpinstall/src rm xpinstall.dll make # myspell.dll cd $_OBJDIR/extensions/spellcheck/myspell/src rm myspell.dll make # spellchk.dll cd $_OBJDIR/extensions/spellcheck/src rm spellchk.dll make # npnul32.dll cd $_OBJDIR/modules/plugins/samples/default/windows rm npnul32.dll make # js3250.dll cd $_OBJDIR/js/src rm js3250.dll make # jsd3250.dll cd $_OBJDIR/js/jsd rm jsd3250.dll make # firefox.exe cd $_OBJDIR/browser/app rm firefox.exe make # root... cd $_OBJDIR/../mozillaなお、NSS関連のモジュールは作り直す必要はありません。
手順そのものはFx2と同じ。なお、公式でもPGO buildはサポートされているのでそちらのスタイルでもokかもしれない。
なお、mozcrt19.dllを使う場合は環境変数LIBにmozcrt19用msvcrt.libのパスを先頭に追加するのを、環境変数PATHにmozcrt19.dllのパスを追加しておくのを忘れずに。
サンプルバッチ
#!/bin/sh date +"%H:%M" > compiletime.txt BUILD_OFFICIAL=1 export BUILD_OFFICIAL MOZCONFIG=/c/mozbuild/fx3/mozilla/.mozconfig.u9 export MOZCONFIG cp .mozconfig.u9 .mozconfig _OBJDIR=/c/mozbuild/fx3/obj9u _MOZCRT_W='c:\mozbuild\fx3\obj9u\memory\jemalloc\src\build\intel;' _MOZCRT_U=$_OBJDIR'/memory/jemalloc/src/build/intel' # we must use mozcrt!! LIB=$_MOZCRT_W$LIB LIBPATH=$_MOZCRT_W$LIBPATH PATH=$PATH':'$_MOZCRT_U # change PGI to PGO of config/autoconf.mk mv $_OBJDIR/config/autoconf.mk $_OBJDIR/config/autoconf.mk.pgi sed 's/PGI/PGU/g' $_OBJDIR/config/autoconf.mk.pgi > $_OBJDIR/config/autoconf.mk # AccessibleMarshal.dll cd $_OBJDIR/accessible/public/msaa rm AccessibleMarshal.dll cd .. make # browserdirprovider.dll cd $_OBJDIR/browser/components/dirprovider rm browserdirprovider.dll make # brwsrcmp.dll cd $_OBJDIR/browser/components/build rm brwsrcmp.dll make # browser/app firefox.exe cd $_OBJDIR/browser/app rm firefox.exe make # js3250.dll cd $_OBJDIR/js/src rm js3250.dll make # npnul32.dll cd $_OBJDIR/modules/plugins/samples/default/windows rm npnul32.dll make # nspr4.dll cd $_OBJDIR/nsprpub/pr/src rm nspr4.dll make # plc4.dll cd $_OBJDIR/nsprpub/lib/libc/src rm plc4.dll make # plds4.dll cd $_OBJDIR/nsprpub/lib/ds rm plds4.dll make # sqlite3.dll cd $_OBJDIR/db/sqlite3/src rm sqlite3.dll make all # xpcom.dll cd $_OBJDIR/xpcom/stub rm xpcom.dll make # xpicleanup.exe cd $_OBJDIR/xpinstall/cleanup rm xpicleanup.exe make # xul.dll cd $_OBJDIR/toolkit/library rm xul.dll make # root... cd $_OBJDIR/../mozilla date +"%H:%M" >> compiletime.txt echo start - end : cat compiletime.txt
時間がかかるけど、ある意味確実。
注
本当は-LTCG:PGOなんだけど、Fxのmakeの場合、一部ライブラリが強制的にrebuildされるためpgdファイルで保持されているタイムスタンプと再作成されたライブラリのタイムスタンプが変わってしまい、エラーとなる。しょうがないのでPGUを使ってます。
旨くDLLとEXEをリンクしている部分だけを実行できればいいんだけどね。
あと、PGOを使った最適化はしゃれにならんほどメモリを食う。1GBじゃ足りなかったよ....。2GBは欲しいかも。