From 76a259799d5bac3effabd1df44c0dec9e4fa16d4 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 13 May 2021 11:52:58 -0700 Subject: [PATCH] stage2: only build and link libunwind when linking libc++ --- src/Compilation.zig | 1 + src/link/Elf.zig | 10 +++------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Compilation.zig b/src/Compilation.zig index b14e598f71..0f04f02b7d 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -3023,6 +3023,7 @@ fn wantBuildLibUnwindFromSource(comp: *Compilation) bool { .Exe => true, }; return comp.bin_file.options.link_libc and is_exe_or_dyn_lib and + comp.bin_file.options.link_libcpp and target_util.libcNeedsLibUnwind(comp.getTarget()); } diff --git a/src/link/Elf.zig b/src/link/Elf.zig index fbbe40022a..b94e562eb7 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1643,20 +1643,19 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void { if (self.base.options.link_libcpp) { try argv.append(comp.libcxxabi_static_lib.?.full_object_path); try argv.append(comp.libcxx_static_lib.?.full_object_path); + if (target_util.libcNeedsLibUnwind(target)) { + try argv.append(comp.libunwind_static_lib.?.full_object_path); + } } // libc dep if (self.base.options.link_libc) { if (self.base.options.libc_installation != null) { - if (target_util.libcNeedsLibUnwind(target)) { - try argv.append(comp.libunwind_static_lib.?.full_object_path); - } const needs_grouping = self.base.options.link_mode == .Static; if (needs_grouping) try argv.append("--start-group"); try argv.appendSlice(target_util.libcFullLinkFlags(target)); if (needs_grouping) try argv.append("--end-group"); } else if (target.isGnuLibC()) { - try argv.append(comp.libunwind_static_lib.?.full_object_path); for (glibc.libs) |lib| { const lib_path = try std.fmt.allocPrint(arena, "{s}{c}lib{s}.so.{d}", .{ comp.glibc_so_files.?.dir_path, fs.path.sep, lib.name, lib.sover, @@ -1665,13 +1664,10 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void { } try argv.append(try comp.get_libc_crt_file(arena, "libc_nonshared.a")); } else if (target.isMusl()) { - try argv.append(comp.libunwind_static_lib.?.full_object_path); try argv.append(try comp.get_libc_crt_file(arena, switch (self.base.options.link_mode) { .Static => "libc.a", .Dynamic => "libc.so", })); - } else if (self.base.options.link_libcpp) { - try argv.append(comp.libunwind_static_lib.?.full_object_path); } else { unreachable; // Compiler was supposed to emit an error for not being able to provide libc. }