在maxosx-aarch64上编译JDK源码

尝试直接编译 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);

编译

  1. configure

    bash configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-dtrace --disable-warnings-as-errors
  2. 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应该会比较简单。

你可能感兴趣的:(javajvm)