diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-10-14 09:36:17 +0200 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-10-14 09:22:08 -0700 |
| commit | 5cc1ee7f90da50f40a3263f9e63d9e356dda197c (patch) | |
| tree | 25e1a1d6eaca83f09f55a3deab4ea5dbb6f03385 /mesonbuild/compilers | |
| parent | 15d3909695520850b6b587544a01971b6d34be43 (diff) | |
| download | meson-5cc1ee7f90da50f40a3263f9e63d9e356dda197c.tar.gz | |
compilers: make link/lld-link check homogeneous
Use the same check for all of clang, nasm and rustc.
This also avoids the following warning:
Sanity check compiler command line: clang++ sanitycheckobjcpp.mm -o sanitycheckobjcpp.exe -D_MT -D_DLL -D_DEBUG -D_FILE_OFFSET_BITS=64 -Wl,-fms-runtime-lib=dll_dbg Sanity check compile stdout:
LINK : warning LNK4044: unrecognized option /fms-runtime-lib=dll_dbg; ignored
iWhat happens is that -fms-runtime-lib sets up an automatic dependency
from the .o files to the final link product, and therefore must be
passed as a compiler argument. But the constructor for ClangCompiler
was incorrectly allowing b_vscrt for MINGW, so I messed up the logic.
With this change, MINGW won't get the b_vscrt option.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'mesonbuild/compilers')
| -rw-r--r-- | mesonbuild/compilers/asm.py | 9 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/clang.py | 8 | ||||
| -rw-r--r-- | mesonbuild/compilers/rust.py | 5 |
3 files changed, 11 insertions, 11 deletions
diff --git a/mesonbuild/compilers/asm.py b/mesonbuild/compilers/asm.py index d358ca992..d4bd32579 100644 --- a/mesonbuild/compilers/asm.py +++ b/mesonbuild/compilers/asm.py @@ -6,6 +6,7 @@ import typing as T from ..mesonlib import EnvironmentException, get_meson_command from ..options import OptionKey from .compilers import Compiler +from ..linkers.linkers import VisualStudioLikeLinkerMixin from .mixins.metrowerks import MetrowerksCompiler, mwasmarm_instruction_set_args, mwasmeppc_instruction_set_args from .mixins.ti import TICompiler @@ -44,10 +45,8 @@ class NasmCompiler(Compiler): linker: T.Optional['DynamicLinker'] = None, full_version: T.Optional[str] = None, is_cross: bool = False): super().__init__(ccache, exelist, version, for_machine, info, linker, full_version, is_cross) - self.links_with_msvc = False - if 'link' in self.linker.id: + if isinstance(self.linker, VisualStudioLikeLinkerMixin): self.base_options.add(OptionKey('b_vscrt')) - self.links_with_msvc = True def needs_static_linker(self) -> bool: return True @@ -122,7 +121,7 @@ class NasmCompiler(Compiler): # require this, otherwise it'll fail to find # _WinMain or _DllMainCRTStartup. def get_crt_link_args(self, crt_val: str, buildtype: str) -> T.List[str]: - if not self.info.is_windows(): + if not isinstance(self.linker, VisualStudioLikeLinkerMixin): return [] return self.crt_args[self.get_crt_val(crt_val, buildtype)] @@ -140,7 +139,7 @@ class YasmCompiler(NasmCompiler): def get_debug_args(self, is_debug: bool) -> T.List[str]: if is_debug: - if self.info.is_windows() and self.links_with_msvc: + if isinstance(self.linker, VisualStudioLikeLinkerMixin): return ['-g', 'cv8'] elif self.info.is_darwin(): return ['-g', 'null'] diff --git a/mesonbuild/compilers/mixins/clang.py b/mesonbuild/compilers/mixins/clang.py index 863d2502d..3b22ec388 100644 --- a/mesonbuild/compilers/mixins/clang.py +++ b/mesonbuild/compilers/mixins/clang.py @@ -12,7 +12,7 @@ import typing as T from ... import mesonlib from ... import options from ...linkers.linkers import AppleDynamicLinker, ClangClDynamicLinker, LLVMDynamicLinker, GnuGoldDynamicLinker, \ - MoldDynamicLinker, MSVCDynamicLinker + MoldDynamicLinker, VisualStudioLikeLinkerMixin from ...options import OptionKey from ..compilers import CompileCheckMode from .gnu import GnuLikeCompiler @@ -82,7 +82,7 @@ class ClangCompiler(GnuLikeCompiler): # linkers don't have base_options. if isinstance(self.linker, AppleDynamicLinker): self.base_options.add(OptionKey('b_bitcode')) - elif isinstance(self.linker, MSVCDynamicLinker) or self.info.is_windows(): + elif isinstance(self.linker, VisualStudioLikeLinkerMixin): self.base_options.add(OptionKey('b_vscrt')) # All Clang backends can also do LLVM IR self.can_compile_suffixes.add('ll') @@ -167,7 +167,7 @@ class ClangCompiler(GnuLikeCompiler): return [] def gen_vs_module_defs_args(self, defsfile: str) -> T.List[str]: - if isinstance(self.linker, (ClangClDynamicLinker, MSVCDynamicLinker)): + if isinstance(self.linker, VisualStudioLikeLinkerMixin): # With MSVC, DLLs only export symbols that are explicitly exported, # so if a module defs file is specified, we use that to export symbols return ['-Wl,/DEF:' + defsfile] @@ -221,7 +221,7 @@ class ClangCompiler(GnuLikeCompiler): return args def linker_to_compiler_args(self, args: T.List[str]) -> T.List[str]: - if isinstance(self.linker, (ClangClDynamicLinker, MSVCDynamicLinker)): + if isinstance(self.linker, VisualStudioLikeLinkerMixin): return [flag if flag.startswith('-Wl,') or flag.startswith('-fuse-ld=') else f'-Wl,{flag}' for flag in args] else: return args diff --git a/mesonbuild/compilers/rust.py b/mesonbuild/compilers/rust.py index 8f8febdb0..7e6c31096 100644 --- a/mesonbuild/compilers/rust.py +++ b/mesonbuild/compilers/rust.py @@ -12,6 +12,7 @@ import typing as T from .. import options from ..mesonlib import EnvironmentException, MesonException, Popen_safe_logged, version_compare +from ..linkers.linkers import VisualStudioLikeLinkerMixin from ..options import OptionKey from .compilers import Compiler, CompileCheckMode, clike_debug_args, is_library @@ -98,7 +99,7 @@ class RustCompiler(Compiler): linker=linker) self.rustup_run_and_args: T.Optional[T.Tuple[T.List[str], T.List[str]]] = get_rustup_run_and_args(exelist) self.base_options.update({OptionKey(o) for o in ['b_colorout', 'b_ndebug']}) - if 'link' in self.linker.id: + if isinstance(self.linker, VisualStudioLikeLinkerMixin): self.base_options.add(OptionKey('b_vscrt')) self.native_static_libs: T.List[str] = [] self.is_beta = '-beta' in full_version @@ -307,7 +308,7 @@ class RustCompiler(Compiler): return [] def get_crt_link_args(self, crt_val: str, buildtype: str) -> T.List[str]: - if self.linker.id not in {'link', 'lld-link'}: + if not isinstance(self.linker, VisualStudioLikeLinkerMixin): return [] return self.MSVCRT_ARGS[self.get_crt_val(crt_val, buildtype)] |
