RFR: JDK-8198724 Refactor FLAGS handling in configure
Magnus Ihse Bursie
magnus.ihse.bursie at oracle.com
Mon Feb 26 23:40:50 UTC 2018
The current way we're handling FLAGS (CFLAGS/CXXFLAGS, LDFLAGS, etc) is
laden with technical debt. It's a sorry mess, hard to do anything
constructive about.
This is the first step towards a better solution. The main goal is to
have a set of more specific flags, more like how the SYSROOT flags work
today, that can be individually included, instead of a huge CFLAGS_JDKLIB.
To make such a change manageable, this first step will (almost) only
refactor the autoconf code, but will output the same flags in the spec.gmk.
To minimize special cases, I have accepted the following differences:
* On linux/gcc, we will get a -m<bits>, e.g. -m64 always (as on
aix/solaris).
* On macosx/clang, we will get a -m<bits>, e.g. -m64 always (as on
aix/solaris).
* On macosx/clang, we will now "hardcode" the max/min version number
without dots.
* On macosx/clang, the JVM_CFLAGS for the build toolchain will now also
get an -fPIC (this was mysteriously missing before).
* On windows/microsoft, the build toolchain will now get -nologo added
as well, and also -homeparams for debug builds.
* On solaris/solstudio, the JDKEXE flags will now include -errfmt, and
CFLAGS_JDKEXE will include -errtags=yes. The duplication of -errtags=yes
in CXXFLAGS_JDKLIB is removed.
* On solaris/solstudio, we now always use -KPIC as pic flag.
(Previously, we used -xcode=pic32 on sparc, but this is equivalent to
-KPIC, so there's no reason for a special case.)
* On solaris/solstudio, we now use e.g. "-Wc,-Qrm-s" instead of
"-Qoption cg -Qrm-s" for C++ as well as for C code. The two formats are
equivalent (for passing options to a certain compilation phase), and
there was no reason to use different ones for C and C++.
And for clarity, I have also renamed some exported flags to clearly show
that they are consumed by LIBJSIG and ADLC. I have also renamed "/STACK"
on the Microsoft linker to "-stack", to match how we write options
elsewhere.
I believe none of these should have any real effect, but if anything,
they could probably be considered bug fixes.
I have considered whitespace and ordering differences as irrelevant.
I have manually verified that the generated spec.gmk and
buildjdk-spec.gmk matches this (no changes apart from the one listed
above) for linux/x64/gcc, solaris/sparcv9/solstudio,
windows/x64/microsoft and macosx/x64/clang, for release and fastdebug.
I am also currently running a test job using the COMPARE_BUILD
functionality on our internal build system.
I would appreciate if comments are more in the form of "think of this
for subsequent updates to the flag handling" rather than requests to
change this patch, at least for requests that are just not small fixes.
(I've been juggling this for a while, trying to get it right...)
Bug: https://bugs.openjdk.java.net/browse/JDK-8198724
WebRev:
http://cr.openjdk.java.net/~ihse/JDK-8198724-refactor-flags-step-1/webrev.01
/Magnus
More information about the build-dev
mailing list