Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8159047

Disable redundant build steps when creating buildjdk

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 9
    • 9
    • infrastructure
    • None
    • b123

      When creating the buildjdk (when cross compiling), the idea is to only rebuild the parts that actually need to be rebuilt for the build platform and reuse as much as possible from the normal build. Currently, the interim-langtools step is rebuilt when it shouldn't be.

      The reason interim-langtools gets rebuilt is that the gensrc steps for those modules get rebuilt. They in turn get rebuilt because the buildjdk redefines the support outputdir, so for the buildjdk makefiles, it looks like the gensrc steps for those modules have not happened. The buildtools outputdir is not redefined however, so when the interim-langtools get rebuilt, it overwrites the old build of it.

      While this is bad from an efficiency standpoint, it also causes intermittent failures due to a race. When building the test lib, the compilation of the test lib may happen at the same time as the interim-langtools being rebuilt for the buildjdk. This means that the class files being run for the interim javac compiler can be overwritten while they are running. The failure can look like this:

      BuildTestLib.gmk:49: recipe for target '/scratch/opt/jprt/T/P1/220139.ssteuck/s/build/linux-arm64/support/test/lib/test-lib_classes/_the.BUILD_TEST_LIB_JAR_batch' failed
      make[3]: Leaving directory '/scratch/opt/jprt/T/P1/220139.ssteuck/s/make/test'
      make/Main.gmk:413: recipe for target 'build-test-lib' failed
      Exception in thread "main" java.lang.ClassFormatError: Truncated class file
      at com.sun.tools.javac.main.CommandLine.parse(CommandLine.java:58)
      at com.sun.tools.sjavac.options.OptionHelper.traverse(OptionHelper.java:121)
      at com.sun.tools.sjavac.options.Options.parseArgs(Options.java:187)
      at com.sun.tools.sjavac.client.ClientMain.run(ClientMain.java:60)
      at com.sun.tools.sjavac.client.ClientMain.run(ClientMain.java:49)
      at com.sun.tools.sjavac.Main.go(Main.java:56)
      at com.sun.tools.sjavac.Main.main(Main.java:46)
      make[3]: *** [/scratch/opt/jprt/T/P1/220139.ssteuck/s/build/linux-arm64/support/test/lib/test-lib_classes/_the.BUILD_TEST_LIB_JAR_batch] Error 1
      make[2]: *** [build-test-lib] Error 1

      My proposed fix for this problem is to add more guards in make/Main.gmk that disables the interim and gensrc targets completely when the buildjdk is being built.

            erikj Erik Joelsson
            erikj Erik Joelsson
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: