aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/compilers/c.py9
-rw-r--r--mesonbuild/compilers/cpp.py8
-rw-r--r--mesonbuild/environment.py27
3 files changed, 27 insertions, 17 deletions
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index b009645..46f4181 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -1290,7 +1290,7 @@ class VisualStudioCCompiler(CCompiler):
'mtd': ['/MTd'],
}
- def __init__(self, exelist, version, is_cross, exe_wrap, is_64):
+ def __init__(self, exelist, version, is_cross, exe_wrap, target):
CCompiler.__init__(self, exelist, version, is_cross, exe_wrap)
self.id = 'msvc'
# /showIncludes is needed for build dependency tracking in Ninja
@@ -1300,7 +1300,8 @@ class VisualStudioCCompiler(CCompiler):
'2': ['/W3'],
'3': ['/W4']}
self.base_options = ['b_pch', 'b_ndebug', 'b_vscrt'] # FIXME add lto, pgo and the like
- self.is_64 = is_64
+ self.target = target
+ self.is_64 = ('x64' in target) or ('x86_64' in target)
# Override CCompiler.get_always_args
def get_always_args(self):
@@ -1588,8 +1589,8 @@ class VisualStudioCCompiler(CCompiler):
class ClangClCCompiler(VisualStudioCCompiler):
- def __init__(self, exelist, version, is_cross, exe_wrap, is_64):
- super().__init__(exelist, version, is_cross, exe_wrap, is_64)
+ def __init__(self, exelist, version, is_cross, exe_wrap, target):
+ super().__init__(exelist, version, is_cross, exe_wrap, target)
self.id = 'clang-cl'
diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py
index 87371c0..d702e83 100644
--- a/mesonbuild/compilers/cpp.py
+++ b/mesonbuild/compilers/cpp.py
@@ -308,9 +308,9 @@ class IntelCPPCompiler(IntelCompiler, CPPCompiler):
class VisualStudioCPPCompiler(VisualStudioCCompiler, CPPCompiler):
- def __init__(self, exelist, version, is_cross, exe_wrap, is_64):
+ def __init__(self, exelist, version, is_cross, exe_wrap, target):
CPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap)
- VisualStudioCCompiler.__init__(self, exelist, version, is_cross, exe_wrap, is_64)
+ VisualStudioCCompiler.__init__(self, exelist, version, is_cross, exe_wrap, target)
self.base_options = ['b_pch', 'b_vscrt'] # FIXME add lto, pgo and the like
def get_options(self):
@@ -387,8 +387,8 @@ class VisualStudioCPPCompiler(VisualStudioCCompiler, CPPCompiler):
return VisualStudioCCompiler.get_compiler_check_args(self)
class ClangClCPPCompiler(VisualStudioCPPCompiler, ClangClCCompiler):
- def __init__(self, exelist, version, is_cross, exe_wrap, is_64):
- VisualStudioCPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap, is_64)
+ def __init__(self, exelist, version, is_cross, exe_wrap, target):
+ VisualStudioCPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap, target)
self.id = 'clang-cl'
class ArmCPPCompiler(ArmCompiler, CPPCompiler):
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index 2ccd31e..95a64c6 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -659,9 +659,13 @@ class Environment:
except OSError as e:
popen_exceptions[' '.join(compiler + [arg])] = e
version = search_version(out)
- is_64 = 'Target: x86_64' in out
+ match = re.search('^Target: (.*?)-', out, re.MULTILINE)
+ if match:
+ target = match.group(1)
+ else:
+ target = 'unknown target'
cls = ClangClCCompiler if lang == 'c' else ClangClCPPCompiler
- return cls(compiler, version, is_cross, exe_wrap, is_64)
+ return cls(compiler, version, is_cross, exe_wrap, target)
if 'clang' in out:
if 'Apple' in out or mesonlib.for_darwin(want_cross, self):
compiler_type = CompilerType.CLANG_OSX
@@ -676,15 +680,20 @@ class Environment:
# number to stderr but earlier ones print version
# on stdout. Why? Lord only knows.
# Check both outputs to figure out version.
- version = search_version(err)
- if version == 'unknown version':
- version = search_version(out)
- if version == 'unknown version':
- m = 'Failed to detect MSVC compiler arch: stderr was\n{!r}'
+ for lookat in [err, out]:
+ version = search_version(lookat)
+ if version != 'unknown version':
+ break
+ else:
+ m = 'Failed to detect MSVC compiler version: stderr was\n{!r}'
raise EnvironmentException(m.format(err))
- is_64 = err.split('\n')[0].endswith(' x64')
+ match = re.search(' for (.*)$', lookat.split('\n')[0])
+ if match:
+ target = match.group(1)
+ else:
+ target = 'x86'
cls = VisualStudioCCompiler if lang == 'c' else VisualStudioCPPCompiler
- return cls(compiler, version, is_cross, exe_wrap, is_64)
+ return cls(compiler, version, is_cross, exe_wrap, target)
if '(ICC)' in out:
if mesonlib.for_darwin(want_cross, self):
compiler_type = CompilerType.ICC_OSX