> On Jan 3, 2019, at 8:23 AM, Ferruh Yigit <ferruh.yi...@intel.com> wrote: > > AVX512 was disabled for GCC because of Bugzilla issue 97 [1], > the GCC defect submitted for the issue [2] highlighted that this is > a known binutils version 2.30 issue. > > Narrowed the scope of no-avx512 to the this specific binutils version. > > [1] > https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.dpdk.org%2Fshow_bug.cgi%3Fid%3D97&data=02%7C01%7Cyskoh%40mellanox.com%7C9e8d0eb500ca4cb74c1508d67197c6b0%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636821294022213177&sdata=Rxj7HxBWfp4hMzfRkiGtnSYt8N0TG9xnAL0ZYBpYYa0%3D&reserved=0 > > [2] > https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgcc.gnu.org%2Fbugzilla%2Fshow_bug.cgi%3Fid%3D88096&data=02%7C01%7Cyskoh%40mellanox.com%7C9e8d0eb500ca4cb74c1508d67197c6b0%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636821294022213177&sdata=EqzsamoYfFve5JAsgyWw51JOBhhiKTOCrnfZoYTGN28%3D&reserved=0 > > Fixes: 8d07c82b239f ("mk: disable gcc AVX512F support") > Cc: sta...@dpdk.org > > Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com> > --- Acked-by: Yongseok Koh <ys...@mellanox.com> Thanks
> Cc: Tom Barbette <barbe...@kth.se> > Cc: Thomas Monjalon <tho...@monjalon.net> > Cc: Yongseok Koh <ys...@mellanox.com> > Cc: Konstantin Ananyev <konstantin.anan...@intel.com> > Cc: Bruce Richardson <bruce.richard...@intel.com> > > v2: > * Added warning message (print only once for eal) > * Moved decision details to compat file, kept execution in cpuflags > > v3: > * replace 'ld' with '$(LD)' for cross build > * added meson support > --- > config/meson.build | 8 ++++++++ > mk/rte.cpuflags.mk | 4 ++-- > mk/toolchain/gcc/rte.toolchain-compat.mk | 10 ++++++++++ > 3 files changed, 20 insertions(+), 2 deletions(-) > > diff --git a/config/meson.build b/config/meson.build > index db32499b3..40802fc88 100644 > --- a/config/meson.build > +++ b/config/meson.build > @@ -43,6 +43,14 @@ toolchain = cc.get_id() > dpdk_conf.set_quoted('RTE_TOOLCHAIN', toolchain) > dpdk_conf.set('RTE_TOOLCHAIN_' + toolchain.to_upper(), 1) > > +# get binutils version for the workaround of Bug 97 > +ldver = run_command('ld', '-v').stdout().strip() > +if ldver.contains('2.30') > + if cc.has_argument('-mno-avx512f') > + machine_args += '-mno-avx512f' > + endif > +endif > + > add_project_link_arguments('-Wl,--no-as-needed', language: 'c') > dpdk_extra_ldflags += '-Wl,--no-as-needed' > > diff --git a/mk/rte.cpuflags.mk b/mk/rte.cpuflags.mk > index c3291b17a..541211c61 100644 > --- a/mk/rte.cpuflags.mk > +++ b/mk/rte.cpuflags.mk > @@ -69,8 +69,8 @@ ifneq ($(filter $(AUTO_CPUFLAGS),__AVX512F__),) > ifeq ($(CONFIG_RTE_ENABLE_AVX512),y) > CPUFLAGS += AVX512F > else > -# disable AVX512F support of gcc as a workaround for Bug 97 > -ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y) > +# disable AVX512F support for GCC & binutils 2.30 as a workaround for Bug 97 > +ifeq ($(FORCE_DISABLE_AVX512),y) > MACHINE_CFLAGS += -mno-avx512f > endif > endif > diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk > b/mk/toolchain/gcc/rte.toolchain-compat.mk > index 44904295c..33ea3f03a 100644 > --- a/mk/toolchain/gcc/rte.toolchain-compat.mk > +++ b/mk/toolchain/gcc/rte.toolchain-compat.mk > @@ -20,6 +20,16 @@ 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) > > +LD_VERSION = $(shell $(LD) -v) > +# disable AVX512F support for GCC & binutils 2.30 as a workaround for Bug 97 > +ifneq ($(filter 2.30%,$(LD_VERSION)),) > +FORCE_DISABLE_AVX512 := y > +# print warning only once for librte_eal > +ifneq ($(filter %librte_eal,$(lastword $(CURDIR))),) > +$(warning AVX512 support disabled because of ld 2.30. See Bug 97) > +endif > +endif > + > # if GCC is older than 4.x > ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1) > MACHINE_CFLAGS = > -- > 2.17.2 >