OpenJdk-mac编译OpenJdk8

1.环境准备

    1.1 当前环境

        1.mac版本10.13.6

        

        2.电脑已经安装jdk版本1.8.0_181 

       

    1.2 安装homebrew

        homebrew是mac上强大的包管理器,为系统软件提供了非常方便的安装方式,独特式的解决了包的依赖问题,并不再需要烦人的sudo,一键式编译,无参数困扰。

       安装homebrew需要Xcode和ruby,ruby是系统带,Xcode需要在App Store下载。选择红框选中获取安装。

       

         安装好Xcode后在终端输入,即可完成安装。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    1.3 安装插件依赖

        1.3.1 Xcode-select安装:安装命令 xcode-select –install

               进行x11链接,在终端输入3个命令中任意一个即可.

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

            可能在链接时说xx......Permission denied,这是在终端输入csrutil status,如果不是disabled状态,需要重启电脑,安装command+r,进入恢复模式,选择实用工具->终端中输入csrutil disable,完成后需要将其置为enable,具体操作链接

        

        1.3.2 安装XQuartz 下载地址: https://www.xquartz.org/

        1.3.3 安装freetype,安装命令:brew freetype

        1.3.4 安装GC 安装命令: brew install gcc49 据说安装往上的版本会报错

        1.3.5 安装ccache提升编译速度 brew install freetype

        1.3.6 安装ant 一般mac都会有这个环境,如果没有执行:brew install ant

    1.4 下载OpenJdk8源码

        1.使用命令行下载,可能下载不下来

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

        2.在官网直接下载

        官网地址:https://download.java.net/openjdk/jdk8

        

        点击这个出现下下面页面,并不是下载,这时需要修改下载链接:下载链接:

        

    至此,前期的准备工作已经完成,安装好插件和下载好OpenJdk源码。 

