Commit 5129fae4e8

Andrew Kelley <andrew@ziglang.org>
2023-01-31 08:33:45
std.Build: accept host Target in create()
And only detect native target in LibExeObjStep once, in create().
1 parent 60c4bef
lib/std/Build/LibExeObjStep.zig
@@ -364,7 +364,7 @@ pub fn create(builder: *std.Build, options: Options) *LibExeObjStep {
         .output_h_path_source = GeneratedFile{ .step = &self.step },
         .output_pdb_path_source = GeneratedFile{ .step = &self.step },
 
-        .target_info = undefined, // populated in computeOutFileNames
+        .target_info = NativeTargetInfo.detect(self.target) catch unreachable,
     };
     self.computeOutFileNames();
     if (root_src) |rs| rs.addStepDependencies(&self.step);
@@ -372,9 +372,6 @@ pub fn create(builder: *std.Build, options: Options) *LibExeObjStep {
 }
 
 fn computeOutFileNames(self: *LibExeObjStep) void {
-    self.target_info = NativeTargetInfo.detect(self.target) catch
-        unreachable;
-
     const target = self.target_info.target;
 
     self.out_filename = std.zig.binNameAlloc(self.builder.allocator, .{
@@ -1946,12 +1943,15 @@ test "addPackage" {
     var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
     defer arena.deinit();
 
+    const host = try NativeTargetInfo.detect(.{});
+
     var builder = try std.Build.create(
         arena.allocator(),
         "test",
         "test",
         "test",
         "test",
+        host,
     );
     defer builder.destroy();
 
lib/std/Build/OptionsStep.zig
@@ -279,12 +279,16 @@ test "OptionsStep" {
 
     var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
     defer arena.deinit();
+
+    const host = try std.zig.system.NativeTargetInfo.detect(.{});
+
     var builder = try std.Build.create(
         arena.allocator(),
         "test",
         "test",
         "test",
         "test",
+        host,
     );
     defer builder.destroy();
 
lib/std/Build.zig
@@ -179,12 +179,11 @@ pub fn create(
     build_root: []const u8,
     cache_root: []const u8,
     global_cache_root: []const u8,
+    host: NativeTargetInfo,
 ) !*Build {
     const env_map = try allocator.create(EnvMap);
     env_map.* = try process.getEnvMap(allocator);
 
-    const host = try NativeTargetInfo.detect(.{});
-
     const self = try allocator.create(Build);
     self.* = Build{
         .zig_exe = zig_exe,
@@ -1529,12 +1528,15 @@ test "builder.findProgram compiles" {
     var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
     defer arena.deinit();
 
+    const host = try NativeTargetInfo.detect(.{});
+
     const builder = try Build.create(
         arena.allocator(),
         "zig",
         "zig-cache",
         "zig-cache",
         "zig-cache",
+        host,
     );
     defer builder.destroy();
     _ = builder.findProgram(&[_][]const u8{}, &[_][]const u8{}) catch null;
@@ -1713,12 +1715,16 @@ test "dupePkg()" {
 
     var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
     defer arena.deinit();
+
+    const host = try NativeTargetInfo.detect(.{});
+
     var builder = try Build.create(
         arena.allocator(),
         "test",
         "test",
         "test",
         "test",
+        host,
     );
     defer builder.destroy();
 
lib/build_runner.zig
@@ -41,12 +41,15 @@ pub fn main() !void {
         return error.InvalidArgs;
     };
 
+    const host = try std.zig.system.NativeTargetInfo.detect(.{});
+
     const builder = try std.Build.create(
         allocator,
         zig_exe,
         build_root,
         cache_root,
         global_cache_root,
+        host,
     );
     defer builder.destroy();