先分享下自己build出来的fastdebug版本的openjdk: openjdk7(24.80-b04), openjdk8(25.0-b70)
=====================================================================================
由于想看下cms gc的debug日志,验证个问题,但是发现jvm的cpp代码里头,要Verbose值为true才能看到debug信息,而这个vm参数只能在debug模式下才能设置,于是就自己动手build出了下jdk。
我的系统是Mac OSX 10.9.2,XCode是Version 5.1 (5B130a),GCC是:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn) Target: x86_64-apple-darwin13.1.0 Thread model: posix
由于XCode5.0开始不再支持llvm-gcc,并且LLVM5.1废弃了一些编译option,如-fcheck-new等,也把不认识的option当成了错误。而jdk源码包里边的make脚本并不完全支持新版的clang,参数需要调整,所以我build的时候就出了一堆问题。
先是按照obuildfactory的这个指南跑了跑,但是发现不行,他那个针对macosx版本比较低,在我机器上是跑不过的,不知道怎么解决,就放弃了。然后自己下载自己跑,仍然遇到了很多问题,就到<HLLVM群组>里找R大求助,根据R大的帮助,才顺利build出来,艰辛啊,5年前build过一次,没成功,尽是挫折,这次有了R大帮忙才成功build出来。这里主要列下JDK8的build过程,JDK7的跟8差不多,有一点点不一样的地方,最后给出。详细的过程是:
1、通过xcode-select选中xcode,由于我习惯性更新系统软件,所以我的xcode是5.1:
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
2、安装必须的软件,如git 和 mercurial (hg)
3、安装X11,系统默认好像是没有这个东西,需要下载安装XQuartz,然后link下
sudo ln -s /usr/X11/include/X11 /usr/include/X11
4、link llvm-gcc和llvm-g++,由于xcode目录下已经没有llvm-gcc和llvm-g++程序,而build jdk的时候会用到,所以需要link过去
sudo ln -s /usr/bin/llvm-g++ /Applications/Xcode.app/Contents/Developer/usr/bin/llvm-g++ sudo ln -s /usr/bin/llvm-gcc /Applications/Xcode.app/Contents/Developer/usr/bin/llvm-gcc
5、另外我还装了Xcode的Command line tools、freetype,还link了cups,但是我不知道如果不做这些是否会影响build,所以可以先跳过这部,出错了再回来。
6、下载jdk源码
hg clone http://hg.openjdk.java.net/jdk8/jdk8 YourOpenJDK cd YourOpenJDK bash ./get_source.sh
jdk8u的地址是http://hg.openjdk.java.net/jdk8u/jdk8u
7、configure,可以参考下YourOpenJDK目录下的README,我直接build fastdebug版本的
./configure --enable-debug --with-target-bits=64
如果是正式版本,./configure后边不需要加参数。configure过程会检查一些配置,然后在YourOpenJDK/build目录下会有macosx-x86_64-normal-server-fastdebug目录,如果不是fastdebug版本,会有macosx-x86_64-normal-server-release目录。这个过程中遇到一个问题:
configure: error: GCC compiler is required
对于这个问题,我查到是YourOpenJDK/common/autoconf/generated-configure.sh里边校验抛出,我直接找到下边文本出现的两个地方给注释掉了......
as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5
8、make,直接./make all的时候遇到了很多问题
遇到了这个,看是clang的参数问题:
clang: error: unknown argument: '-fcheck-new' [-Wunused-command-line-argument-hard-error-in-future]
于是直接打开YourOpenJDK/hotspot/make/bsd/makefiles/gcc.make,把这行(line 193)给注释掉:
#CFLAGS += -fcheck-new
但是继续build还是遇到了很多问题,诸如:
/Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/utilities/globalDefinitions.hpp:754:11: error: enumeration values 'number_of_states' and 'ilgl' not handled in switch [-Werror,-Wswitch] switch (state) { ^ /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/utilities/globalDefinitions.hpp:1108:24: error: implicit conversion changes signedness: 'uintx' (aka 'unsigned long') to 'intptr_t' (aka 'long') [-Werror,-Wsign-conversion] if (!is_power_of_2(s)) basic_fatal("s must be a power of 2"); ~~~~~~~~~~~~~ ^
搞到这里已经搞不定了,于是求助了R大,按照他的回复,先在YourOpenJDK/hotspot/make/bsd/makefiles/gcc.make(line 334)里边加入Clang5.1的逻辑:
# ifeq ($(USE_CLANG), true) # # Clang 4.2 # ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 2), 1) # OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT) # OPT_CFLAGS/unsafe.o += -O1 # endif # Clang 5.0 ifeq ($(shell expr $(CC_VER_MAJOR) = 5 \& \( $(CC_VER_MINOR) = 0 \| $(CC_VER_MINOR) = 1 \) ), 1) OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT) OPT_CFLAGS/unsafe.o += -O1 OPT_CFLAGS/graalCompilerToVM.o += -O1 endif
第一个ifeq那里,这个make file其实已经有了,所以注释掉。然后R大回复,修改下这个文件源码:
YourOpenJDK/hotspot/src/share/vm/code/relocInfo.hpp
最后,用R大给出的make命令,用本机安装的JDK7的目录替换命令行中$JAVA_HOME,期待激动人心的时刻吧:
make CC=clang COMPILER_WARNINGS_FATAL=false LFLAGS='-Xlinker -lstdc++' USE_CLANG=true LP64=1 LANG=C ALT_BOOTDIR=$JAVA_HOME ARCH_DATA_MODEL=64 HOTSPOT_BUILD_JOBS=8 all
9、构建成功后,你可以在这个目录下找到相应的jdk包:
YourOpenJDK/build/macosx-x86_64-normal-server-fastdebug/images/
10、如果你要build jdk7,则没有configure过程,直接make
make sanity
先运行上边命令检查环境,根据提示可能要改些环境变量,如$JAVA_HOME要干掉,然后build。其他的对jdk文件修改上跟8一样。
另外还需要改YourOpenJDK7/hotspot/make/bsd/makefiles/gcc.make(line 216),把注释掉一些,加上下边那段,那是我从jdk8的相应文件里边拷出来的:
# Flags for generating make dependency flags. # ifneq ("${CC_VER_MAJOR}", "2") # DEPFLAGS = -fpch-deps -MMD -MP -MF $(DEP_DIR)/$(@:%=%.d) # endif ####################replace by me # Flags for generating make dependency flags. DEPFLAGS = -MMD -MP -MF $(DEP_DIR)/$(@:%=%.d) ifeq ($(USE_CLANG),) ifneq ($(CC_VER_MAJOR), 2) DEPFLAGS += -fpch-deps endif endif
make命令上跟8也不一样,注意ALT_BOOTDIR是JDK6的Home目录,fastdebug_build说明你要build fastdebug版本:
make CC=clang COMPILER_WARNINGS_FATAL=false LFLAGS='-Xlinker -lstdc++' USE_CLANG=true LP64=1 LANG=C ALT_BOOTDIR=/Library/Java/Home ARCH_DATA_MODEL=64 HOTSPOT_BUILD_JOBS=8 fastdebug_build
更多make选项可以make help看。
build成功后,相关的jdk包在这个目录下:
YourOpenJDK7/build/macosx-x86_64-fastdebug/
enjoy it!
相关推荐
mac ports as a tools like apt-get install
苹果OSX10.9懒人版安装工具包.zip
BCM 5781 device driver for OSX 10.9
adobe flash for mac, execute as linux but don't carry
xcode 5 和 Mac osx 10.9 下载
【MAC版本】mysql-5.5.53-osx10.9-x86_64.dmg 官网下载巨慢,放这里加速下载方便使用
####Patch 用于在 Mac os 10.9 上安装 ns2.35 它在 Mac OSX 10.9 中运行良好。 在使用此补丁之前,请确保您已经安装了其他库,如 X11、xQuartz 等。 提示:您可以通过 homebrew 或 macports 轻松安装这些东西。 脚步...
openjdk的mac版本:openjdk-11.0.2_osx-x64_bin.tar.gz,因为oracle jdk 11已经不能免费商业使用,故使用openjdk版本。官网下载较慢,转存于此。注意:解压后需要放到/Library/Java/JavaVirtualMachines/目录下才能...
这是在 Mac OSX 10.9 及更高版本上安装 gettext 所需的全部信息好的,您已经安装了 php 5.5 但没有 gettext,因为当时您不需要 gettext。 不要经历卸载和重新安装php的麻烦。 请继续阅读。 A. 首先下载最新的 ...
openjdk-11.0.1(jdk8)_osx-x64_bin.tar免安装绿色资源,openjdk8版本;for mac;
USB 串口 PL2303 MAC OSX 驱动,适用于 OS X 10.9 以上的版本。 Mac OS X Universal Binary Driver v1.6.2 (PKG file format) For Mac OS High Sierra (version 10.15) - see NOTE below. For Mac OS High Sierra ...
铁(色) 厌倦了 OSX 颜色选择器应用程序,要么完全吮吸要么花钱。 这是开源的,希望不会烂。特征显示本机颜色选择器(以及自定义颜色选择器)。 将当前颜色十六进制值复制到剪贴板。 码头上没有任何物品,是的!你...
支持VM 10,MAC OSX 10.9
MAC OSX 10.5图文教程 绝对清晰
支持引导10.9系统的WIN版变色龙Chameleon 2.2 svn 2248,先打开Chameleon Install rev.1000.rar里的Chameleon Install.exe安装变色龙,然后将Chameleon 2.2 svn 2248文件夹里的wowpc.iso复制到C盘下替换即可。
Mac OSX的文件系统介绍 各目录说明
mac版的Java OpenJdk ,如有需要在mac上进行java源码编译的,可以到官网下载也可以在下载此资源,我这边提供一下14版本的,如需其他版本到官网下载http://jdk.java.net/
Mac OSX 10.9 制作USB系统安装盘的方法
osxfuse 是一个google开源的mac osx 磁盘格式读写库。
Win平台下,解压unlocker.zip在【英文】路径下,关闭VMware,点击解压后文件夹中的win-install.cmd,工具自动关闭服务替换文件后再重新启动VM服务,即可完成配置