| ... | @@ -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 | } |
| 586 | | 586 | |
| 587 | pub fn isDynamicLibrary(self: *LibExeObjStep) bool { | 587 | pub 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 | |
| | 591 | pub fn isStaticLibrary(self: *LibExeObjStep) bool { |
| | 592 | return self.kind == .lib and self.linkage != Linkage.dynamic; |
| 589 | } | 593 | } |
| 590 | | 594 | |
| 591 | pub fn producesPdbFile(self: *LibExeObjStep) bool { | 595 | pub 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 | } |
| 596 | | 600 | |
| ... | @@ -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); |
| 1138 | | 1147 | |
| 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 | }, |