tech-toolchain archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: GNU make 3.81 with GCC 14



At Sun, 08 Sep 2024 17:48:41 -0400, Greg Troxel <gdt%lexort.com@localhost> wrote:
Subject: Re: GNU make 3.81 with GCC 14
>
> Lloyd Parkes <lloyd%must-have-coffee.gen.nz@localhost> writes:
>
> > Does the following look like a good idea to add to
> > tools/gmake/Makefile? I can create a PR for it easily enough.
> >
> > 	.if ${HAVE_GCC} > 13
> > 	HOST_CFLAGS+=		-std=gnu89
> > 	.endif
>
> My quick reaction is that in theory, each program is written in a
> specific language family member (LFM, that I'd call a "language" but
> others disagree), such as C89 or C89-with-gnu-stuff.
>
> Additionally, compilers support multiple LFMs, and unhelpfully default
> to newer ones, rater than enforcing that programs in newfangled LFMs
> have to pass --std.
>
> So if make that we have is documented to build with gnu89, we should
> just set --std=gnu89 always.
>
> Or is it c99-almost, and this is a kludge?

Well technically it might be true that each program is written in a
specific LFM, we have in fact been compiling the tools by default
(natively) with a compiler (GCC-9) that defaults to "-std=gnu11", so in
practice the tools are well ready to be compiled by any compiler that
implements "gnu11", which as I said earlier is, practically speaking,
all of them (all of the usable ones anyway).

On the other hand I expect all the tools code is only really using gnu99
features at most, so -std=gnu99 is maybe even safer (as in more widely
accepted by other vendor compilers) for now.


> What is gcc14 defaulting to
> for a c std?  Is it really anything newer than c99?

Well right from the fine GCC-14.2 manual it says:

    The default, if no C language dialect options are given, is -std=gnu17.


So I just started a build (of a slightly older NetBSD source tree) on a
FreeBSD-14 host with Clang-16, and I found I needed "-Wno-everything" as
well (for tools/mtree!), and I also found that GCC, even back as far as
9.3, happily accepts the same option, so I would propose the following
for a good start on supporting modern compilers.

If or when someone encounters a compiler that doesn't support the
"-Wno-everything" option, and/or needs something different, then that
can be conditioned later, but for now covering GCC and Clang probably
covers 99% of the world of systems NetBSD can be built on.

Index: bsd.host.mk
===================================================================
RCS file: /cvs/master/m-NetBSD/main/src/share/mk/bsd.host.mk,v
retrieving revision 1.5
diff -u -u -r1.5 bsd.host.mk
--- bsd.host.mk	9 Aug 2020 21:13:38 -0000	1.5
+++ bsd.host.mk	8 Sep 2024 21:10:45 -0000
@@ -16,14 +16,14 @@

 # Helpers for cross-compiling
 HOST_CC?=	cc
-HOST_CFLAGS?=	${HOST_DBG}
+HOST_CFLAGS?=	${HOST_DBG} -std=gnu99 -Wno-everything
 HOST_COMPILE.c?=${HOST_CC} ${HOST_CFLAGS} ${HOST_DTRACE_OPTS} ${HOST_CPPFLAGS} -c
 HOST_COMPILE.cc?=      ${HOST_CXX} ${HOST_CXXFLAGS} ${HOST_DTRACE_OPTS} ${HOST_CPPFLAGS} -c
 HOST_LINK.cc?=  ${HOST_CXX} ${HOST_CXXFLAGS} ${HOST_CPPFLAGS} ${HOST_LDFLAGS}
 .if defined(HOSTPROG_CXX)
 HOST_LINK.c?=   ${HOST_LINK.cc}
 .else
-HOST_LINK.c?=	${HOST_CC} ${HOST_CFLAGS} ${HOST_CPPFLAGS} ${HOST_LDFLAGS}
+HOST_LINK.c?=	${HOST_CC} ${HOST_CFLAGS} ${HOST_CPPFLAGS} ${HOST_LDSTATIC} ${HOST_LDFLAGS}
 .endif

 HOST_CXX?=	c++


oh, that last change is because tools should be static too, in my world.

--
					Greg A. Woods <gwoods%acm.org@localhost>

Kelowna, BC     +1 250 762-7675           RoboHack <woods%robohack.ca@localhost>
Planix, Inc. <woods%planix.com@localhost>     Avoncote Farms <woods%avoncote.ca@localhost>

Attachment: pgpjl4NLxoPcE.pgp
Description: OpenPGP Digital Signature



Home | Main Index | Thread Index | Old Index