Commit 2f8983e2f6
Changed files (1)
std
std/build.zig
@@ -1064,11 +1064,7 @@ pub const Target = union(enum) {
}
pub fn oFileExt(self: Target) []const u8 {
- const abi = switch (self) {
- .Native => builtin.abi,
- .Cross => |t| t.abi,
- };
- return switch (abi) {
+ return switch (self.getAbi()) {
builtin.Abi.msvc => ".obj",
else => ".o",
};
@@ -1081,11 +1077,31 @@ pub const Target = union(enum) {
};
}
- pub fn libFileExt(self: Target) []const u8 {
- return switch (self.getOs()) {
- .windows => ".lib",
- else => ".a",
- };
+ pub fn staticLibSuffix(self: Target) []const u8 {
+ if (self.isWasm()) {
+ return ".wasm";
+ }
+ switch (self.getAbi()) {
+ .msvc => return ".lib",
+ else => return ".a",
+ }
+ }
+
+ pub fn dynamicLibSuffix(self: Target) []const u8 {
+ if (self.isDarwin()) {
+ return ".dylib";
+ }
+ switch (self.getOs()) {
+ .windows => return ".dll",
+ else => return ".so",
+ }
+ }
+
+ pub fn libPrefix(self: Target) []const u8 {
+ switch (self.getAbi()) {
+ .msvc => return "",
+ else => return "lib",
+ }
}
pub fn getOs(self: Target) builtin.Os {
@@ -1109,6 +1125,17 @@ pub const Target = union(enum) {
}
}
+ pub fn isMinGW(self: Target) bool {
+ return self.isWindows() and self.isGnu();
+ }
+
+ pub fn isGnu(self: Target) bool {
+ return switch (self.getAbi()) {
+ .gnu, .gnuabin32, .gnuabi64, .gnueabi, .gnueabihf, .gnux32 => true,
+ else => false,
+ };
+ }
+
pub fn isDarwin(self: Target) bool {
return switch (self.getOs()) {
.ios, .macosx, .watchos, .tvos => true,
@@ -1324,37 +1351,27 @@ pub const LibExeObjStep = struct {
},
.Lib => {
if (!self.is_dynamic) {
- switch (self.target.getOs()) {
- .windows => {
- self.out_filename = self.builder.fmt("{}.lib", self.name);
- },
- else => {
- if (self.target.isWasm()) {
- self.out_filename = self.builder.fmt("{}.wasm", self.name);
- } else {
- self.out_filename = self.builder.fmt("lib{}.a", self.name);
- }
- },
- }
+ self.out_filename = self.builder.fmt(
+ "{}{}{}",
+ self.target.libPrefix(),
+ self.name,
+ self.target.staticLibSuffix(),
+ );
self.out_lib_filename = self.out_filename;
} else {
- switch (self.target.getOs()) {
- .ios, .macosx => {
- self.out_filename = self.builder.fmt("lib{}.{d}.{d}.{d}.dylib", self.name, self.version.major, self.version.minor, self.version.patch);
- self.major_only_filename = self.builder.fmt("lib{}.{d}.dylib", self.name, self.version.major);
- self.name_only_filename = self.builder.fmt("lib{}.dylib", self.name);
- self.out_lib_filename = self.out_filename;
- },
- .windows => {
- self.out_filename = self.builder.fmt("{}.dll", self.name);
- self.out_lib_filename = self.builder.fmt("{}.lib", self.name);
- },
- else => {
- self.out_filename = self.builder.fmt("lib{}.so.{d}.{d}.{d}", self.name, self.version.major, self.version.minor, self.version.patch);
- self.major_only_filename = self.builder.fmt("lib{}.so.{d}", self.name, self.version.major);
- self.name_only_filename = self.builder.fmt("lib{}.so", self.name);
- self.out_lib_filename = self.out_filename;
- },
+ if (self.target.isDarwin()) {
+ self.out_filename = self.builder.fmt("lib{}.{d}.{d}.{d}.dylib", self.name, self.version.major, self.version.minor, self.version.patch);
+ self.major_only_filename = self.builder.fmt("lib{}.{d}.dylib", self.name, self.version.major);
+ self.name_only_filename = self.builder.fmt("lib{}.dylib", self.name);
+ self.out_lib_filename = self.out_filename;
+ } else if (self.target.isWindows()) {
+ self.out_filename = self.builder.fmt("{}.dll", self.name);
+ self.out_lib_filename = self.builder.fmt("{}.lib", self.name);
+ } else {
+ self.out_filename = self.builder.fmt("lib{}.so.{d}.{d}.{d}", self.name, self.version.major, self.version.minor, self.version.patch);
+ self.major_only_filename = self.builder.fmt("lib{}.so.{d}", self.name, self.version.major);
+ self.name_only_filename = self.builder.fmt("lib{}.so", self.name);
+ self.out_lib_filename = self.out_filename;
}
}
},