MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2024-03-30, 10:32

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 9 篇文章 ] 
發表人 內容
文章發表於 : 2009-01-04, 02:22 
離線
[MozTW 版主群]
頭像

註冊時間: 2002-12-03, 21:00
文章: 744
來自: 地球
大致寫一下,免得哪天電腦掛了找不到東西 (不過 moztw 最近也掛得很頻繁就是了 ... 囧rz)。

基本的安裝 vc、安裝 mozilla build system 我就不寫了。

注意:因為 visual studio 2008 編出來的東西只支援 windows 2000 以上的系統,所以如果您還要 win98 的相容性,請使用 visual studio 2005 或更早的版本編譯。

如果您用 visual studio 2008 的目的是要編 pgo 最佳化,請仔細看完下面的東西。

修改 mozilla build system v1.3 的 Micro$oft SDK 檢查
因為 mozilla build system v1.3 並沒有預期到我們偷懶使用 VS2008 內帶的 micro$oft SDK,他會抓不到,所以我們要手動修改一下 guess-msvc.bat。在第 80 行左右會看到這個:
代碼:
SET SDK6KEY=HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0\WinSDKBuild

REM Just a base value to compare against
SET SDKVER=0
SET SDKMINORVER=0

REG QUERY "%SDK6KEY%" /v InstallationFolder >nul 2>nul
if "%SDKDIR%"=="" (
  IF %ERRORLEVEL% EQU 0 (
    FOR /F "tokens=2* usebackq delims=    " %%A IN (`REG QUERY "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0\WinSDKBuild" /v InstallationFolder`) DO SET SDKDIR=%%B
    SET SDKVER=6
  )
)
改成
代碼:
SET SDK6KEY=HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0A

REM Just a base value to compare against
SET SDKVER=0
SET SDKMINORVER=0

REG QUERY "%SDK6KEY%" /v InstallationFolder >nul 2>nul
if "%SDKDIR%"=="" (
  IF %ERRORLEVEL% EQU 0 (
    FOR /F "tokens=2* usebackq delims=    " %%A IN (`REG QUERY "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0A" /v InstallationFolder`) DO SET SDKDIR=%%B
    SET SDKVER=6
  )
)


修改 compiler & linker 的「版本檢查」
因為 seamonkey 1.x 還沒開放 vs2008 可以編,所以必需要作此修改,如下:
  • mozilla\configure,約 3019 行位置
  • mozilla\configure.in,約 422 行位置
會看到如下的碼:
代碼:
        if test "$_CC_MAJOR_VERSION" = "12"; then
            _CC_SUITE=6
        elif test "$_CC_MAJOR_VERSION" = "13"; then
            _CC_SUITE=7
        elif test "$_CC_MAJOR_VERSION" = "14"; then
            _CC_SUITE=8
else
            { echo "configure: error: This version of the MSVC compiler, $CC_VERSION , is unsupported." 1>&2; exit 1; }
        fi

        # Check linker version
        _LD_FULL_VERSION=`"${LD}" -v 2>&1 | sed -ne "$_MSVC_VER_FILTER"`
        _LD_MAJOR_VERSION=`echo ${_LD_FULL_VERSION} | $AWK -F\. '{ print $1 }'`
        if test "$_LD_MAJOR_VERSION" != "$_CC_SUITE"; then
            { echo "configure: error: The linker major version, $_LD_FULL_VERSION,  does not match the compiler suite version, $_CC_SUITE." 1>&2; exit 1; }
        fi
改成
代碼:
        if test "$_CC_MAJOR_VERSION" = "12"; then
            _CC_SUITE=6
        elif test "$_CC_MAJOR_VERSION" = "13"; then
            _CC_SUITE=7
        elif test "$_CC_MAJOR_VERSION" = "14"; then
            _CC_SUITE=8
        elif test "$_CC_MAJOR_VERSION" = "15"; then
            _CC_SUITE=8
