On Wed, 5 Sep 2018 at 10:52, Leslie Zhai <zhaixi...@loongson.cn> wrote:
>
> Hi Andrew,
>
> Thanks for your response!
>
> I just quote it from here:
>
> http://mail.openjdk.java.net/pipermail/build-dev/2016-July/017464.html
>
> I spotted that jsig is just a single C file and so doesn't
> need the -std flag. In fact, it complains about it:
>
> Compiling jsig.c (for libjsig.so)
> ( ( /usr/bin/gcc -fPIC -D_GNU_SOURCE -D_REENTRANT -O2 -pipe -march=core2
> -std=gnu++98 -m64 -g -DTHIS_FILE='"jsig.c"' -c -MMD -\
> MF /home/andrew/builder/dev/hotspot/libjsig/objs/jsig.d -o
> /home/andrew/builder/dev/hotspot/libjsig/objs/jsig.o /home/andrew/p\
> rojects/openjdk/upstream/dev/hotspot/src/os/linux/vm/jsig.c >
>  >(/usr/bin/tee /home/andrew/builder/dev/hotspot/libjsig/objs/jsi\
> g.o.log) 2> >(/usr/bin/tee
> /home/andrew/builder/dev/hotspot/libjsig/objs/jsig.o.log >&2) || (
> exitcode=$? && /bin/cp /home/and\
> rew/builder/dev/hotspot/libjsig/objs/jsig.o.log
> /home/andrew/builder/dev/make-support/failure-logs/hotspot_libjsig_objs_jsig.o\
> .log && exit $exitcode ) ) && wait )
> cc1: warning: command line option '-std=gnu++98' is valid for C++/ObjC++
> but not for C
>
> It is still able to reproducible the warning for OpenJDK8 mips64el with
> GCC and LLVM toolchains.  And gcc treat it as warning,  so it is often
> be ignored,  but clang treat it as error.
> ----- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ---
>
> Because CXXSTD_CXXFLAG="-std=gnu++98",  such flag might be effect
> others,  so workaround for LLVM toolchain:
> diff -r 1a87e769fb7f hotspot/make/linux/makefiles/jsig.make
> --- a/hotspot/make/linux/makefiles/jsig.make    Mon Sep 03 18:02:35 2018
> +0800
> +++ b/hotspot/make/linux/makefiles/jsig.make    Wed Sep 05 15:53:22 2018
> +0800
> @@ -54,7 +54,7 @@
>   $(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE)
>       @echo Making signal interposition lib...
>       $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \
> -                         $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS)
> $(EXTRA_CFLAGS) -o $@ $< -ldl
> +                         $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS)
> -fintegrated-as -o $@ $< -ldl
>   ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
>       $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJSIG_DEBUGINFO)
>       $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@
> diff -r 1a87e769fb7f hotspot/make/linux/makefiles/saproc.make
> --- a/hotspot/make/linux/makefiles/saproc.make    Mon Sep 03 18:02:35
> 2018 +0800
> +++ b/hotspot/make/linux/makefiles/saproc.make    Wed Sep 05 15:53:22
> 2018 +0800
> @@ -118,7 +118,7 @@
>                  $(SASRCFILES) \
>                  $(SA_LFLAGS) \
>                  $(SA_DEBUG_CFLAGS) \
> -               $(EXTRA_CFLAGS) \
> + -fintegrated-as                                      \
>                  -o $@ \
>                  -lthread_db
>   endif
>
> Please give me some suggestion,  thanks a lot!
>
> --
> Regards,
> Leslie Zhai
>
>

Is this the OpenJDK 8 build? It's quite different to the OpenJDK 9+ build I was
referring to in my e-mail.

There are effectively three different OpenJDK build systems:

1. OpenJDK 6 & 7 - the old legacy make & Ant build throughtout
2. OpenJDK 8 - new configure & make build for most repositories, but invoking
the old legacy build for HotSpot
3. OpenJDK 9 - full  new configure & make build across the board

This leaves OpenJDK 8 as unique and quite confusing. It means when backporting
build changes from 9+, they essentially have to be duplicated to apply
to the HotSpot
part of the build as well.

I'm aware of the build warning due to -std in the backport to 8. It
was unavoidable
as the older build only uses CFLAGS, and primarily for C++ code. There is simply
no variable to add it to instead. CXXFLAGS is used there as a variable for some
preprocessor directives :

hotspot/make/linux/makefiles/rules.make:CC_COMPILE       = $(CC)
$(CXXFLAGS) $(CFLAGS)
hotspot/make/linux/makefiles/rules.make:CXX_COMPILE      = $(CXX)
$(CXXFLAGS) $(CFLAGS)

Trying to alter this at this stage in 8u's development is really too
dangerous, considering
the range of systems relying on being able to build 8u. I'm already a
little worried by the
number of build system changes coming into 8u. I would regard the
build system for
a legacy release as needing the same stability guarantees as the code itself.

Certainly removing EXTRA_CFLAGS is not appropriate as this code will
then be built
without flags passed in by configure and other additions made by
configure checks.
Being able to build without that is one thing. Being able to ensure
there are no regressions
on all builds is quite another and we've already seen an issue where
flags for GCC >= 6
were dropped because of a typo [0].

My suggestion would be that -std is filtered out locally where it is
known that only
C code is being compiled (jsig.make by the looks of it). It's not
pretty, but it's the option
which is the least risky.

Incidentally, unless things have changed, I wasn't aware that clang
was even supported
for OpenJDK 8, which probably accounts for your issues.

[0] http://mail.openjdk.java.net/pipermail/jdk8u-dev/2018-September/007802.html

Thanks,
-- 
Andrew :)

Senior Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)

Web Site: http://fuseyism.com
Twitter: https://twitter.com/gnu_andrew_java
PGP Key: ed25519/0xCFDA0F9B35964222 (hkp://keys.gnupg.net)
Fingerprint = 5132 579D D154 0ED2 3E04  C5A0 CFDA 0F9B 3596 4222

Reply via email to