aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/environment.py
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2018-10-30 20:25:50 +0000
committerJon Turney <jon.turney@dronecode.org.uk>2018-12-06 13:25:16 +0000
commita872b925ea41be3e6beffeb934030068c0d83be9 (patch)
treec7a51c46a30202cb4109570a7c7c032be4e133f5 /mesonbuild/environment.py
parent4db1b3a09f8e1f9faf7747beca2bc77ae0e5a6a5 (diff)
downloadmeson-a872b925ea41be3e6beffeb934030068c0d83be9.zip
meson-a872b925ea41be3e6beffeb934030068c0d83be9.tar.gz
meson-a872b925ea41be3e6beffeb934030068c0d83be9.tar.bz2
Store the target architecture for CL-like compilers
Store the MSVC compiler target architecture ('x86', 'x64' or 'ARM' (this is ARM64, I believe)), rather than just if it's x64 or not. The regex used for target architecture should be ok, based on this list of [1] version outputs, but we assume x86 if no match, for safety's sake. [1] https://stackoverflow.com/a/1233332/1951600 Also detect arch even if cl outputs version to stdout. Ditto for clang-cl Future work: is_64 is now only used in get_instruction_set_args()
Diffstat (limited to 'mesonbuild/environment.py')
-rw-r--r--mesonbuild/environment.py27
1 files changed, 18 insertions, 9 deletions
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