Hi Magnus, So yes, jrt-fs.jar can be different between a normal build and a bootcycle build, which is where I sort of came in here... For example, building say jdk-21 using a jdk-20 bootjdk, you will find that there is an extra inner class in the standard build of jrt-fs.jar, due to the fact that the jdk-21 compiler optimized the inner class generation for enum's somewhere, such that jdk/internal/jrtfs/JrtFileAttributeView$1.class only exists in a jdk-20 compiled jrt-fs.jar!
I did experiment, and you can simply switch jrt-fs.jar to be COMPILER="interim", however when it comes to the jar's construction via "jar", it obviously uses the bootjdk "jar" command since the "interim-compiler" is just a compiler.... In summary, I suspect this is just eluding to what the real purpose of "bootcycle-images" is, which I think is essentially a "test", and I suspect most vendors will either just do a standard "product-images" build, or perform their own bootcycle by doing two builds... Cheers Andrew On Wed, Sep 20, 2023 at 2:44 PM Magnus Ihse Bursie < magnus.ihse.bur...@oracle.com> wrote: > On 2023-09-20 09:38, Andrew Leonard wrote: > > Thanks Alan, > > So different gcc, glibc, Xcode,.. agree, they need to be the same for > identical bits. > However, at the moment using the same toolchains, if you do a standard > product build, > and then a bootcycle build, of the same source, jrt-fs.jar will differ. > I'll do some investigation of the make files to see if a "Build JDK" > rebuild of jrt-fs.jar is > feasible. > > I would not in general assume that a normal build and a bootcycle build > produce identical results. A bootcycle build will build the product using a > newer version of the JDK (viz. the one you just build from the sources), > and as such, changes to javac can result in different class file outputs, > etc. That being said, for large time periods of the JDK source code, a > normal build and a bootcycle build can certainly result in the same output, > since no changes have been made in the product that affects how .class > files are generated. But that is not guaranteed, nor is a difference > between normal and bootcycle build a sign of trouble or a defect. > > If jrt-fs.jar is consistently different between a bootcycle build and a > normal build, that sounds a bit odd, though. Especially since it should be > built with `--release 8` (or something like that) to ensure it is usable on > older Java; and that output ought not to really change as the JDK develops. > > (Also, questions about the build process is preferably handled on the > build-dev list) > > /Magnus > > > > Cheers > Andrew > > > On Tue, Sep 19, 2023 at 5:42 PM Alan Bateman <alan.bate...@oracle.com> > wrote: > >> On 18/09/2023 14:51, Andrew Leonard wrote: >> > Thanks for the clarification Alan. >> > >> > To ensure the reproducibility of the whole JDK image regardless of the >> > specific bootjdk used, would it make sense once the "Build JDK" has >> > been built, we re-build jrt-fs.jar again using the "Build JDK" ? Thus >> > jrt-fs.jar will be consistent with the rest of the image in terms of >> > what it is compiled with. >> > >> >> The boot JDK will be JDK N-1, or the newly built JDK in the case of boot >> cycle builds. It seems a bit of a stretch to have builds using different >> tool chains to produce identical bits but maybe you mean something else. >> >> In any case, for jrt-fs.jar the important thing is that they are >> compiled to --release 8 (that might rev at some points) so that >> IDEs/tools can open a target run-time image as a file system and access >> the classes/resources. >> >> -Alan. >> >>