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 {...@@ -585,12 +585,16 @@ pub fn linkLibrary(self: *LibExeObjStep, lib: *LibExeObjStep) void {
585}585}
586586
587pub fn isDynamicLibrary(self: *LibExeObjStep) bool {587pub 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;
589}593}
590594
591pub fn producesPdbFile(self: *LibExeObjStep) bool {595pub fn producesPdbFile(self: *LibExeObjStep) bool {
592 if (!self.target.isWindows() and !self.target.isUefi()) return false;596 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;
594 return self.isDynamicLibrary() or self.kind == .exe or self.kind == .test_exe;598 return self.isDynamicLibrary() or self.kind == .exe or self.kind == .test_exe;
595}599}
596600
...@@ -1132,16 +1136,19 @@ fn make(step: *Step) !void {...@@ -1132,16 +1136,19 @@ fn make(step: *Step) !void {
1132 .obj => {1136 .obj => {
1133 try zig_args.append(other.getOutputSource().getPath(builder));1137 try zig_args.append(other.getOutputSource().getPath(builder));
1134 },1138 },
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
1136 const full_path_lib = other.getOutputLibSource().getPath(builder);1145 const full_path_lib = other.getOutputLibSource().getPath(builder);
1137 try zig_args.append(full_path_lib);1146 try zig_args.append(full_path_lib);
11381147
1139 if (other.linkage) |linkage| {1148 if (other.linkage == Linkage.dynamic and !self.target.isWindows()) {
1140 if (linkage == .dynamic and !self.target.isWindows()) {1149 if (fs.path.dirname(full_path_lib)) |dirname| {
1141 if (fs.path.dirname(full_path_lib)) |dirname| {1150 try zig_args.append("-rpath");
1142 try zig_args.append("-rpath");1151 try zig_args.append(dirname);
1143 try zig_args.append(dirname);
1144 }
1145 }1152 }
1146 }1153 }
1147 },1154 },