aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers/c.py
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2018-08-19 22:05:48 +0530
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2018-08-22 12:24:43 -0700
commitbb5f2ca3da821d7a8e865cd55a8d5d638e0aab22 (patch)
treefc28288c24fa6fcfc06ad94a38a000dd91c78470 /mesonbuild/compilers/c.py
parent8c9296e8e6a03a23615082f5155fd2a974136678 (diff)
downloadmeson-bb5f2ca3da821d7a8e865cd55a8d5d638e0aab22.zip
meson-bb5f2ca3da821d7a8e865cd55a8d5d638e0aab22.tar.gz
meson-bb5f2ca3da821d7a8e865cd55a8d5d638e0aab22.tar.bz2
find_library: Allow undefined symbols while linking
Shared libraries may not always be linkable without the use of other libraries, so don't make it a linker error.
Diffstat (limited to 'mesonbuild/compilers/c.py')
-rw-r--r--mesonbuild/compilers/c.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index 0b169ca..3599a99 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -147,6 +147,30 @@ class CCompiler(Compiler):
'''
return self.get_no_optimization_args()
+ def get_allow_undefined_link_args(self):
+ '''
+ Get args for allowing undefined symbols when linking to a shared library
+ '''
+ if self.id == 'clang':
+ if self.clang_type == compilers.CLANG_OSX:
+ # Apple ld
+ return ['-Wl,-undefined,dynamic_lookup']
+ else:
+ # GNU ld and LLVM lld
+ return ['-Wl,--allow-shlib-undefined']
+ elif self.id == 'gcc':
+ if self.gcc_type == compilers.GCC_OSX:
+ # Apple ld
+ return ['-Wl,-undefined,dynamic_lookup']
+ else:
+ # GNU ld and LLVM lld
+ return ['-Wl,--allow-shlib-undefined']
+ elif self.id == 'msvc':
+ # link.exe
+ return ['/FORCE:UNRESOLVED']
+ # FIXME: implement other linkers
+ return []
+
def get_output_args(self, target):
return ['-o', target]
@@ -916,7 +940,8 @@ class CCompiler(Compiler):
# Only try to find std libs if no extra dirs specified.
if not extra_dirs or libname in self.internal_libs:
args = ['-l' + libname]
- if self.links(code, env, extra_args=args):
+ largs = self.linker_to_compiler_args(self.get_allow_undefined_link_args())
+ if self.links(code, env, extra_args=(args + largs)):
return args
# Don't do a manual search for internal libs
if libname in self.internal_libs: