zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 58540f968a2ae53b4b1ff5a917fdb404088a222a (tree)
parent f1feb1369b128fb515a369b1144574b4c1b53b6e
Author: Cody Tapscott <topolarity@tapscott.me>
Date:   Thu, 28 Jul 2022 22:16:59 -0700

ELF: Scan for dylibs-as-objects when adding rpaths

Shared libraries can be provided on the command line as if they were
objects, as a path to the ".so" file. The "each-lib-rpath" functionality
was ignoring these shared libraries accidentally, causing missing rpaths
in the output executable.

Diffstat:
Msrc/link/Elf.zig | 9+++++++++
1 file changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/link/Elf.zig b/src/link/Elf.zig @@ -1592,6 +1592,15 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v } } } + for (self.base.options.objects) |obj| { + if (Compilation.classifyFileExt(obj.path) == .shared_library) { + const lib_dir_path = std.fs.path.dirname(obj.path).?; + if ((try rpath_table.fetchPut(lib_dir_path, {})) == null) { + try argv.append("-rpath"); + try argv.append(lib_dir_path); + } + } + } } for (self.base.options.lib_dirs) |lib_dir| {