【openJDK系列1】macos编译openJDK 8

背景

因为之前一直在研究jdk源码,但是基于自己比较懒的缘故,一直没有手动编译过jdk源码,也就只是看看书本上的东西,似懂非懂的看懂了也就草草了事了,这次终于下定决心编译一把openJDK8的源码

基础环境

macos High Sierra 10.13.1
openJDK 8

编译

直接找到 http://hg.openjdk.java.net/ ,执行以下命令

# 安装mercurial
brew install mercurial
# clone openJDK源码
hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk8

当然在git JDK也有对应的JDK源码,git clone之后checkout到对应的tag上进行编译也是可以的

git clone https://github.com/openjdk/jdk
git checkout -b openjdk8  jdk8-b80

注意如果是用hg clone的方式我们还得执行sh ./get_source.sh命令来获取额外的文件,对于Mercurial和Git的区别,网上一大堆,网友可以自行查找,操作方式可以参考hg git 操作

我们这里选择hg clone的方式,执行

cd openjdk8 && sh ./get_source.sh

安装依赖

brew install freetype

Running Configure

bash ./configure --with-debug-level=slowdebug  --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home --with-freetype-include=/usr/local/Cellar/freetype/2.10.4/include/freetype2 --with-freetype-lib=/usr/local/Cellar/freetype/2.10.4/lib --with-target-bits=64 --with-jvm-variants=server --with-jdk-variant=normal --with-milestone=internal  --with-num-cores=2 --with-jobs=4 CC=clang CXX=clang++

其中,

名词 说明
--with-debug-level 可选release[默认值], fastdebug, slowdebug slowdebug 含有最丰富的调试信息
--with-boot-jdk 用于bootstrap build,指向本地已有的jdk
--with-freetype-include freetype include文件目录
--with-freetype-lib freetype lib目录
--with-target-bits 编译成64还是32位jdk
--with-jvm-variants jvm 的模式如server,client,kernel等,多个用逗号分开
--with-jdk-variant jdk的模式,会在build目录下生成的文件下有体现
--with-milestone build的里程碑,也就是阶段,会在build目录下生成的文件下有体现
--with-num-cores 用于此次build的核数
--with-jobs build的并发任务数
CC C 编译器命令,如:clang,gcc
CXX C++编译器命令,如:clang++,g++

关于clang和gcc的区别,参考clang和gcc的区别

make编译
执行如下命令:

make COMPILER_WARNINGS_FATAL=false LFLAGS='-Xlinker -lstdc++' CC=clang USE_CLANG=true LP64=1 

其中,

名词 解释
COMPILER_WARNINGS_FATAL 设置为false来跳过严格的编译器的语法检查
LFLAGS 链接时使用的参数
CC C编译器命令
LP64 使用64位数据模型

编译的过程出现如下问题,以及解决:

  • 修改relocInfo.hpp的367行(hotspot/src/share/vm/code/relocInfo.hpp),没验证为啥需要修改
    修改前:
inline friend relocInfo prefix_relocInfo(int datalen=0);

修改后:

inline friend relocInfo prefix_relocInfo(int datalen)
  • 修改generated-configure.sh的20061和21640行(common/autoconf/generated-configure.sh),解决configure: error: GCC compiler is required 错误
    修改前:
as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 6
as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5

修改后:

# as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 6
# as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5
  • 修改hotspot/src/share/vm/opto/loopPredicate.cpp 755行,解决error: ordered comparison between pointer and zero ('const TypeInt *' and 'int')
    修改前:
assert(rng->Opcode() == Op_LoadRange || _igvn.type(rng)->is_int() ->_lo >= 0, "must be");

修改后:

// assert(rng->Opcode() == Op_LoadRange || _igvn.type(rng)->is_int() ->_lo >= 0, "must be");
  • 安装XQuartz,解决'X11/Xlib.h' file not found
    安装详细信息见关于 Mac 版 X11,意思即使Mac 不再随附 X11,得自己手动安装,安装完后做软连:
     ln -s /opt/X11/include/X11 /usr/local/include/X11
    

如果build成功则会出现:

----- Build times -------
Start 2020-11-24 14:18:38
End   2020-11-24 14:18:50
00:00:01 corba
00:00:06 hotspot
00:00:00 jaxp
00:00:00 jaxws
00:00:02 jdk
00:00:01 langtools
00:00:12 TOTAL
-------------------------
Finished building OpenJDK for target 'default'

验证

build/macosx-x86_64-normal-server-slowdebug/jdk/bin/java -version

居然报错,what??? s s s

   #
   # A fatal error has been detected by the Java Runtime Environment:
   #
   #  SIGILL (0x4) at pc=0x000000010f1ed218, pid=74259, tid=6915
   #
   # JRE version: OpenJDK Runtime Environment (8.0) (build 1.8.0-internal-debug-ljh_2020_11_23_23_19-b00)
   # Java VM: OpenJDK 64-Bit Server VM (25.0-b70-debug mixed mode bsd-amd64 compressed oops)
   # Problematic frame:
   # V  [libjvm.dylib+0x9ed218]  PerfData::~PerfData()+0x8
   #
   # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
   #
   # If you would like to submit a bug report, please visit:
   #   http://bugreport.sun.com/bugreport/crash.jsp
   #

修改hotspot/src/share/vm/runtime/perfData.cpp 285行,此处参考了stackoverflow简书
修改前:

delete p;

修改后:

// delete p;

之后执行make clean再重新编译,

再重新执行

build/macosx-x86_64-normal-server-slowdebug/jdk/bin/java -version

openjdk version "1.8.0-internal-debug"
OpenJDK Runtime Environment (build 1.8.0-internal-debug-ljh_2020_11_24_11_02-b00)
OpenJDK 64-Bit Server VM (build 25.0-b70-debug, mixed mode)

至此,openJDK8在macOS上的编译完成,具体编译的步骤在源码REDAME中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容