diff options
author | Jon Turney <jon.turney@dronecode.org.uk> | 2018-10-30 20:03:37 +0000 |
---|---|---|
committer | Jon Turney <jon.turney@dronecode.org.uk> | 2018-12-06 13:26:51 +0000 |
commit | f3b5c3c27d03fa03d4ede49a9c3ddeb519c14d17 (patch) | |
tree | 974e96934c2deddea2062ff7093abd56b3ba1eab | |
parent | a872b925ea41be3e6beffeb934030068c0d83be9 (diff) | |
download | meson-f3b5c3c27d03fa03d4ede49a9c3ddeb519c14d17.tar.gz |
Simplify test for x86 targeted MSVC cross-compiler
We can't just do compiler.has_builtin_define('_M_IX86'), because the
VisualStudioCCompiler class doesn't implement has_builtin_define(), and
getting the compiler to disgorge it's builtin defines isn't easy...
But we can now use the target we stored when we identifed the compiler.
Also update comment appropriately
-rw-r--r-- | mesonbuild/environment.py | 40 |
1 files changed, 10 insertions, 30 deletions
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index 95a64c61c..d18c546f6 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -166,11 +166,13 @@ def detect_windows_arch(compilers): easily detected. In the end, the sanest method is as follows: - 1. Check if we're in an MSVC toolchain environment, and if so, return the - MSVC toolchain architecture as our 'native' architecture. - 2. If not, check environment variables that are set by Windows and WOW64 to - find out the architecture that Windows is built for, and use that as our - 'native' architecture. + 1. Check environment variables that are set by Windows and WOW64 to find out + if this is x86 (possibly in WOW64), if so use that as our 'native' + architecture. + 2. If the compiler toolchain target architecture is x86, use that as our + 'native' architecture. + 3. Otherwise, use the actual Windows architecture + """ os_arch = detect_native_windows_arch() if os_arch != 'amd64': @@ -180,31 +182,9 @@ def detect_windows_arch(compilers): # 32-bit and pretend like we're running under WOW64. Else, return the # actual Windows architecture that we deduced above. for compiler in compilers.values(): - # Check if we're using and inside an MSVC toolchain environment - if compiler.id == 'msvc' and 'VCINSTALLDIR' in os.environ: - if float(compiler.get_toolset_version()) < 10.0: - # On MSVC 2008 and earlier, check 'BUILD_PLAT', where - # 'Win32' means 'x86' - platform = os.environ.get('BUILD_PLAT', os_arch) - if platform == 'Win32': - return 'x86' - elif 'VSCMD_ARG_TGT_ARCH' in os.environ: - # On MSVC 2017 'Platform' is not set in VsDevCmd.bat - return os.environ['VSCMD_ARG_TGT_ARCH'] - else: - # Starting with VS 2017, `Platform` is not always set (f.ex., - # if you use VsDevCmd.bat directly instead of vcvars*.bat), but - # `VSCMD_ARG_HOST_ARCH` is always set, so try that first. - if 'VSCMD_ARG_HOST_ARCH' in os.environ: - platform = os.environ['VSCMD_ARG_HOST_ARCH'].lower() - # On VS 2010-2015, 'Platform' is only set when the - # target arch is not 'x86'. It's 'x64' when targeting - # x86_64 and 'arm' when targeting ARM. - else: - platform = os.environ.get('Platform', 'x86').lower() - if platform == 'x86': - return platform - if compiler.id == 'clang-cl' and not compiler.is_64: + if compiler.id == 'msvc' and compiler.target == 'x86': + return 'x86' + if compiler.id == 'clang-cl' and compiler.target == 'x86': return 'x86' if compiler.id == 'gcc' and compiler.has_builtin_define('__i386__'): return 'x86' |