由于最近需要研究JVM,所以打算先自己build一个openjdk试试,hllvm群组里主要提供的都是基于Xubuntu环境,没有RedHat系的,与我的需求不尽相符,只好自己摸索,好在有RednaxelaFX等大神提供的诸多资料,确实提供了许多帮助,下述如有错误纰漏还望各位大神指正。
废话不多说,环境选择了Fedora 16 (64-bit),OpenJDK的版本是openjdk-7-fcs-src-b147-27_jun_2011.zip,源码下载地址http://download.java.net/openjdk/jdk7/
从一个干净的Fedora 16开始build需要不少准备工作,这里强烈建议直接查看OpenJDK Build README,网上有些帖子说的乱七八糟的而且来源还都是同一篇,十分误事,我接下来就把我的经验share一下,操作基本来自于这篇build README,我对linux不是很熟,过程中还是废了不少事儿,另外下面所有的都是在root权限下操作的。
check_os_version: #ifeq ($(DISABLE_HOTSPOT_OS_VERSION_CHECK)$(EMPTY_IF_NOT_SUPPORTED),) # $(QUIETLY) >&2 echo "*** This OS is not supported:" `uname -a`; exit 1; #endif
这一部分我是在最开始的时候就按照这里说的把这几行给注释掉了,没有亲测,所以也不知道不注释的话到底会不会发生问题。
Basic Linux Check List 1. Install the Bootstrap JDK, set ALT_BOOTDIR. 2. Optional Import JDK, set ALT_JDK_IMPORT_PATH. 3. Install or upgrade the FreeType development package. 4. Install Ant 1.7.1 or newer, make sure it is in your PATH.
第一条是指构建openjdk的工作需要一个预先安装好的JDK环境用来做引导,由于我们已经的系统里已经装好了openjdk 6,而且环境变量已设置好,所以就不用管了。
第二条里的ALT_JDK_IMPORT_PATH环境变量是在你不需要build整个JDK的时候用到,比如你之前编过整个JDK,这次你不想再build Hotspot虚拟机了,那么你就可以通过这个来设置。
第三条是要求安装FreeType,README里提供的是源码安装的方法,但是通过yum提供了FreeType软件包,所以用yum安装会更方便一些,安装命令:yum install freetype-devel.x86_64
第四条是要求安装Apache Ant,README给的方法是下载源码安装,具体的可以到Ant的官网http://ant.apache.org/去看,源码和安装方法都能找到,我由于之前安装系统是勾选了Java开发那栏,因此Ant貌似已经有了,我没有再手动安装。
接下来make sanity,出现Sanity check passed.通过!终于可以make了,是不是很激动?别急,蛋疼的在后面呢。于是我执行命令make all,它就开始编译了,很久之后,如你所料了,挂了,看问题,貌似是x11没有安装,这是个啥啊,于是我到README里去找,结果发现原来是XRender这玩意,这不是也是在Solaris的Basic Check List里的吗…
没辙,README里推荐的方法是“使用各特定的Linux版本所提供的包安装”。好吧,yum search xrender,没有精确匹配的,于是找了个最像的安装,yum install libXrender-devel.x86_64。
然后继续make,很久之后,down了,报错是“X11/Intrinsic.h: No such file or directory”,这你妈,又是x11的问题…好吧,一定是我安装的方式不对,于是各种yum search,没有啊!无奈google之,找了半天在一个fedora论坛的一篇帖子里看到可能是少了一个叫libXt-devel的包,search之,果然有,于是yum install libXt-devel.x86_64。
继续make,很久之后,没错你懂的,down了,报错“X11/extensions/shape.h: No such file or directory”。小弟很淡定,一定是我make的诚意不够,google之,发现这次可能是少了个libXtst-devel的包,小事,装之,yum install libXtst-devel.x86_64。
继续make,这次过了更久,不过,成功了~
-- Build times ---------- Target debug_build Start 2013-01-06 19:27:18 End 2013-01-06 20:56:11 00:06:14 corba 00:17:04 hotspot 00:15:16 jaxp 00:15:32 jaxws 00:32:47 jdk 00:01:59 langtools 01:28:53 TOTAL ------------------------- make[1]: Leaving directory `/root/openjdk'
因此上面的步骤可以总结为:
yum install libXrender-devel.x86_64 yum install libXt-devel.x86_64 yum install libXtst-devel.x86_64
openjdk version "1.7.0-internal-debug" OpenJDK Runtime Environment (build 1.7.0-internal-debug-yuyinyang_2013_01_06_19_08-b00) OpenJDK 64-Bit Server VM (build 21.0-b17-jvmg, mixed mode)