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.