From ffb0d3a25c60dd7fc5cb1f2c33c2977b245b5fee Mon Sep 17 00:00:00 2001 From: pal1000 Date: Fri, 1 Mar 2019 12:30:15 +0200 Subject: [PATCH] scons: Fix MSYS2 Mingw-w64 build. Reviewed-by: Jose Fonseca This patch is based on https://github.com/msys2/MINGW-packages/blob/28e3f85e09b6947ea80036c49f6c38f1394f93ca/mingw-w64-mesa/link-ole32.patch but with tweaks to avoid MSVC build break when applied. v2: Create Mingw platform alias pointing to windows host platform define to avoid spurious crosscompilation; v3: Fix obviously wrong compiler flags for swr driver; v4: Update original patch URL because it has been relocated; v5: Don't bother patching autools stuff as it's not used by MSYS2 Mingw-w64 build and it's days are numbered anyway; v6: After Mingw posix flag fix in 295851eb things are far simpler as we don't need more linking of uuid, ole32, version and shell32 than what is already in place. --- scons/gallium.py | 3 +++ scons/llvm.py | 7 +++++++ src/gallium/drivers/swr/SConscript | 4 ++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/scons/gallium.py b/scons/gallium.py index 9381f804a31..b216304170f 100755 --- a/scons/gallium.py +++ b/scons/gallium.py @@ -237,6 +237,9 @@ def generate(env): hosthost_platform = host_platform.system().lower() if hosthost_platform.startswith('cygwin'): hosthost_platform = 'cygwin' + # Avoid spurious crosscompilation in MSYS2 environment. + if hosthost_platform.startswith('mingw'): + hosthost_platform = 'windows' host_machine = os.environ.get('PROCESSOR_ARCHITEW6432', os.environ.get('PROCESSOR_ARCHITECTURE', host_platform.machine())) host_machine = { 'x86': 'x86', diff --git a/scons/llvm.py b/scons/llvm.py index 33505f79447..fc128ab1e68 100644 --- a/scons/llvm.py +++ b/scons/llvm.py @@ -30,6 +30,7 @@ Tool-specific initialization for LLVM import os import os.path import re +import platform as host_platform import sys import distutils.version @@ -192,6 +193,12 @@ def generate(env): 'uuid', ]) + # Mingw-w64 zlib is required when building with LLVM support in MSYS2 environment + if host_platform.system().lower().startswith('mingw'): + env.Append(LIBS = [ + 'z', + ]) + if env['msvc']: # Some of the LLVM C headers use the inline keyword without # defining it. diff --git a/src/gallium/drivers/swr/SConscript b/src/gallium/drivers/swr/SConscript index 61432a0c342..1230cbb5b77 100644 --- a/src/gallium/drivers/swr/SConscript +++ b/src/gallium/drivers/swr/SConscript @@ -214,7 +214,7 @@ env.Prepend(CPPPATH = [ envavx = env.Clone() envavx.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX']) -if env['platform'] == 'windows': +if env['msvc']: envavx.Append(CCFLAGS = ['/arch:AVX']) else: envavx.Append(CCFLAGS = ['-mavx']) @@ -230,7 +230,7 @@ env.Alias('swrAVX', swrAVX) envavx2 = env.Clone() envavx2.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX2']) -if env['platform'] == 'windows': +if env['msvc']: envavx2.Append(CCFLAGS = ['/arch:AVX2']) else: envavx2.Append(CCFLAGS = ['-mavx2', '-mfma', '-mbmi2', '-mf16c']) -- 2.30.2