大致寫一下,免得哪天電腦掛了找不到東西 (不過 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 檔掉的樣子,開不起來
「方法二」