共计 1642 个字符,预计需要花费 5 分钟才能阅读完成。
尝试间接编译 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 应该会比较简单。
正文完