summaryrefslogtreecommitdiff
path: root/mesonbuild/compilers
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-10-14 09:36:17 +0200
committerDylan Baker <dylan@pnwbakers.com>2025-10-14 09:22:08 -0700
commit5cc1ee7f90da50f40a3263f9e63d9e356dda197c (patch)
tree25e1a1d6eaca83f09f55a3deab4ea5dbb6f03385 /mesonbuild/compilers
parent15d3909695520850b6b587544a01971b6d34be43 (diff)
downloadmeson-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.py9
-rw-r--r--mesonbuild/compilers/mixins/clang.py8
-rw-r--r--mesonbuild/compilers/rust.py5
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)]