MacOS 编译 OpenJDK 13

环境:
macOS Catalina 10.15.6
Xcode 11.6
Command Line Tools for Xcode 11.5

1、下载源码

2、执行 configure 命令

在源码根目录下执行 configure 命令。

$ bash configure --with-debug-level=slowdebug --with-target-bits=64 --disable-warnings-as-errors --enable-dtrace --with-jvm-variants=server

参数说明【更多】:

参数 含义
--with-boot-jdk 指定 Bootstrap JDK 路径,不指定的话也会自动搜寻合适的 JDK 来使用。
--with-debug-level 设置编译的级别 (release | fastdebug | slowdebug | optimized),越往后进行的优化措施越少,带的调试信息越多。默认 release
--with-target-bits 指定编译 32 位还是 64 位的虚拟机。
--disable-warnings-as-errors 避免因为警告而导致编译过程中断。
--enable-dtrace 开启 DTrace
--with-jvm-variants 编译特定模式下的虚拟机,可选值为:serverclientminimalcorezerocustom
--with-conf-name 指定编译配置的名称,如果没有指定,MacOS 下会生成默认的配置名称 macosx-x86_64-server-slowdebug

执行出现如下报错信息:

configure: error: No xcodebuild tool and no system framework headers found, use --with-sysroot or --with-sdk-name to provide a path to a valid SDK
/Users/../../jdk13u/build/.configure-support/generated-configure.sh: line 82: 5: Bad file descriptor
configure exiting with result code 1

然后在网上搜索了很多相关的文档,很多都是因为 Xcode 的版本问题造成的。其实这时候我的系统是没有安装 Xcode 的,但是安装了 Command Line Tools for Xcode,因为在官方编译文档中有明确表示仅需要 Command Line Tools for Xcode 即可完成编译。

Apple Xcode

The oldest supported version of Xcode is 8.

You will need the Xcode command lines developers tools to be able to build the JDK. (Actually, only the command lines tools are needed, not the IDE.) The simplest way to install these is to run:

之后尝试安装了几个老版本的 Command Line Tools for Xcode,但是依旧报相同的错误,而且 Command Line Tools for Xcode 9.4.1 版本系统已经不兼容,最后尝试安装最新版的 Xcode,问题才得以解决。

但出现了新的问题...

configure: (Your Boot JDK version must be one of: 12 13)
checking for javac... /usr/bin/javac
checking for java... /usr/bin/java
configure: Found potential Boot JDK using well-known locations (in /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk)
configure: Potential Boot JDK found at /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home is incorrect JDK version (openjdk version "1.8.0_252"); ignoring
configure: (Your Boot JDK version must be one of: 12 13)
configure: Could not find a valid Boot JDK. OpenJDK distributions are available at http://jdk.java.net/.
configure: This might be fixed by explicitly setting --with-boot-jdk
configure: error: Cannot continue

这是因为 JDK 源码中包含了部分的 Java 代码,这就需要编译时系统中安装有可用的 JDK,一般是使用和当前编译版本相同或上一个版本的 JDK 作为 Boot JDK,比如我们这里是编译的是 OpenJDK13,所以需要使用 12 或者 13 版本的 JDK 进行编译,安装之后,执行通过。

MacOS Homebrew 安装 OpenJDK

3、编译

$ make compile-commands

Building target 'compile-commands' in configuration 'macosx-x86_64-server-slowdebug'
Cleaning compile-commands make support artifacts ... done
Compiling 8 files for BUILD_TOOLS_LANGTOOLS
Compiling 1 files for BUILD_JFR_TOOLS
...
Compiling 1009 files for jdk.hotspot.agent
Updating compile_commands.json
Stopping sjavac server
Finished building target 'compile-commands' in configuration 'macosx-x86_64-server-slowdebug'

编译命令的作用是,在编译 OpenJDK 源码的同时,也为编译的代码生成 Compilation Database,体现在,编译之后,生成的 ${source_root}/build/macosx-x86_64-server-slowdebug 目录下会存在 compile_commands.json 文件。

对于某些模块,使用预编译的头文件。因此,我们需要在导入 CLion 之前再次编译,否则 CLion 会在索引过程中提示找不到各种各样的文件。 此时只需调用 make 命令即可。

$ make

4、导入 CLion

打开 CLion,首先确认已经配置好 Toolchains

然后通过主菜单 File -> Open... 打开 ${source_root}/build/macosx-x86_64-server-slowdebug/compile_commands.json 文件,选择 As a project 打开。

默认情况下,项目的根目录是包含 compile_commands.json 文件的目录,是看不到源码的,可以通过 Tools -> Compilation Database -> Change Project Root 来指定你的根目录为 ${source_root}

5、Debug 配置

1. Custom Build Targets 配置

打开 Preferences -> Build, Execution, Deployment -> Custom Build Targets

新建一个 Custom Build Targets,设置好 Name 后,需要为 BuildClean 步骤增加 External Tools 配置,具体如下:

Build
Clean

这样我们就可以在 CLion 中对 JDK 源码进行编译了。

2. Run/Debug 配置

打开 Run -> Edit Configurations,创建一个基于 Custom Build Application 模板的配置,做如下配置:

  • Target:选择之前创建的目标。
  • Executable:选择 ${source_root}/build/macosx-x86_64-server-slowdebug/jdk/bin/java,或者其它你想调试的可执行文件,比如 javac
  • Program Arguments:执行参数,为了做测试,配置了 --version
  • Before luanch:默认在每次执行前都去 Build,因为是以增量的方式编译的,所以会很快。

3. Debug 实战

${source_root}/src/java.base/share/native/libjli/java.cJavaMain 方法首行添加断点,然后点击 debug 按钮,效果如下:

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