diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-10-04 20:10:47 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-10-04 20:10:47 -0700 |
| commit | 33bc1ebe37ef6ba5dfe73e458d662b5b516723ba (patch) | |
| tree | 2cec37e87c3a069aaf85fcb2d953925b2f824f9b | |
| parent | d0a4110d34b8d80a9212a01f21d7be7629de8813 (diff) | |
| download | zig-33bc1ebe37ef6ba5dfe73e458d662b5b516723ba.tar.gz zig-33bc1ebe37ef6ba5dfe73e458d662b5b516723ba.zip | |
build system: implement computeOutFilenames using std.zig.binNameAlloc
See #6552 #6553 #6483
Also fixes a regression introduced in
1d777e99588be047ec4d7650f048b043d6e52da0 of not converting an integer to
a string for a command line parameter.
| -rw-r--r-- | lib/std/build.zig | 94 |
1 files changed, 39 insertions, 55 deletions
diff --git a/lib/std/build.zig b/lib/std/build.zig index bb9744859c..c680e72710 100644 --- a/lib/std/build.zig +++ b/lib/std/build.zig @@ -1388,66 +1388,50 @@ pub const LibExeObjStep = struct { } fn computeOutFileNames(self: *LibExeObjStep) void { - // TODO make this call std.zig.binNameAlloc - switch (self.kind) { - .Obj => { - self.out_filename = self.builder.fmt("{}{}", .{ self.name, self.target.oFileExt() }); - }, - .Exe => { - self.out_filename = self.builder.fmt("{}{}", .{ self.name, self.target.exeFileExt() }); - }, - .Test => { - self.out_filename = self.builder.fmt("test{}", .{self.target.exeFileExt()}); + const target_info = std.zig.system.NativeTargetInfo.detect( + self.builder.allocator, + self.target, + ) catch unreachable; + const target = target_info.target; + self.out_filename = std.zig.binNameAlloc(self.builder.allocator, .{ + .root_name = self.name, + .target = target, + .output_mode = switch (self.kind) { + .Lib => .Lib, + .Obj => .Obj, + .Exe, .Test => .Exe, }, - .Lib => { - if (!self.is_dynamic) { - self.out_filename = self.builder.fmt("{}{}{}", .{ - self.target.libPrefix(), + .link_mode = if (self.is_dynamic) .Dynamic else .Static, + .version = self.version, + }) catch unreachable; + + if (self.kind == .Lib) { + if (!self.is_dynamic) { + self.out_lib_filename = self.out_filename; + } else if (self.version) |version| { + if (target.isDarwin()) { + self.major_only_filename = self.builder.fmt("lib{}.{d}.dylib", .{ self.name, - self.target.staticLibSuffix(), + version.major, }); + self.name_only_filename = self.builder.fmt("lib{}.dylib", .{self.name}); self.out_lib_filename = self.out_filename; - } else if (self.version) |version| { - if (self.target.isDarwin()) { - self.out_filename = self.builder.fmt("lib{}.{d}.{d}.{d}.dylib", .{ - self.name, - version.major, - version.minor, - version.patch, - }); - self.major_only_filename = self.builder.fmt("lib{}.{d}.dylib", .{ - self.name, - 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, - version.major, - version.minor, - version.patch, - }); - self.major_only_filename = self.builder.fmt("lib{}.so.{d}", .{ self.name, version.major }); - self.name_only_filename = self.builder.fmt("lib{}.so", .{self.name}); - self.out_lib_filename = self.out_filename; - } + } else if (target.os.tag == .windows) { + self.out_lib_filename = self.builder.fmt("{}.lib", .{self.name}); } else { - if (self.target.isDarwin()) { - self.out_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", .{self.name}); - self.out_lib_filename = self.out_filename; - } + self.major_only_filename = self.builder.fmt("lib{}.so.{d}", .{ self.name, version.major }); + self.name_only_filename = self.builder.fmt("lib{}.so", .{self.name}); + self.out_lib_filename = self.out_filename; } - }, + } else { + if (target.isDarwin()) { + self.out_lib_filename = self.out_filename; + } else if (target.os.tag == .windows) { + self.out_lib_filename = self.builder.fmt("{}.lib", .{self.name}); + } else { + self.out_lib_filename = self.out_filename; + } + } } } @@ -2046,7 +2030,7 @@ pub const LibExeObjStep = struct { if (self.image_base) |image_base| { try zig_args.append("--image-base"); - try zig_args.append(image_base); + try zig_args.append(builder.fmt("0x{x}", .{image_base})); } if (self.filter) |filter| { |
