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

浙公网安备 33010602011771号