DPDK patches and discussions
 help / color / mirror / Atom feed
From: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
To: dev@dpdk.org
Cc: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>,
	Bruce Richardson <bruce.richardson@intel.com>,
	Konstantin Ananyev <konstantin.ananyev@intel.com>
Subject: [PATCH 2/3] buildtools: make AVX512 check script portable
Date: Sat, 13 Nov 2021 00:48:25 +0300	[thread overview]
Message-ID: <20211112214826.333853-3-dmitry.kozliuk@gmail.com> (raw)
In-Reply-To: <20211112214826.333853-1-dmitry.kozliuk@gmail.com>

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
+
+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)
diff --git a/buildtools/binutils-avx512-check.sh b/buildtools/binutils-avx512-check.sh
deleted file mode 100755
index 2a833b64b7..0000000000
--- a/buildtools/binutils-avx512-check.sh
+++ /dev/null
@@ -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
-}
diff --git a/buildtools/meson.build b/buildtools/meson.build
index f776316da1..22ea0ba375 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -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()]
-- 
2.29.3


  parent reply	other threads:[~2021-11-12 21:48 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-12 21:48 [PATCH 0/3] config/x86: improve AVX512 availability check Dmitry Kozlyuk
2021-11-12 21:48 ` [PATCH 1/3] config/x86: skip GNU binutils bug check for LLVM Dmitry Kozlyuk
2021-11-15  9:17   ` Bruce Richardson
2021-11-12 21:48 ` Dmitry Kozlyuk [this message]
2021-11-15  9:28   ` [PATCH 2/3] buildtools: make AVX512 check script portable Bruce Richardson
2021-11-12 21:48 ` [PATCH 3/3] config/x86: fix MinGW cross build with meson 0.49 Dmitry Kozlyuk
2021-11-15  9:30   ` Bruce Richardson
2021-11-17  8:42 ` [PATCH 0/3] config/x86: improve AVX512 availability check Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211112214826.333853-3-dmitry.kozliuk@gmail.com \
    --to=dmitry.kozliuk@gmail.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=konstantin.ananyev@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).