[dpdk-stable] [dpdk-dev][PATCH] buildtools: fix pmdinfogen compilation

Neil Horman nhorman at tuxdriver.com
Wed Jul 31 13:35:03 CEST 2019


On Wed, Jul 31, 2019 at 11:57:05AM +0530, pbhagavatula at marvell.com wrote:
> From: Pavan Nikhilesh <pbhagavatula at marvell.com>
> 
> Pmdinfogen is always compiled with host gcc.
> If host gcc version is lessthan 7 and target gcc is greaterthan 7
> pmdinfogen fails to compile due to unsupported cflags.
> This patch removes unsupported host cflags when the above condition is
> met.
> 
> Fixes: 98b0fdb0ffc6 ("pmdinfogen: add buildtools and pmdinfogen utility")
> Cc: stable at dpdk.org
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula at marvell.com>
> ---
>  buildtools/pmdinfogen/Makefile | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/buildtools/pmdinfogen/Makefile b/buildtools/pmdinfogen/Makefile
> index a97a7648f..86f883e05 100644
> --- a/buildtools/pmdinfogen/Makefile
> +++ b/buildtools/pmdinfogen/Makefile
> @@ -9,6 +9,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
>  #
>  HOSTAPP = dpdk-pmdinfogen
>  
> +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_VERSION = $(HOST_GCC_MAJOR)$(HOST_GCC_MINOR)
> +
> +ifeq ($(shell test $(HOST_GCC_VERSION) -gt 70 && echo 1), 1)
> +HOST_WERROR_FLAGS = $(filter-out -Wimplicit-fallthrough=2, $(WERROR_FLAGS))
> +endif
> +

A few things:

1) HOST_GCC_MAJOR and HOST_GCC_MINOR seem to already be computed in
rte.toolchain-compat.mk and so I don't think you need to recompute them here

2) This seems limited in its function.  That is to say, ostensibly there are
simmilar incompatibilities with icc and clang that may need addressing for which
there are different environment variables (CLANG_MAJOR_VERSION, etc)

3) This may also need to be reflected into the meson build environment

4) I'm not sure how this is a problem at all.  In your description, you indicate
that:
	a) pmdinfogen is always compiled with host gcc
	b) this fails when the target gcc uses a compiler version older than the 
	   host gcc version, leading to corresponding flag incompatibilities
If (a) is true, why does (b) matter?  If we are using the host gcc, then the
host gcc flags should work.  If we're mixing and matching host gcc and target
gcc flags, that seems like a bug that should be fixed in the target rte.vars.mk

Neil



More information about the stable mailing list