Problems with --with-override and gensrc targets

Mikael Gerdin mikael.gerdin at oracle.com
Mon Nov 2 14:41:14 UTC 2015


Hi build-devs,

I was trying to do a fancy setup with multiple different hotspot 
directories in a single source tree to create some builds for 
performance measurements.

I used the configure flag --with-override-hotspot=hotspot-foo
and when I attempted a "make images" I get the following error:

$ make CONF=override-foo images
Building configuration 'override-foo' (matching CONF=override-foo)
Compiling 5 files for BUILD_GENMODULESLIST
Building configuration 'override-foo' (matching CONF=override-foo)
Building target 'images' in configuration 'override-foo'
Compiling 8 files for BUILD_TOOLS_LANGTOOLS
Compiling 14 files for BUILD_JVMCI_OPTIONS
Compiling 3 files for BUILD_JVMCI_SERVICE
Error: Could not find or load main class com.sun.tools.javac.Main
Error: Could not find or load main class com.sun.tools.javac.Main
Gensrc-jdk.vm.ci.gmk:39: recipe for target 
'/home/mgerdin/work/repos/hg/jdk9/hs-rt/build/override-foo/buildtools/jvmci_options/_the.BUILD_JVMCI_OPTIONS_batch' 
failed
make[3]: *** 
[/home/mgerdin/work/repos/hg/jdk9/hs-rt/build/override-foo/buildtools/jvmci_options/_the.BUILD_JVMCI_OPTIONS_batch] 
Error 1
make[3]: *** Waiting for unfinished jobs....
Gensrc-jdk.vm.ci.gmk:48: recipe for target 
'/home/mgerdin/work/repos/hg/jdk9/hs-rt/build/override-foo/buildtools/jvmci_service/_the.BUILD_JVMCI_SERVICE_batch' 
failed
make[3]: *** 
[/home/mgerdin/work/repos/hg/jdk9/hs-rt/build/override-foo/buildtools/jvmci_service/_the.BUILD_JVMCI_SERVICE_batch] 
Error 1
make/Main.gmk:103: recipe for target 'jdk.vm.ci-gensrc-hotspot-foo' failed

 From what I gather the problem is that the hotspot directory name is 
encoded in the make target name: 'jdk.vm.ci-gensrc-hotspot-foo' but in 
make/Main.gmk the dependencies are set up as follows:

HOTSPOT_GENSRC_TARGETS := $(filter %-gensrc-hotspot, $(GENSRC_TARGETS))
$(HOTSPOT_GENSRC_TARGETS): interim-langtools

but since 'jdk.vm.ci-gensrc-hotspot-foo' does not match the 
%-gensrc-hotspot filter no dependency is created on interim-langtools 
and the build fails because it can't find the javac main class.

I had a stab at fixing it by the following change:
diff -r 1697e1f12275 make/Main.gmk
--- a/make/Main.gmk
+++ b/make/Main.gmk
@@ -110,7 +110,7 @@
  JDK_GENSRC_TARGETS := $(filter %-gensrc-jdk, $(GENSRC_TARGETS))
  LANGTOOLS_GENSRC_TARGETS := $(filter %-gensrc-langtools, 
$(GENSRC_TARGETS))
  CORBA_GENSRC_TARGETS := $(filter %-gensrc-corba, $(GENSRC_TARGETS))
-HOTSPOT_GENSRC_TARGETS := $(filter %-gensrc-hotspot, $(GENSRC_TARGETS))
+HOTSPOT_GENSRC_TARGETS := $(filter %-gensrc-$(shell basename 
$(HOTSPOT_TOPDIR)), $(GENSRC_TARGETS))

but I suspect that a more complete change would involve the other 
--with-override-foo flags and perhaps avoiding using the shell to get 
the directory part of HOTSPOT_TOPDIR

I guess nobody has used the --with-override flags for a while :)

/Mikael



More information about the build-dev mailing list