[3/3] config/x86: fix MinGW cross build with meson 0.49

Message ID 20211112214826.333853-4-dmitry.kozliuk@gmail.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series config/x86: improve AVX512 availability check |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/github-robot: build success github build: passed
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS

Commit Message

Dmitry Kozlyuk Nov. 12, 2021, 9:48 p.m. UTC
  Cross build with MinGW was broken for the baseline meson 0.49.2.
Cause: in c_args = '-mno-avx512f' from config/x86/cross-mingw,
each character was treated as a separate compiler option:

    meson.build:4:0: ERROR:  Compiler x86_64-w64-mingw32-gcc can not compile programs.

With c_args = ['-mno-avx512f'] configuration passed, but build failed,
because Meson placed -mno-avx512f after -mavx512f in CFLAGS:

    In file included from /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/include/immintrin.h:55,
                     from /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/include/x86intrin.h:32,
                     from ../dpdk/lib/net/net_crc_avx512.c:13:
    /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/include/avx512fintrin.h:1650:1:
            error: inlining failed in call to always_inline _mm512_ternarylogic_epi64:
            target specific option mismatch
     1650 | _mm512_ternarylogic_epi64 (__m512i __A, __m512i __B, __m512i __C,
          | ^~~~~~~~~~~~~~~~~~~~~~~~~
    ../dpdk/lib/net/net_crc_avx512.c:59:9: note: called from here
       59 |  return _mm512_ternarylogic_epi64(tmp0, tmp1, data_block, 0x96);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Additionally, -m[no-]avx512f flag is expected to be in machine_args
by all the checks in meson.build files.

Commit 419c6e9af69e ("net/i40e: fix build for Windows MinGW")
fixed the errors cause by MinGW using AVX512F on Windows.
The binutils AVX512F bug check is now portable,
so enable it for Windows to switch AVX512 support on and off
without any special logic for MinGW.

Fixes: 549bfc83168f ("config: disable AVX512 with MinGW")
Cc: leyi.rong@intel.com

Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---
 config/x86/cross-mingw | 4 +---
 config/x86/meson.build | 2 +-
 2 files changed, 2 insertions(+), 4 deletions(-)
  

Comments

Bruce Richardson Nov. 15, 2021, 9:30 a.m. UTC | #1
On Sat, Nov 13, 2021 at 12:48:26AM +0300, Dmitry Kozlyuk wrote:
> Cross build with MinGW was broken for the baseline meson 0.49.2.
> Cause: in c_args = '-mno-avx512f' from config/x86/cross-mingw,
> each character was treated as a separate compiler option:
> 
>     meson.build:4:0: ERROR:  Compiler x86_64-w64-mingw32-gcc can not compile programs.
> 
> With c_args = ['-mno-avx512f'] configuration passed, but build failed,
> because Meson placed -mno-avx512f after -mavx512f in CFLAGS:
> 
>     In file included from /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/include/immintrin.h:55,
>                      from /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/include/x86intrin.h:32,
>                      from ../dpdk/lib/net/net_crc_avx512.c:13:
>     /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/include/avx512fintrin.h:1650:1:
>             error: inlining failed in call to always_inline _mm512_ternarylogic_epi64:
>             target specific option mismatch
>      1650 | _mm512_ternarylogic_epi64 (__m512i __A, __m512i __B, __m512i __C,
>           | ^~~~~~~~~~~~~~~~~~~~~~~~~
>     ../dpdk/lib/net/net_crc_avx512.c:59:9: note: called from here
>        59 |  return _mm512_ternarylogic_epi64(tmp0, tmp1, data_block, 0x96);
>           |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> Additionally, -m[no-]avx512f flag is expected to be in machine_args
> by all the checks in meson.build files.
> 
> Commit 419c6e9af69e ("net/i40e: fix build for Windows MinGW")
> fixed the errors cause by MinGW using AVX512F on Windows.
> The binutils AVX512F bug check is now portable,
> so enable it for Windows to switch AVX512 support on and off
> without any special logic for MinGW.
> 
> Fixes: 549bfc83168f ("config: disable AVX512 with MinGW")
> Cc: leyi.rong@intel.com
> 
> Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> ---
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
  

Patch

diff --git a/config/x86/cross-mingw b/config/x86/cross-mingw
index 48a82b457e..09f7af0928 100644
--- a/config/x86/cross-mingw
+++ b/config/x86/cross-mingw
@@ -5,12 +5,10 @@  ld = 'x86_64-w64-mingw32-ld'
 ar = 'x86_64-w64-mingw32-ar'
 strip = 'x86_64-w64-mingw32-strip'
 pkgconfig = 'x86_64-w64-mingw32-pkg-config'
+objdump = 'x86_64-w64-mingw32-objdump'
 
 [host_machine]
 system = 'windows'
 cpu_family = 'x86_64'
 cpu = 'native'
 endian = 'little'
-
-[properties]
-c_args = '-mno-avx512f'
diff --git a/config/x86/meson.build b/config/x86/meson.build
index 603359e55a..e25ed316f4 100644
--- a/config/x86/meson.build
+++ b/config/x86/meson.build
@@ -3,7 +3,7 @@ 
 
 # get binutils version for the workaround of Bug 97
 binutils_ok = true
-if not is_windows and (is_linux or cc.get_id() == 'gcc')
+if is_linux or cc.get_id() == 'gcc'
     binutils_ok = run_command(binutils_avx512_check).returncode() == 0
     if not binutils_ok and cc.has_argument('-mno-avx512f')
         machine_args += '-mno-avx512f'