[2/3] buildtools: make AVX512 check script portable
Checks
Commit Message
buildtools/binutils-avx512-check.sh was Unix-only
and could not be used in cross builds:
1) written in shell;
2) used the assembler binary that may be missing,
e.g. when building on Windows with LLVM;
3) located the assembler as ${AS:-as} and referenced objdump,
but those binaries may be overridden via --cross-file.
Rewrite the script in Python.
Use the C compiler for the check.
Locate objdump and the C compiler using Meson.
Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---
buildtools/binutils-avx512-check.py | 21 +++++++++++++++++++++
buildtools/binutils-avx512-check.sh | 16 ----------------
buildtools/meson.build | 4 +++-
3 files changed, 24 insertions(+), 17 deletions(-)
create mode 100644 buildtools/binutils-avx512-check.py
delete mode 100755 buildtools/binutils-avx512-check.sh
Comments
On Sat, Nov 13, 2021 at 12:48:25AM +0300, Dmitry Kozlyuk wrote:
> buildtools/binutils-avx512-check.sh was Unix-only
> and could not be used in cross builds:
> 1) written in shell;
> 2) used the assembler binary that may be missing,
> e.g. when building on Windows with LLVM;
> 3) located the assembler as ${AS:-as} and referenced objdump,
> but those binaries may be overridden via --cross-file.
>
> Rewrite the script in Python.
> Use the C compiler for the check.
> Locate objdump and the C compiler using Meson.
>
> Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> ---
> buildtools/binutils-avx512-check.py | 21 +++++++++++++++++++++
> buildtools/binutils-avx512-check.sh | 16 ----------------
> buildtools/meson.build | 4 +++-
> 3 files changed, 24 insertions(+), 17 deletions(-)
> create mode 100644 buildtools/binutils-avx512-check.py
> delete mode 100755 buildtools/binutils-avx512-check.sh
>
> diff --git a/buildtools/binutils-avx512-check.py b/buildtools/binutils-avx512-check.py
> new file mode 100644
> index 0000000000..a4e14f3593
> --- /dev/null
> +++ b/buildtools/binutils-avx512-check.py
> @@ -0,0 +1,21 @@
> +#! /usr/bin/env python3
> +# SPDX-License-Identitifer: BSD-3-Clause
> +# Copyright(c) 2020 Intel Corporation
> +
This probably should have your own copyright instead of or alongside the
Intel one, since this is a rewrite.
Otherwise:
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
new file mode 100644
@@ -0,0 +1,21 @@
+#! /usr/bin/env python3
+# SPDX-License-Identitifer: BSD-3-Clause
+# Copyright(c) 2020 Intel Corporation
+
+import subprocess
+import sys
+import tempfile
+
+objdump, *cc = sys.argv[1:]
+with tempfile.NamedTemporaryFile() as obj:
+ # On Windows, the file is opened exclusively and is not writable.
+ obj.close()
+ # from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90028
+ gather_params = '0x8(,%ymm1,1),%ymm0{%k2}'
+ src = '__asm__("vpgatherqq {}");'.format(gather_params).encode('utf-8')
+ subprocess.run(cc + ['-c', '-xc', '-o', obj.name, '-'], input=src, check=True)
+ asm = subprocess.run([objdump, '-d', '--no-show-raw-insn', obj.name],
+ capture_output=True, check=True).stdout.decode('utf-8')
+ if gather_params not in asm:
+ print('vpgatherqq displacement error with as')
+ sys.exit(1)
deleted file mode 100755
@@ -1,16 +0,0 @@
-#! /bin/sh
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2020 Intel Corporation
-
-AS=${AS:-as}
-OBJFILE=$(mktemp -t dpdk.binutils-check.XXXXXX)
-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
-}
@@ -4,7 +4,7 @@
pkgconf = find_program('pkg-config', 'pkgconf', required: false)
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')
+objdump = find_program('objdump', 'llvm-objdump')
python3 = import('python').find_installation(required: false)
if python3.found()
@@ -18,6 +18,8 @@ map_to_win_cmd = py3 + files('map_to_win.py')
sphinx_wrapper = py3 + files('call-sphinx-build.py')
get_cpu_count_cmd = py3 + files('get-cpu-count.py')
get_numa_count_cmd = py3 + files('get-numa-count.py')
+binutils_avx512_check = (py3 + files('binutils-avx512-check.py') +
+ [objdump] + cc.cmd_array())
# select library and object file format
pmdinfo = py3 + files('gen-pmdinfo-cfile.py') + [meson.current_build_dir()]