在编译openjdk的路上走了很多弯路。期间在多个平台尝试编译各个版本,遇到各种错误,最终还是基本完成了。
系统版本
系统版本是10.12.1 Sierra,这里的XCode版本已经是8,并且安装XCode4.5提示版本过低。而openjdk8中configure时必须要使用XCode4版本,故采取openjdk9。
clone
hg clone http://hg.openjdk.java.net/jdk9/jdk9
编译
cd jdk9
修改下get_source.sh文件,由于clone经常断有没有短线重连机制,需要修改下脚本进行自动重试。
将最后几行修改为: 即加上while重试
sh ./common/bin/hgforest.sh clone "$@"
while [ $? -ne 0 ]
do
sh ./common/bin/hgforest.sh clone "$@"
done
sh ./common/bin/hgforest.sh pull -u
视网络状态好坏时间不一样,下载好后。
执行 get_source.sh
按照必要依赖
当前环境需要freetype等
brew install freetype
brew install ccache
configure
执行configure, 注意freetype/2.8要按照上面的版本进行修改路径
bash ./configure --with-target-bits=64 --with-freetype=/usr/local/Cellar/freetype/2.8 --enable-ccache --with-jvm-variants=server,client --with-boot-jdk-jvmargs="-Xlint:deprecation -Xlint:unchecked" --disable-warnings-as-errors --with-debug-level=slowdebug 2>&1 | tee configure_mac_x64.log
make
进行make
make all
经过数十分钟左右,make 成功, 在build文件夹下生成出build/macosx-x86_64-normal-serverANDclient-slowdebug文件夹,其中的jdk/bin/目录下的java, javac等就可以使用了。
Debug
在编译完成后,就可以使用gdb进行debug了,不过习惯了用IDE,就下载CLion,Import 其中的hotspot项目,然后修改DebugConfiguration中的hotspot的Executable为build/macosx-x86_64-normal-serverANDclient-slowdebug/jdk/bin/java这个文件,然后删除before launch中的build。
入口在在hotspot/src/share/vm/prims/jni.cpp中的JNI_CreateJavaVM方法。设置断点后就可以进行跟踪调试了。
Cmake刚了解一些,IDE自动导入的很多文件没有链接起来,有很多报红,不过不影响调试,只影响跳转和修改调试。
JDK9中的一些变化
jdk9增加的新特性中经常提到的是模块化,默认使用G1收集器,CMS+ParNew组合已经deprecated。
jdk9迁移指南中有详细说明。
其他
C-C-IDE-support-for-HotSpot-td301840中有openjdk的IDE支持的讨论
55 New Features in JDK 9JDK9中的新特性