Tested-by: Ali Alnubani <alia...@mellanox.com>
> -----Original Message-----
> From: dev <dev-boun...@dpdk.org> On Behalf Of Gavin Hu
> Sent: Monday, June 25, 2018 5:49 AM
> To: dev@dpdk.org
> Cc: n...@arm.com; gavin...@arm.com; sta...@dpdk.org
> Subject: [dpdk-dev] [PATCH v13 1/6] mk: fix makefile based cross build errors
>
> From: gavin hu <gavin...@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: sta...@dpdk.org
>
> Signed-off-by: Gavin Hu <gavin...@arm.com>
> Reviewed-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>
> Reviewed-by: Steve Capper <steve.cap...@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