diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2018-08-19 22:05:48 +0530 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek.chauhan@gmail.com> | 2018-08-22 12:24:43 -0700 |
commit | bb5f2ca3da821d7a8e865cd55a8d5d638e0aab22 (patch) | |
tree | fc28288c24fa6fcfc06ad94a38a000dd91c78470 /mesonbuild/compilers/c.py | |
parent | 8c9296e8e6a03a23615082f5155fd2a974136678 (diff) | |
download | meson-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.py | 27 |
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: |