MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-06-24, 16:52

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





發表新文章 回覆主題  [ 4 篇文章 ] 
發表人 內容
文章發表於 : 2007-11-24, 17:40 
離線
[MozTW 版主群]
頭像

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

基本的安裝 vs2005、安裝 cygwin、安裝 Intel C++ Compiler 我就不寫了。當然,各軟體該修該改的還是一樣也跑不掉就是了。

以前在某個地方看到某人說「用 Intel C++ Compiler for Win32 編 firefox『完全不用修改 firefox 源碼包』」,我可以很肯定告訴您,他在吹牛。mozilla source 在 linux 下要改 compiler 是很方便的,但在 win32 下可完全不是那麼一回事。

接下來教您如何修改 mozilla source 讓 make 能用 intel 的東西工作。

修改 mozilla make 相關檔案讓 Intel C++ 能正常運作
    /mozilla/configure
  • 在 3020 行左右會看到這個:
    代碼:
                 _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
             INCREMENTAL_LINKER=1
     
             # Check midl version

    改成:
    代碼:
                 _CC_SUITE=6
             elif test "$_CC_MAJOR_VERSION" = "13"; then
                 _CC_SUITE=7
            elif test "$_CC_MAJOR_VERSION" = "14" -o "$CC" = "icl"; then
                 _CC_SUITE=8
             else
                 { echo "configure: error: This version of the MSVC compiler, $CC_VERSION , is unsupported." 1>&2; exit 1; }
             fi
     
        if test "$CC" == "cl"; then
             # 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
             fi
             INCREMENTAL_LINKER=1
     
             # Check midl version
  • 在 5672 行左右會看到這個:
    代碼:
     *cygwin*|*mingw*|*mks*|*msvc*|*wince)
         if test -n "$_WIN32_MSVC"; then
             HOST_AR=lib
             HOST_AR_FLAGS='-NOLOGO -OUT:"$@"'
             HOST_CFLAGS="$HOST_CFLAGS -TC -nologo -Fd\$(HOST_PDBFILE)"
             HOST_RANLIB='echo ranlib'

    改成:
    代碼:
     *cygwin*|*mingw*|*mks*|*msvc*|*wince)
         if test -n "$_WIN32_MSVC"; then
             HOST_AR=xilib
             HOST_AR_FLAGS='-NOLOGO -OUT:"$@"'
             HOST_CFLAGS="$HOST_CFLAGS -TC -nologo -Fd\$(HOST_PDBFILE)"
             HOST_RANLIB='echo ranlib'
  • 在 6311 行左右會看到這個:
    代碼:
             IMPORT_LIB_SUFFIX=dll.a
         else
             TARGET_COMPILER_ABI=msvc
             HOST_CC='$(CC)'
             HOST_CXX='$(CXX)'
             HOST_LD='$(LD)'
             AR='lib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'

    改成:
    代碼:
             IMPORT_LIB_SUFFIX=dll.a
         else
             TARGET_COMPILER_ABI=msvc
             HOST_CC='$(CC)'
             HOST_CXX='$(CXX)'
             HOST_LD='$(LD)'
             AR='xilib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'
    /mozilla/configure.in
  • 在 423 行左右會看到這個:
    代碼:
                 _CC_SUITE=6
             elif test "$_CC_MAJOR_VERSION" = "13"; then
                 _CC_SUITE=7
             elif test "$_CC_MAJOR_VERSION" = "14"; then
                 _CC_SUITE=8
             else
                 AC_MSG_ERROR([This version of the MSVC compiler, $CC_VERSION , is unsupported.])
             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
                AC_MSG_ERROR([The linker major version, $_LD_FULL_VERSION,  does not match the compiler suite version, $_CC_SUITE.])
             fi
             INCREMENTAL_LINKER=1
     
             # Check midl version

    改成:
    代碼:
                 _CC_SUITE=6
             elif test "$_CC_MAJOR_VERSION" = "13"; then
                 _CC_SUITE=7
             elif test "$_CC_MAJOR_VERSION" = "14" -o "$CC" = "icl"; then
                 _CC_SUITE=8
             else
                 AC_MSG_ERROR([This version of the MSVC compiler, $CC_VERSION , is unsupported.])
             fi

        if test "$CC" == "cl"; then
            # 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
                AC_MSG_ERROR([The linker major version, $_LD_FULL_VERSION,  does not match the compiler suite version, $_CC_SUITE.])
             fi
             fi
             INCREMENTAL_LINKER=1
     
             # Check midl version
  • 在 1298 行左右會看到這個:
    代碼:
     *cygwin*|*mingw*|*mks*|*msvc*|*wince)
         if test -n "$_WIN32_MSVC"; then
             HOST_AR=lib
             HOST_AR_FLAGS='-NOLOGO -OUT:"$@"'
             HOST_CFLAGS="$HOST_CFLAGS -TC -nologo -Fd\$(HOST_PDBFILE)"
             HOST_RANLIB='echo ranlib'

    改成:
    代碼:
     *cygwin*|*mingw*|*mks*|*msvc*|*wince)
         if test -n "$_WIN32_MSVC"; then
             HOST_AR=xilib
             HOST_AR_FLAGS='-NOLOGO -OUT:"$@"'
             HOST_CFLAGS="$HOST_CFLAGS -TC -nologo -Fd\$(HOST_PDBFILE)"
             HOST_RANLIB='echo ranlib'
  • 在 1735 行左右會看到這個:
    代碼:
             IMPORT_LIB_SUFFIX=dll.a
         else
             TARGET_COMPILER_ABI=msvc
             HOST_CC='$(CC)'
             HOST_CXX='$(CXX)'
             HOST_LD='$(LD)'
             AR='lib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'

    改成:
    代碼:
             IMPORT_LIB_SUFFIX=dll.a
         else
             TARGET_COMPILER_ABI=msvc
             HOST_CC='$(CC)'
             HOST_CXX='$(CXX)'
             HOST_LD='$(LD)'
             AR='xilib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'
    /mozilla/directory/c-sdk/build.mk
  • 在 399 行左右會看到這個:
    代碼:
     DEBUG_FLAGS=-PDB:NONE
     endif
     
     LINK_EXE        = $(CYGWIN_WRAPPER) link $(DEBUG_LINK_OPT) -OUT:"$@" -MAP $(ALDFLAGS) $(LDFLAGS) $(ML_DEBUG) \
         $(LCFLAGS) -NOLOGO $(DEBUG_FLAGS) -INCREMENTAL:NO \
         -NODEFAULTLIB:MSVCRTD -SUBSYSTEM:$(SUBSYSTEM) $(DEPLIBS) \
         $(EXTRA_LIBS) $(PLATFORMLIBS) $(OBJS)
     LINK_LIB        = $(CYGWIN_WRAPPER) lib -OUT:"$@"  $(OBJS)
     LINK_DLL        = $(CYGWIN_WRAPPER) link $(DEBUG_LINK_OPT) -nologo -MAP -DLL $(DEBUG_FLAGS) \
             $(ML_DEBUG) -SUBSYSTEM:$(SUBSYSTEM) $(LLFLAGS) $(DLL_LDFLAGS) \
             $(EXTRA_LIBS) -out:"$@" $(OBJS)
     endif # NS_USE_GCC

    改成:
    代碼:
     DEBUG_FLAGS=-PDB:NONE
     endif
     
     LINK_EXE        = $(CYGWIN_WRAPPER) xilink $(DEBUG_LINK_OPT) -OUT:"$@" -MAP $(ALDFLAGS) $(LDFLAGS) $(ML_DEBUG) \
         $(LCFLAGS) -NOLOGO $(DEBUG_FLAGS) -INCREMENTAL:NO \
         -NODEFAULTLIB:MSVCRTD -SUBSYSTEM:$(SUBSYSTEM) $(DEPLIBS) \
         $(EXTRA_LIBS) $(PLATFORMLIBS) $(OBJS)
     LINK_LIB        = $(CYGWIN_WRAPPER) xilib -OUT:"$@"  $(OBJS)
     LINK_DLL        = $(CYGWIN_WRAPPER) xilink $(DEBUG_LINK_OPT) -nologo -MAP -DLL $(DEBUG_FLAGS) \
             $(ML_DEBUG) -SUBSYSTEM:$(SUBSYSTEM) $(LLFLAGS) $(DLL_LDFLAGS) \
             $(EXTRA_LIBS) -out:"$@" $(OBJS)
     endif # NS_USE_GCC
    /mozilla/directory/c-sdk/config/WIN32.mk
  • 在 49 行左右會看到這個:
    代碼:
     SHELL = $(MOZ_TOOLS_FLIPPED)/bin/shmsdos.exe
     endif
     
     CC = cl
     CCC = cl
     LINK = link
     AR = lib -NOLOGO -OUT:"$@"
     RANLIB = echo
     BSDECHO = echo
     NSINSTALL = nsinstall

    改成:
    代碼:
     SHELL = $(MOZ_TOOLS_FLIPPED)/bin/shmsdos.exe
     endif
     
     CC = icl
     CCC = icl
     LINK = xilink
     AR = xilib -NOLOGO -OUT:"$@"
     RANLIB = echo
     BSDECHO = echo
     NSINSTALL = nsinstall
    /mozilla/directory/c-sdk/configure
  • 在 3884 行左右會看到這個:
    代碼:
             # Use temp file for windres (bug 213281)
             RC="$WINDRES -O coff --use-temp-file"
         else
             CC=cl
             CXX=cl
             LD=link
             AR='lib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'

    改成:
    代碼:
             # Use temp file for windres (bug 213281)
             RC="$WINDRES -O coff --use-temp-file"
         else
             CC=icl
             CXX=icl
             LD=xilink
             AR='xilib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'
    /mozilla/directory/c-sdk/configure.in
  • 在 1340 行左右會看到這個:
    代碼:
             # Use temp file for windres (bug 213281)
             RC="$WINDRES -O coff --use-temp-file"
         else
             CC=cl
             CXX=cl
             LD=link
             AR='lib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'

    改成:
    代碼:
             # Use temp file for windres (bug 213281)
             RC="$WINDRES -O coff --use-temp-file"
         else
             CC=icl
             CXX=icl
             LD=xilink
             AR='xilib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'
    /mozilla/nsprpub/configure
  • 在 2390 行左右會看到這個:
    代碼:
       *)
       IFS="${IFS=    }"; ac_save_ifs="$IFS"; IFS=":"
       ac_dummy="$PATH"
       for ac_dir in $ac_dummy; do
         test -z "$ac_dir" && ac_dir=.
         if test -f $ac_dir/$ac_word; then
           ac_cv_path_AR="$ac_dir/$ac_word"
           break
         fi
       done
        IFS="$ac_save_ifs"
       ;;
     esac

    改成:
    代碼:
       *)
       IFS="${IFS=    }"; ac_save_ifs="$IFS"; IFS=":"
       ac_dummy="$PATH"
    #  for ac_dir in $ac_dummy; do
    #    test -z "$ac_dir" && ac_dir=.
    #    if test -f $ac_dir/$ac_word; then
          ac_cv_path_AR="xilib"
    #      break
    #    fi
    #  done
       IFS="$ac_save_ifs"
       ;;
     esac
  • 在 2423 行左右會看到這個:
    代碼:
     else
       case "$LD" in
       /*)
       ac_cv_path_LD="$LD" # Let the user override the test with a path.
       ;;
       ?:/*)         
       ac_cv_path_LD="$LD" # Let the user override the test with a dos path.
       ;;
       *)
       IFS="${IFS=    }"; ac_save_ifs="$IFS"; IFS=":"
       ac_dummy="$PATH"
       for ac_dir in $ac_dummy; do
         test -z "$ac_dir" && ac_dir=.
         if test -f $ac_dir/$ac_word; then
           ac_cv_path_LD="$ac_dir/$ac_word"
           break
         fi
       done
       IFS="$ac_save_ifs"
       ;;
     esac

    改成:
    代碼:
     else
       case "$LD" in
       /*)
       ac_cv_path_LD="$LD" # Let the user override the test with a path.
       ;;
       ?:/*)         
       ac_cv_path_LD="$LD" # Let the user override the test with a dos path.
       ;;
       *)
       IFS="${IFS=    }"; ac_save_ifs="$IFS"; IFS=":"
       ac_dummy="$PATH"
    #  for ac_dir in $ac_dummy; do
    #    test -z "$ac_dir" && ac_dir=.
    #    if test -f $ac_dir/$ac_word; then
          ac_cv_path_LD="xilink"
    #      break
    #    fi
    #  done
       IFS="$ac_save_ifs"
       ;;
     esac
  • 在 3938 行左右會看到這個:
    代碼:
             # Use temp file for windres (bug 213281)
             RCFLAGS='-O coff --use-temp-file'
         else
             CC=cl
             CXX=cl
             LD=link
             AR='lib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'

    改成:
    代碼:
             # Use temp file for windres (bug 213281)
             RCFLAGS='-O coff --use-temp-file'
         else
             CC=icl
             CXX=icl
             LD=xilink
             AR='xilib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'
    /mozilla/nsprpub/configure.in
  • 在 1462 行左右會看到這個:
    代碼:
             # Use temp file for windres (bug 213281)
             RCFLAGS='-O coff --use-temp-file'
         else
             CC=cl
             CXX=cl
             LD=link
             AR='lib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'

    改成:
    代碼:
             # Use temp file for windres (bug 213281)
             RCFLAGS='-O coff --use-temp-file'
         else
             CC=icl
             CXX=icl
             LD=xilink
             AR='xilib -NOLOGO -OUT:"$@"'
             AR_FLAGS=
             RANLIB='echo not_ranlib'
             STRIP='echo not_strip'
    /mozilla/security/coreconf/WIN32.mk
  • 在 53 行左右會看到這個:
    代碼:
        RC           = windres.exe -O coff --use-temp-file
        LINK_DLL      = $(CC) $(OS_DLLFLAGS) $(DLLFLAGS)
     else
       CC           = cl
       CCC          = cl
       LINK         = link
       AR           = lib
        AR          += -NOLOGO -OUT:"$@"
        RANLIB       = echo
        BSDECHO      = echo

    改成:
    代碼:
        RC           = windres.exe -O coff --use-temp-file
        LINK_DLL      = $(CC) $(OS_DLLFLAGS) $(DLLFLAGS)
     else
       CC           = icl
       CCC          = icl
       LINK         = xilink
       AR           = xilib
        AR          += -NOLOGO -OUT:"$@"
        RANLIB       = echo
        BSDECHO      = echo

不一定要修改的東西
此項是因為當初 roytam1 給我的資料有改,不過好像沒什麼影響,所以不一定要改。
    /mozilla/js/src/Makefile.in
  • 在 253 行左右會看到這個:
    代碼:
     # Prevent floating point errors caused by VC++ optimizations
     ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_)
     ifeq (,$(filter-out 1200 1300 1310,$(_MSC_VER)))
     CFLAGS += -Op
     else
     CFLAGS += -fp:precise
     endif

    改成:
    代碼:
     # Prevent floating point errors caused by VC++ optimizations
     ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_)
     ifeq (,$(filter-out 1200 1300 1310,$(_MSC_VER)))
     CFLAGS += -Qprec
     else
     CFLAGS += -fp:precise
     endif

.mozconfig 一定要加的東西
請在 .mozconfig 的開頭加入這些東西:
代碼:
CC=icl
CXX=icl
CPP=icl
CXXCPP=icl
LD=xilink
AR=xilib

export CC
export CXX
export CPP
export CXXCPP
export LD
export AR


加入最佳化參數
請參考此篇,裡面寫得很詳細了。

或者您懶,也可以用 ICL.CFG,把您要的參數寫在裡面,然後再用 ICLCFG 這個環境變數指到該檔即可。


基本上作到這邊,就可以開始編了。

_________________
想讓 Internet Explorer 當掉嗎?

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

「方法二」


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

回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071108 SeaMonkey/1.1.6 (s793016/SSE2/PGU)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-11-24, 17:55 
離線
[MozTW 版主群]
頭像

註冊時間: 2002-12-03, 21:00
文章: 744
來自: 地球
本篇的成品在此,有意當小白鼠者可自行下載試用,本文作者不負任何責任。

Intel C++ Compiler 9.1.034 for Win32
目前編出來可以用的最好的參數似乎是:

-O3 -Qip -QxW -QaxTPBNW

原則上只要加個「-Qipo」一定編不完,約在進度 7 成左右的地方掛掉。


Intel C++ Compiler 10.0.025 for Win32
目前編出來可以用的最好的參數似乎是:

-O3 (而且 xilink 必需加 -qnoipo)

... 很令人「囧」的結果。

原則上只要打開 ipo 一定編不完,在進度 1 成不到的地方就掛掉。

如果加上了處理器最佳化參數,則在不開 ipo 的情況下是可以編完,但這個編完的程式「不能執行」... 囧


Profile Guided Optimization (PGO)
PGO 最佳化必需要先產生中間程式,然後執行此中間程式作「調教」,再將調教的結果與原始碼重新編譯生成 PGO 最佳化檔。

不過因為這兩個版本的產生的 pgo 中間程式完全不能執行,所以這部份宣告放棄

_________________
想讓 Internet Explorer 當掉嗎?

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

「方法二」


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071108 SeaMonkey/1.1.6 (s793016/SSE2/PGU)
 個人資料  
引用回覆  
 文章主題 : 請願!
文章發表於 : 2008-10-12, 05:29 
離線

註冊時間: 2008-10-12, 05:08
文章: 1
希望各位版主能在註冊的使用者中,加入我的最愛的功能,好讓使用者能追蹤某些特定的議題。
好處:沒有被追蹤的問題,經過一段時間後可以刪除。
否則,
一、某些問題一再被發問。
二、某些討論淹沒在問題海中,浪費了網路資源。


回頂端
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; FDM)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-10-12, 07:54 
離線

註冊時間: 2008-03-24, 18:45
文章: 46
我想它說不用修改原始碼應該指的是 .c 或 .cpp 檔案吧!
我嘗試過 MinGW ,要修改的是 .c 或 .cpp 。凡而 configure 之類的修改比較少。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b2pre) Gecko/20081010 Minefield/3.1b2pre
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 4 篇文章 ] 

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


誰在線上

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


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

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