OpenJDK编译
之前的基于OpenJDK8的资料由于人为因素丢失了,索性就重新来过:以OpenJDK10为例.此外,如无特殊说明,开发平台皆为MacOS.最新文章见浮游.
源码下载
在mac平台上,可以通过HomeBrew进行OpenJDK源码的下载,以OpenJDK10为例.由于OpenJDK的源码采用mercurial进行管理,因此需要安装mercurial,另外由于编译需要,我们同时安装ccache和freetype工具:
brew install mercurial brew install install ccache brew install freetype
接下来通过以下命令正式进行下载:
hg clone http://hg.openjdk.java.net/jdk10/jdk10 OpenJDK10 # 进入OpenJDK10目录下执行命令 bash ./get_source.sh
image-20180903153521528
现在我们已经将所有的源码下载到本地了,接下来我们可以进行编译来满足下好奇心,
编译
在正式编译之前需要我们先配置编译信息,该过程通过configure.sh脚本实现,其存放在OpenJDK源码的根目录.使用该脚本需要制定一些参数参数,在mac平台下,配置如下:
./configure --with-target-bits=64 --with-freetype=/usr/local/Cellar/freetype/2.9.1 --enable-ccache --with-jvm-variants=server,client --with-boot-jdk-jvmargs="-Xlint:deprecation -Xlint:unchecked" --disable-zip-debug-info --disable-warnings-as-errors --with-debug-level=slowdebug 2>&1 | tee configure_mac_x64.log
注意不要写错freetype的路径,可以通过 brew list freetype命令来查看当前freetype的安装路径.
configure中提供了大量的参数,通过命令bash ./configure --help=short
,当然你也可以直接查看OpenJDK的官方说明,这里我们只是简单介绍几个:
参数 | 含义 |
---|---|
--with-target-bits | 设置32为/64编译 |
--with-freetype | 指定freetype目录 |
--with-jvm-variants=server,client | 设置要构建的JVM的变体,目前可以选择server,client,minimal,core,zero,zeroshark,custom |
--with-boot-jdk-jvmargs | 设置运行boot JDK所需要的JVM参数,例如--with-boot-jdk-jvmargs="-Xmx8G" |
--with-debug-level | 调试等级,目前可以指定为release,fastdebug,是slowdebug,optimized |
编译信息配置后之后,通过以下命令进行编译即可:
export make all LOG=debug 2>&1 | tee make_mac_x64.log
期间可能会遇到一些编译问题,大多可以官网找到方法,编译的产物会被存放在build目录下:
image-20180903161446477
执行以下命令,验证下编译结果
cd OpenJDK10/build/macosx-x86_64-normal-serverANDclient-slowdebug/jdk/bin ./java -version
image-20180903161734147
OpenJDK调试
对于OpenJDK调试而言,常用的工具有gdb和lldb,在MacOS使用更多的是lldb.直接使用lldb进行调试,相对比较原始,对于比较复杂的项目还可以借助Xcode或者CLion.
Xcode调试OpenJDK
以Xcode 9为例.
工程创建
首先使用Xcode创建一个新的项目OpenSDK10,为Command Line Tool类型.
作者:涅槃1992
链接:https://www.jianshu.com/p/3206c00e7ff6