else
            { echo "configure: error: This version of the MSVC compiler, $CC_VERSION , is unsupported." 1>&2; exit 1; }
        fi

        # Check linker version
        _LD_FULL_VERSION=`"${LD}" -v 2>&1 | sed -ne "$_MSVC_VER_FILTER"`
        _LD_MAJOR_VERSION=`echo ${_LD_FULL_VERSION} | $AWK -F\. '{ print $1 }'`
        #if test "$_LD_MAJOR_VERSION" != "$_CC_SUITE"; then
         #   { echo "configure: error: The linker major version, $_LD_FULL_VERSION,  does not match the compiler suite version, $_CC_SUITE." 1>&2; exit 1; }
#        fi


修改 WINVER 及 WIN32_WINNT 宣告
如前述,visual studio 2008 已不支援 win98,所以這兩項宣告必需往上調整。請在下兩檔案中搜尋 winver 及 win32_winnt 兩項,將後面接的「0x400」都改成「0x500」。
  • mozilla\configure
  • mozilla\configure.in

修改 LINK 參數:MAPINFO:LINES
因為 VS2008 的 link 已經不支援這個參數,所以必需要把他修掉,不然會不能編 (ps: fx3 應該無此問題)。在 mozilla\config\rules.mk 中約 199 行處會看到這個:
代碼:
ifdef MAPFILE
OS_LDFLAGS += -MAP:$(MAPFILE) -MAPINFO:LINES
#CFLAGS += -Fm$(MAPFILE)
#CXXFLAGS += -Fm$(MAPFILE)
endif
改成
代碼:
ifdef MAPFILE
OS_LDFLAGS += -MAP:$(MAPFILE) -MAPINFO:EXPORTS
#CFLAGS += -Fm$(MAPFILE)
#CXXFLAGS += -Fm$(MAPFILE)
endif


修改 mozilla\xpcom\base\nsStackFrameWin.cpp 以避免 C2664 錯誤
  • 在 326 行左右會看到這個:
    代碼:
            /*
             * Not loaded, here's the magic.
             * Go through all the modules.
             */
            enumRes = _EnumerateLoadedModules(aProcess, callbackEspecial, (PVOID)&aAddr);
            if (FALSE != enumRes)
    改成
    代碼:
            /*
             * Not loaded, here's the magic.
             * Go through all the modules.
             */
            enumRes = _EnumerateLoadedModules(aProcess, (PENUMLOADED_MODULES_CALLBACK)callbackEspecial, (PVOID)&aAddr);
            if (FALSE != enumRes)
  • 在 380 行左右會看到這個:
    代碼:
            /*
             * Not loaded, here's the magic.
             * Go through all the modules.
             */
            enumRes = _EnumerateLoadedModules64(aProcess, callbackEspecial64, (PVOID)&aAddr);
            if (FALSE != enumRes)
    改成:
    代碼:
            /*
             * Not loaded, here's the magic.
             * Go through all the modules.
             */
            enumRes = _EnumerateLoadedModules64(aProcess, (PENUMLOADED_MODULES_CALLBACK64)callbackEspecial64, (PVOID)&aAddr);
            if (FALSE != enumRes)

修改 mozilla\netwerk\system\win32\nsNotifyAddrListener.cpp 以避免 C2365 錯誤
代碼:
Index: netwerk/system/win32/nsNotifyAddrListener.cpp
===================================================================
RCS file: /cvsroot/mozilla/netwerk/system/win32/nsNotifyAddrListener.cpp,v
retrieving revision 1.4.2.3
diff -u -r1.4.2.3 nsNotifyAddrListener.cpp
--- netwerk/system/win32/nsNotifyAddrListener.cpp   8 May 2006 05:21:32 -0000   1.4.2.3
+++ netwerk/system/win32/nsNotifyAddrListener.cpp   7 Feb 2008 22:38:12 -0000
@@ -67,6 +67,7 @@

 #define IF_TYPE_SOFTWARE_LOOPBACK       24

