尝试直接编译 JDK 8(可以直接略过此部分)
准备工作
- 在jdk.java.net上下载了JDK 8源码
build.html文档,不同的JDK版本,位置不一样。需要仔细阅读
- Boot JDK 编译JDK,需要JDK的上一个版本,所以这里需要安装JDK 7 (brew install --cask homebrew/cask-versions/zulu7)
configure
bash configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-dtrace --disable-warnings-as-errors
make
在make中可能会遇到各种依赖安装。
总结
新版的macbook pro 使用了m1芯片,所以老版本的不支持编译。如果是Intel芯片的MAC OS,应该问题不大。
在Linux(mint os)上编译JDK
我选择的是JDK 12的源码,
- 安装JDK 11
- 根据build.html
- 根据bash configure中提示,安装缺少的文件
这个过程很简单,没有出现什么问题
在macosx-aarch64上 编译JDK 18
目前来说只有JDK 版本17,18,19是可以在macosx-aarch64上安装的。具体参考Support Build Platforms。因为JDK 17是稳定版本,所以编译JDK 18 GA。
遇到的问题
error: parameter 'SizeOfTag' set but not used
这个问题是在JDK-8283221已经有人发现了。目前优先级不是很高,有个workaround方法 --disable-warnings-as-error
guarantee(val < (1ULL << nbits)) failed: Field too big for insn
这个问题是在JDK-8280476已经有人发现了。我看了目前只修改了11,17,19 没有修改18。可以根据commit修改一下src/hotspot/cpu/aarch64/immediate_aarch64.cpp
// src/hotspot/cpu/aarch64/immediate_aarch64.cpp
uint64_t replicate(uint64_t bits, int nbits, int count)
{
// 在函数开头,添加下main代码
assert(count > 0, "must be");
assert(nbits > 0, "must be");
assert(count * nbits <= 64, "must be");
// Special case nbits == 64 since the shift below with that nbits value
// would result in undefined behavior.
if (nbits == 64) {
return bits;
}
//-----------------------
uint64_t result = 0;
uint64_t mask = ones(nbits);
编译
configure
bash configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-dtrace --disable-warnings-as-errors
- make
如果遇到各种依赖安装,用brew安装即可。
结果
java -v
openjdk 18-internal 2022-03-22
OpenJDK Runtime Environment (slowdebug build 18-internal+0-adhoc.chenpei.jdk-jdk-18-ga)
OpenJDK 64-Bit Server VM (slowdebug build 18-internal+0-adhoc.chenpei.jdk-jdk-18-ga, mixed mode)
总结
目前对于macosx-aarch64的支持还可以,应该随着以后的版本,在macos应该会比较简单。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。