• Mac上编译OpenJDK过程记录


    编译OpenJDK主要为了学习HotSpot,编译过程在很多相关书籍中都有所涉及,但由于机型、机子具体环境的不同,很难有资料能够一步到位。还是得碰到具体问题通过上网查来一个个解决。

    下载OpenJDK

    由于网络环境还不错,所以这里采用通过版本管理来下代码。
    安装mercurial版本管理

    brew install mercurial
    

    接下来clone源码

    hg clone http://hg.openjdk.java.net/jdk8/jdk8
    cd jdk8 && sh get_source.sh
    

    安装一些依赖

    安装FreeType,否则会出现configure: error: Could not find freetype!

    brew install freetype
    

    如果遇到

    configure: error: GCC compiler is required. Try setting --with-tools-dir.
    

    安装gcc48

    $ brew install gcc48
    
    $ sudo mkdir /usr/bin/backup && sudo mv /usr/bin/gcc /usr/bin/g++ /usr/bin/backup
    $ sudo ln -s /usr/local/bin/gcc-4.8 /usr/bin/gcc
    $ sudo ln -s /usr/local/bin/g++-4.8 /usr/bin/g++
    

    安装ccache加速编译

    $ brew install ccache
    

    安装x11,地址https://www.xquartz.org/

    $ ln -s /opt/X11/include/X11 /usr/local/include/X11
    

    修改一些配置

    hotspot/make/bsd/makefiles/gcc.make

    我们需要干掉下面的代码,否则warnings会无法编译下去

    # Compiler warnings are treated as errors
    ifneq ($(COMPILER_WARNINGS_FATAL),false)
      WARNINGS_ARE_ERRORS = -Werror
    endif
    

    这一段也要干掉,否则在后续编译中可能会出现clang: error: unknown argument: '-fpch-deps'

    ifeq ($(USE_CLANG),)
      ifneq ($(CC_VER_MAJOR), 2)
        DEPFLAGS += -fpch-deps
      endif
    endif
    

    加上下面这句话,否则在编译adlc时可能会出错

    LFLAGS += -stdlib=libstdc++
    

    common/autoconf/generate-config.sh

    找到as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5出现的位置干掉,否则在config的时候可能会出现configure: error: GCC compiler is required

    编译

    配置configure

    sudo sh ./configure --enable-debug
    

    可以看到出现类似如下的内容

    A new configuration has been successfully created in
    /Users/robin/Code/cpp/jdk/jdk8/build/macosx-x86_64-normal-server-fastdebug
    using configure arguments '--enable-debug'.
    
    Configuration summary:
    * Debug level:    fastdebug
    * JDK variant:    normal
    * JVM variants:   server
    * OpenJDK target: OS: macosx, CPU architecture: x86, address length: 64
    
    Tools summary:
    * Boot JDK:       java version "1.8.0_112" Java(TM) SE Runtime Environment (build 1.8.0_112-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)  (at /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home)
    * C Compiler:      version  (at /usr/bin/gcc)
    * C++ Compiler:    version  (at /usr/bin/g++)
    
    Build performance summary:
    * Cores to use:   4
    * Memory limit:   16384 MB
    * ccache status:  installed, but disabled (version older than 3.1.4)
    

    开始编译

    $ make
    

    在成功之后可以看到如下提示

    Finished building OpenJDK for target 'default'
    

    调试

    在编译好我们的OpenJDK后,我们可以开始调试了,这里我用的是Jetbrains的CLion作为IDE,Clion对makefile支持不是太好,不过就阅读和调试C++程序而言已经相当强大了。


    加上一个调试hotspot的配置,在这里的Executable选择我们编译出来的jdk的java程序,路径如OpenJDK路径/build/macosx-x86_64-normal-server-fastdebug/jdk/bin/java

    接下来我们便可以从java命令开始调试hotspot学习了

    后记

    由于编译过程因为OpenJDK版本、个人机型、软件环境等众多因素影响,以上流程、配置仅供参考。在遇到问题时多查查StackOverflow等网站,大多情况下都有人碰到过。

    参考

    《HotSpot实战》

  • 相关阅读:
    MFC菜单、工具栏和状态栏
    MFC控件
    MFC对话框
    MFC消息映射机制
    性能优化可使用的工具
    常见的内存问题分析思路
    k8s之Probe
    docker swarm
    keepalived配置虚拟ip(vip)实现双机热备以及自动切换主备
    linux安装openjdk1.8
  • 原文地址:https://www.cnblogs.com/micrari/p/7018474.html
Copyright © 2020-2023  润新知