`
阅读更多

        先分享下自己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!

分享到:
评论
8 楼 lanhz 2015-10-28  
谢楼主,构建成功了
7 楼 pulsar_lxl 2014-09-08  
yueyemaitian 写道
pulsar_lxl 写道
yueyemaitian 写道
pulsar_lxl 写道
我也没成功,是因为源码改了么?这不应该是一个稳定版了么?

Building OpenJDK for target 'all' in configuration 'macosx-x86_64-normal-server-fastdebug'

## Starting langtools
Compiling 2 files for BUILD_TOOLS
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:305: 错误: 找不到符号
        return tk.accepts(S.token(lookahead + 1).kind);
                                                ^
  符号:   变量 kind

介个,我这个文章发了后,mac os升级了,编译期版本也升级了,估计又有啥不兼容了,这需要问问R大



好的,那能把你编译成功的fastdebug版给我发一个吗? pulsar.lxl@gmail.com 谢谢!


百度云盘,jdk7:http://pan.baidu.com/s/1sjqaJ1b
jdk8:http://pan.baidu.com/s/1mgsSLZE


谢谢
6 楼 yueyemaitian 2014-09-05  
pulsar_lxl 写道
yueyemaitian 写道
pulsar_lxl 写道
我也没成功,是因为源码改了么?这不应该是一个稳定版了么?

Building OpenJDK for target 'all' in configuration 'macosx-x86_64-normal-server-fastdebug'

## Starting langtools
Compiling 2 files for BUILD_TOOLS
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:305: 错误: 找不到符号
        return tk.accepts(S.token(lookahead + 1).kind);
                                                ^
  符号:   变量 kind

介个,我这个文章发了后,mac os升级了,编译期版本也升级了,估计又有啥不兼容了,这需要问问R大



好的,那能把你编译成功的fastdebug版给我发一个吗? pulsar.lxl@gmail.com 谢谢!


百度云盘,jdk7:http://pan.baidu.com/s/1sjqaJ1b
jdk8:http://pan.baidu.com/s/1mgsSLZE
5 楼 pulsar_lxl 2014-09-05  
yueyemaitian 写道
pulsar_lxl 写道
我也没成功,是因为源码改了么?这不应该是一个稳定版了么?

Building OpenJDK for target 'all' in configuration 'macosx-x86_64-normal-server-fastdebug'

## Starting langtools
Compiling 2 files for BUILD_TOOLS
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:305: 错误: 找不到符号
        return tk.accepts(S.token(lookahead + 1).kind);
                                                ^
  符号:   变量 kind

介个,我这个文章发了后,mac os升级了,编译期版本也升级了,估计又有啥不兼容了,这需要问问R大



好的,那能把你编译成功的fastdebug版给我发一个吗? pulsar.lxl@gmail.com 谢谢!
4 楼 yueyemaitian 2014-09-05  
pulsar_lxl 写道
我也没成功,是因为源码改了么?这不应该是一个稳定版了么?

Building OpenJDK for target 'all' in configuration 'macosx-x86_64-normal-server-fastdebug'

## Starting langtools
Compiling 2 files for BUILD_TOOLS
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:305: 错误: 找不到符号
        return tk.accepts(S.token(lookahead + 1).kind);
                                                ^
  符号:   变量 kind

介个,我这个文章发了后,mac os升级了,编译期版本也升级了,估计又有啥不兼容了,这需要问问R大
3 楼 pulsar_lxl 2014-09-05  
我也没成功,是因为源码改了么?这不应该是一个稳定版了么?

Building OpenJDK for target 'all' in configuration 'macosx-x86_64-normal-server-fastdebug'

## Starting langtools
Compiling 2 files for BUILD_TOOLS
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:305: 错误: 找不到符号
        return tk.accepts(S.token(lookahead + 1).kind);
                                                ^
  符号:   变量 kind
  位置: 类 Token
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:313: 错误: 找不到符号
        return tk1.accepts(S.token(lookahead + 1).kind) &&
                                                 ^
  符号:   变量 kind
  位置: 类 Token
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:314: 错误: 找不到符号
                tk2.accepts(S.token(lookahead + 2).kind);
                                                  ^
  符号:   变量 kind
  位置: 类 Token
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:322: 错误: 找不到符号
        return tk1.accepts(S.token(lookahead + 1).kind) &&
                                                 ^
  符号:   变量 kind
  位置: 类 Token
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:323: 错误: 找不到符号
                tk2.accepts(S.token(lookahead + 2).kind) &&
                                                  ^
  符号:   变量 kind
  位置: 类 Token
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:324: 错误: 找不到符号
                tk3.accepts(S.token(lookahead + 3).kind);
                                                  ^
  符号:   变量 kind
  位置: 类 Token
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:335: 错误: 找不到符号
            if (!kinds[lookahead].accepts(S.token(lookahead + 1).kind)) {
                                                                ^
  符号:   变量 kind
  位置: 类 Token
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:350: 错误: 找不到符号
             switch (token.kind) {
                          ^
  符号:   变量 kind
  位置: 类型为Token的变量 token
/work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:351: 错误: 需要常量字符串表达式
                case SEMI:
                     ^
2 楼 yueyemaitian 2014-08-01  
fh63045 写道
没成功!!!

jvm源码又改了不少吧,LLVM群组中,求教R大看看?
1 楼 fh63045 2014-08-01  
没成功!!!

相关推荐

    苹果OSX10.9懒人版安装工具包.zip

    这个“懒人版”安装工具包是为那些想要轻松便捷地在苹果Mac电脑上安装OSX 10.9的用户准备的。它集成了必要的更新和优化,减少了安装过程中的复杂步骤,使得即便是不熟悉技术的用户也能顺利完成系统升级或重装。 ...

    mac ports OSX10.9

    mac ports as a tools like apt-get install

    BCM5722d for OSX 10.9 network driver

    总结一下,BCM5722D是Broadcom公司的一款以太网控制器,而BCM5722D.kext是专为OSX 10.9 Mavericks设计的网络驱动程序,用于确保硬件在该操作系统上的兼容性和性能。了解如何正确安装和管理KEXT驱动,对于解决和预防...

    adobe flash for mac osx10.9-X64

    adobe flash for mac, execute as linux but don't carry

    mysql-5.5.53-osx10.9-x86_64.dmg

    【MAC版本】mysql-5.5.53-osx10.9-x86_64.dmg 官网下载巨慢,放这里加速下载方便使用

    macos10.9_ns2.35_patch:Mac OSX 10.9 (Mavericks) 的 ns2.35 补丁

    ####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

    openjdk的mac版本:openjdk-11.0.2_osx-x64_bin.tar.gz,因为oracle jdk 11已经不能免费商业使用,故使用openjdk版本。官网下载较慢,转存于此。注意:解压后需要放到/Library/Java/JavaVirtualMachines/目录下才能...

    官方Xcode 5 + Mac OS X 10.9下载

    描述中的“xcode 5 和 Mac osx 10.9 下载”意味着用户可以从官方渠道获取这两款软件的下载。Mac OS X 10.9 Mavericks是苹果对操作系统的一次重大更新,包括以下关键特性: 1. **节能技术**:Mavericks引入了多个...

    gettextMacOSX:停止寻找答案! 这是在 Mac OSX 10.9 及更高版本上安装 gettext 所需的全部信息

    这是在 Mac OSX 10.9 及更高版本上安装 gettext 所需的全部信息好的,您已经安装了 php 5.5 但没有 gettext,因为当时您不需要 gettext。 不要经历卸载和重新安装php的麻烦。 请继续阅读。 A. 首先下载最新的 ...

    openjdk-11.0.1(jdk8)_osx-x64_bin.tar免安装绿色资源

    openjdk-11.0.1(jdk8)_osx-x64_bin.tar免安装绿色资源,openjdk8版本;for mac;

    mysql-5.7.10-osx10.9-x86-64.dmg

    MacOS系统中的Mysql 5.7.10安装包。支持Intel x86 架构。

    USB 串口 PL2303 MAC OSX 驱动

    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 ...

    MAC OSX 7z

    MAC OSX上面最好用的7z工具软件,命令行,方便使用,压缩率高。

    osx109 mach_kernel

    OSX10.9,也被称为Mavericks,是苹果在2013年发布的一个重要版本,它引入了许多新特性和改进,尤其是在性能优化和电池寿命方面。Mach Kernel作为这一版本中的核心组件,它的架构和功能值得我们深入研究。 Mach ...

    openjdk-18.0.1.1(openjdk-18.0.1.1_macos-aarch64_bin.tar.gz)

    7. **安全与更新**:OpenJDK社区定期发布安全补丁和功能更新,保持其安全性和先进性。用户应关注OpenJDK的更新通知,及时升级以获取最新的修复和增强。 总之,OpenJDK 18.0.1.1针对macOS AArch64系统的优化版本,为...

    苹果电脑安装Windows和Mac_OSX双系统

    苹果电脑安装 Windows 和 Mac_OSX 双系统 苹果电脑作为一款高性能的个人计算机,安装Windows和Mac_OSX双系统可以满足不同用户的需求。 Boot Camp 是苹果电脑系统自带的双系统安装工具,可以帮助用户安装Windows和...

    iro:适用于 Mac OSX 10.9+ 的颜色选择器菜单栏应用程序

    铁(色) 厌倦了 OSX 颜色选择器应用程序,要么完全吮吸要么花钱。 这是开源的,希望不会烂。特征显示本机颜色选择器(以及自定义颜色选择器)。 将当前颜色十六进制值复制到剪贴板。 码头上没有任何物品,是的!你...

    vmware tools for mac 7.0.0

    支持VM 10,MAC OSX 10.9

    openjdk-12_osx-x64_bin.tar.gz

    标题中的"openjdk-12_osx-x64_bin.tar.gz"表明这是一款适用于Mac OS X(现称为macOS)64位系统的OpenJDK 12二进制压缩包。OpenJDK是Java Development Kit(JDK)的一个开源实现,它提供了运行和开发Java应用程序所需...

    WIN版变色龙Chameleon 2.2 svn 2248(支持10.9)

    支持引导10.9系统的WIN版变色龙Chameleon 2.2 svn 2248,先打开Chameleon Install rev.1000.rar里的Chameleon Install.exe安装变色龙,然后将Chameleon 2.2 svn 2248文件夹里的wowpc.iso复制到C盘下替换即可。

Global site tag (gtag.js) - Google Analytics