aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWolfgang Walther <walther@technowledgy.de>2024-06-03 18:08:58 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2024-06-05 02:26:04 +0300
commitdfd22db4be6bfc0e64272479b51bbf314db04ac2 (patch)
treea3c1880fac6fb8989586f9b9a40004e69d83686b
parent560c032a4b806677926063698a9239f21b92005b (diff)
downloadmeson-dfd22db4be6bfc0e64272479b51bbf314db04ac2.zip
meson-dfd22db4be6bfc0e64272479b51bbf314db04ac2.tar.gz
meson-dfd22db4be6bfc0e64272479b51bbf314db04ac2.tar.bz2
Add -export_dynamic flag for AppleDynamicLinker
The apple linker uses -export_dynamic instead of --export-dynamic [1]. This should be set when setting export_dynamic: true. Resolves #13290 [1]: https://opensource.apple.com/source/ld64/ld64-609/doc/man/man1/ld.1.auto.html
-rw-r--r--mesonbuild/linkers/linkers.py3
-rw-r--r--unittests/darwintests.py12
2 files changed, 15 insertions, 0 deletions
diff --git a/mesonbuild/linkers/linkers.py b/mesonbuild/linkers/linkers.py
index de08e0f..7507f5a 100644
--- a/mesonbuild/linkers/linkers.py
+++ b/mesonbuild/linkers/linkers.py
@@ -834,6 +834,9 @@ class AppleDynamicLinker(PosixDynamicLinkerMixin, DynamicLinker):
def get_thinlto_cache_args(self, path: str) -> T.List[str]:
return ["-Wl,-cache_path_lto," + path]
+ def export_dynamic_args(self, env: 'Environment') -> T.List[str]:
+ return self._apply_prefix('-export_dynamic')
+
class LLVMLD64DynamicLinker(AppleDynamicLinker):
diff --git a/unittests/darwintests.py b/unittests/darwintests.py
index 5528bbc..7403104 100644
--- a/unittests/darwintests.py
+++ b/unittests/darwintests.py
@@ -81,6 +81,18 @@ class DarwinTests(BasePlatformTests):
self.build()
self.run_tests()
+ def test_apple_lto_export_dynamic(self):
+ '''
+ Tests that -Wl,-export_dynamic is correctly added, when export_dynamic: true is set.
+ On macOS, this is relevant for LTO builds only.
+ '''
+ testdir = os.path.join(self.common_test_dir, '148 shared module resolving symbol in executable')
+ # Ensure that it builds even with LTO enabled
+ env = {'CFLAGS': '-flto'}
+ self.init(testdir, override_envvars=env)
+ self.build()
+ self.run_tests()
+
def _get_darwin_versions(self, fname):
fname = os.path.join(self.builddir, fname)
out = subprocess.check_output(['otool', '-L', fname], universal_newlines=True)