2.源码修改

    下载完成openjdk-8-src-b132-03_mar_2014.zip,双击即可解压成openjdk文件夹,找一个合适路径将openjdk文件夹拷贝过去。

    2.1 修改generated-configure.sh文件,文件路径:/openjdk/common/autoconf/generated-configure.sh

        在20061行和21640行添加#,注释本行as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5内容。

    2.2 修改relocInfo.hpp文件,文件路径:/openjdk/hotspot/src/share/vm/code/relocInfo.hpp

        将367行inline friend relocInfo prefix_relocInfo(int datalen = 0); 修改为

                   inline friend relocInfo prefix_relocInfo(int datalen);

        将462行inline relocInfo prefix_relocInfo(int datalen) {  修改为

                   inline relocInfo prefix_relocInfo(int datalen = 0) {     

    2.3 修改loopPredicate.cpp文件,文件路径:/openjdk/hotspot/src/share/vm/opto/loopPredicate.cpp

        将775行assert(rng->Opcode() == Op_LoadRange || _igvn.type(rng)->is_int() >= 0, "must be");  修改为

                   assert(rng->Opcode() == Op_LoadRange || _igvn.type(rng)->is_int()->_lo >= 0, "must be");

    2.4 修改virtualspace.cpp文件,文件路径:/openjdk/hotspot/src/share/vm/runtime/virtualspace.cpp

        将331行if (base() > 0) {  修改为

                   if (base() != 0) {

    2.5 修改BuildNashorn.gmk文件,文件路径:/openjdk/nashorn/make/BuildNashorn.gmk

        将775行-cp "$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUT    PUTDIR)/nashorn_classes" \  修改为

                  -Xbootclasspath/p :"$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP    )$(NASHORN_OUTPUTDIR)/nashorn_classes" \

3.设置环境变量

vi ~/.bash_profile

编辑.bash_profile文件,在原先的配置上完成下面文件的追加

export LANG=C
# 设定语言选项,必须设置
export LANG=C
# Mac平台,C编译器不再是GCC,是clang
export CC=clang
# 跳过clang的一些严格的语法检查,不然会将N多的警告作为Error
export COMPILER_WARNINGS_FATAL=false
# 链接时使用的参数
export LFLAGS='-Xlinker -lstdc++'
# 是否使用clang
export USE_CLANG=true
# 使用64位数据模型
export LP64=1
# 告诉编译平台是64位,不然会按32位来编译
export ARCH_DATA_MODEL=64
# 允许自动下载依赖
export ALLOW_DOWNLOADS=true
# 并行编译的线程数,编译时间长,为了不影响其他工作,我选择为2
export HOTSPOT_BUILD_JOBS=2
export ALT_PARALLEL_COMPILE_JOBS=2
# 是否跳过与先前版本的比较
export SKIP_COMPARE_IMAGES=true
# 是否使用预编译头文件,加快编译速度
export USE_PRECOMPILED_HEADER=true
# 是否使用增量编译
export INCREMENTAL_BUILD=true
# 编译内容
export BUILD_LANGTOOLS=true
export BUILD_JAXP=true
export BUILD_JAXWS=true
export BUILD_CORBA=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
# 编译版本
export SKIP_DEBUG_BUILD=true
export SKIP_FASTDEBUG_BUILD=false
export DEBUG_NAME=debug
# 避开javaws和浏览器Java插件之类的部分的build
export BUILD_DEPLOY=false
export BUILD_INSTALL=false

#最后干掉这两个变量,不然会有诡异的事发生
unset JAVA_HOME
unset CLASSPATH
环境变量
# 设置 JDK 7  
export JAVA_7_HOME=`/usr/libexec/java_home -v 1.7`  
# 设置 JDK 8  
export JAVA_8_HOME=`/usr/libexec/java_home -v 1.8`  
  
#默认JDK 7  
export JAVA_HOME=$JAVA_8_HOME  
  
#alias命令动态切换JDK版本    
alias jdk7="export JAVA_HOME=$JAVA_7_HOME"  
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"

#maven 3.5.4
export MAVEN_HOME=/Users/iearl/Documents/software/maven
export PATH=$PATH:$MAVEN_HOME/bin

#openjdk
export LANG=C
# 设定语言选项,必须设置
export LANG=C
# Mac平台,C编译器不再是GCC,是clang
export CC=clang
# 跳过clang的一些严格的语法检查,不然会将N多的警告作为Error
export COMPILER_WARNINGS_FATAL=false
# 链接时使用的参数
export LFLAGS='-Xlinker -lstdc++'
# 是否使用clang
export USE_CLANG=true
# 使用64位数据模型
export LP64=1
# 告诉编译平台是64位,不然会按32位来编译
export ARCH_DATA_MODEL=64
# 允许自动下载依赖
export ALLOW_DOWNLOADS=true
# 并行编译的线程数,编译时间长,为了不影响其他工作,我选择为2
export HOTSPOT_BUILD_JOBS=2
export ALT_PARALLEL_COMPILE_JOBS=2
# 是否跳过与先前版本的比较
export SKIP_COMPARE_IMAGES=true
# 是否使用预编译头文件,加快编译速度
export USE_PRECOMPILED_HEADER=true
# 是否使用增量编译
export INCREMENTAL_BUILD=true
# 编译内容
export BUILD_LANGTOOLS=true
export BUILD_JAXP=true
export BUILD_JAXWS=true
export BUILD_CORBA=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
# 编译版本
export SKIP_DEBUG_BUILD=true
export SKIP_FASTDEBUG_BUILD=false
export DEBUG_NAME=debug
# 避开javaws和浏览器Java插件之类的部分的build
export BUILD_DEPLOY=false
export BUILD_INSTALL=false

#最后干掉这两个变量,不然会有诡异的事发生
unset JAVA_HOME
unset CLASSPATH
我的.bash_profile

4.查看OpenJdk是否编译成功并编译第一个java

    4.1 进入到OpenJdk目录,为目录赋权限

        cd xxx/openjdk

        chmod -R 777 openjdk

    4.2 /configure 如果找不freetype 可以执行./configure --with-freetype-include=/usr/local/include/freetype2 --with-freetype-lib=/usr/local/lib/ 

        cd xxx/openjdk

        ./configure --with-freetype-include=/usr/local/include/freetype2 --with-freetype-lib=/usr/local/lib/

    4.3 开始执行make命令: 在执行make命令需要指定编译环境,环境路径在:./openjdk/build/下面 一般有两个 macosx-x86_64-normal-server-release 和 macosx-x86_64-normal-server-slowdebug

        cd xxx/openjdk

  如果一般编译失败会有失败的文件,为了保险起见先执行:
    make CONF=macosx-x86_64-normal-server-release clean 或者
    make CONF=macosx-x86_64-normal-server-slowdebug clean
  再执行:
    sudo make CONF=macosx-x86_64-normal-server-release install 或者
    sudo make CONF=macosx-x86_64-normal-server-slowdebug install

        

 

    4.4 查看是否编译成功

        cd xxx/openjdk/build/macosx-x86_64-normal-server-release/jdk/bin 

        ./java -version

       输出,编译成功

openjdk version "1.8.0-internal"
OpenJDK Runtime Environment (build 1.8.0-internal-iearl_2019_02_26_22_16-b00)
OpenJDK 64-Bit Server VM (build 25.0-b70, mixed mode)
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGILL (0x4) at pc=0x0000000106c46b23, pid=29778, tid=7683
#
# JRE version: OpenJDK Runtime Environment (8.0) (build 1.8.0-internal-iearl_2019_02_26_22_16-b00)
# Java VM: OpenJDK 64-Bit Server VM (25.0-b70 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.dylib+0x446b23]
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /Users/iearl/Downloads/openjdk/build/macosx-x86_64-normal-server-release/jdk/bin/hs_err_pid29778.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#

[error occurred during error reporting , id 0x4]

Abort trap: 6
posted @ 2019-02-24 22:45  i孤独行者  阅读(1303)  评论(0)    收藏  举报