1、下载mercurial,源码根目录有个文件README-builds.html,非常详细,可以参考
hg fclone http://hg.openjdk.java.net/jdk7/jdk7
2、要先安装OpenJDK6,记录一下安装的地方,在下面的环境变量里面会用到
我的是/usr/lib/jvm/java-1.6.0-openjdk-amd64/
3、安装JDK7所需要的依赖包
sudo apt-get build-dep openjdk-7
4、源码中有一个bug,需要修改一下,在编译时发现会与glibc中的一个定义冲突
src/share/vm/runtime/interfaceSupport.hpp:430:0: error: "__LEAF" redefined [-Werror]
/usr/include/x86_64-linux-gnu/sys/cdefs.h:44:0: note: this is the location of the previous definition
5、在编译时会遇到和"javax/sound/jsoundalsa"相关的一个错误,网上搜了一下这个貌似是openjdk的一个bug,有人提供了补丁http://mail.openjdk.java.net/pipermail/build-dev/2012-January/005382.html。只需要修改openjdk/jdk/make/javax/sound/jsoundalsa目录下的Makefile文件,找到LDFLAGS += -lasound
修改为:OTHER_LDLIBS += -lasound
6、设置如下环境变量
#!/bin/bash export LANG=C export ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk-amd64/ export ALLOW_DOWNLOADS=true export USE_PRECOMPILED_HEADER=true export SKIP_DEBUG_BUILD=false export SKIP_FASTDEBUG_BUILD=true export DISABLE_HOTSPOT_OS_VERSION_CHECK=true export DEBUG_NAME=debug unset CLASSPATH unset JAVA_HOME make sanity && make
然后执行了挺长一段时间,就生成了jdk7/build/linux-amd64,察看版本
openjdk version "1.7.0-internal-debug"
OpenJDK Runtime Environment (build 1.7.0-internal-debug-wz_2012_12_25_15_46-b00)
OpenJDK 64-Bit Server VM (build 21.0-b17-jvmg, mixed mode)
参考:
http://lc87624.iteye.com/blog/1542354
http://blog.csdn.net/kindazrael/article/details/7266314
如果只想单独编译hotspot,可以这样:
bash:~/mercurial/$hg clone http://hg.openjdk.java.net/jdk7/hotspot/hotspot
bash:~/mercurial/$cd hotspot/make
bash:~/mercurial/hotspot/make$LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk/ HOTSPOT_BUILD_JOBS=5 ARCH_DATA_MODEL=64 ALT_OUTPUTDIR=../../build/hotspot_debug make jvmg jvmg1 2>&1 | tee ../../build/hotspot_debug