JVM学习(一)windows平台编译调试jdk14

(一)windows平台编译调试jdk14

写在前面

为了学习jvm编译jdk,顺便学习源码,因为手上其他环境配置不够只好使用windows平台安装,如果可以使用linux、unix平台,最好不要在windows上构建,真的坑很多很麻烦
源码使用的是OpenJDK14 的 EA(Early Access抢 先体验版),引导jdk使用jdk13
可以参考源码下doc/building.html
源码下载地址

环境要求

1. windows10 x64
2. cygwin --在window平台模拟unix
3. vs2017 professional
4. jdk13 (做为boot jdk) – 编译版本为14 其他版本顺次向前推

注意事项

  1. 将下载的源码项目文件使用idea或其他工具转换换行符(windows平台换行符为\r\n unix\linux平台为\n 如果不转换会导致脚本运行失败)如果是在windows平台这步一定要做
  2. 如果是64位系统注意各软件也为x64版本,否则会出现一些意外的错误
  3. vs一定要英文版,不能安装中文语言包,否则check编译条件时会各种报错,需要你修改generated-configure.sh解决问题

编译过程

1.下载安装cygwin64

除了基本的Cygwin安装之外,还必须安装以下软件包:

  • autoconf
  • make
  • zip
  • unzip
可以使用以下命令行安装这些软件包:
<path to Cygwin setup>/setup-x86_64 -q -P autoconf -P make -P unzip -P zip

2. 下载freetype

https://download.savannah.gnu.org/releases/freetype/freetype-2.5.3.tar.gz

下载后解压,freetype的编译参考https://blog.csdn.net/wqlinloveruby/article/details/80409031

3.安装英文版 vs2017

再次强调安装时一定不要安装中文语言包,否则后面会报错
JVM学习(一)windows平台编译调试jdk14_第1张图片

4.运行configure

进行到这里还顺利?ok,接下来先做两件事
第一删除系统的JAVA_HOME环境变量。
第二,控制面版-区域和时间-区域 里第一个页签找到语言环境,选择英语(美国).

打开cygwin窗口操作不要用cmd,否则会报错
JVM学习(一)windows平台编译调试jdk14_第2张图片
cd 进入src目录下

#参数的详细信息参考build.html
bash ./configure --with-freetype-lib=[路径]/freetype-2.5.4/lib  --with-target-bits=64  --disable-warnings-as-errors --with-boot-jdk=[路径]/java13 --enable-debug --with-jvm-variants=server --with-freetype-include=[路径]/freetype-2.5.4/include

原来的参数–with-freetype被拆分为两个参数: (详情查看configure --help),这一点build文档似乎没有更新

--with-freetype=[lib路径]
#变更为下面两个参数
#两个参数要么都设置要么都不设置
--with-freetype-include=[路径/freetype-2.5.4/include]
--with-freetype-lib=[路径/freetype-2.5.4]

执行成功后你会看到类似如下内容

====================================================
A new configuration has been successfully created in
/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug
using configure arguments '--with-freetype-lib=/cygdrive/i/jdk13/freetype-2.5.4/lib --with-target-bits=64 --disable-warnings-as-errors --with-boot-jdk=/cygdrive/e/java/java/java13 --enable-debug --with-jvm-variants=server --with-freetype-include=/cygdrive/i/jdk13/freetype-2.5.4/include'.

Configuration summary:
* Debug level:    fastdebug
* HS debug level: fastdebug
* JVM variants:   server
* JVM features:   server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs'
* OpenJDK target: OS: windows, CPU architecture: x86, address length: 64
* Version string: 14-internal+0-adhoc.sang.src (14-internal)

Tools summary:
* Environment:    cygwin version 3.1.4(0.340/5/3) (root at /cygdrive/e/Cygwin)
* Boot JDK:       java version "13.0.2" 2020-01-14  Java(TM) SE Runtime Environment (build 13.0.2+8)  Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)   (at /cygdrive/e/java/java/java13)
* Toolchain:      microsoft (Microsoft Visual Studio 2017)
* C Compiler:     Version 19.16.27038 (at /cygdrive/c/progra~2/micros~3/2017/profes~1/vc/tools/msvc/1416~1.270/bin/hostx86/x64/cl)
* C++ Compiler:   Version 19.16.27038 (at /cygdrive/c/progra~2/micros~3/2017/profes~1/vc/tools/msvc/1416~1.270/bin/hostx86/x64/cl)

Build performance summary:
* Cores to use:   4
* Memory limit:   16246 MB

执行make images

# 执行make images等待编译完成
make images

5.执行中的错误

5.1 freetype 参数错误
#执行后出错
Only bundled freetype can be specified on Mac and Windows

解决方法

修改make/autoconf/lib-freetype.m4,找到’Only bundled freetype can be specified on Mac and Windows’。
注释这段if,或者把AC_MSG_ERROR改成AC_MSG_RESULT。

5.2 make过程报错
$ make images

Building target 'images' in configuration 'windows-x86_64-server-fastdebug'
make[3]: *** 没有规则可制作目标“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/buildtools/langtools_tools_classes/_the.BUILD_TOOLS_LANGTOOLS.vardeps”,由“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/buildtools/langtools_tools_classes/_the.BUILD_TOOLS_LANGTOOLS_batch” 需求。 停止。
make[3]: *** 正在等待未完成的任务....
make[2]: *** [make/Main.gmk:70:buildtools-langtools] 错误 2
make[2]: *** 正在等待未完成的任务....
make[3]: *** 没有规则可制作目标“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/make-support/vardeps/make/ModuleWrapper.gmk/java.base/ORDERED_CFG_VARIANTS.vardeps”,由“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/support/modules_libs/java.base/jvm.cfg” 需求。 停止。
make[3]: *** 正在等待未完成的任务....
make[2]: *** [make/Main.gmk:158:java.base-copy] 错误 2

ERROR: Build failed for target 'images' in configuration 'windows-x86_64-server-fastdebug' (exit code 2)

No indication of failed target found.
Hint: Try searching the build log for '] Error'.
Hint: See doc/building.html#troubleshooting for assistance.

make[1]: *** [/cygdrive/i/jdk13/src/make/Init.gmk:312:main] 错误 2
make: *** [/cygdrive/i/jdk13/src/make/Init.gmk:186:images] 错误 2

解决方法

卡在这里了,慢慢解决…

参考
  • https://blog.csdn.net/weixin_34318272/article/details/94299753
  • https://blog.csdn.net/ciqingloveless/article/details/81950308
  • https://blog.csdn.net/quantum7/article/details/100008683
  • https://www.iteye.com/blog/zhoupinheng-2428273

你可能感兴趣的:(JVM)