From bb5f2ca3da821d7a8e865cd55a8d5d638e0aab22 Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Sun, 19 Aug 2018 22:05:48 +0530 Subject: 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. --- mesonbuild/compilers/c.py | 27 ++++++++++++++++++++++++++- mesonbuild/compilers/fortran.py | 3 +++ 2 files changed, 29 insertions(+), 1 deletion(-) (limited to 'mesonbuild/compilers') 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: diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py index c384f7f..1ee1fcb 100644 --- a/mesonbuild/compilers/fortran.py +++ b/mesonbuild/compilers/fortran.py @@ -144,6 +144,9 @@ end program prog def get_compiler_check_args(self): return CCompiler.get_compiler_check_args(self) + def get_allow_undefined_link_args(self): + return CCompiler.get_allow_undefined_link_args(self) + def get_output_args(self, target): return CCompiler.get_output_args(self, target) -- cgit v1.1