diff options
-rw-r--r-- | mesonbuild/compilers/c.py | 9 | ||||
-rw-r--r-- | mesonbuild/compilers/cpp.py | 8 | ||||
-rw-r--r-- | mesonbuild/environment.py | 27 |
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 |