compiler-jdk12GA

The Redefine Team Lv5

compiler jdk12GA

编译jdk, 一般文章都使用

1
hg clone http://hg.openjdk.java.net/jdk/jdk

但是在ArchLinux 上,除非安装了mercurial ,一般使用的还是git 比较多

而刚好openjdk在github 上同步了一份read-only 的repo

1
git clone git@github.com:openjdk/jdk.git

可以同步将openjdk 源码下载到本地,在当前(2019年7月25日10:53:27) openjdk 的主线版本为openjdk 14

而按照boot-jdk 版本在N-1或N-1还没有GA的情况下,需要N-2版本的编译说明,如果编译主线版本,那么需要openjdk 13的版本

而在aur中openjdk 还是12的版本,所以按照N-1规则,切换到openjdk 13 的tag,发现编译不成功,引入了很多编译错误

再次选择到jdk-12-ga 这个tag, 因为机器上openjdk 12 的版本是12.0.2+10,按照tag 来看,该版本的编译基础是jdk-12+10 的tag

而jdk-12-ga 版本,是在jdk-12+33这个版本上,所以符合N-1版本的规定

版本切换好后,就可以尝试对其进行编译了, 一个C/C++项目,传承远古时期的三板斧configure, make , make install,所以先configure

(PS: 现在基本都有各类打包侠对各类软件进行打包, 比如boot-jdk 不就是打包侠打包的吗,而在遥远的远古时代,你需要autoconf, configure, make , make install , make test, 每天都在解决软件依赖,解决符号链接不正确,依赖软件版本不匹配等等糟心事, 所以感谢打包侠,他们还陷入在那远古的恐慌之中)

1
2
bash configure --with-debug-level=fastdebug --with-boot-jdk=/usr/lib/jvm/java-12-openjdk --disable-warnings-as-errors

debug-level有各类选择

  1. release
  2. fastdebug
  3. slowdebug
  4. optimized

默认是release, 这里为了更好的玩耍,所以选择fastdebug , 快速调试

需要特别注意的是基本上一定要加入–disable-warnings-as-errors 这个参数,关闭对警告和错误的检查,不然在make 阶段就走两步就进行不下去了, 除非有莫大的勇气去解决那一堆堆的错误,所以还是假装这些警告和错误不存在吧

好了,configure 很容易成功,基本上只要boot-jdk 版本对了,就成功了,可以开始漫长的make阶段

1
make jdk-image

然后就是漫长的等待,按照不同的机器性能需要的时间也各不相同,这时候就可以喝个茶,放放水

而在这段时间,像我手中的这台垃圾本,8G内存的配置是编辑的最小要求,所以赶快把firefox kill 掉,不然编译半天因为内存耗尽失败就难受了

vim打开的maven 项目也赶快关掉,不然vim-javacomplete2这类插件在后台不断的执行mvn package, 也导致耗尽内存

自从vim 8.0 之后有异步线程可以执行,现在的vim plugin 就默默的搞很多事情,导致垃圾本已经不能好好使用了

好了经过不知多么漫长时间的等待,终于编译成功,这一刻仿佛回到了远古时代,心力交瘁

在当前目录的build/linux-x86_64-server-fastdebug/jdk 下面就编译好了期待的jdk 了

而有了自定义编译的jdk12-GA版本,就可以将linux-x86_64-server-fastdebug 这个目录copy 到其它地方,然后设置编译的jdk 为JAVA_HOME的目录

然后就可以用它作为boot-jdk 来编译jdk13, jdk13 如果编译成功,就可以再次编译主线的jdk14了

Updateing: 使用编译好的jdk12-GA 来作为boot-jdk , 编译13和14版本的jdk 都出现问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
BailoutAndRestartBackendException_OptionDescriptors.java:22: error: cannot find symbol
/*declaringClass*/ BailoutAndRestartBackendException.Options.class,
^
symbol: class Options
location: class BailoutAndRestartBackendException
/home/cmonkey/gitrepo/jdk/build/linux-x86_64-server-fastdebug/support/gensrc/jdk.internal.vm.compiler/org/graalvm/compiler/lir/BailoutAndRestartBackendException_OptionDescriptors.java:24: error: cannot find symbol
/*option*/ BailoutAndRestartBackendException.Options.LIRUnlockBackendRestart);
^
symbol: variable Options
location: class BailoutAndRestartBackendException
/home/cmonkey/gitrepo/jdk/build/linux-x86_64-server-fastdebug/support/gensrc/jdk.internal.vm.compiler/org/graalvm/compiler/replacements/arraycopy/PluginFactory_ArrayCopySnippets.java:35: error: cannot find symbol
jdk.internal.vm.compiler.word.LocationIdentity result = org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets.getArrayLocation(arg0);
^
symbol: method getArrayLocation(JavaKind)
location: class ArrayCopySnippets
3

看起来确实没有定义的样子,所以先不管了

  • 标题: compiler-jdk12GA
  • 作者: The Redefine Team
  • 创建于 : 2019-07-25 10:47:23
  • 更新于 : 2023-05-23 18:52:03
  • 链接: https://redefine.ohevan.com/2019/07/25/compiler-jdk12GA/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
compiler-jdk12GA