authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-01-20 19:31:38-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-01-20 19:31:38-07:00
log6d38dba72e9f3d32ddc73975305d7fc95ed7531a
tree2852950958833f6d416d3930921c4f68c46fb7db
parent7ea3937c5a6f63557db99c8a8f7b3f6d3de8c38b

std.build.LibExeObjStep: avoid putting static libs inside static libs


1 files changed, 16 insertions(+), 9 deletions(-)

lib/std/build/LibExeObjStep.zig+16-9
......@@ -585,12 +585,16 @@ pub fn linkLibrary(self: *LibExeObjStep, lib: *LibExeObjStep) void {
585585}
586586
587587pub fn isDynamicLibrary(self: *LibExeObjStep) bool {
588 return self.kind == .lib and self.linkage != null and self.linkage.? == .dynamic;
588 return self.kind == .lib and self.linkage == Linkage.dynamic;
589}
590
591pub fn isStaticLibrary(self: *LibExeObjStep) bool {
592 return self.kind == .lib and self.linkage != Linkage.dynamic;
589593}
590594
591595pub fn producesPdbFile(self: *LibExeObjStep) bool {
592596 if (!self.target.isWindows() and !self.target.isUefi()) return false;
593 if (self.strip != null and self.strip.?) return false;
597 if (self.strip == true) return false;
594598 return self.isDynamicLibrary() or self.kind == .exe or self.kind == .test_exe;
595599}
596600
......@@ -1132,16 +1136,19 @@ fn make(step: *Step) !void {
11321136 .obj => {
11331137 try zig_args.append(other.getOutputSource().getPath(builder));
11341138 },
1135 .lib => {
1139 .lib => l: {
1140 if (self.isStaticLibrary() and other.isStaticLibrary()) {
1141 // Avoid putting a static library inside a static library.
1142 break :l;
1143 }
1144
11361145 const full_path_lib = other.getOutputLibSource().getPath(builder);
11371146 try zig_args.append(full_path_lib);
11381147
1139 if (other.linkage) |linkage| {
1140 if (linkage == .dynamic and !self.target.isWindows()) {
1141 if (fs.path.dirname(full_path_lib)) |dirname| {
1142 try zig_args.append("-rpath");
1143 try zig_args.append(dirname);
1144 }
1148 if (other.linkage == Linkage.dynamic and !self.target.isWindows()) {
1149 if (fs.path.dirname(full_path_lib)) |dirname| {
1150 try zig_args.append("-rpath");
1151 try zig_args.append(dirname);
11451152 }
11461153 }
11471154 },