Message ID | 20180625024913.17219-2-gavin.hu@arm.com |
---|---|
State | Superseded, archived |
Delegated to: | Thomas Monjalon |
Headers | show |
Series |
|
Related | show |
Context | Check | Description |
---|---|---|
ci/checkpatch | success | coding style OK |
ci/Intel-compilation | success | Compilation OK |
Tested-by: Ali Alnubani <alialnu@mellanox.com> > -----Original Message----- > From: dev <dev-bounces@dpdk.org> On Behalf Of Gavin Hu > Sent: Monday, June 25, 2018 5:49 AM > To: dev@dpdk.org > Cc: nd@arm.com; gavin.hu@arm.com; stable@dpdk.org > Subject: [dpdk-dev] [PATCH v13 1/6] mk: fix makefile based cross build errors > > From: gavin hu <gavin.hu@arm.com> > > The "-Wimplicit-fallthrough=2" option was introduced into gcc 7.0, it was > enabled when the cross compiler gcc is greater than 7.0, but for the host side > buildtools/pmdinfogen, if the native gcc is older than 7.0, or the host cc > compiler is clang, it should not be enabled. > > The fix is to differentiate the host gcc Werror options from the cross gcc. > > gcc -Wp,-MD,./.pmdinfogen.o.d.tmp -W -Wall -Wstrict-prototypes - > Wmissing-prototypes -Wmissing-declarations -Wold-style-definition - > Wpointer-arith -Wcast-align -Wnested-externs -Wcast-qual -Wformat- > nonliteral -Wformat-security -Wundef -Wwrite-strings -Wdeprecated - > Werror -Wimplicit-fallthrough=2 -Dbbb -Wno-format-truncation -g > -I/home/gavin/arm_repo/dpdk/build/include -o pmdinfogen.o -c > ~/dpdk/buildtools/pmdinfogen/pmdinfogen.c gcc: error: > unrecognized command line option ‘-Wimplicit-fallthrough=2’ > ~/dpdk/mk/internal/rte.compile-pre.mk:114: recipe for target > 'pmdinfogen.o' > failed make[3]: *** [pmdinfogen.o] Error 1 > > Fixes: ced3e6f8 ("mk: adjust gcc flags for new gcc 7 warnings") > Cc: stable@dpdk.org > > Signed-off-by: Gavin Hu <gavin.hu@arm.com> > Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com> > Reviewed-by: Steve Capper <Steve.Capper@arm.com> > --- > buildtools/pmdinfogen/Makefile | 2 +- > mk/toolchain/gcc/rte.toolchain-compat.mk | 5 +++++ > mk/toolchain/gcc/rte.vars.mk | 9 +++++++++ > 3 files changed, 15 insertions(+), 1 deletion(-) > > diff --git a/buildtools/pmdinfogen/Makefile > b/buildtools/pmdinfogen/Makefile index bf07b6f2e..ff7a5fae6 100644 > --- a/buildtools/pmdinfogen/Makefile > +++ b/buildtools/pmdinfogen/Makefile > @@ -41,7 +41,7 @@ HOSTAPP = dpdk-pmdinfogen # SRCS-y += > pmdinfogen.c > > -HOST_CFLAGS += $(WERROR_FLAGS) -g > +HOST_CFLAGS += $(HOST_WERROR_FLAGS) -g > HOST_CFLAGS += -I$(RTE_OUTPUT)/include > > include $(RTE_SDK)/mk/rte.hostapp.mk > diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk > b/mk/toolchain/gcc/rte.toolchain-compat.mk > index 255c89677..1e4434fa9 100644 > --- a/mk/toolchain/gcc/rte.toolchain-compat.mk > +++ b/mk/toolchain/gcc/rte.toolchain-compat.mk > @@ -15,6 +15,11 @@ GCC_MINOR = $(shell echo __GNUC_MINOR__ | > $(CC) -E -x c - | tail -n 1) GCC_PATCHLEVEL = $(shell echo > __GNUC_PATCHLEVEL__ | $(CC) -E -x c - | tail -n 1) GCC_VERSION = > $(GCC_MAJOR)$(GCC_MINOR) > > +HOST_GCC_MAJOR = $(shell echo __GNUC__ | $(HOSTCC) -E -x c - | tail -n > +1) HOST_GCC_MINOR = $(shell echo __GNUC_MINOR__ | $(HOSTCC) -E -x > c - | > +tail -n 1) HOST_GCC_PATCHLEVEL = $(shell echo __GNUC_PATCHLEVEL__ | > +$(HOSTCC) -E -x c - | tail -n 1) HOST_GCC_VERSION = > +$(HOST_GCC_MAJOR)$(HOST_GCC_MINOR) > + > # if GCC is older than 4.x > ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1) > MACHINE_CFLAGS = > diff --git a/mk/toolchain/gcc/rte.vars.mk b/mk/toolchain/gcc/rte.vars.mk > index 7e4531bab..d8b99faf6 100644 > --- a/mk/toolchain/gcc/rte.vars.mk > +++ b/mk/toolchain/gcc/rte.vars.mk > @@ -71,6 +71,15 @@ ifeq ($(shell test $(GCC_VERSION) -lt 47 && echo 1), 1) > WERROR_FLAGS += -Wno-uninitialized endif > > +HOST_WERROR_FLAGS := $(WERROR_FLAGS) > + > +ifeq ($(shell test $(HOST_GCC_VERSION) -gt 70 && echo 1), 1) # Tell GCC > +only to error for switch fallthroughs without a suitable comment > +HOST_WERROR_FLAGS += -Wimplicit-fallthrough=2 # Ignore errors for > +snprintf truncation HOST_WERROR_FLAGS += -Wno-format-truncation > endif > + > ifeq ($(shell test $(GCC_VERSION) -gt 70 && echo 1), 1) # Tell GCC only to > error for switch fallthroughs without a suitable comment WERROR_FLAGS += > -Wimplicit-fallthrough=2 > -- > 2.11.0
25/06/2018 04:49, Gavin Hu: > From: gavin hu <gavin.hu@arm.com> > > The "-Wimplicit-fallthrough=2" option was introduced into gcc 7.0, it was > enabled when the cross compiler gcc is greater than 7.0, but for the host > side buildtools/pmdinfogen, if the native gcc is older than 7.0, or the > host cc compiler is clang, it should not be enabled. > > The fix is to differentiate the host gcc Werror options from the cross gcc. > > gcc -Wp,-MD,./.pmdinfogen.o.d.tmp -W -Wall -Wstrict-prototypes > -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition > -Wpointer-arith -Wcast-align -Wnested-externs -Wcast-qual > -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings -Wdeprecated > -Werror -Wimplicit-fallthrough=2 -Dbbb -Wno-format-truncation -g > -I/home/gavin/arm_repo/dpdk/build/include -o pmdinfogen.o -c > ~/dpdk/buildtools/pmdinfogen/pmdinfogen.c gcc: error: > unrecognized command line option ‘-Wimplicit-fallthrough=2’ > ~/dpdk/mk/internal/rte.compile-pre.mk:114: recipe for target 'pmdinfogen.o' > failed make[3]: *** [pmdinfogen.o] Error 1 > > Fixes: ced3e6f8 ("mk: adjust gcc flags for new gcc 7 warnings") > Cc: stable@dpdk.org > > Signed-off-by: Gavin Hu <gavin.hu@arm.com> > Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com> > Reviewed-by: Steve Capper <Steve.Capper@arm.com> Acked-by: Thomas Monjalon <thomas@monjalon.net>
diff --git a/buildtools/pmdinfogen/Makefile b/buildtools/pmdinfogen/Makefile index bf07b6f2e..ff7a5fae6 100644 --- a/buildtools/pmdinfogen/Makefile +++ b/buildtools/pmdinfogen/Makefile @@ -41,7 +41,7 @@ HOSTAPP = dpdk-pmdinfogen # SRCS-y += pmdinfogen.c -HOST_CFLAGS += $(WERROR_FLAGS) -g +HOST_CFLAGS += $(HOST_WERROR_FLAGS) -g HOST_CFLAGS += -I$(RTE_OUTPUT)/include include $(RTE_SDK)/mk/rte.hostapp.mk diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk b/mk/toolchain/gcc/rte.toolchain-compat.mk index 255c89677..1e4434fa9 100644 --- a/mk/toolchain/gcc/rte.toolchain-compat.mk +++ b/mk/toolchain/gcc/rte.toolchain-compat.mk @@ -15,6 +15,11 @@ GCC_MINOR = $(shell echo __GNUC_MINOR__ | $(CC) -E -x c - | tail -n 1) GCC_PATCHLEVEL = $(shell echo __GNUC_PATCHLEVEL__ | $(CC) -E -x c - | tail -n 1) GCC_VERSION = $(GCC_MAJOR)$(GCC_MINOR) +HOST_GCC_MAJOR = $(shell echo __GNUC__ | $(HOSTCC) -E -x c - | tail -n 1) +HOST_GCC_MINOR = $(shell echo __GNUC_MINOR__ | $(HOSTCC) -E -x c - | tail -n 1) +HOST_GCC_PATCHLEVEL = $(shell echo __GNUC_PATCHLEVEL__ | $(HOSTCC) -E -x c - | tail -n 1) +HOST_GCC_VERSION = $(HOST_GCC_MAJOR)$(HOST_GCC_MINOR) + # if GCC is older than 4.x ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1) MACHINE_CFLAGS = diff --git a/mk/toolchain/gcc/rte.vars.mk b/mk/toolchain/gcc/rte.vars.mk index 7e4531bab..d8b99faf6 100644 --- a/mk/toolchain/gcc/rte.vars.mk +++ b/mk/toolchain/gcc/rte.vars.mk @@ -71,6 +71,15 @@ ifeq ($(shell test $(GCC_VERSION) -lt 47 && echo 1), 1) WERROR_FLAGS += -Wno-uninitialized endif +HOST_WERROR_FLAGS := $(WERROR_FLAGS) + +ifeq ($(shell test $(HOST_GCC_VERSION) -gt 70 && echo 1), 1) +# Tell GCC only to error for switch fallthroughs without a suitable comment +HOST_WERROR_FLAGS += -Wimplicit-fallthrough=2 +# Ignore errors for snprintf truncation +HOST_WERROR_FLAGS += -Wno-format-truncation +endif + ifeq ($(shell test $(GCC_VERSION) -gt 70 && echo 1), 1) # Tell GCC only to error for switch fallthroughs without a suitable comment WERROR_FLAGS += -Wimplicit-fallthrough=2