From 998971d501f0e0ab3e92a33360514c4ed9d65744 Mon Sep 17 00:00:00 2001 From: Claes Redestad Date: Sat, 7 May 2016 01:21:08 +0200 Subject: [PATCH] 8150044: Generate classlists at build-time Co-authored-by: Erik Joelsson Reviewed-by: alanb, mchung, iklam --- common/autoconf/boot-jdk.m4 | 5 +- common/autoconf/buildjdk-spec.gmk.in | 1 + common/autoconf/generated-configure.sh | 8 ++- common/autoconf/spec.gmk.in | 4 ++ make/CreateBuildJdkCopy.gmk | 13 +--- make/CreateJmods.gmk | 38 ++++++----- make/Images.gmk | 35 ++++++---- make/InterimImage.gmk | 60 ++++++++++++++++++ make/Main.gmk | 88 +++++++++++++++++++------- make/common/MakeBase.gmk | 11 ++++ make/common/Modules.gmk | 4 ++ 11 files changed, 203 insertions(+), 64 deletions(-) create mode 100644 make/InterimImage.gmk diff --git a/common/autoconf/boot-jdk.m4 b/common/autoconf/boot-jdk.m4 index f264c510fde..cc4f46c0d6b 100644 --- a/common/autoconf/boot-jdk.m4 +++ b/common/autoconf/boot-jdk.m4 @@ -474,7 +474,8 @@ AC_DEFUN([BOOTJDK_SETUP_BUILD_JDK], AC_ARG_WITH(build-jdk, [AS_HELP_STRING([--with-build-jdk], [path to JDK of same version as is being built@<:@the newly built JDK@:>@])]) - CREATE_BUILDJDK_FOR_HOST=false + CREATE_BUILDJDK=false + EXTERNAL_BUILDJDK=false BUILD_JDK_FOUND="no" if test "x$with_build_jdk" != "x"; then BOOTJDK_CHECK_BUILD_JDK([ @@ -483,6 +484,7 @@ AC_DEFUN([BOOTJDK_SETUP_BUILD_JDK], BUILD_JDK_FOUND=maybe AC_MSG_NOTICE([Found potential Build JDK using configure arguments]) fi]) + EXTERNAL_BUILDJDK=true else if test "x$COMPILE_TYPE" = "xcross"; then BUILD_JDK="\$(BUILDJDK_OUTPUTDIR)/jdk" @@ -506,4 +508,5 @@ AC_DEFUN([BOOTJDK_SETUP_BUILD_JDK], AC_SUBST(CREATE_BUILDJDK) AC_SUBST(BUILD_JDK) + AC_SUBST(EXTERNAL_BUILDJDK) ]) diff --git a/common/autoconf/buildjdk-spec.gmk.in b/common/autoconf/buildjdk-spec.gmk.in index 89167a388fb..818f21eed95 100644 --- a/common/autoconf/buildjdk-spec.gmk.in +++ b/common/autoconf/buildjdk-spec.gmk.in @@ -46,6 +46,7 @@ HOTSPOT_OUTPUTDIR := $(patsubst $(BUILD_OUTPUT)%,$(BUILDJDK_OUTPUTDIR)%,$(HOTSPO HOTSPOT_DIST := $(patsubst $(BUILD_OUTPUT)%,$(BUILDJDK_OUTPUTDIR)%,$(HOTSPOT_DIST)) SUPPORT_OUTPUTDIR := $(patsubst $(BUILD_OUTPUT)%,$(BUILDJDK_OUTPUTDIR)%,$(SUPPORT_OUTPUTDIR)) JDK_OUTPUTDIR := $(patsubst $(BUILD_OUTPUT)%,$(BUILDJDK_OUTPUTDIR)%,$(JDK_OUTPUTDIR)) +IMAGES_OUTPUTDIR := $(patsubst $(BUILD_OUTPUT)%,$(BUILDJDK_OUTPUTDIR)%,$(IMAGES_OUTPUTDIR)) OPENJDK_BUILD_CPU_LEGACY := @OPENJDK_BUILD_CPU_LEGACY@ OPENJDK_BUILD_CPU_LEGACY_LIB := @OPENJDK_BUILD_CPU_LEGACY_LIB@ diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 64f44cf9f4d..7b383944e73 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -896,6 +896,7 @@ JAXWS_TOPDIR JAXP_TOPDIR CORBA_TOPDIR LANGTOOLS_TOPDIR +EXTERNAL_BUILDJDK BUILD_JDK CREATE_BUILDJDK BOOT_JDK_BITS @@ -5070,7 +5071,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=1462268995 +DATE_WHEN_GENERATED=1462574627 ############################################################################### # @@ -30171,7 +30172,8 @@ if test "${with_build_jdk+set}" = set; then : fi - CREATE_BUILDJDK_FOR_HOST=false + CREATE_BUILDJDK=false + EXTERNAL_BUILDJDK=false BUILD_JDK_FOUND="no" if test "x$with_build_jdk" != "x"; then @@ -30364,6 +30366,7 @@ $as_echo "$BUILD_JDK_VERSION" >&6; } fi # end check build jdk found fi + EXTERNAL_BUILDJDK=true else if test "x$COMPILE_TYPE" = "xcross"; then BUILD_JDK="\$(BUILDJDK_OUTPUTDIR)/jdk" @@ -30395,6 +30398,7 @@ $as_echo "no" >&6; } + ############################################################################### # # Configure the sources to use. We can add or override individual directories. diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 0d51a3e7c48..13f0a4ff44a 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -283,6 +283,7 @@ BOOT_JDK:=@BOOT_JDK@ BUILD_JDK:=@BUILD_JDK@ CREATE_BUILDJDK:=@CREATE_BUILDJDK@ +EXTERNAL_BUILDJDK:=@EXTERNAL_BUILDJDK@ # When compiling Java source to be run by the boot jdk # use these extra flags, eg -source 6 -target 6 @@ -777,6 +778,9 @@ TEST_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(TEST_IMAGE_SUBDIR) SYMBOLS_IMAGE_SUBDIR:=symbols SYMBOLS_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(SYMBOLS_IMAGE_SUBDIR) +# Interim image +INTERIM_IMAGE_DIR := $(SUPPORT_OUTPUTDIR)/interim-image + # Macosx bundles directory definitions JDK_MACOSX_BUNDLE_SUBDIR=jdk-bundle/jdk-$(VERSION_NUMBER).jdk/Contents JRE_MACOSX_BUNDLE_SUBDIR=jre-bundle/jre-$(VERSION_NUMBER).jre/Contents diff --git a/make/CreateBuildJdkCopy.gmk b/make/CreateBuildJdkCopy.gmk index 4ec9a25a711..0a9ba2c4789 100644 --- a/make/CreateBuildJdkCopy.gmk +++ b/make/CreateBuildJdkCopy.gmk @@ -29,7 +29,9 @@ include $(SPEC) include MakeBase.gmk include Modules.gmk -MODULES_TO_COPY := $(call FindTransitiveDepsForModule, jdk.jlink) jdk.jlink +MODULES_TO_COPY := $(sort \ + $(foreach m, jdk.jlink $(INTERIM_IMAGE_MODULES), \ + $(call FindTransitiveDepsForModule, $m) $m)) ################################################################################ # Copy the modules needed to run jlink and jmod. Use bulk copy instead of @@ -49,15 +51,6 @@ $(COPY_CLASSES_TARGET): $(call CacheFind, $(wildcard \ TARGETS += $(COPY_CLASSES_TARGET) -#$(eval $(call SetupCopyFiles, COPY_JDK_MODULES, \ - SRC := $(BUILD_OUTPUT), \ - DEST := $(BUILDJDK_OUTPUTDIR), \ - FILES := $(call DoubleDollar, $(call DoubleDollar, $(call CacheFind, $(wildcard \ - $(addprefix $(JDK_OUTPUTDIR)/modules/, $(MODULES_TO_COPY)))))), \ -)) - -#TARGETS += $(COPY_JDK_MODULES) - ################################################################################ $(eval $(call SetupCopyFiles, COPY_SUPPORT_HEADERS, \ diff --git a/make/CreateJmods.gmk b/make/CreateJmods.gmk index f343912ee27..394888c4970 100644 --- a/make/CreateJmods.gmk +++ b/make/CreateJmods.gmk @@ -1,4 +1,4 @@ -# + # Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # @@ -35,6 +35,8 @@ endif ################################################################################ +JMODS_DIR := $(IMAGES_OUTPUTDIR)/jmods + LIBS_DIR := $(firstword $(wildcard $(addsuffix /$(MODULE), \ $(SUPPORT_OUTPUTDIR)/modules_libs-stripped $(IMPORT_MODULES_LIBS)))) CMDS_DIR := $(firstword $(wildcard $(addsuffix /$(MODULE), \ @@ -67,28 +69,32 @@ endif # Add dependencies on other jmod files. Only java.base needs access to other # jmods. ifeq ($(MODULE), java.base) - DEPS += $(patsubst %, $(IMAGES_OUTPUTDIR)/jmods/%.jmod, \ - $(filter-out java.base, $(call FindAllModules))) + # When creating a BUILDJDK, we don't need to add hashes to java.base + ifneq ($(CREATING_BUILDJDK), true) + DEPS += $(patsubst %, $(JMODS_DIR)/%.jmod, \ + $(filter-out java.base, $(call FindAllModules))) - # TODO: find modules that directly and indrectly on upgradeable modules - EXCLUDE_HASH_MODULES := $(UPGRADEABLE_MODULES) \ - java.se.ee \ - jdk.rmic \ - jdk.xml.bind \ - jdk.xml.ws \ - # + # TODO: find modules that directly and indirectly depend on upgradeable + # modules + EXCLUDE_HASH_MODULES := $(UPGRADEABLE_MODULES) \ + java.se.ee \ + jdk.rmic \ + jdk.xml.bind \ + jdk.xml.ws \ + # - EXCLUDE_PATTERN := $(strip $(subst $(SPACE),|,$(strip $(EXCLUDE_HASH_MODULES)))) + EXCLUDE_PATTERN := $(strip $(subst $(SPACE),|,$(strip $(EXCLUDE_HASH_MODULES)))) - JMOD_FLAGS += --modulepath $(IMAGES_OUTPUTDIR)/jmods \ - --hash-modules '^(?!$(EXCLUDE_PATTERN))' + JMOD_FLAGS += --modulepath $(JMODS_DIR) \ + --hash-modules '^(?!$(EXCLUDE_PATTERN))' + endif endif # TODO: What about headers? # Create jmods in a temp dir and then move them into place to keep the # module path in $(IMAGES_OUTPUTDIR)/jmods valid at all times. -$(IMAGES_OUTPUTDIR)/jmods/$(MODULE).jmod: $(DEPS) - $(call LogWarn, Creating $(notdir $@)) +$(JMODS_DIR)/$(MODULE).jmod: $(DEPS) + $(call LogWarn, Creating $(patsubst $(OUTPUT_ROOT)/%, %, $@)) $(call MakeDir, $(@D) $(SUPPORT_OUTPUTDIR)/jmods) $(RM) $@ $(SUPPORT_OUTPUTDIR)/jmods/$(notdir $@) $(JMOD) create \ @@ -96,7 +102,7 @@ $(IMAGES_OUTPUTDIR)/jmods/$(MODULE).jmod: $(DEPS) --os-name $(REQUIRED_OS_NAME) \ --os-arch $(OPENJDK_TARGET_CPU_LEGACY) \ --os-version $(REQUIRED_OS_VERSION) \ - --modulepath $(IMAGES_OUTPUTDIR)/jmods\ + --modulepath $(JMODS_DIR) \ --exclude '**{_the.*,*.diz,*.debuginfo,*.dSYM/**,*.pdb,*.map}' \ $(JMOD_FLAGS) $(SUPPORT_OUTPUTDIR)/jmods/$(notdir $@) $(MV) $(SUPPORT_OUTPUTDIR)/jmods/$(notdir $@) $@ diff --git a/make/Images.gmk b/make/Images.gmk index a50cd7ca4d4..302bc2b3e42 100644 --- a/make/Images.gmk +++ b/make/Images.gmk @@ -56,19 +56,11 @@ JRE_COMPACT1_MODULES := java.compact1 $(COMPACT1_EXTRA_MODULES) JRE_COMPACT2_MODULES := $(JRE_COMPACT1_MODULES) java.compact2 $(COMPACT2_EXTRA_MODULES) JRE_COMPACT3_MODULES := $(JRE_COMPACT2_MODULES) java.compact3 $(COMPACT3_EXTRA_MODULES) -# Replacing double-comma with a single comma is to workaround the issue -# with some version of make on windows that doesn't substitute spaces -# with one comma properly as with make 4.0 -SubstComma = \ - $(strip \ - $(subst $(COMMA)$(COMMA),$(COMMA),$(subst $(SPACE),$(COMMA),$(strip $1))) \ - ) - -JRE_MODULES_LIST := $(call SubstComma, $(JRE_MODULES)) -JDK_MODULES_LIST := $(call SubstComma, $(JDK_MODULES)) -JRE_COMPACT1_MODULES_LIST := $(call SubstComma, $(JRE_COMPACT1_MODULES)) -JRE_COMPACT2_MODULES_LIST := $(call SubstComma, $(JRE_COMPACT2_MODULES)) -JRE_COMPACT3_MODULES_LIST := $(call SubstComma, $(JRE_COMPACT3_MODULES)) +JRE_MODULES_LIST := $(call CommaList, $(JRE_MODULES)) +JDK_MODULES_LIST := $(call CommaList, $(JDK_MODULES)) +JRE_COMPACT1_MODULES_LIST := $(call CommaList, $(JRE_COMPACT1_MODULES)) +JRE_COMPACT2_MODULES_LIST := $(call CommaList, $(JRE_COMPACT2_MODULES)) +JRE_COMPACT3_MODULES_LIST := $(call CommaList, $(JRE_COMPACT3_MODULES)) ################################################################################ # Release file @@ -363,6 +355,23 @@ $(JDK_IMAGE_DIR)/src.zip: $(SUPPORT_OUTPUTDIR)/src.zip JDK_TARGETS += $(JDK_IMAGE_DIR)/src.zip +################################################################################ +# classlist + +$(eval $(call SetupCopyFiles, JDK_COPY_CLASSLIST, \ + FILES := $(SUPPORT_OUTPUTDIR)/classlist/classlist, \ + DEST := $(JDK_IMAGE_DIR)/lib, \ +)) + +JDK_TARGETS += $(JDK_COPY_CLASSLIST) + +$(eval $(call SetupCopyFiles, JRE_COPY_CLASSLIST, \ + FILES := $(SUPPORT_OUTPUTDIR)/classlist/classlist, \ + DEST := $(JRE_IMAGE_DIR)/lib, \ +)) + +JRE_TARGETS += $(JRE_COPY_CLASSLIST) + ################################################################################ # /demo dir ifneq ($(findstring images, $(MAKECMDGOALS)), ) diff --git a/make/InterimImage.gmk b/make/InterimImage.gmk new file mode 100644 index 00000000000..6f05abe0b83 --- /dev/null +++ b/make/InterimImage.gmk @@ -0,0 +1,60 @@ +# +# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +default: all + +include $(SPEC) +include MakeBase.gmk +include Modules.gmk + +################################################################################ + +# Use this file inside the image as target for make rule +JIMAGE_TARGET_FILE := bin/java$(EXE_SUFFIX) + +INTERIM_MODULES_LIST := $(call CommaList, $(INTERIM_IMAGE_MODULES)) + +JMODS := $(patsubst %, $(IMAGES_OUTPUTDIR)/jmods/%.jmod, $(INTERIM_IMAGE_MODULES)) + +JLINK_TOOL := $(JLINK) \ + --modulepath $(IMAGES_OUTPUTDIR)/jmods \ + --endian $(OPENJDK_BUILD_CPU_ENDIAN) + +$(INTERIM_IMAGE_DIR)/$(JIMAGE_TARGET_FILE): $(JMODS) \ + $(call DependOnVariable, INTERIM_MODULES_LIST) + $(ECHO) Creating interim jimage + $(RM) -r $(INTERIM_IMAGE_DIR) + $(JLINK_TOOL) \ + --output $(INTERIM_IMAGE_DIR) \ + --addmods $(INTERIM_MODULES_LIST) + $(TOUCH) $@ + +TARGETS += $(INTERIM_IMAGE_DIR)/$(JIMAGE_TARGET_FILE) + +################################################################################ + +all: $(TARGETS) + +.PHONY: all diff --git a/make/Main.gmk b/make/Main.gmk index d3494370665..b1700f367ea 100644 --- a/make/Main.gmk +++ b/make/Main.gmk @@ -348,25 +348,35 @@ ALL_TARGETS += docs-javadoc docs-jvmtidoc zip-docs ################################################################################ # Cross compilation support -ifeq ($(CREATE_BUILDJDK), true) +ifeq ($(CREATING_BUILDJDK), true) # This target is only called by the recursive call below. - create-buildjdk-compile-hotspot-helper: hotspot - create-buildjdk-compile-modules-helper: jdk.jlink-launchers java.base-copy \ - jdk.jdeps-launchers + create-buildjdk-interim-image-helper: interim-image jdk.jlink-launchers \ + java.base-copy jdk.jdeps-launchers endif create-buildjdk-copy: +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f CreateBuildJdkCopy.gmk) -create-buildjdk-compile-hotspot create-buildjdk-compile-modules: +create-buildjdk-interim-image: +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Main.gmk \ $@-helper \ SPEC=$(dir $(SPEC))buildjdk-spec.gmk \ HOTSPOT_SPEC=$(dir $(SPEC))buildjdk-spec.gmk \ CREATING_BUILDJDK=true) -ALL_TARGETS += create-buildjdk-copy create-buildjdk-compile-hotspot \ - create-buildjdk-compile-modules +ALL_TARGETS += create-buildjdk-copy create-buildjdk-interim-image + +################################################################################ +# The interim-image is a small jlinked image that is used to generate artifacts +# at build time for use when linking the real images. + +interim-image: + +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f InterimImage.gmk) + +generate-classlist: + +($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f GenerateClasslist.gmk) + +ALL_TARGETS += interim-image generate-classlist ################################################################################ # Build tests @@ -522,10 +532,11 @@ else $(foreach m, $(RMIC_MODULES), $(eval $m-rmic: $m-java)) # Declare dependencies from -lib to -java - # Skip modules that do not have java source. When creating a BUILD_JDK, the - # java compilation has already been done by the normal build and copied in. + # Skip modules that do not have java source. + # When creating a BUILDJDK, the java compilation has already been done by the + # normal build and copied in. ifneq ($(CREATING_BUILDJDK), true) - $(foreach m, $(filter $(JAVA_MODULES), $(LIBS_MODULES)), $(eval $m-libs: $m-java)) + $(foreach m, $(filter $(JAVA_MODULES), $(LIBS_MODULES)), $(eval $m-libs: $m-java)) endif # Declare dependencies from all other -lib to java.base-lib @@ -564,11 +575,19 @@ else # Declare dependencies between jmod targets. Only java.base jmod needs access # to the other jmods to be built. - java.base-jmod: $(filter-out java.base-jmod, $(JMOD_TARGETS)) + # When creating a BUILDJDK, we don't need to add hashes to java.base, thus + # we don't need to depend on all other jmods + ifneq ($(CREATING_BUILDJDK), true) + java.base-jmod: $(filter-out java.base-jmod, $(JMOD_TARGETS)) + endif # Declare dependencies from -jmod to all other module targets $(foreach m, $(STRIP_MODULES), $(eval $m-jmod: $m-strip)) - $(foreach m, $(JAVA_MODULES), $(eval $m-jmod: $m-java)) + # When creating a BUILDJDK, the java compilation has already been done by the + # normal build and copied in. + ifneq ($(CREATING_BUILDJDK), true) + $(foreach m, $(JAVA_MODULES), $(eval $m-jmod: $m-java)) + endif $(foreach m, $(GENDATA_MODULES), $(eval $m-jmod: $m-gendata)) $(foreach m, $(RMIC_MODULES), $(eval $m-jmod: $m-rmic)) $(foreach m, $(LIBS_MODULES), $(eval $m-jmod: $m-libs)) @@ -577,10 +596,18 @@ else # Jmods cannot be created until we have the jlink tool ready to run, which requires # all java modules to be compiled and jdk.jlink-launchers. - $(JMOD_TARGETS): java java.base-libs jdk.jlink-launchers + $(JMOD_TARGETS): java.base-libs jdk.jlink-launchers + # When creating a BUILDJDK, the java compilation has already been done by the + # normal build and copied in. + ifneq ($(CREATING_BUILDJDK), true) + $(JMOD_TARGETS): java + endif ifeq ($(CREATE_BUILDJDK), true) - $(JMOD_TARGETS): create-buildjdk + # Avoid calling create-buildjdk from within a create-buildjdk call + ifneq ($(CREATING_BUILDJDK), true) + $(JMOD_TARGETS): create-buildjdk + endif endif zip-security: java.base-java java.security.jgss-java java.security.jgss-libs \ @@ -590,7 +617,18 @@ else jrtfs-jar: interim-langtools - jimages: jmods zip-source source-tips demos samples jrtfs-jar + 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 profiles: jmods zip-source source-tips jrtfs-jar @@ -606,9 +644,12 @@ else test: jimages test-image - create-buildjdk-copy: jdk.jlink-java java.base-gendata + create-buildjdk-copy: jdk.jlink-java java.base-gendata \ + $(addsuffix -java, $(INTERIM_IMAGE_MODULES)) - create-buildjdk-compile-modules: create-buildjdk-copy create-buildjdk-compile-hotspot + create-buildjdk-interim-image: create-buildjdk-copy + + interim-image: $(addsuffix -jmod, $(INTERIM_IMAGE_MODULES)) test-make: clean-test-make @@ -682,8 +723,7 @@ samples: samples-jdk # The "exploded image" is a locally runnable JDK in $(BUILD_OUTPUT)/jdk. exploded-image: $(ALL_MODULES) -create-buildjdk: create-buildjdk-compile-modules create-buildjdk-copy \ - create-buildjdk-compile-hotspot +create-buildjdk: create-buildjdk-copy create-buildjdk-interim-image mac-bundles: mac-bundles-jdk @@ -694,10 +734,14 @@ mac-bundles: mac-bundles-jdk # (and possibly other, more specific versions) product-images: jimages demos samples zip-security exploded-image -# When cross compiling and building a partial BUILDJDK for the build host, -# the summary generation cannot be run. +# The module summary cannot be run when: +# * Cross compiling and building a partial BUILDJDK for the build host +# * An external buildjdk has been supplied since it may not match the +# module selection of the target jdk ifneq ($(CREATE_BUILDJDK), true) - product-images: generate-summary + ifeq ($(EXTERNAL_BUILDJDK), false) + product-images: generate-summary + endif endif ifeq ($(OPENJDK_TARGET_OS), macosx) diff --git a/make/common/MakeBase.gmk b/make/common/MakeBase.gmk index f159b8fca63..1a33d69f3bb 100644 --- a/make/common/MakeBase.gmk +++ b/make/common/MakeBase.gmk @@ -741,6 +741,17 @@ check-jvm-variant = \ $(error Internal error: Invalid variant tested: $1)) \ $(if $(filter $1, $(JVM_VARIANTS)), true, false)) +################################################################################ +# Converts a space separated list to a comma separated list. +# +# Replacing double-comma with a single comma is to workaround the issue with +# some version of make on windows that doesn't substitute spaces with one comma +# properly. +CommaList = \ + $(strip \ + $(subst $(COMMA)$(COMMA),$(COMMA),$(subst $(SPACE),$(COMMA),$(strip $1))) \ + ) + ################################################################################ # Hook to include the corresponding custom file, if present. diff --git a/make/common/Modules.gmk b/make/common/Modules.gmk index ad1118a26df..ba1f82e5d5b 100644 --- a/make/common/Modules.gmk +++ b/make/common/Modules.gmk @@ -128,6 +128,10 @@ ifeq ($(OPENJDK_TARGET_OS), solaris) PLATFORM_MODULES += jdk.crypto.ucrypto endif +# These modules are included in the interim image which is used to run profiling +# before building the real images. +INTERIM_IMAGE_MODULES := java.base java.logging + ################################################################################ # Some platforms don't have the serviceability agent