From 1139021a0da0003a07905740a2477b98a4f62e60 Mon Sep 17 00:00:00 2001 From: LIU Hao Date: Wed, 11 Dec 2024 09:27:53 +0800 Subject: [PATCH] compilers: Pass `vs_module_defs` with `/DEF:` to LLD-LINK Recently, it is possible to install Clang with Visual Studio Installer. By default this Clang has a MSVC target, and invokes the Microsoft Linker; if `-fuse-ld=lld` is specified, it will invoke LLD-LINK. Both linkers take MSVC-style arguments, and take DEF files with `/DEF:`. Previously DEF files were passed in the GNU way, directly on the linker command line like an object file, which caused errors like lld-link: error: ..\my.def: unknown file type While Clang-CL takes Unix-style options, it actually passes MSVC-style options to LINK or LLD-LINK with `-Wl,`. There is already a check for both linkers in `linker_to_compiler_args()`, so it's necessary to do the same in `gen_vs_module_defs_args()`. This commit closes https://github.com/mesonbuild/meson/issues/13988. Signed-off-by: LIU Hao --- mesonbuild/compilers/mixins/clang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mesonbuild/compilers/mixins/clang.py b/mesonbuild/compilers/mixins/clang.py index a0d3d5ffb069..41b35c041336 100644 --- a/mesonbuild/compilers/mixins/clang.py +++ b/mesonbuild/compilers/mixins/clang.py @@ -135,7 +135,7 @@ def openmp_flags(self, env: Environment) -> T.List[str]: return [] def gen_vs_module_defs_args(self, defsfile: str) -> T.List[str]: - if isinstance(self.linker, (MSVCDynamicLinker)): + if isinstance(self.linker, (ClangClDynamicLinker, MSVCDynamicLinker)): # 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]