1.5.6 执行单独HotSpot的编译
其 实编 译 OpenJDK 真 正有 吸引 力 的地 方是 在 HotSpot 的编 译部 分 ,而 非整 个OpenJDK,所以如果你只是想在成功编译好 HotSpot 后进行 Debug,则可以在 OpenJDK 源代码根目录下的/hotspot/make 目录中使用 Make 命令执行 Makefile 脚本即可。当然编译HotSpot 和编译 OpenJDK 类似,都需要在编译时设置 LANG 和 ALT_BOOTDIR 这 2 个环境变量,如下所示:
代码 1-4 设置编译 HotSpot 所需的环境变量参数 #设定语言选项 export LANG=C #定义 Bootstrap JDK 的路径 export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk #编译后的存储路径 export ALT_OUTPUTDIR=/home/johngao/openjdk7/build-jvm make jvmg jvmg1 2>&1 | tee /home/johngao/openjdk7/build-log/hotspot.log无论是编译整个 OpenJDK 还是只编译 HotSpot,需要设置的环境变量始终只有两个是必需的,所以笔者在编译 HotSpot 时,只设置了 LANG 和 ALT_BOOTDIR 以及指定编译后存储路径的 ALT_OUTPUTDIR 环境变量。
在/hotspot/make 目录下的 Makefile 脚本中,定义了 HotSpot 的编译目标类型,其中主要包括了 product、 optimized、 fastdebug 和 debug 等 4 种级别,如下所示:
代码 1-5 Makefile 脚本中 HotSpot 的编译目标类型 # Typical C1/C2 targets made available with this Makefile C1_VM_TARGETS=product1 fastdebug1 optimized1 jvmg1 C2_VM_TARGETS=product fastdebug optimized jvmg ZERO_VM_TARGETS=productzero fastdebugzero optimizedzero jvmgzero SHARK_VM_TARGETS=productshark fastdebugshark optimizedshark jvmgshark COMMON_VM_PRODUCT_TARGETS=product product1 docs export_product COMMON_VM_FASTDEBUG_TARGETS=fastdebug fastdebug1 docs export_fastdebug COMMON_VM_DEBUG_TARGETS=jvmg jvmg1 docs export_debug # JDK directory list JDK_DIRS=bin include jre lib demo all: all_product all_fastdebug ifdef BUILD_CLIENT_ONLY all_product: product1 docs export_product all_fastdebug: fastdebug1 docs export_fastdebug all_debug: jvmg1 docs export_debug else ifeq ($(MACOSX_UNIVERSAL),true) all_product: universal_product all_fastdebug: universal_fastdebug all_debug: universal_debug else all_product: $(COMMON_VM_PRODUCT_TARGETS) all_fastdebug: $(COMMON_VM_FASTDEBUG_TARGETS) all_debug: $(COMMON_VM_DEBUG_TARGETS) endif endif all_optimized: optimized optimized1 docs export_optimized allzero: all_productzero all_fastdebugzero all_productzero: productzero docs export_product all_fastdebugzero: fastdebugzero docs export_fastdebug all_debugzero: jvmgzero docs export_debug all_optimizedzero: optimizedzero docs export_optimized allshark: all_productshark all_fastdebugshark all_productshark: productshark docs export_product all_fastdebugshark: fastdebugshark docs export_fastdebug all_debugshark: jvmgshark docs export_debug all_optimizedshark: optimizedshark docs export_optimized由于编译后的 HotSpot 需要进行调试,所以笔者使用的 Make 命令为“ make jvmg jvmg1”,这样一来就确定了 HotSpot 的编译目标类型是 debug 级别。
当