Feedback on the New Build System
david.holmes at oracle.com
Thu Mar 14 01:26:38 UTC 2013
On 14/03/2013 2:16 AM, Andrew Hughes wrote:
> I've just got my first build out of the new system using the main jdk8/jdk8 tree (b80) and
> so thought it was worth giving some feedback on the problems encountered and issues
> with the end result:
> 1. It took some time to work out how to get back to the usual 'noisy' build as the
> default seems to subdue all the useful output. VERBOSE=true broke the build when
> it tried to use 'true' as a Makefile target. It turns out the solution is the rather
> non-obvious VERBOSE= . Could we not have this documented somewhere and perhaps have
> verbosity as a configure option? After grepping around, it's not very obvious to me
> where it gets set.
This has already been covered with LOG=trace (or DEBUG) but note that it
is actually logged to disk - the output (regardless of the log level)
goes to build.log in the configuration directory (by default).
> 2. One of the javac calls in the jdk tree fails with:
> /home/andrew/projects/openjdk/upstream/jdk8/jdk/src/share/classes/javax/swing/JSpinner.java:43: error: package sun.util.locale.provider does not exist
> /home/andrew/projects/openjdk/upstream/jdk8/jdk/src/share/classes/javax/swing/JSpinner.java:44: error: package sun.util.locale.provider does not exist
> /home/andrew/projects/openjdk/upstream/jdk8/jdk/src/share/classes/javax/swing/JSpinner.java:45: error: package sun.util.locale.provider does not exist
> This package is in the jdk8 tree but not in the build JDK (7). Oddly, the build
> continues despite this error and the final rt.jar does include JSpinner.
I think this is actually a javadoc call (hence the non-fatal nature of
the error). But it is very hard to associate the message with any given
command due to all the interleaving (at least in my build). :(
> 3. -Werror is set for the SCTP native code causing the build to fail:
> Lots of stuff like:
> /home/andrew/projects/openjdk/upstream/jdk8/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c:88:24: error: unused parameter 'klass' [-Werror=unused-parameter]
> as -Werror is passed and -Wno-unused doesn't seem to turn these off. SCTP_WERROR=
> worked around it (perhaps this should at least be WARNINGS_ARE_ERRORS to match HotSpot?)
> Do we have a preferred way to fix these errors? I know about __unused__ but I believe this
> is GCC-specific and I wouldn't want to break the build on other platforms (Solaris, MacOS X, BSD).
What gcc version are you using? I don't see this with 4.6.
Probably best to take this up with nio-dev folk.
> 4. It's odd that the default 'make' no longer means 'make all' and 'make' on its own doesn't produce
> a JDK image to use. This will be confusing for newcomers who miss that important 'all' word or people
> like me who go by the usual presumption that the default argument to make is 'all', but appears to have
> been subverted here.
This is odd. The top-level Makefile in the forest has:
but the generated Makefile in the configuration directory simply
includes NewMakefile.gmk which has
# This must be the first rule
I always use the generated Makefile as the entry point but then I never
rely on default targets anyway.
But this certainly is confusing.
> 5. The final image produces:
> openjdk version "1.8.0-internal"
> from -version. I can't remember whether or not the internal was there before and we suppressed it in IcedTea,
> but we've definitely always had 'java version' and not having this will break numerous applications (possibly
> including the JDK build, as I know at least the old one used to check the version).
Is this an old-build vs new-build issue or a 7 vs 8 issue? The default
version information comes from files in the forest:
# Might need better names for these
> Hope this helps. I'm happy to produce patches for some of these issues, but wanted to discuss the best way
> forward first.
More information about the build-dev