aboutsummaryrefslogtreecommitdiff
path: root/src/link/MachO.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/link/MachO.zig')
-rw-r--r--src/link/MachO.zig23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig
index c9b6197ddf..598c41330d 100644
--- a/src/link/MachO.zig
+++ b/src/link/MachO.zig
@@ -756,6 +756,19 @@ fn linkWithLLD(self: *MachO, comp: *Compilation) !void {
}
}
+ // rpaths
+ var rpath_table = std.StringArrayHashMap(void).init(arena);
+ for (self.base.options.rpath_list) |rpath| {
+ if (rpath_table.contains(rpath)) continue;
+ try rpath_table.putNoClobber(rpath, {});
+ }
+
+ var rpaths = std.ArrayList([]const u8) .init(arena);
+ try rpaths.ensureCapacity(rpath_table.count());
+ for (rpath_table.items()) |entry| {
+ rpaths.appendAssumeCapacity(entry.key);
+ }
+
if (self.base.options.verbose_link) {
var argv = std.ArrayList([]const u8).init(arena);
@@ -767,6 +780,11 @@ fn linkWithLLD(self: *MachO, comp: *Compilation) !void {
try argv.append(syslibroot);
}
+ for (rpaths.items) |rpath| {
+ try argv.append("-rpath");
+ try argv.append(rpath);
+ }
+
try argv.appendSlice(positionals.items);
try argv.append("-o");
@@ -783,7 +801,10 @@ fn linkWithLLD(self: *MachO, comp: *Compilation) !void {
Compilation.dump_argv(argv.items);
}
- try zld.link(positionals.items, shared_libs.items, full_out_path);
+ try zld.link(positionals.items, full_out_path, .{
+ .shared_libs = shared_libs.items,
+ .rpaths = rpaths.items,
+ });
break :outer;
}