- 准备工作
Openjdk 源码使用mercurial 管理,但是国内网络环境使用mercurial 速度不理想,建议手工下载源码包。
另外编译Openjdk 之前必须有一个Bootjdk,对于Openjdk 8,Bootjdk 必须是Openjdk 7u7以上版本。通过 sudo apt-get install openjdk-7-jdk 安装。
之后需要安装如下依赖:
gawk:sudo apt-get install gawk
x11:sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
cup:sudo apt-get install libcups2-dev
ant:sudo apt-get install ant
freetype:sudo apt-get install libfreetype6-dev
alsa:sudo apt-get install libasound2-dev
每个人机器环境不同,如果安装中报错有其他依赖,根据提示安装即可。
- 编译参数
#语言选项,这个必须设置,否则编译好后会出现一个HashTable的NPE错
export LANG=C
#Bootstrap JDK的安装路径。必须设置。
export ALT_BOOTDIR=/usr/lib/jvm/java-8-openjdk-amd64
#允许自动下载依赖
export ALLOW_DOWNLOADS=true
#并行编译的线程数,设置为和CPU内核数量一致即可
export HOTSPOT_BUILD_JOBS=4
export ALT_PARALLEL_COMPILE_JOBS=4
#比较本次build出来的映像与先前版本的差异。这个对我们来说没有意义,必须设置为false,否则sanity检查会报缺少先前版本JDK的映像。如果有设置dev或者DEV_ONLY=true的话这个不显式设置也行。
export SKIP_COMPARE_IMAGES=true
#使用预编译头文件,不加这个编译会更慢一些
export USE_PRECOMPILED_HEADER=true
#要编译的内容
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=false
#export BUILD_JAXWS=false
#export BUILD_CORBA=false
export BUILD_HOTSPOT=true
export BUILD_JDK=true
#要编译的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
#export DEBUG_NAME=debug
#把它设置为false可以避开javaws和浏览器Java插件之类的部分的build。
BUILD_DEPLOY=false
#把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了。
BUILD_INSTALL=false
#编译结果所存放的路径
export ALT_OUTPUTDIR=/home/fourier/Desktop/openjdk/build/
#这两个环境变量必须去掉,不然会有很诡异的事情发生(我没有具体查过这些“”诡异的事情”,Makefile脚本检查到有这2个变量就会提示警告“)
unset JAVA_HOME
unset CLASSPATH
make 2>&1 | tee $ALT_OUTPUTDIR/build.log
- 问题处理
[问题]
openjdk/hotspot/make/linux/makefiles/top.make:91: recipe for target ‘ad_stuff’ failed
[解决方案]
vim hotspot/make/linux/makefiles/adjust-mflags.sh
63 MFLAGS=`
64 echo “$MFLAGS” \
65 | sed ‘
66 s/^-/ -/
s/ -\([^ ][^ ]*\)j/ -\1 -j/
67 s/ -j[0-9][0-9]*/ -j/
68 s/ -j\([^ ]\)/ -j -\1/
69 s/ -j/ -j’${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}’/
70 ‘ `
删除这一行
[问题]
os not supported error while building hotspot
[解决方案]
change hotspot/make/linux/Makefile
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7% 3% 4%
- 参考:
http://hadwinzhy.github.io/2013/01/21/compile-jdk/
https://focusvirtualization.blogspot.com/2016/11/current-java-version-on-my-ubuntu-gcc.html