Commit e9d916571a
2022-01-28 20:18:53
1 parent
021c119src/link/Coff.zig
@@ -1099,7 +1099,11 @@ fn linkWithLLD(self: *Coff, comp: *Compilation) !void {
try argv.ensureUnusedCapacity(self.base.options.objects.len);
for (self.base.options.objects) |obj| {
- argv.appendAssumeCapacity(obj.path);
+ if (obj.must_link) {
+ argv.appendAssumeCapacity(try allocPrint(arena, "-WHOLEARCHIVE:{s}", .{obj.path}));
+ } else {
+ argv.appendAssumeCapacity(obj.path);
+ }
}
for (comp.c_object_table.keys()) |key| {
src/link/Elf.zig
@@ -1622,9 +1622,20 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {
}
// Positional arguments to the linker such as object files.
- try argv.ensureUnusedCapacity(self.base.options.objects.len);
+ var whole_archive = false;
for (self.base.options.objects) |obj| {
- argv.appendAssumeCapacity(obj.path);
+ if (obj.must_link and !whole_archive) {
+ try argv.append("-whole-archive");
+ whole_archive = true;
+ } else if (!obj.must_link and whole_archive) {
+ try argv.append("-no-whole-archive");
+ whole_archive = false;
+ }
+ try argv.append(obj.path);
+ }
+ if (whole_archive) {
+ try argv.append("-no-whole-archive");
+ whole_archive = false;
}
for (comp.c_object_table.keys()) |key| {
src/link/Wasm.zig
@@ -1233,9 +1233,20 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void {
}
// Positional arguments to the linker such as object files.
- try argv.ensureUnusedCapacity(self.base.options.objects.len);
+ var whole_archive = false;
for (self.base.options.objects) |obj| {
- argv.appendAssumeCapacity(obj.path);
+ if (obj.must_link and !whole_archive) {
+ try argv.append("-whole-archive");
+ whole_archive = true;
+ } else if (!obj.must_link and whole_archive) {
+ try argv.append("-no-whole-archive");
+ whole_archive = false;
+ }
+ try argv.append(obj.path);
+ }
+ if (whole_archive) {
+ try argv.append("-no-whole-archive");
+ whole_archive = false;
}
for (comp.c_object_table.keys()) |key| {