aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers/detect.py
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2022-10-14 15:32:50 -0400
committerXavier Claessens <xclaesse@gmail.com>2022-10-24 14:52:13 +0200
commit942aea230f5e517d5add194240c8943f28d79943 (patch)
treeef4af65b83d089b084e8d051c53e46f0e47850fe /mesonbuild/compilers/detect.py
parente04bce3f0453fc73c2170cfbf2f51debe2fc33c3 (diff)
downloadmeson-942aea230f5e517d5add194240c8943f28d79943.zip
meson-942aea230f5e517d5add194240c8943f28d79943.tar.gz
meson-942aea230f5e517d5add194240c8943f28d79943.tar.bz2
Add MASM compiler
ml and armasm are Microsoft's Macro Assembler, part of MSVC.
Diffstat (limited to 'mesonbuild/compilers/detect.py')
-rw-r--r--mesonbuild/compilers/detect.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/mesonbuild/compilers/detect.py b/mesonbuild/compilers/detect.py
index 849024c..64f6276 100644
--- a/mesonbuild/compilers/detect.py
+++ b/mesonbuild/compilers/detect.py
@@ -107,6 +107,7 @@ def compiler_from_language(env: 'Environment', lang: str, for_machine: MachineCh
'swift': detect_swift_compiler,
'cython': detect_cython_compiler,
'nasm': detect_nasm_compiler,
+ 'masm': detect_masm_compiler,
}
return lang_map[lang](env, for_machine) if lang in lang_map else None
@@ -1173,6 +1174,47 @@ def detect_nasm_compiler(env: 'Environment', for_machine: MachineChoice) -> Comp
_handle_exceptions(popen_exceptions, compilers)
raise EnvironmentException('Unreachable code (exception to make mypy happy)')
+def detect_masm_compiler(env: 'Environment', for_machine: MachineChoice) -> Compiler:
+ # We need a C compiler to properly detect the machine info and linker
+ is_cross = env.is_cross_build(for_machine)
+ cc = detect_c_compiler(env, for_machine)
+ if not is_cross:
+ from ..environment import detect_machine_info
+ info = detect_machine_info({'c': cc})
+ else:
+ info = env.machines[for_machine]
+
+ from .asm import MasmCompiler, MasmARMCompiler
+ comp_class: T.Type[Compiler]
+ if info.cpu_family == 'x86':
+ comp = ['ml']
+ comp_class = MasmCompiler
+ arg = '/?'
+ elif info.cpu_family == 'x86_64':
+ comp = ['ml64']
+ comp_class = MasmCompiler
+ arg = '/?'
+ elif info.cpu_family == 'arm':
+ comp = ['armasm']
+ comp_class = MasmARMCompiler
+ arg = '-h'
+ elif info.cpu_family == 'aarch64':
+ comp = ['armasm64']
+ comp_class = MasmARMCompiler
+ arg = '-h'
+ else:
+ raise EnvironmentException(f'Platform {info.cpu_family} not supported by MASM')
+
+ popen_exceptions: T.Dict[str, Exception] = {}
+ try:
+ output = Popen_safe(comp + [arg])[2]
+ version = search_version(output)
+ env.coredata.add_lang_args(comp_class.language, comp_class, for_machine, env)
+ return comp_class(comp, version, for_machine, info, cc.linker, is_cross=is_cross)
+ except OSError as e:
+ popen_exceptions[' '.join(comp + [arg])] = e
+ _handle_exceptions(popen_exceptions, [comp])
+ raise EnvironmentException('Unreachable code (exception to make mypy happy)')
# GNU/Clang defines and version
# =============================