@@ -99,13 +99,16 @@ endif
9999
100100################################################################################
101101# Setup the main compilation
102+
103+ COMPILATION_OUTPUTDIR := $(if $($(MODULE)_BIN), $($(MODULE)_BIN), $(JDK_OUTPUTDIR)/modules)
104+
102105$(eval $(call SetupJavaCompilation, $(MODULE), \
103106 SMALL_JAVA := false, \
104107 MODULE := $(MODULE), \
105108 SRC := $(wildcard $(MODULE_SRC_DIRS)), \
106109 INCLUDES := $(JDK_USER_DEFINED_FILTER), \
107110 FAIL_NO_SRC := $(FAIL_NO_SRC), \
108- BIN := $(if $($(MODULE)_BIN), $($(MODULE)_BIN), $(JDK_OUTPUTDIR)/modules ), \
111+ BIN := $(COMPILATION_OUTPUTDIR ), \
109112 HEADERS := $(SUPPORT_OUTPUTDIR)/headers, \
110113 CREATE_API_DIGEST := true, \
111114 CLEAN := $(CLEAN), \
@@ -137,14 +140,23 @@ ifneq ($(COMPILER), bootjdk)
137140 MODULE_VALUECLASS_SRC_DIRS := $(call FindModuleValueClassSrcDirs, $(MODULE))
138141 MODULE_VALUECLASS_SOURCEPATH := $(call GetModuleValueClassSrcPath)
139142
143+ # Temporarily compile valueclasses into a separate directory with the form:
144+ # <tempdir>/<module>/<classpath>
145+ # and then copy the class files into:
146+ # <outdir>/<module>/META-INF/preview/<classpath>
147+ # We cannot compile directly into the desired directory because it's the
148+ # compiler which creates the original '<module>/<classpath>/...' hierarchy.
149+ VALUECLASS_OUTPUTDIR := $(SUPPORT_OUTPUTDIR)/$(VALUECLASSES_STR)
150+ PREVIEW_OUTPUTDIR := $(COMPILATION_OUTPUTDIR)/$(MODULE)/META-INF/preview
151+
140152 ifneq ($(MODULE_VALUECLASS_SRC_DIRS),)
141153 $(eval $(call SetupJavaCompilation, $(MODULE)-$(VALUECLASSES_STR), \
142154 SMALL_JAVA := false, \
143155 MODULE := $(MODULE), \
144156 SRC := $(wildcard $(MODULE_VALUECLASS_SRC_DIRS)), \
145157 INCLUDES := $(JDK_USER_DEFINED_FILTER), \
146158 FAIL_NO_SRC := $(FAIL_NO_SRC), \
147- BIN := $(SUPPORT_OUTPUTDIR)/$(VALUECLASSES_STR )/, \
159+ BIN := $(VALUECLASS_OUTPUTDIR )/, \
148160 JAR := $(JDK_OUTPUTDIR)/lib/$(VALUECLASSES_STR)/$(MODULE)-$(VALUECLASSES_STR).jar, \
149161 HEADERS := $(SUPPORT_OUTPUTDIR)/headers, \
150162 DISABLED_WARNINGS := $(DISABLED_WARNINGS_java) preview, \
@@ -162,6 +174,14 @@ ifneq ($(COMPILER), bootjdk)
162174
163175 TARGETS += $($(MODULE)-$(VALUECLASSES_STR))
164176
177+ # Restructure the class file hierarchy from <module>/<classpath>/... to <module>/META-INF/preview/<classpath>/...
178+ $(PREVIEW_OUTPUTDIR)/_copy_valueclasses.marker: $($(MODULE)-$(VALUECLASSES_STR))
179+ $(call MakeTargetDir)
180+ $(CP) -R $(VALUECLASS_OUTPUTDIR)/$(MODULE)/. $(@D)/
181+ $(TOUCH) $@
182+
183+ TARGETS += $(PREVIEW_OUTPUTDIR)/_copy_valueclasses.marker
184+
165185 $(eval $(call SetupCopyFiles, $(MODULE)-copy-valueclass-jar, \
166186 FILES := $(JDK_OUTPUTDIR)/lib/$(VALUECLASSES_STR)/$(MODULE)-$(VALUECLASSES_STR).jar, \
167187 DEST := $(SUPPORT_OUTPUTDIR)/modules_libs/$(MODULE)/$(VALUECLASSES_STR), \
0 commit comments