From 4f83c478801ec0cdcbe301a451056f780e2e5e76 Mon Sep 17 00:00:00 2001 From: GoaLitiuM Date: Mon, 21 Oct 2019 16:22:39 +0300 Subject: d: Prefer MSVC and LLVM linker over optlink when available The optlink linker is slowly getting phased out now since DMD ships with the LLVM linker, so it can be used when Visual Studio is not installed. --- mesonbuild/environment.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index c75077a45..99428c7cb 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -1369,12 +1369,15 @@ class Environment: # LDC seems to require a file m = self.machines[for_machine] if m.is_windows() or m.is_cygwin(): - # Getting LDC on windows to give useful linker output when not - # doing real work is painfully hard. It ships with a verison of - # lld-link, so just assume that we're going to use lld-link - # with it. - _, o, _ = Popen_safe(['lld-link.exe', '--version']) - linker = ClangClDynamicLinker(for_machine, version=search_version(o)) + if is_msvc: + linker = MSVCDynamicLinker(for_machine, version=version) + else: + # Getting LDC on windows to give useful linker output when not + # doing real work is painfully hard. It ships with a verison of + # lld-link, so just assume that we're going to use lld-link + # with it. + _, o, _ = Popen_safe(['lld-link.exe', '--version']) + linker = ClangClDynamicLinker(for_machine, version=search_version(o)) else: with tempfile.NamedTemporaryFile(suffix='.d') as f: linker = self._guess_nix_linker( @@ -1393,7 +1396,14 @@ class Environment: # DMD seems to require a file m = self.machines[for_machine] if m.is_windows() or m.is_cygwin(): - linker = OptlinkDynamicLinker(for_machine, version=full_version) + if is_msvc: + linker = MSVCDynamicLinker(for_machine, version=version) + elif arch == 'x86': + linker = OptlinkDynamicLinker(for_machine, version=full_version) + else: + # DMD ships with lld-link + _, o, _ = Popen_safe(['lld-link.exe', '--version']) + linker = ClangClDynamicLinker(for_machine, version=search_version(o)) else: with tempfile.NamedTemporaryFile(suffix='.d') as f: linker = self._guess_nix_linker( -- cgit v1.2.3 From 31d397187d30c59258a5fdb40634783f7c2c4b5a Mon Sep 17 00:00:00 2001 From: GoaLitiuM Date: Mon, 21 Oct 2019 16:24:39 +0300 Subject: d: Fix various linking issues on Windows --- mesonbuild/compilers/d.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py index e8355a882..a22e8d4ec 100644 --- a/mesonbuild/compilers/d.py +++ b/mesonbuild/compilers/d.py @@ -394,7 +394,10 @@ class DmdLikeCompilerMixin: return Compiler.get_soname_args(self, *args, **kwargs) def get_allow_undefined_link_args(self) -> typing.List[str]: - return self.linker.get_allow_undefined_args() + args = [] + for arg in self.linker.get_allow_undefined_args(): + args.append('-L=' + arg) + return args class DCompiler(Compiler): @@ -637,6 +640,9 @@ class GnuDCompiler(DCompiler, GnuCompiler): return parameter_list + def get_allow_undefined_link_args(self) -> typing.List[str]: + return self.linker.get_allow_undefined_args() + class LLVMDCompiler(DmdLikeCompilerMixin, LinkerEnvVarsMixin, BasicLinkerIsCompilerMixin, DCompiler): @@ -667,6 +673,9 @@ class LLVMDCompiler(DmdLikeCompilerMixin, LinkerEnvVarsMixin, BasicLinkerIsCompi def get_pic_args(self): return ['-relocation-model=pic'] + def get_std_shared_lib_link_args(self): + return ['-shared'] + def get_crt_link_args(self, crt_val, buildtype): return self.get_crt_args(crt_val, buildtype) -- cgit v1.2.3