本文转载自 http://blog.csdn.net/instruder/article/details/8834117
前记
如果你不是闲着蛋疼最好不要在windows上面编译,linux上面一会就编译好了。。。。可是windows上面 只想说10个字“尼玛”
出现问题了 可以直接改他的makefile和gmk 爷爷的 例如那个verify.res 啥的 明明没有 他非要加入link 中,导致编译失败
感叹 人生太多的时间花费在这些虽然结果有用,但是过程无用的地方了
参考文章
http://www.iteye.com/topic/1097344
openjdk自带的build html
BUILD JDK
1 hg http://mercurial.selenic.com/release/windows/mercurial-2.5.4-x86.msi
1 freetype freetype-2.3.5-1-bin
url http://jaist.dl.sourceforge.net/project/gnuwin32/freetype/2.3.5-1/freetype-2.3.5-1-bin.zip
同时将bin目录下的文件全部拷贝到lib下 同时命名freetype6.dll 为freetype.dll
2 apache-ant-1.9.0
url http://mirrors.cnnic.cn/apache//ant/binaries/apache-ant-1.9.0-bin.zip
3 directx sdk DXSDK_Jun10.exe
url http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe
4 cygwin
url http://cygwin.com/setup.exe
假如没有这个dll 从网上下载一个
cygintl-3.dll url http://www.opendll.com/dll/c/__32-cygintl-3.dll.zip
重命名 link.exe to link1.exe
替换the make.exe url http://www.cmake.org/files/cygwin/make.exe
5 zlib1.dll
把这个zlib1.dll 放到要编译的jdk源码的根目录
6 修改语言设置
7 要编译x86版本一定要在x86 32位机器上编译,否则xxxxx
8 安装vs2010版
9 environment 变量设置
所有路径最好是/ 而不是\
ALT_BOOTDIR C:/javasec/src/compler/jdk
ALT_COMPILER_PATH C:/ProgramFiles/Microsoft Visual Studio 10.0/VC/bin
ALT_DXSDK_PATH c:/javasec/src/dxsdk
ALT_FREETYPE_HEADERS_PATH C:/javasec/src/compler/freetype-2.3.5-1-bin/include
ALT_FREETYPE_LIB_PATH C:/javasec/src/compler/freetype-2.3.5-1-bin/lib
ALT_JDK_IMPORT_PATHc:/javasec/src/compler/jdk
ANT_HOMEC:/javasec/src/compler/apache-ant-1.9.0
ALT_MSVCRNN_DLLc:/javasec/src/compler/msvcr
LIBPATH C:/Program Files/Microsoft VisualStudio 10.0/VC/lib;%LIB%
WINDOWSSDKDIR C:/Program Files/MicrosoftSDKs/Windows/v7.0A
VSINSTALLDIR C:/Program Files/MicrosoftVisual Studio 10.0
PATH
C:/Program Files/Microsoft Visual Studio10.0/VC/bin;c:/javasec/src/compler/jdk;c:/javasec/src/compler/jdk/bin;C:/ProgramFiles/Microsoft Visual Studio10.0;%VSINSTALLDIR%\Common7\Tools;%VSINSTALLDIR%\Common7\IDE;%VCINSTALLDIR%\VCPackages;c:/javasec/src/compler/freetype-2.3.5-1-bin/bin;%PATH%;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramFiles\Mercurial\;C:\Program Files\Microsoft SQLServer\100\Tools\Binn\;C:\Program Files\Microsoft SQLServer\100\DTS\Binn\;C:/Program Files/Microsoft SDKs/Windows/v7.0A/bin
INCLUDE
C:/Program Files/Microsoft Visual Studio10.0/VC/include;C:/Program Files/MicrosoftSDKs/Windows/v7.0A/Include;%ALT_FREETYPE_HEADERS_PATH%
LIB
C:/Program Files/Microsoft Visual Studio10.0/VC/lib;C:/Program Files/Microsoft SDKs/Windows/v7.0A/lib;%ALT_FREETYPE_LIB_PATH%
10 修改openjdk 的makefile文件和gmk文件
(ps: forrest_lv:此处的修改没必要,可以参考http://wenku.baidu.com/link?url=mP1ctws5rFieudjyCeEChCa1rqGAA__oW3UjXnCBM0UYdL5CItcjtmc67DtHm8Nsl3MOHy55otJewAgQGC2jf-ncykMwxLELj4sL3VgnKNy 只是修改下makefile就行了
)
下面是修改的部分,主要是为了解决资源res 不存在的问题
Program.gmk
{
#$(OBJDIR)/$(PROGRAM).res:$(VERSIONINFO_RESOURCE)
# @$(prep-target)
#ifndef LOCAL_RESOURCE_FILE
# $(RC)$(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE)
#endif
# $(OBJDIR)/$(PROGRAM).res add instruder
$(OBJDIR)/$(PROGRAM).lcf: $(FILES_o)
@$(prep-target)
@$(ECHO)$(FILES_o) > $@
# ifndefLOCAL_RESOURCE_FILE
# @$(ECHO)$(OBJDIR)/$(PROGRAM).res >> $@
# endif
@$(ECHO)setargv.obj >> $@
@$(ECHO)Created $@
}
Library.gmk
{
#$(OBJDIR)/$(LIBRARY).res
$(OBJDIR)/$(LIBRARY).lcf: $(COMPILE_FILES_o)$(FILES_m)
@$(prep-target)
@$(MKDIR)-p $(TEMPDIR)
@$(ECHO)$(FILES_o) > $@
#ifndef LOCAL_RESOURCE_FILE
# @$(ECHO)$(OBJDIR)/$(LIBRARY).res >> $@
# #@$(ECHO)Created $@
#endif
# @$(ECHO)Created $@
# JDK name required here
RC_FLAGS += /D"JDK_FNAME=$(LIBRARY).dll" \
/D "JDK_INTERNAL_NAME=$(LIBRARY)" \
/D "JDK_FTYPE=0x2L"
#$(OBJDIR)/$(LIBRARY).res:$(VERSIONINFO_RESOURCE)
#ifndef LOCAL_RESOURCE_FILE
# @$(prep-target)
# $(RC)$(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE)
#endi
}
Compiler-msvc.gmk
ifeq($(CC_MAJORVER), 16)
COMPILER_NAME=Microsoft Visual Studio 10 (16.00.30319.01)
COMPILER_VERSION=VS201 #add
jdk\make\com\sun\java\pack\makefile
{
$(UNPACK_EXE): $(UNPACK_EXE_FILES_o)updatefiles winres
$(prep-target)
$(RM)$(TEMPDIR)/mapfile-vers
$(CP)mapfile-vers-unpack200 $(TEMPDIR)/mapfile-vers
$(LINKER) $(LDDFLAGS) $(UNPACK_EXE_FILES_o) $(LIBCXX)$(LDOUTPUT)$(TEMPDIR)/unpack200$(EXE_SUFFIX)
# $(RES) fix by instruder
ifdef MT
$(MT)/manifest $(OBJDIR)/unpack200$(EXE_SUFFIX).manifest/outputresource:$(TEMPDIR)/unpack200$(EXE_SUFFIX);#1
endif
$(CP)$(TEMPDIR)/unpack200$(EXE_SUFFIX) $(UNPACK_EXE)
@$(callbinary_file_verification,$@)
#fix by instruder
#ifeq ($(PLATFORM), windows)
#$(RES):: $(VERSIONINFO_RESOURCE)
# $(prep-target)
# $(RC)$(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE)
#endi
}
Demo.gmk
{
#fix by instruder +
DEMO_RESOURCES = $(filter-out %.java,$(DEMO_ALL_FILES)
}
11 上面操作完成之后,执行opjdk目录下面jdk/make 里面的jdk_generic_profile.sh 命令脚本
12 执行make sanity ,成功后开始make。。。。
13 看到这个界面就编译通过啦
二、 另请参考Windows下构建JDK
http://wenku.baidu.com/link?url=mP1ctws5rFieudjyCeEChCa1rqGAA__oW3UjXnCBM0UYdL5CItcjtmc67DtHm8Nsl3MOHy55otJewAgQGC2jf-ncykMwxLELj4sL3VgnKNy
forrest修正:
参考文件提到的
library:: $(FREETYPE_LIB)
$(FREETYPE_LIB): $(ZLIB1_LIB)
$(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype6.$(LIBRARY_SUFFIX) $@
$(install-module-file)
$(ZLIB1_LIB):
$(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)zlib1.$(LIBRARY_SUFFIX) $@
改为
library:: $(FREETYPE_LIB)
$(FREETYPE_LIB): $(ZLIB1_LIB)
$(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype6.$(LIBRARY_SUFFIX) $@
$(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)zlib1.$(LIBRARY_SUFFIX) $@
否则报
make[4]: *** No rule to make target `D:/java/openjdk/build/windows-i586/bin/zlib
1.dll', needed by `D:/java/openjdk/build/windows-i586/bin/freetype6.dll'. Stop.
我们已经有zlib1.dll了,没必要再编译生产,拷贝一下到目的地就ok了。
三、 我的补充
一些环境变量设置一定要左斜杠/ ,右斜杠\会在cygwin中出错
修改D:\java\openjdk\jdk\make/jdk_generic_profile.sh
#repo=`hg root`
export repo=D:/java/openjdk
我使用的版本openjdk-7u40-fcs-src-b43-26_aug_2013
使用的vs2010 X16-42552VS2010UltimTrial1.iso
使用的dx: DXSDK_Jun10.exe
使用的安装版freetype-2.3.5-1 freetype-2.3.5-1-setup.exe
最后在cmd执行如下命令:
vcvars32.bat
set JAVA_HOME=
set CLASSPATH=
SET BUILD_CORBA=false bash
我的环境变量,最后如下:
C:\Users\rd_zhongqian_lv>set
ALLUSERSPROFILE=C:\ProgramData
ALT_BOOTDIR=D:/java/jdk1.7.0_01
ALT_COMPILER_PATH=D:/vs2010/VC/bin
ALT_DXSDK_PATH=D:/dxsdk
ALT_FREETYPE_HEADERS_PATH=D:/GnuWin32/include
ALT_FREETYPE_LIB_PATH=D:/GnuWin32/lib
ALT_JDK_IMPORT_PATH=D:/java/jdk1.7.0_01
ALT_MSVCRNN_DLL_PATH=D:/java/jdk1.7.0_01/bin
ANT_HOME=D:/java/apache-ant-1.9.4
APPDATA=C:\Users\rd_zhongqian_lv\AppData\Roaming
BUILD_CORBA=false
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=HSZC1103-0267
ComSpec=C:\Windows\system32\cmd.exe
DevEnvDir=D:\vs2010\Common7\IDE\
DXSDK_DIR=D:/dxsdk
FP_NO_HOST_CHECK=NO
Framework35Version=v3.5
FrameworkDir=C:\Windows\Microsoft.NET\Framework\
FrameworkDIR32=C:\Windows\Microsoft.NET\Framework\
FrameworkVersion=v4.0.30319
FrameworkVersion32=v4.0.30319
HOMEDRIVE=C:
HOMEPATH=\Users\rd_zhongqian_lv
INCLUDE=D:\vs2010\VC\INCLUDE;D:\vs2010\VC\ATLMFC\INCLUDE;C:\Program Files\Micros
oft SDKs\Windows\v7.0A\include;D:/vs2010/VC/include;C:/Program Files/Microsoft S
DKs/Windows/v7.0A/Include;D:/GnuWin32/include
LIB=D:\vs2010\VC\LIB;D:\vs2010\VC\ATLMFC\LIB;C:\Program Files\Microsoft SDKs\Win
dows\v7.0A\lib;D:/vs2010/VC/lib;C:/Program Files/Microsoft SDKs/Windows/v7.0A/li
b;D:/GnuWin32/lib
LIBPATH=C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\Windows\Microsoft.NET\F
ramework\v3.5;D:\vs2010\VC\LIB;D:\vs2010\VC\ATLMFC\LIB;D:/vs2010/VC/lib;D:/vs201
0/VC/lib;C:/Program Files/Microsoft SDKs/Windows/v7.0A/lib;D:/GnuWin32/lib
LOCALAPPDATA=C:\Users\rd_zhongqian_lv\AppData\Local
LOGONSERVER=\\VKDADDS04
MAVEN=E:\apache-maven-3.2.2\bin
MAVEN_HOME=E:\apache-maven-3.2.2
MAVEN_OPTS=-Xms256m -Xmx512m
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=D:\vs2010\VSTSDB\Deploy;D:\vs2010\Common7\IDE\;D:\vs2010\VC\BIN;D:\vs2010\C
ommon7\Tools;C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\Windows\Microsoft.
NET\Framework\v3.5;D:\vs2010\VC\VCPackages;C:\Program Files\HTML Help Workshop;D
:\vs2010\Team Tools\Performance Tools;C:\Program Files\Microsoft SDKs\Windows\v7
.0A\bin\NETFX 4.0 Tools;C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin;.;D:/v
s2010/VC/bin;D:/vs2010;D:/vs2010/Common7/Tools;D:/vs2010/Common7/IDE;%VCINSTALLD
IR%/VCPackages;C:/Program Files/Microsoft SDKs/Windows/v7.0A/bin;D:/GnuWin32/bin
;D:/java/apache-ant-1.9.4/bin;D:/java/cygwin32/bin;D:/java/jdk1.7.0_01;D:/java/j
dk1.7.0_01/bin;E:\apache-maven-3.2.2\bin;D:/oracle/product/10.2.0/db_1/bin;C:/Wi
ndows/system32;C:/Windows;C:/Windows/System32/Wbem;C:/Windows/System32/WindowsPo
werShell/v1.0/;C:/Program Files/Windows7Master;D:/Program Files/TortoiseSVN/bin;
C:/Program Files/Microsoft SQL Server/100/Tools/Binn/;C:/Program Files/Microsoft
SQL Server/100/DTS/Binn/
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PERL5LIB=D:\oracle\product\10.2.0\db_1\perl\5.8.3\lib\MSWin32-x86;D:\oracle\prod
uct\10.2.0\db_1\perl\5.8.3\lib;D:\oracle\product\10.2.0\db_1\perl\5.8.3\lib\MSWi
n32-x86;D:\oracle\product\10.2.0\db_1\perl\site\5.8.3;D:\oracle\product\10.2.0\d
b_1\perl\site\5.8.3\lib;D:\oracle\product\10.2.0\db_1\sysman\admin\scripts;
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=170a
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\RD_ZHO~1\AppData\Local\Temp
TMP=C:\Users\RD_ZHO~1\AppData\Local\Temp
USERDNSDOMAIN=KINGDEE.GBL
USERDOMAIN=KINGDEE
USERNAME=RD_zhongqian_lv
USERPROFILE=C:\Users\rd_zhongqian_lv
VCINSTALLDIR=D:\vs2010\VC\
VS100COMNTOOLS=D:\vs2010\Common7\Tools\
VSINSTALLDIR=D:\vs2010\
windir=C:\Windows
WindowsSdkDir=C:\Program Files\Microsoft SDKs\Windows\v7.0A\
windows_tracing_flags=3
windows_tracing_logfile=C:\BVTBin\Tests\installpackage\csilogfile.log