aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2020-03-15 22:33:12 +0200
committerGitHub <noreply@github.com>2020-03-15 22:33:12 +0200
commitc5572056953e75fbbf03973ee207a4556449edca (patch)
tree637bb4dbfd5de226bd035edb8abc10072728544a
parent1bb66d15684aa694b88a62e33159f8cfee16ef25 (diff)
parent20f8e472212d8aa11fdf073a4e04da65f3d702d5 (diff)
downloadmeson-c5572056953e75fbbf03973ee207a4556449edca.zip
meson-c5572056953e75fbbf03973ee207a4556449edca.tar.gz
meson-c5572056953e75fbbf03973ee207a4556449edca.tar.bz2
Merge pull request #6779 from dcbaker/gdc-linker-args
Allow setting linker for GDC as well as LDC
-rw-r--r--docs/markdown/snippets/ldc_linker_override.md10
-rw-r--r--mesonbuild/compilers/d.py2
-rwxr-xr-xrun_unittests.py21
3 files changed, 26 insertions, 7 deletions
diff --git a/docs/markdown/snippets/ldc_linker_override.md b/docs/markdown/snippets/ldc_linker_override.md
index fa124ba..2eab958 100644
--- a/docs/markdown/snippets/ldc_linker_override.md
+++ b/docs/markdown/snippets/ldc_linker_override.md
@@ -1,5 +1,7 @@
-## Support for overiding the linker with ldc
+## Support for overiding the linker with ldc and gdc
-LDC (the llvm D compiler) now honors D_LD linker variable (or d_ld in the cross
-file) and is able to pick differnt linkers. ld.bfd, ld.gold, ld.lld, ld64,
-link, and lld-link are currently supported.
+LDC (the llvm D compiler) and GDC (The Gnu D Compiler) now honor D_LD linker
+variable (or d_ld in the cross file) and is able to pick differnt linkers.
+
+GDC supports all of the same values as GCC, LDC supports ld.bfd, ld.gold,
+ld.lld, ld64, link, and lld-link.
diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py
index 9a46a4e..eb3a0f3 100644
--- a/mesonbuild/compilers/d.py
+++ b/mesonbuild/compilers/d.py
@@ -627,7 +627,7 @@ class DCompiler(Compiler):
return ' '.join(self.exelist)
-class GnuDCompiler(DCompiler, GnuCompiler):
+class GnuDCompiler(GnuCompiler, DCompiler):
# we mostly want DCompiler, but that gives us the Compiler.LINKER_PREFIX instead
LINKER_PREFIX = GnuCompiler.LINKER_PREFIX
diff --git a/run_unittests.py b/run_unittests.py
index f867f1c..ee6ec7e 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -4990,9 +4990,18 @@ class WindowsTests(BasePlatformTests):
def test_link_environment_variable_optlink(self):
self._check_ld('optlink', 'c', 'optlink')
+ @skip_if_not_language('rust')
def test_link_environment_variable_rust(self):
self._check_ld('link', 'rust', 'link')
+ @skip_if_not_language('d')
+ def test_link_environment_variable_d(self):
+ env = get_fake_env()
+ comp = getattr(env, 'detect_d_compiler')(MachineChoice.HOST)
+ if comp.id == 'dmd':
+ raise unittest.SkipTest('meson cannot reliably make DMD use a different linker.')
+ self._check_ld('lld-link', 'd', 'lld-link')
+
def test_pefile_checksum(self):
try:
import pefile
@@ -6342,23 +6351,31 @@ c = ['{0}']
def test_ld_environment_variable_lld(self):
self._check_ld('ld.lld', 'lld', 'c', 'ld.lld')
- @skipIfNoExecutable('rustc')
+ @skip_if_not_language('rust')
def test_ld_environment_variable_rust(self):
self._check_ld('ld.gold', 'gold', 'rust', 'ld.gold')
def test_ld_environment_variable_cpp(self):
self._check_ld('ld.gold', 'gold', 'cpp', 'ld.gold')
+ @skip_if_not_language('objc')
def test_ld_environment_variable_objc(self):
self._check_ld('ld.gold', 'gold', 'objc', 'ld.gold')
+ @skip_if_not_language('objcpp')
def test_ld_environment_variable_objcpp(self):
self._check_ld('ld.gold', 'gold', 'objcpp', 'ld.gold')
- @skipIfNoExecutable('gfortran')
+ @skip_if_not_language('fortran')
def test_ld_environment_variable_fortran(self):
self._check_ld('ld.gold', 'gold', 'fortran', 'ld.gold')
+ @skip_if_not_language('d')
+ def test_ld_environment_variable_d(self):
+ # At least for me, ldc defaults to gold, and gdc defaults to bfd, so
+ # let's pick lld, which isn't the default for either (currently)
+ self._check_ld('ld.lld', 'lld', 'd', 'ld.lld')
+
def compute_sha256(self, filename):
with open(filename, 'rb') as f:
return hashlib.sha256(f.read()).hexdigest()