From c73d38746e22c0d3e45baafdc62901179c2875c2 Mon Sep 17 00:00:00 2001 From: David Beaumont Date: Tue, 23 Sep 2025 17:52:12 +0200 Subject: [PATCH] Copy value classes into preview directories for inclusion in jimage --- make/CompileJavaModules.gmk | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/make/CompileJavaModules.gmk b/make/CompileJavaModules.gmk index 3ec32971ed8..2667524df88 100644 --- a/make/CompileJavaModules.gmk +++ b/make/CompileJavaModules.gmk @@ -99,13 +99,16 @@ endif ################################################################################ # Setup the main compilation + +COMPILATION_OUTPUTDIR := $(if $($(MODULE)_BIN), $($(MODULE)_BIN), $(JDK_OUTPUTDIR)/modules) + $(eval $(call SetupJavaCompilation, $(MODULE), \ SMALL_JAVA := false, \ MODULE := $(MODULE), \ SRC := $(wildcard $(MODULE_SRC_DIRS)), \ INCLUDES := $(JDK_USER_DEFINED_FILTER), \ FAIL_NO_SRC := $(FAIL_NO_SRC), \ - BIN := $(if $($(MODULE)_BIN), $($(MODULE)_BIN), $(JDK_OUTPUTDIR)/modules), \ + BIN := $(COMPILATION_OUTPUTDIR), \ HEADERS := $(SUPPORT_OUTPUTDIR)/headers, \ CREATE_API_DIGEST := true, \ CLEAN := $(CLEAN), \ @@ -137,6 +140,15 @@ ifneq ($(COMPILER), bootjdk) MODULE_VALUECLASS_SRC_DIRS := $(call FindModuleValueClassSrcDirs, $(MODULE)) MODULE_VALUECLASS_SOURCEPATH := $(call GetModuleValueClassSrcPath) + # Temporarily compile valueclasses into a separate directory with the form: + # // + # and then copy the class files into: + # //META-INF/preview/ + # We cannot compile directly into the desired directory because it's the + # compiler which creates the original '//...' hierarchy. + VALUECLASS_OUTPUTDIR := $(SUPPORT_OUTPUTDIR)/$(VALUECLASSES_STR) + PREVIEW_OUTPUTDIR := $(COMPILATION_OUTPUTDIR)/$(MODULE)/META-INF/preview + ifneq ($(MODULE_VALUECLASS_SRC_DIRS),) $(eval $(call SetupJavaCompilation, $(MODULE)-$(VALUECLASSES_STR), \ SMALL_JAVA := false, \ @@ -144,7 +156,7 @@ ifneq ($(COMPILER), bootjdk) SRC := $(wildcard $(MODULE_VALUECLASS_SRC_DIRS)), \ INCLUDES := $(JDK_USER_DEFINED_FILTER), \ FAIL_NO_SRC := $(FAIL_NO_SRC), \ - BIN := $(SUPPORT_OUTPUTDIR)/$(VALUECLASSES_STR)/, \ + BIN := $(VALUECLASS_OUTPUTDIR)/, \ JAR := $(JDK_OUTPUTDIR)/lib/$(VALUECLASSES_STR)/$(MODULE)-$(VALUECLASSES_STR).jar, \ HEADERS := $(SUPPORT_OUTPUTDIR)/headers, \ DISABLED_WARNINGS := $(DISABLED_WARNINGS_java) preview, \ @@ -162,6 +174,14 @@ ifneq ($(COMPILER), bootjdk) TARGETS += $($(MODULE)-$(VALUECLASSES_STR)) + # Restructure the class file hierarchy from //... to /META-INF/preview//... + $(PREVIEW_OUTPUTDIR)/_copy_valueclasses.marker: $($(MODULE)-$(VALUECLASSES_STR)) + $(call MakeTargetDir) + $(CP) -R $(VALUECLASS_OUTPUTDIR)/$(MODULE)/. $(@D)/ + $(TOUCH) $@ + + TARGETS += $(PREVIEW_OUTPUTDIR)/_copy_valueclasses.marker + $(eval $(call SetupCopyFiles, $(MODULE)-copy-valueclass-jar, \ FILES := $(JDK_OUTPUTDIR)/lib/$(VALUECLASSES_STR)/$(MODULE)-$(VALUECLASSES_STR).jar, \ DEST := $(SUPPORT_OUTPUTDIR)/modules_libs/$(MODULE)/$(VALUECLASSES_STR), \