authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-05-13 11:52:58-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-05-13 17:40:39-04:00
log76a259799d5bac3effabd1df44c0dec9e4fa16d4
tree8316f31b4728d4fa1a5b2a4024cf6fadd84a3981
parent173142cc3662e9ecd54c8e957763515712203f9c

stage2: only build and link libunwind when linking libc++


2 files changed, 4 insertions(+), 7 deletions(-)

src/Compilation.zig+1
...@@ -3023,6 +3023,7 @@ fn wantBuildLibUnwindFromSource(comp: *Compilation) bool {...@@ -3023,6 +3023,7 @@ fn wantBuildLibUnwindFromSource(comp: *Compilation) bool {
3023 .Exe => true,3023 .Exe => true,
3024 };3024 };
3025 return comp.bin_file.options.link_libc and is_exe_or_dyn_lib and3025 return comp.bin_file.options.link_libc and is_exe_or_dyn_lib and
3026 comp.bin_file.options.link_libcpp and
3026 target_util.libcNeedsLibUnwind(comp.getTarget());3027 target_util.libcNeedsLibUnwind(comp.getTarget());
3027}3028}
30283029
src/link/Elf.zig+3-7
...@@ -1643,20 +1643,19 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {...@@ -1643,20 +1643,19 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {
1643 if (self.base.options.link_libcpp) {1643 if (self.base.options.link_libcpp) {
1644 try argv.append(comp.libcxxabi_static_lib.?.full_object_path);1644 try argv.append(comp.libcxxabi_static_lib.?.full_object_path);
1645 try argv.append(comp.libcxx_static_lib.?.full_object_path);1645 try argv.append(comp.libcxx_static_lib.?.full_object_path);
1646 if (target_util.libcNeedsLibUnwind(target)) {
1647 try argv.append(comp.libunwind_static_lib.?.full_object_path);
1648 }
1646 }1649 }
16471650
1648 // libc dep1651 // libc dep
1649 if (self.base.options.link_libc) {1652 if (self.base.options.link_libc) {
1650 if (self.base.options.libc_installation != null) {1653 if (self.base.options.libc_installation != null) {
1651 if (target_util.libcNeedsLibUnwind(target)) {
1652 try argv.append(comp.libunwind_static_lib.?.full_object_path);
1653 }
1654 const needs_grouping = self.base.options.link_mode == .Static;1654 const needs_grouping = self.base.options.link_mode == .Static;
1655 if (needs_grouping) try argv.append("--start-group");1655 if (needs_grouping) try argv.append("--start-group");
1656 try argv.appendSlice(target_util.libcFullLinkFlags(target));1656 try argv.appendSlice(target_util.libcFullLinkFlags(target));
1657 if (needs_grouping) try argv.append("--end-group");1657 if (needs_grouping) try argv.append("--end-group");
1658 } else if (target.isGnuLibC()) {1658 } else if (target.isGnuLibC()) {
1659 try argv.append(comp.libunwind_static_lib.?.full_object_path);
1660 for (glibc.libs) |lib| {1659 for (glibc.libs) |lib| {
1661 const lib_path = try std.fmt.allocPrint(arena, "{s}{c}lib{s}.so.{d}", .{1660 const lib_path = try std.fmt.allocPrint(arena, "{s}{c}lib{s}.so.{d}", .{
1662 comp.glibc_so_files.?.dir_path, fs.path.sep, lib.name, lib.sover,1661 comp.glibc_so_files.?.dir_path, fs.path.sep, lib.name, lib.sover,
...@@ -1665,13 +1664,10 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {...@@ -1665,13 +1664,10 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {
1665 }1664 }
1666 try argv.append(try comp.get_libc_crt_file(arena, "libc_nonshared.a"));1665 try argv.append(try comp.get_libc_crt_file(arena, "libc_nonshared.a"));
1667 } else if (target.isMusl()) {1666 } else if (target.isMusl()) {
1668 try argv.append(comp.libunwind_static_lib.?.full_object_path);
1669 try argv.append(try comp.get_libc_crt_file(arena, switch (self.base.options.link_mode) {1667 try argv.append(try comp.get_libc_crt_file(arena, switch (self.base.options.link_mode) {
1670 .Static => "libc.a",1668 .Static => "libc.a",
1671 .Dynamic => "libc.so",1669 .Dynamic => "libc.so",
1672 }));1670 }));
1673 } else if (self.base.options.link_libcpp) {
1674 try argv.append(comp.libunwind_static_lib.?.full_object_path);
1675 } else {1671 } else {
1676 unreachable; // Compiler was supposed to emit an error for not being able to provide libc.1672 unreachable; // Compiler was supposed to emit an error for not being able to provide libc.
1677 }1673 }