diff --git a/common/autoconf/configure.ac b/common/autoconf/configure.ac index 0079a944dac..bb5491ba0b4 100644 --- a/common/autoconf/configure.ac +++ b/common/autoconf/configure.ac @@ -229,6 +229,7 @@ LIB_SETUP_LIBRARIES JDKOPT_DETECT_INTREE_EC JDKOPT_ENABLE_DISABLE_FAILURE_HANDLER +JDKOPT_ENABLE_DISABLE_GENERATE_CLASSLIST ############################################################################### # diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index ef4a2674e9f..e4c2dab06f9 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -650,6 +650,7 @@ TEST_JOBS JOBS MEMORY_SIZE NUM_CORES +ENABLE_GENERATE_CLASSLIST BUILD_FAILURE_HANDLER ENABLE_INTREE_EC STLPORT_LIB @@ -1226,6 +1227,7 @@ with_dxsdk with_dxsdk_lib with_dxsdk_include enable_jtreg_failure_handler +enable_generate_classlist with_num_cores with_memory_size with_jobs @@ -2005,6 +2007,10 @@ Optional Features: Default is auto, where the failure handler is built if all dependencies are present and otherwise just disabled. + --disable-generate-classlist + forces enabling or disabling of the generation of a + CDS classlist at build time. Default is to generate + it when either the server or client JVMs are built. --enable-sjavac use sjavac to do fast incremental compiles [disabled] --disable-javac-server disable javac server [enabled] @@ -4391,6 +4397,12 @@ VALID_JVM_VARIANTS="server client minimal core zero zeroshark custom" # +################################################################################ +# +# Enable or disable generation of the classlist at build time +# + + # # Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -5080,7 +5092,7 @@ VS_SDK_PLATFORM_NAME_2013= #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1463732692 +DATE_WHEN_GENERATED=1464173584 ############################################################################### # @@ -64812,6 +64824,51 @@ $as_echo "yes, jtreg present" >&6; } + # Check whether --enable-generate-classlist was given. +if test "${enable_generate_classlist+set}" = set; then : + enableval=$enable_generate_classlist; +fi + + + # Check if it's likely that it's possible to generate the classlist. Depending + # on exact jvm configuration it could be possible anyway. + if [[ " $JVM_VARIANTS " =~ " server " ]] || [[ " $JVM_VARIANTS " =~ " client " ]] ; then + ENABLE_GENERATE_CLASSLIST_POSSIBLE="true" + else + ENABLE_GENERATE_CLASSLIST_POSSIBLE="false" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the CDS classlist generation should be enabled" >&5 +$as_echo_n "checking if the CDS classlist generation should be enabled... " >&6; } + if test "x$enable_generate_classlist" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, forced" >&5 +$as_echo "yes, forced" >&6; } + ENABLE_GENERATE_CLASSLIST="true" + if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xfalse"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Generation of classlist might not be possible with JVM Variants $JVM_VARIANTS" >&5 +$as_echo "$as_me: WARNING: Generation of classlist might not be possible with JVM Variants $JVM_VARIANTS" >&2;} + fi + elif test "x$enable_generate_classlist" = "xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, forced" >&5 +$as_echo "no, forced" >&6; } + ENABLE_GENERATE_CLASSLIST="false" + elif test "x$enable_generate_classlist" = "x"; then + if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xtrue"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + ENABLE_GENERATE_CLASSLIST="true" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ENABLE_GENERATE_CLASSLIST="false" + fi + else + as_fn_error $? "Invalid value for --enable-generate-classlist: $enable_generate_classlist" "$LINENO" 5 + fi + + + + ############################################################################### # # Configure parts of the build that only affect the build performance, diff --git a/common/autoconf/jdk-options.m4 b/common/autoconf/jdk-options.m4 index 076b6cfaa09..4ae07928262 100644 --- a/common/autoconf/jdk-options.m4 +++ b/common/autoconf/jdk-options.m4 @@ -491,3 +491,46 @@ AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_FAILURE_HANDLER], AC_SUBST(BUILD_FAILURE_HANDLER) ]) + +################################################################################ +# +# Enable or disable generation of the classlist at build time +# +AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_GENERATE_CLASSLIST], +[ + AC_ARG_ENABLE([generate-classlist], [AS_HELP_STRING([--disable-generate-classlist], + [forces enabling or disabling of the generation of a CDS classlist at build time. + Default is to generate it when either the server or client JVMs are built.])]) + + # Check if it's likely that it's possible to generate the classlist. Depending + # on exact jvm configuration it could be possible anyway. + if HOTSPOT_CHECK_JVM_VARIANT(server) || HOTSPOT_CHECK_JVM_VARIANT(client); then + ENABLE_GENERATE_CLASSLIST_POSSIBLE="true" + else + ENABLE_GENERATE_CLASSLIST_POSSIBLE="false" + fi + + AC_MSG_CHECKING([if the CDS classlist generation should be enabled]) + if test "x$enable_generate_classlist" = "xyes"; then + AC_MSG_RESULT([yes, forced]) + ENABLE_GENERATE_CLASSLIST="true" + if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xfalse"; then + AC_MSG_WARN([Generation of classlist might not be possible with JVM Variants $JVM_VARIANTS]) + fi + elif test "x$enable_generate_classlist" = "xno"; then + AC_MSG_RESULT([no, forced]) + ENABLE_GENERATE_CLASSLIST="false" + elif test "x$enable_generate_classlist" = "x"; then + if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xtrue"; then + AC_MSG_RESULT([yes]) + ENABLE_GENERATE_CLASSLIST="true" + else + AC_MSG_RESULT([no]) + ENABLE_GENERATE_CLASSLIST="false" + fi + else + AC_MSG_ERROR([Invalid value for --enable-generate-classlist: $enable_generate_classlist]) + fi + + AC_SUBST([ENABLE_GENERATE_CLASSLIST]) +]) diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index cace1439818..a58639f2b8a 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -285,6 +285,8 @@ BUILD_HOTSPOT=@BUILD_HOTSPOT@ BUILD_FAILURE_HANDLER := @BUILD_FAILURE_HANDLER@ +ENABLE_GENERATE_CLASSLIST := @ENABLE_GENERATE_CLASSLIST@ + # The boot jdk to use. This is overridden in bootcycle-spec.gmk. Make sure to keep # it in sync. BOOT_JDK:=@BOOT_JDK@ diff --git a/make/Images.gmk b/make/Images.gmk index 92adf3013db..c3e93a47a97 100644 --- a/make/Images.gmk +++ b/make/Images.gmk @@ -115,9 +115,12 @@ JMODS := $(wildcard $(IMAGES_OUTPUTDIR)/jmods/*.jmod) # Use this file inside the image as target for make rule JIMAGE_TARGET_FILE := bin/java$(EXE_SUFFIX) -JLINK_ORDER_RESOURCES := \ - *module-info.class* \ - @$(SUPPORT_OUTPUTDIR)/classlist/classlist,/java.base/java/* \ +JLINK_ORDER_RESOURCES := *module-info.class* +ifeq ($(ENABLE_GENERATE_CLASSLIST), true) + JLINK_ORDER_RESOURCES += @$(SUPPORT_OUTPUTDIR)/classlist/classlist +endif +JLINK_ORDER_RESOURCES += \ + /java.base/java/* \ /java.base/jdk/* \ /java.base/sun/* \ /java.base/com/* \ @@ -125,9 +128,10 @@ JLINK_ORDER_RESOURCES := \ # JLINK_TOOL := $(JLINK) --modulepath $(IMAGES_OUTPUTDIR)/jmods \ - --endian $(OPENJDK_BUILD_CPU_ENDIAN) \ - --order-resources=$(call CommaList, $(JLINK_ORDER_RESOURCES)) \ - --release-info $(BASE_RELEASE_FILE) + --endian $(OPENJDK_BUILD_CPU_ENDIAN) \ + --release-info $(BASE_RELEASE_FILE) \ + --order-resources=$(call CommaList, $(JLINK_ORDER_RESOURCES)) \ + # ifeq ($(JLINK_KEEP_PACKAGED_MODULES), true) JLINK_EXTRA_OPTS := --keep-packaged-modules $(JDK_IMAGE_DIR)/jmods @@ -369,19 +373,21 @@ JDK_TARGETS += $(JDK_IMAGE_DIR)/src.zip ################################################################################ # classlist -$(eval $(call SetupCopyFiles, JDK_COPY_CLASSLIST, \ - FILES := $(SUPPORT_OUTPUTDIR)/classlist/classlist, \ - DEST := $(JDK_IMAGE_DIR)/lib, \ -)) +ifeq ($(ENABLE_GENERATE_CLASSLIST), true) + $(eval $(call SetupCopyFiles, JDK_COPY_CLASSLIST, \ + FILES := $(SUPPORT_OUTPUTDIR)/classlist/classlist, \ + DEST := $(JDK_IMAGE_DIR)/lib, \ + )) -JDK_TARGETS += $(JDK_COPY_CLASSLIST) + JDK_TARGETS += $(JDK_COPY_CLASSLIST) -$(eval $(call SetupCopyFiles, JRE_COPY_CLASSLIST, \ - FILES := $(SUPPORT_OUTPUTDIR)/classlist/classlist, \ - DEST := $(JRE_IMAGE_DIR)/lib, \ -)) + $(eval $(call SetupCopyFiles, JRE_COPY_CLASSLIST, \ + FILES := $(SUPPORT_OUTPUTDIR)/classlist/classlist, \ + DEST := $(JRE_IMAGE_DIR)/lib, \ + )) -JRE_TARGETS += $(JRE_COPY_CLASSLIST) + JRE_TARGETS += $(JRE_COPY_CLASSLIST) +endif ################################################################################ # /demo dir diff --git a/make/Main.gmk b/make/Main.gmk index cbde81f552c..d703a266fa1 100644 --- a/make/Main.gmk +++ b/make/Main.gmk @@ -373,8 +373,10 @@ ALL_TARGETS += create-buildjdk-copy create-buildjdk-interim-image interim-image: +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f InterimImage.gmk) -generate-classlist: +ifeq ($(ENABLE_GENERATE_CLASSLIST), true) + generate-classlist: +($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f GenerateClasslist.gmk) +endif ALL_TARGETS += interim-image generate-classlist @@ -640,18 +642,22 @@ else jrtfs-jar: interim-langtools - ifeq ($(CREATE_BUILDJDK), true) - # If creating a buildjdk, the interim image needs to be based on that. - generate-classlist: create-buildjdk - else ifeq ($(EXTERNAL_BUILDJDK), false) - # If an external buildjdk has been provided, we skip generating an - # interim-image and just use the external buildjdk for generating - # classlist. - generate-classlist: interim-image - endif - generate-classlist: buildtools-jdk + ifeq ($(ENABLE_GENERATE_CLASSLIST), true) + ifeq ($(CREATE_BUILDJDK), true) + # If creating a buildjdk, the interim image needs to be based on that. + generate-classlist: create-buildjdk + else ifeq ($(EXTERNAL_BUILDJDK), false) + # If an external buildjdk has been provided, we skip generating an + # interim-image and just use the external buildjdk for generating + # classlist. + generate-classlist: interim-image + endif + generate-classlist: buildtools-jdk - jimages: jmods zip-source source-tips demos samples jrtfs-jar generate-classlist + jimages: generate-classlist + endif + + jimages: jmods zip-source source-tips demos samples jrtfs-jar profiles: jmods zip-source source-tips jrtfs-jar