update zig build system for mingw static lib conventions

master
Andrew Kelley 2019-07-12 15:10:32 -04:00
parent 7b8ba871a9
commit 2f8983e2f6
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
1 changed files with 56 additions and 39 deletions

View File

@ -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;
}
}
},