diff --git a/backends.py b/backends.py index c92f48eb8..3ab63d768 100644 --- a/backends.py +++ b/backends.py @@ -1008,6 +1008,7 @@ class NinjaBackend(Backend): commands += dep.get_link_flags() dependencies = target.get_dependencies() commands += self.build_target_link_arguments(linker, dependencies) + commands += target.link_flags commands += linker.build_rpath_args(self.environment.get_build_dir(), target.get_rpaths()) if self.environment.coredata.coverage: commands += linker.get_coverage_link_flags() diff --git a/build.py b/build.py index b8a3ad1d2..054189044 100644 --- a/build.py +++ b/build.py @@ -227,6 +227,12 @@ class BuildTarget(): if not isinstance(cpplist, list): cpplist = [cpplist] self.add_compiler_args('cpp', cpplist) + self.link_flags = kwargs.get('link_flags', []) + if not isinstance(self.link_flags, list): + self.link_flags = [self.link_flags] + for i in self.link_flags: + if not isinstance(i, str): + raise InvalidArguments('Link_flags arguments must be strings.') if 'version' in kwargs: self.set_version(kwargs['version']) if 'soversion' in kwargs: diff --git a/test cases/linuxlike/3 linker script/bob.c b/test cases/linuxlike/3 linker script/bob.c new file mode 100644 index 000000000..7b3ed47cb --- /dev/null +++ b/test cases/linuxlike/3 linker script/bob.c @@ -0,0 +1,9 @@ +#include"bob.h" + +int hiddenFunction() { + return 42; +} + +int bobMcBob() { + return hiddenFunction(); +} diff --git a/test cases/linuxlike/3 linker script/bob.h b/test cases/linuxlike/3 linker script/bob.h new file mode 100644 index 000000000..b29331e79 --- /dev/null +++ b/test cases/linuxlike/3 linker script/bob.h @@ -0,0 +1,6 @@ +#ifndef BOB_H_ +#define BOB_H_ + +int bobMcBob(); + +#endif diff --git a/test cases/linuxlike/3 linker script/bob.map b/test cases/linuxlike/3 linker script/bob.map new file mode 100644 index 000000000..e07a78062 --- /dev/null +++ b/test cases/linuxlike/3 linker script/bob.map @@ -0,0 +1,6 @@ +V1_0_0 { + global: + "bobMcBob"; + local: + *; +}; diff --git a/test cases/linuxlike/3 linker script/meson.build b/test cases/linuxlike/3 linker script/meson.build new file mode 100644 index 000000000..8589eb32a --- /dev/null +++ b/test cases/linuxlike/3 linker script/meson.build @@ -0,0 +1,7 @@ +project('linker script', 'c') + +vflag = '-Wl,--version-script,@0@/bob.map'.format('/home/jpakkane/workspace/meson/test cases/linuxlike/3 linker script') + +l = shared_library('bob', 'bob.c', link_flags : vflag) +e = executable('prog', 'prog.c', link_with : l) +test('core', e) diff --git a/test cases/linuxlike/3 linker script/prog.c b/test cases/linuxlike/3 linker script/prog.c new file mode 100644 index 000000000..da9c67509 --- /dev/null +++ b/test cases/linuxlike/3 linker script/prog.c @@ -0,0 +1,5 @@ +#include"bob.h" + +int main(int argc, char **argv) { + return bobMcBob() != 42; +}