为了学习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 其他版本顺次向前推
除了基本的Cygwin安装之外,还必须安装以下软件包:
可以使用以下命令行安装这些软件包:
<path to Cygwin setup>/setup-x86_64 -q -P autoconf -P make -P unzip -P zip
https://download.savannah.gnu.org/releases/freetype/freetype-2.5.3.tar.gz
下载后解压,freetype的编译参考https://blog.csdn.net/wqlinloveruby/article/details/80409031
进行到这里还顺利?ok,接下来先做两件事
第一删除系统的JAVA_HOME环境变量。
第二,控制面版-区域和时间-区域 里第一个页签找到语言环境,选择英语(美国).
打开cygwin窗口操作不要用cmd,否则会报错
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
#执行后出错
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。
$ 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
解决方法
卡在这里了,慢慢解决…