大致寫一下,免得哪天電腦掛了找不到東西 (不過 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 這個環境變數指到該檔即可。
基本上作到這邊,就可以開始編了。
|