+#ifndef _NLDEF_
 typedef enum {
     IpPrefixOriginOther = 0,
     IpPrefixOriginManual,
@@ -91,6 +92,12 @@
     IpDadStateDeprecated,
     IpDadStatePreferred
 } IP_DAD_STATE;
+       #else
+typedef NL_PREFIX_ORIGIN IP_PREFIX_ORIGIN;
+typedef NL_SUFFIX_ORIGIN IP_SUFFIX_ORIGIN;
+typedef NL_DAD_STATE IP_DAD_STATE;
+#endif
+

 typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
     union {
@@ -148,6 +155,7 @@
     SOCKET_ADDRESS Address;
 } IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;

+#ifndef _IFDEF_
 typedef enum {
     IfOperStatusUp = 1,
     IfOperStatusDown,
@@ -157,6 +165,7 @@
     IfOperStatusNotPresent,
     IfOperStatusLowerLayerDown
 } IF_OPER_STATUS;
+#endif

 typedef struct _IP_ADAPTER_ADDRESSES {
     union {


將 winable.h 改成 winuser.h:
自 2005/7 之後的 windows sdk 已經不再包含 winable.h,理由是跟 winuser.h 完全重覆。
  • mozilla\widget\src\windows\nsWindow.cpp,104 行左右:
    代碼:
    //#include <winuser.h>
    #include <zmouse.h>
    //#include "sysmets.h"
    #include "nsGfxCIID.h"
    #include "resource.h"
    #include <commctrl.h>
    #include "prtime.h"
    #include "nsIRenderingContextWin.h"
    #include "nsIImage.h"

    #ifdef ACCESSIBILITY
    #include "OLEIDL.H"
    #include "winable.h"
    改成:
    代碼:
    #include <zmouse.h>
    //#include "sysmets.h"
    #include "nsGfxCIID.h"
    #include "resource.h"
    #include <commctrl.h>
    #include "prtime.h"
    #include "nsIRenderingContextWin.h"
    #include "nsIImage.h"

    #ifdef ACCESSIBILITY
    #include "OLEIDL.H"
    #include <winuser.h>
    //#include "winable.h"

移除 rpcndr.lib 參照
因 Visual Studio 2008 已經沒有 rpcndr.lib,故我們要把參照到這個 lib 的檔修改一下。
mozilla/accessible/public/msaa/Makefile.in
代碼:
--- Makefile.in   Sat Dec 27 13:40:14 2008
+++ Makefile.in   Sat Dec 27 13:24:38 2008
@@ -86,7 +86,6 @@
 
 OS_LIBS = \
    kernel32.lib \
-   rpcndr.lib \
    rpcns4.lib \
    rpcrt4.lib \
    oleaut32.lib \

指定 PGC 檔的存放位置
在呼叫 vcvars32.bat 後,請手動加一行:
set VCPROFILE_PATH=path

optimize 參數中加入 /GL 指令
.mozconfig 中的 optimize 參數要加入 /GL。

加入 mmoy manifest patch
在您下完 source code 後,請修改幾個檔:
  • mozilla\xpcom\typelib\xpt\tools\Makefile.in,約 48 行左右的位置
    代碼:
    SIMPLE_PROGRAMS = xpt_dump$(BIN_SUFFIX) xpt_link$(BIN_SUFFIX)
    改成
    代碼:
    SIMPLE_PROGRAMS = xpt_dump$(BIN_SUFFIX) xpt_link$(BIN_SUFFIX) xpt_dump$(BIN_SUFFIX).manifest xpt_link$(BIN_SUFFIX).manifest
  • mozilla\xpcom\typelib\xpidl\Makefile.in, 約 49 行左右的位置
    代碼:
    PROGRAM      = xpidl$(BIN_SUFFIX)
    改成
    代碼:
    PROGRAM      = xpidl$(BIN_SUFFIX) xpidl$(BIN_SUFFIX).manifest

    參考自這個。這可以解決編到一半 xpidl 掛掉的問題。
  • mozilla\xpfe\bootstrap\Makefile.in,約 118 行左右的位置
    代碼:
    ifeq ($(USE_SHORT_LIBNAME),1)
    PROGRAM      = $(MOZ_APP_NAME)$(BIN_SUFFIX)
    else
    PROGRAM      = $(MOZ_APP_NAME)-bin$(BIN_SUFFIX)
    endif
    改成
    代碼:
    ifeq ($(USE_SHORT_LIBNAME),1)
    PROGRAM      = $(MOZ_APP_NAME)$(BIN_SUFFIX) $(MOZ_APP_NAME)$(BIN_SUFFIX).manifest
    else
    PROGRAM      = $(MOZ_APP_NAME)-bin$(BIN_SUFFIX) $(MOZ_APP_NAME)-bin$(BIN_SUFFIX).manifest
    endif

    這可以在編完後不用再自己 copy seamonkey.exe.manifest
為 mozilla\security\nss 下的檔案加上 CL 的最佳化命令
不知為何那個目錄下的所有檔案,都不鳥 .mozconfig 中的 optimize 指定參數,所以只好手動加嘍。

開啟 mozilla\security\coreconf\win32.mk,在大約 115 行的位置會看到這個
代碼:
else # !NS_USE_GCC
    ifdef BUILD_OPT
   OS_CFLAGS  += -MD
   OPTIMIZER  += -O
   DEFINES    += -UDEBUG -U_DEBUG -DNDEBUG
   DLLFLAGS   += -OUT:"$@"

手動把 .mozconfig 中 optimize 的參數加到「optimizer += -o」的後面吧,記得要存檔。
4/27 編輯:1.1.9 目錄名已經變成 coreconf,原先是 coreconfig。

統一 mozilla\security\nss\lib\freebl 內的最佳化參數
freebl 下的所有原始碼都會強制以 -Ox 編譯,這有時(?)會造成問題。

開啟 mozilla\security\nss\lib\freebl\Makefile,在大約 90 行的位置會看到這個:
代碼:
else
    MPI_SRCS += mpi_x86_asm.c
    DEFINES += -DMP_ASSEMBLY_MULTIPLY -DMP_ASSEMBLY_SQUARE
    DEFINES += -DMP_ASSEMBLY_DIV_2DX1D -DMP_USE_UINT_DIGIT -DMP_NO_MP_WORD
    ifdef BUILD_OPT
     OPTIMIZER += -Ox  # maximum optimization for freebl
    endif
endif
endif

在 「Optimizer += -Ox」前面加「#」把它註解掉,記得要存檔。此項可改可不改,看個人。

取 log file,為 pgx 作準備
原先編譯的指令是:

make -f client.mk ooxx

建議使用 pipe 的方式改成:

make -f client.mk ooxx 2>&1 | tee logfilename

這樣的好處是,您可以在畫面上看到執行的過程,同時也會產生一個一模一樣的完整 logfile。

_________________
想讓 Internet Explorer 當掉嗎?

「方法一」 - 被 google 檔掉的樣子,開不起來

「方法二」


最後由 s793016 於 2009-01-08, 00:11 編輯,總共編輯了 2 次。

回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20090103 SeaMonkey/1.1.14 (s793016/SSE2/PGU)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-01-04, 02:30 
離線
[MozTW 版主群]
頭像

註冊時間: 2002-12-03, 21:00
文章: 744
來自: 地球
如果您在先前編譯出來的東西一切正常的話,就可以絲續往下進行了:

重新以 -ltcg:pgi 編譯產生「調教用」版本
這步算是最花時間的。
  1. 把剛編出來的 obj\dist\bin 目錄備份一下,然後把整個 obj 目錄刪掉
  2. 把 .mozconfig 中的 LINK 參數改成 -LTCG:PGI
  3. 重新 make 一次
好了之後,在 mozilla\dist\bin 會產生「調教版」。


「調教」您的 seamonkey/firefox
您可以把您自己在 program files 的 seamonkey/firefox 主目錄備份起來,然後用這個調教版直接蓋下去。

「調教版」因為需要設定環境變數,所以必需在 dos 下啟動。
  1. 設定好 VC 的各種環境變數 (懶得弄就執行 vsvars32),最重要的 vcprofile_path 一定要設。
  2. 執行「調教版」
  3. 儘可能開啟各種類型的網頁、使用各種功能、拉下各種選單。(mmoy 建議至少 150 個網頁)
在關閉「調教版」後,會產生一堆 pgc 檔在 vcprofile_path 目錄內。如果您沒設 vcprofile_path 則會產生在該「調教版」同一目錄內。

重新以 -ltcg:pgo 產生「調教用」版本
這步花的時間比 -ltcg:pgi 少一半。
  1. 把 .mozconfig 中的 LINK 參數改成 -LTCG:PGO
  2. 重新 make 一次
如果您 link pgo 過程中一直出現錯誤無法產生目的程式,您就必需改用 -LTCG:PGU 去重新 make 一次。

至此產生的就是最終最佳化版 (pgo/pgu)。

在您丟出去前先測試一下,如果會「當掉」,代表您「調教版」看的網頁不夠多,再從「調教版」看更多的網頁,再重新 make pgo。

把 manifest 檔埋到主程式中
Windows 執行檔中,manifest 的存放位置其實有兩種:
  • 跟主程式放一起
  • 埋到主程式內

在 windows xp 以下系統,如果兩者同時存在,系統會優先使用主程式外面的那一份,但在 windows 2003 以上系統 (含 XP x64),系統只會認得埋在主程式內的那份,故如果您的程式想要在最多的系統上順利的運行,把 manifest 埋到主程式中是有必要的。

首先,先把 vc 的環境變數設定好,然後到 mozilla\obj\dist\bin 下,執行:
代碼:
mt -NOLOGO -MANIFEST seamonkey.exe.manifest -OUTPUTRESOURCE:seamonkey.exe;1

如果您是編 firefox,就把 seamonkey 字樣改成 firefox。

_________________
想讓 Internet Explorer 當掉嗎?

「方法一」 - 被 google 檔掉的樣子,開不起來

「方法二」


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20090103 SeaMonkey/1.1.14 (s793016/SSE2/PGU)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-01-04, 02:55 
離線
[MozTW 版主群]
頭像

註冊時間: 2002-12-03, 21:00
文章: 744
來自: 地球
我自己使用的設定檔 for 1.1.1.14

內含:
.mozconfig - 不用解釋了吧
big5.ut - UAO 2.50 Big5 => unicode 表
*.patch - 針對 seamonkey 1.1.14 的 patch 檔
mypre.sh - 自動把 patch 打進去的腳本檔,在 mozilla build system 下執行,一般只有抓新源碼時會執行一次
mypre-restore.sh - 自動把 mypre.sh 作過的改變全部還原的腳本檔,一樣在 mozilla build system 下執行

本串謹供參考

_________________
想讓 Internet Explorer 當掉嗎?

「方法一」 - 被 google 檔掉的樣子,開不起來

「方法二」


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20090103 SeaMonkey/1.1.14 (s793016/SSE2/PGU)
 個人資料  
引用回覆  
文章發表於 : 2011-09-25, 03:21 
離線
頭像

註冊時間: 2008-09-05, 13:37
文章: 77
您好,請教一下

您的這份教學,用在現在的Firefox 7.0是否還是用?

我照著您這篇修改,發現有多檔在Firefox 7.0 source裡面已經沒有了
我想要做PGO編譯,請問您可以指導一下嗎?

謝謝!

_________________
lawlietfox-My Google Code Project


回頂端
Mozilla/5.0 (Windows NT 6.1; rv:7.0) Gecko/20110924 Firefox/7.0
 個人資料  
引用回覆  
文章發表於 : 2011-09-26, 23:27 
離線
[MozTW 版主群]
頭像

註冊時間: 2002-12-03, 21:00
文章: 744
來自: 地球
Lawliet 寫:
您好,請教一下

您的這份教學,用在現在的Firefox 7.0是否還是用?

我照著您這篇修改,發現有多檔在Firefox 7.0 source裡面已經沒有了
我想要做PGO編譯,請問您可以指導一下嗎?

謝謝!

不適用。

firefox 7.0 應該是用 gecko 1.9。

基本上那個年代 mozilla 還不支援 vs2008,所以還要改東改西的,firefox 7.0 應該可以直上 vs2010了。

基本上 firefox 編的人最多,也最沒有難度,隨便上 google 查一下就有很多中文的經驗談了。

原則上 firefox 編譯已經簡單到只要 弄好 .mozconfig,然後:
make -f client.mk build <=== 一般編譯
make -f client.mk build MOZ_PROFILE_GENERATE=1 <=== pgi 調教版
make -f client.mk build MOZ_PROFILE_USE=1 <=== 調教完後的 pgo 版

ps: 當然 mdc 上列的該裝的東西還是都得要裝就是了。

_________________
想讓 Internet Explorer 當掉嗎?

「方法一」 - 被 google 檔掉的樣子,開不起來

「方法二」


回頂端
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20110910 Firefox/6.0.2 SeaMonkey/2.3.3
 個人資料  
引用回覆  
文章發表於 : 2011-10-03, 15:25 
離線
頭像

註冊時間: 2008-09-05, 13:37
文章: 77
您好,感謝您的回復

我目前已經可以在VS2010SP1上成功編譯一般版Firefox
但我對於PGO編譯仍然有些疑問

是否我一定要先編譯一個一般版Firefox
才可以進行pgi 調教版的編譯?

這是我先前自己編譯的PGO版用的mozconfig
但是有一個問題,就是一次編譯跟二次編譯完的binary
它們的性能是相同,既最佳化失敗

我想用您的方法進行PGO優化編譯
這是我的mozconfig


代碼:
. $topsrcdir/browser/config/mozconfig
ac_add_options --enable-application=browser
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --disable-installer --disable-updater --disable-update-channel
ac_add_options --disable-accessibility
#
## optimize
ac_add_options --enable-profile-guided-optimization
ac_add_options --enable-optimize="-O2 -GL -arch:SSE2 -GS"
#ac_add_options --enable-optimize="-O2 -Ot -Ob2 -Oy -GF -GL -arch:SSE2"
#ac_add_options --enable-optimize="-O2 -Ot -Oy -Gy -GF -GL -GS- -GR- -arch:SSE2"
#ac_add_options --enable-jemalloc
export MOZ_OPTIMIZE_LDFLAGS="-opt:ref,icf"
mk_add_options MOZ_OPTIMIZE_LDFLAGS="-opt:ref,icf"
ac_add_options --enable-official-branding
#
## form tete009
ac_add_options --disable-auto-deps
#ac_add_options --disable-jemalloc
ac_add_options --disable-crashreporter
ac_add_options --disable-activex-scripting
ac_add_options --disable-activex
#
##  auto PGO build
mk_add_options MOZ_MAKE_FLAGS="-j1"
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/ff-pgo
#mk_add_options PROFILE_GEN_SCRIPT='$(PYTHON) $(MOZ_OBJDIR)/_profile/pgo/profileserver.py'
#mk_add_options PROFILE_GEN_SCRIPT='cscript C:/Users/Lawliet/Desktop/c_Firefox/PgoMsg.vbs'
mk_add_options PROFILE_GEN_SCRIPT="sh E:/SystemTools/win32_Firefox/run-firefox.sh"
#mk_add_options PYTHONPATH='$(OBJDIR)/_profile/pgo'
#mk_add_options MOZ_CO_PROJECT=browser
#ac_add_options --target=i686-pc-mingw32
#ac_add_options --host=x86_64-pc-mingw32


是否我現在只需要添加這些項目進去
代碼:
export LDFLAGS="-LTCG:PGU"
mk_add_options LDFLAGS="-LTCG:PGU"
export MOZ_OPTIMIZE_LDFLAGS="-opt:ref -LTCG:PGU"
mk_add_options MOZ_OPTIMIZE_LDFLAGS="-opt:ref -LTCG:PGU"
#export LDFLAGS="-LTCG:PGI"
#mk_add_options LDFLAGS="-LTCG:PGI"
#export MOZ_OPTIMIZE_LDFLAGS="-opt:ref -LTCG:PGI"
#mk_add_options MOZ_OPTIMIZE_LDFLAGS="-opt:ref -LTCG:PGI"


並註釋掉以下這項
代碼:
mk_add_options PROFILE_GEN_SCRIPT="sh E:/SystemTools/win32_Firefox/run-firefox.sh"


然後make -f client.mk build MOZ_PROFILE_GENERATE=1
產生調教版,產生pgc
然後再make -f client.mk build MOZ_PROFILE_USE=1
得到最終的優化版
請問步驟是這樣嗎?


另外vcprofile_path環境變數怎麼設?
編輯vcvars32.bat內容在裡面加上這段嗎?
代碼:
set VCPROFILE_PATH=path

還是cmd內執行?

如果沒有設,那pgc文件我應該放到哪裡去呢?

不好意思問題很多
因為我一直失敗

謝謝

_________________
lawlietfox-My Google Code Project


回頂端
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20110930 Firefox/7.0.1
 個人資料  
引用回覆  
文章發表於 : 2011-10-03, 17:56 
離線
[MozTW 版主群]
頭像

註冊時間: 2002-12-03, 21:00
文章: 744
來自: 地球
Lawliet 寫:
您好,感謝您的回復

我目前已經可以在VS2010SP1上成功編譯一般版Firefox
但我對於PGO編譯仍然有些疑問

是否我一定要先編譯一個一般版Firefox
才可以進行pgi 調教版的編譯?

不需要。

先編一般版的動作只是要確認能不能編而已,以便確認編出問題是因為 pgo 還是本身 source 就有問題。
Lawliet 寫:
這是我先前自己編譯的PGO版用的mozconfig
但是有一個問題,就是一次編譯跟二次編譯完的binary
它們的性能是相同,既最佳化失敗

我想用您的方法進行PGO優化編譯
這是我的mozconfig


代碼:
. $topsrcdir/browser/config/mozconfig
ac_add_options --enable-application=browser
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --disable-installer --disable-updater --disable-update-channel
ac_add_options --disable-accessibility
#
## optimize
ac_add_options --enable-profile-guided-optimization
ac_add_options --enable-optimize="-O2 -GL -arch:SSE2 -GS"
#ac_add_options --enable-optimize="-O2 -Ot -Ob2 -Oy -GF -GL -arch:SSE2"
#ac_add_options --enable-optimize="-O2 -Ot -Oy -Gy -GF -GL -GS- -GR- -arch:SSE2"
#ac_add_options --enable-jemalloc
export MOZ_OPTIMIZE_LDFLAGS="-opt:ref,icf"
mk_add_options MOZ_OPTIMIZE_LDFLAGS="-opt:ref,icf"
ac_add_options --enable-official-branding
#
## form tete009
ac_add_options --disable-auto-deps
#ac_add_options --disable-jemalloc
ac_add_options --disable-crashreporter
ac_add_options --disable-activex-scripting
ac_add_options --disable-activex
#
##  auto PGO build
mk_add_options MOZ_MAKE_FLAGS="-j1"
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/ff-pgo
#mk_add_options PROFILE_GEN_SCRIPT='$(PYTHON) $(MOZ_OBJDIR)/_profile/pgo/profileserver.py'
#mk_add_options PROFILE_GEN_SCRIPT='cscript C:/Users/Lawliet/Desktop/c_Firefox/PgoMsg.vbs'
mk_add_options PROFILE_GEN_SCRIPT="sh E:/SystemTools/win32_Firefox/run-firefox.sh"
#mk_add_options PYTHONPATH='$(OBJDIR)/_profile/pgo'
#mk_add_options MOZ_CO_PROJECT=browser
#ac_add_options --target=i686-pc-mingw32
#ac_add_options --host=x86_64-pc-mingw32


是否我現在只需要添加這些項目進去
代碼:
export LDFLAGS="-LTCG:PGU"
mk_add_options LDFLAGS="-LTCG:PGU"
export MOZ_OPTIMIZE_LDFLAGS="-opt:ref -LTCG:PGU"
mk_add_options MOZ_OPTIMIZE_LDFLAGS="-opt:ref -LTCG:PGU"
#export LDFLAGS="-LTCG:PGI"
#mk_add_options LDFLAGS="-LTCG:PGI"
#export MOZ_OPTIMIZE_LDFLAGS="-opt:ref -LTCG:PGI"
#mk_add_options MOZ_OPTIMIZE_LDFLAGS="-opt:ref -LTCG:PGI"


並註釋掉以下這項
代碼:
mk_add_options PROFILE_GEN_SCRIPT="sh E:/SystemTools/win32_Firefox/run-firefox.sh"


這幾行不應該出現在 mozconfig 內:
ac_add_options --enable-profile-guided-optimization
ac_add_options --enable-official-branding

這行加了會自動調教,問題是他只會開一個網頁然後過10秒關掉firefox,不如自己來調教。
mk_add_options PROFILE_GEN_SCRIPT="sh E:/SystemTools/win32_Firefox/run-firefox.sh"
Lawliet 寫:
然後make -f client.mk build MOZ_PROFILE_GENERATE=1
產生調教版,產生pgc
然後再make -f client.mk build MOZ_PROFILE_USE=1
得到最終的優化版
請問步驟是這樣嗎?

1.make -f client.mk build MOZ_PROFILE_GENERATE=1
產生調教版
2.然後去執行「編出來的 firefox」跑各網頁、各種設定、好了之後關閉,會產生一堆 .pgc 檔,這就是調教的數據。
3.然後再make -f client.mk build MOZ_PROFILE_USE=1
得到最終的優化版
Lawliet 寫:
另外vcprofile_path環境變數怎麼設?
編輯vcvars32.bat內容在裡面加上這段嗎?
代碼:
set VCPROFILE_PATH=path

還是cmd內執行?
如果沒有設,那pgc文件我應該放到哪裡去呢?

都可以,不設也可以。

設了會讓 2 產生的 pgc 檔集中在您設的目錄,不設的話 pgc 檔會在 exe/ dll 所在的目錄。

_________________
想讓 Internet Explorer 當掉嗎?

「方法一」 - 被 google 檔掉的樣子,開不起來

「方法二」


回頂端
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20110910 Firefox/6.0.2 SeaMonkey/2.3.3
 個人資料  
引用回覆  
文章發表於 : 2011-10-03, 21:37 
離線
頭像

註冊時間: 2008-09-05, 13:37
文章: 77
謝謝

請問一次編譯後,調教的FIREFOX有指定路徑嗎?
因為在dist/bin跟dist/firefox裡面
都有一個可以執行的firefox

_________________
lawlietfox-My Google Code Project


回頂端
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20110930 Firefox/7.0.1
 個人資料  
引用回覆  
文章發表於 : 2011-10-04, 20:42 
離線
[MozTW 版主群]
頭像

註冊時間: 2002-12-03, 21:00
文章: 744
來自: 地球
Lawliet 寫:
謝謝

請問一次編譯後,調教的FIREFOX有指定路徑嗎?
因為在dist/bin跟dist/firefox裡面
都有一個可以執行的firefox

我編 seamonkey 只會出現在 dist/bin ,所以無法回答您。

_________________
想讓 Internet Explorer 當掉嗎?

「方法一」 - 被 google 檔掉的樣子,開不起來

「方法二」


回頂端
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20110910 Firefox/6.0.2 SeaMonkey/2.3.3
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 9 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 4 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群