Mac编译OpenJDK12

最近在阅读《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》

参照图书,在自己的Mac上进行OpenJDK12的编译.

环境准备

MAC参数

xcode

记得安装Command Line Tools

xcode-select --install

openjdk12源码下载

https://hg.openjdk.java.net/jdk/jdk12/,然后点击左边菜单中的“Browse”,将显示如图1-9的源码根目录页面。此时点击左边的“zip”链接即可下载当前版本打包好的源码,到本地直接解压即可。

openjdk11下载

为什么需要openjdk11?

引用书中的说法

最后,假设要编译大版本号为N的JDK,我们还要另外准备一个大版本号至少为N-1的、已经编译好的JDK,这是因为OpenJDK由多个部分(HotSpot、JDK类库、JAXWS、JAXP……)构成,其中一部分(HotSpot)代码使用C、C++编写,而更多的代码则是使用Java语言来实现,因此编译这些Java代码就需要用到另一个编译期可用的JDK,官方称这个JDK为“BootstrapJDK”。编译OpenJDK 12时,Bootstrap JDK必须使用JDK 11及之后的版本。

可以去如下地址下载安装

https://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot

编译过程

依赖环境

借助homebrew来安装

如果没有可以参考homebrew官网

/bin/bash -c"$(curl-fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

安装很简单

brew install ccache  //加速编译

brew install freetype //字体引擎,编译过程中会被依赖到

brewi nstalla utoconf

检查环境

进入之前解压的jdk12的文件夹中

可以在doc文件夹下的build.html文件查看官方文档

configure后面参数的含义可以参考结尾处的参考

注意:

其中–with-freetype的值是上一步安装的freetype路径

可以通过brew list freetype的安装路径

–with-boot-jdk是之前安装的openjdk11的路径

bashconfigure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=/usr/local/Cellar/freetype/2.10.1  --with-boot-jdk=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home --disable-warnings-as-errors

不过我在执行上面的命令是遇到了问题:

configure: error: 'valid values for --with-freetype are ‘system’ and ‘bundled’

解决方法:

不要尝试更改freetype的文件夹权限,直接把上述脚本中–with-freetype的值改为bundled即可。

所以我最终执行的是如下命令

bashconfigure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=bundled  --with-boot-jdk=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home --disable-warnings-as-errors

执行成功之后,会看到如下内容

编译

执行编译

make images

出现了如下错误:

Error: No CONF given, butmorethan one configuration found.Available configurationsin/Users/zhuchen/IdeaProjects/jdk12-06222165c35f/build:* macosx-x86_64-server-release* macosx-x86_64-server-slowdebugPlease retry building with CONF=<config pattern>(or SPEC=<spec file>).

解决方法:

到build目录下删除不想要的。

指定构建版本:

makeimages CONF=macosx-x86_64-server-slowdebug

接下来电脑会很烫,注意散热

结束之后又如下提示:

Finished building target ‘images’ in configuration ‘macosx-x86_64-server-slowdebug’

检验

进入如下所示的jdk目录的bin文件夹中

执行./java -version

成功

参考

以下摘自《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》1.6 实战:自己编译JDK

需要下载的编译环境和依赖项目都齐备后,我们就可以按照默认配置来开始编译了,但通常我们编译OpenJDK的目的都不仅仅是为了得到在自己机器中诞生的编译成品,而是带着调试、定制化等需求,这样就必须了解OpenJDK提供的编译参数才行,这些参数可以使用“bash configure–help”命令查询到,笔者对它们中最有用的部分简要说明如下:

·–with-debug-level=:设置编译的级别,可选值为release、fastdebug、slowde-bug,越往后进行的优化措施就越少,带的调试信息就越多。还有一些虚拟机调试参数必须在特定模式下才可以使用。默认值为release。

·–enable-debug:等效于–with-debug-level=fastdebug。

·–with-native-debug-symbols=:确定调试符号信息的编译方式,可选值为none、internal、external、zipped。

·–with-version-string=:设置编译JDK的版本号,譬如java-version的输出就会显示该信息。这个参数还有–with-version-=的形式,其中part可以是pre、opt、build、major、minor、security、patch之一,用于设置版本号的某一个部分。

·–with-jvm-variants=[,…]:编译特定模式(Variants)的HotSpot虚拟机,可以多个模式并存,可选值为server、client、minimal、core、zero、custom。

·–with-jvm-features=[,…]:针对–with-jvm-variants=custom时的自定义虚拟机特性列表(Features),可以多个特性并存,由于可选值较多,请参见help命令输出。

·–with-target-bits=:指明要编译32位还是64位的Java虚拟机,在64位机器上也可以通过交叉编译生成32位的虚拟机。·–with-= :用于指明依赖包的具体路径,通常使用在安装了多个不同版本的Bootstrap JDK和依赖包的情况。其中lib的可选值包括boot-jd、freetype、cups、x、alsa、libffi、jtreg、libjpeg、giflib、libpng、lcms、zlib。

·–with-extra-=:用于设定C、C++和Java代码编译时的额外编译器参数,其中flagtype可选值为cflags、cxxflags、ldflags,分别代表C、C++和Java代码的参数。

·–with-conf-name=:指定编译配置名称,OpenJDK支持使用不同的配置进行编译,默认会根据编译的操作系统、指令集架构、调试级别自动生成一个配置名称,譬如“linux-x86_64-server-release”,如果在这些信息都相同的情况下保存不同的编译参数配置,就需要使用这个参数来自定义配置名称。

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

推荐阅读更多精彩内容