diff --git a/MAINTAINERS b/MAINTAINERS index 5e706cd7e8..27a7be8e64 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -123,6 +123,7 @@ M: Bruce Richardson F: meson.build F: meson_options.txt F: config/rte_config.h +F: buildtools/binutils-avx512-check.sh F: buildtools/call-sphinx-build.py F: buildtools/gen-pmdinfo-cfile.sh F: buildtools/list-dir-globs.py diff --git a/buildtools/binutils-avx512-check.sh b/buildtools/binutils-avx512-check.sh new file mode 100755 index 0000000000..a7e068140f --- /dev/null +++ b/buildtools/binutils-avx512-check.sh @@ -0,0 +1,16 @@ +#! /bin/sh +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2020 Intel Corporation + +AS=${AS:-as} +OBJFILE=$(mktemp -t dpdk.binutils-check.XXXXXX.o) +trap 'rm -f "$OBJFILE"' EXIT +# from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90028 +GATHER_PARAMS='0x8(,%ymm1,1),%ymm0{%k2}' + +# assemble vpgather to file and similarly check +echo "vpgatherqq $GATHER_PARAMS" | $AS --64 -o $OBJFILE - +objdump -d --no-show-raw-insn $OBJFILE | grep -q $GATHER_PARAMS || { + echo "vpgatherqq displacement error with as" + exit 1 +} diff --git a/buildtools/meson.build b/buildtools/meson.build index f9d2fdf74b..cf0048f3cd 100644 --- a/buildtools/meson.build +++ b/buildtools/meson.build @@ -1,13 +1,12 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017-2019 Intel Corporation -subdir('pmdinfogen') - pkgconf = find_program('pkg-config', 'pkgconf', required: false) pmdinfo = find_program('gen-pmdinfo-cfile.sh') list_dir_globs = find_program('list-dir-globs.py') check_symbols = find_program('check-symbols.sh') ldflags_ibverbs_static = find_program('options-ibverbs-static.sh') +binutils_avx512_check = find_program('binutils-avx512-check.sh') # set up map-to-win script using python, either built-in or external python3 = import('python').find_installation(required: false) diff --git a/config/x86/meson.build b/config/x86/meson.build index adc857ba28..6ec020ef6b 100644 --- a/config/x86/meson.build +++ b/config/x86/meson.build @@ -3,14 +3,10 @@ # get binutils version for the workaround of Bug 97 if not is_windows - ldver = run_command('ld', '-v').stdout().strip() - if ldver.contains('2.30') and cc.has_argument('-mno-avx512f') + binutils_ok = run_command(binutils_avx512_check) + if binutils_ok.returncode() != 0 and cc.has_argument('-mno-avx512f') machine_args += '-mno-avx512f' - message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97') - endif - if ldver.contains('2.31') and cc.has_argument('-mno-avx512f') - machine_args += '-mno-avx512f' - message('Binutils 2.31 detected, disabling AVX512 support as workaround for bug #249') + warning('Binutils error with AVX512 assembly, disabling AVX512 support') endif endif diff --git a/meson.build b/meson.build index e8bb9c4c1e..61d9a4f5fa 100644 --- a/meson.build +++ b/meson.build @@ -39,10 +39,13 @@ global_inc = include_directories('.', 'config', 'lib/librte_eal/@0@/include'.format(host_machine.system()), 'lib/librte_eal/@0@/include'.format(arch_subdir), ) + +# do configuration and get tool paths +subdir('buildtools') subdir('config') # build libs and drivers -subdir('buildtools') +subdir('buildtools/pmdinfogen') subdir('lib') subdir('drivers')