RFR: JDK-8159047: Disable redundant build steps when creating buildjdk
Tim Bell
tim.bell at oracle.com
Wed Jun 8 14:46:20 UTC 2016
Erik:
> 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.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8159047
> Webrev: http://cr.openjdk.java.net/~erikj/8159047/webrev.01/
Looks good to me.
/Tim
More information about the build-dev
mailing list