diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-05-13 11:52:58 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-05-13 17:40:39 -0400 |
| commit | 76a259799d5bac3effabd1df44c0dec9e4fa16d4 (patch) | |
| tree | 8316f31b4728d4fa1a5b2a4024cf6fadd84a3981 | |
| parent | 173142cc3662e9ecd54c8e957763515712203f9c (diff) | |
| download | zig-76a259799d5bac3effabd1df44c0dec9e4fa16d4.tar.gz zig-76a259799d5bac3effabd1df44c0dec9e4fa16d4.zip | |
stage2: only build and link libunwind when linking libc++
| -rw-r--r-- | src/Compilation.zig | 1 | ||||
| -rw-r--r-- | 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. } |
