diff --git a/doc/docgen.zig b/doc/docgen.zig index 0f5967c3ce22..41fd9e8f1eb7 100644 --- a/doc/docgen.zig +++ b/doc/docgen.zig @@ -325,7 +325,6 @@ const Code = struct { link_objects: []const []const u8, target_str: ?[]const u8, link_libc: bool, - backend_stage1: bool, link_mode: ?std.builtin.LinkMode, disable_cache: bool, verbose_cimport: bool, @@ -596,7 +595,6 @@ fn genToc(allocator: Allocator, tokenizer: *Tokenizer) !Toc { var link_mode: ?std.builtin.LinkMode = null; var disable_cache = false; var verbose_cimport = false; - var backend_stage1 = false; var additional_options = std.ArrayList([]const u8).init(allocator); defer additional_options.deinit(); @@ -631,8 +629,6 @@ fn genToc(allocator: Allocator, tokenizer: *Tokenizer) !Toc { link_libc = true; } else if (mem.eql(u8, end_tag_name, "link_mode_dynamic")) { link_mode = .Dynamic; - } else if (mem.eql(u8, end_tag_name, "backend_stage1")) { - backend_stage1 = true; } else if (mem.eql(u8, end_tag_name, "additonal_option")) { _ = try eatToken(tokenizer, Token.Id.Separator); const option = try eatToken(tokenizer, Token.Id.TagContent); @@ -660,7 +656,6 @@ fn genToc(allocator: Allocator, tokenizer: *Tokenizer) !Toc { .link_objects = try link_objects.toOwnedSlice(), .target_str = target_str, .link_libc = link_libc, - .backend_stage1 = backend_stage1, .link_mode = link_mode, .disable_cache = disable_cache, .verbose_cimport = verbose_cimport, @@ -1380,10 +1375,10 @@ fn genHtml( var build_args = std.ArrayList([]const u8).init(allocator); defer build_args.deinit(); try build_args.appendSlice(&[_][]const u8{ - zig_exe, "build-exe", - "--name", code.name, - "--color", "on", - "--enable-cache", tmp_source_file_name, + zig_exe, "build-exe", + "--name", code.name, + "--color", "on", + name_plus_ext, }); if (opt_zig_lib_dir) |zig_lib_dir| { try build_args.appendSlice(&.{ "--zig-lib-dir", zig_lib_dir }); @@ -1400,21 +1395,13 @@ fn genHtml( } for (code.link_objects) |link_object| { const name_with_ext = try std.fmt.allocPrint(allocator, "{s}{s}", .{ link_object, obj_ext }); - const full_path_object = try fs.path.join( - allocator, - &[_][]const u8{ tmp_dir_name, name_with_ext }, - ); - try build_args.append(full_path_object); + try build_args.append(name_with_ext); try shell_out.print("{s} ", .{name_with_ext}); } if (code.link_libc) { try build_args.append("-lc"); try shell_out.print("-lc ", .{}); } - if (code.backend_stage1) { - try build_args.append("-fstage1"); - try shell_out.print("-fstage1", .{}); - } const target = try std.zig.CrossTarget.parse(.{ .arch_os_abi = code.target_str orelse "native", }); @@ -1461,7 +1448,7 @@ fn genHtml( try shell_out.writeAll(colored_stderr); break :code_block; } - const exec_result = exec(allocator, &env_map, build_args.items) catch + const exec_result = exec(allocator, &env_map, tmp_dir_name, build_args.items) catch return parseError(tokenizer, code.source_token, "example failed to compile", .{}); if (code.verbose_cimport) { @@ -1480,15 +1467,10 @@ fn genHtml( } } - const path_to_exe_dir = mem.trim(u8, exec_result.stdout, " \r\n"); - const path_to_exe_basename = try std.fmt.allocPrint(allocator, "{s}{s}", .{ + const path_to_exe = try std.fmt.allocPrint(allocator, "./{s}{s}", .{ code.name, target.exeFileExt(), }); - const path_to_exe = try fs.path.join(allocator, &[_][]const u8{ - path_to_exe_dir, - path_to_exe_basename, - }); const run_args = &[_][]const u8{path_to_exe}; var exited_with_signal = false; @@ -1498,6 +1480,7 @@ fn genHtml( .allocator = allocator, .argv = run_args, .env_map = &env_map, + .cwd = tmp_dir_name, .max_output_bytes = max_doc_file_size, }); switch (result.term) { @@ -1514,7 +1497,7 @@ fn genHtml( } break :blk result; } else blk: { - break :blk exec(allocator, &env_map, run_args) catch return parseError(tokenizer, code.source_token, "example crashed", .{}); + break :blk exec(allocator, &env_map, tmp_dir_name, run_args) catch return parseError(tokenizer, code.source_token, "example crashed", .{}); }; const escaped_stderr = try escapeHtml(allocator, result.stderr); @@ -1555,10 +1538,6 @@ fn genHtml( try test_args.append("-lc"); try shell_out.print("-lc ", .{}); } - if (code.backend_stage1) { - try test_args.append("-fstage1"); - try shell_out.print("-fstage1", .{}); - } if (code.target_str) |triple| { try test_args.appendSlice(&[_][]const u8{ "-target", triple }); try shell_out.print("-target {s} ", .{triple}); @@ -1579,7 +1558,7 @@ fn genHtml( }, } } - const result = exec(allocator, &env_map, test_args.items) catch + const result = exec(allocator, &env_map, null, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{}); const escaped_stderr = try escapeHtml(allocator, result.stderr); const escaped_stdout = try escapeHtml(allocator, result.stdout); @@ -1610,10 +1589,6 @@ fn genHtml( try test_args.append("-lc"); try shell_out.print("-lc ", .{}); } - if (code.backend_stage1) { - try test_args.append("-fstage1"); - try shell_out.print("-fstage1", .{}); - } const result = try ChildProcess.exec(.{ .allocator = allocator, .argv = test_args.items, @@ -1778,7 +1753,7 @@ fn genHtml( const colored_stderr = try termColor(allocator, escaped_stderr); try shell_out.print("\n{s} ", .{colored_stderr}); } else { - _ = exec(allocator, &env_map, build_args.items) catch return parseError(tokenizer, code.source_token, "example failed to compile", .{}); + _ = exec(allocator, &env_map, null, build_args.items) catch return parseError(tokenizer, code.source_token, "example failed to compile", .{}); } try shell_out.writeAll("\n"); }, @@ -1831,7 +1806,7 @@ fn genHtml( try test_args.append(option); try shell_out.print("{s} ", .{option}); } - const result = exec(allocator, &env_map, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{}); + const result = exec(allocator, &env_map, null, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{}); const escaped_stderr = try escapeHtml(allocator, result.stderr); const escaped_stdout = try escapeHtml(allocator, result.stdout); try shell_out.print("\n{s}{s}\n", .{ escaped_stderr, escaped_stdout }); @@ -1846,11 +1821,17 @@ fn genHtml( } } -fn exec(allocator: Allocator, env_map: *process.EnvMap, args: []const []const u8) !ChildProcess.ExecResult { +fn exec( + allocator: Allocator, + env_map: *process.EnvMap, + cwd: ?[]const u8, + args: []const []const u8, +) !ChildProcess.ExecResult { const result = try ChildProcess.exec(.{ .allocator = allocator, .argv = args, .env_map = env_map, + .cwd = cwd, .max_output_bytes = max_doc_file_size, }); switch (result.term) { @@ -1877,12 +1858,12 @@ fn getBuiltinCode( opt_zig_lib_dir: ?[]const u8, ) ![]const u8 { if (opt_zig_lib_dir) |zig_lib_dir| { - const result = try exec(allocator, env_map, &.{ + const result = try exec(allocator, env_map, null, &.{ zig_exe, "build-obj", "--show-builtin", "--zig-lib-dir", zig_lib_dir, }); return result.stdout; } else { - const result = try exec(allocator, env_map, &.{ + const result = try exec(allocator, env_map, null, &.{ zig_exe, "build-obj", "--show-builtin", }); return result.stdout; diff --git a/lib/std/Build.zig b/lib/std/Build.zig index 5b974bb8165d..7faa7780b22a 100644 --- a/lib/std/Build.zig +++ b/lib/std/Build.zig @@ -539,6 +539,8 @@ pub const TestOptions = struct { optimize: std.builtin.Mode = .Debug, version: ?std.builtin.Version = null, max_rss: usize = 0, + filter: ?[]const u8 = null, + test_runner: ?[]const u8 = null, }; pub fn addTest(b: *Build, options: TestOptions) *CompileStep { @@ -549,6 +551,8 @@ pub fn addTest(b: *Build, options: TestOptions) *CompileStep { .target = options.target, .optimize = options.optimize, .max_rss = options.max_rss, + .filter = options.filter, + .test_runner = options.test_runner, }); } diff --git a/lib/std/Build/CompileStep.zig b/lib/std/Build/CompileStep.zig index 29cdaa523b55..5c3b166282e5 100644 --- a/lib/std/Build/CompileStep.zig +++ b/lib/std/Build/CompileStep.zig @@ -97,13 +97,10 @@ out_lib_filename: []const u8, out_pdb_filename: []const u8, modules: std.StringArrayHashMap(*Module), -object_src: []const u8, - link_objects: ArrayList(LinkObject), include_dirs: ArrayList(IncludeDir), c_macros: ArrayList([]const u8), installed_headers: ArrayList(*Step), -output_dir: ?[]const u8, is_linking_libc: bool = false, is_linking_libcpp: bool = false, vcpkg_bin_path: ?[]const u8 = null, @@ -288,6 +285,8 @@ pub const Options = struct { linkage: ?Linkage = null, version: ?std.builtin.Version = null, max_rss: usize = 0, + filter: ?[]const u8 = null, + test_runner: ?[]const u8 = null, }; pub const Kind = enum { @@ -340,6 +339,23 @@ pub fn create(owner: *std.Build, options: Options) *CompileStep { options.target.zigTriple(owner.allocator) catch @panic("OOM"), }); + const target_info = NativeTargetInfo.detect(options.target) catch @panic("unhandled error"); + + const out_filename = std.zig.binNameAlloc(owner.allocator, .{ + .root_name = name, + .target = target_info.target, + .output_mode = switch (options.kind) { + .lib => .Lib, + .obj => .Obj, + .exe, .@"test" => .Exe, + }, + .link_mode = if (options.linkage) |some| @as(std.builtin.LinkMode, switch (some) { + .dynamic => .Dynamic, + .static => .Static, + }) else null, + .version = options.version, + }) catch @panic("OOM"); + const self = owner.allocator.create(CompileStep) catch @panic("OOM"); self.* = CompileStep{ .strip = null, @@ -361,7 +377,7 @@ pub fn create(owner: *std.Build, options: Options) *CompileStep { .max_rss = options.max_rss, }), .version = options.version, - .out_filename = undefined, + .out_filename = out_filename, .out_h_filename = owner.fmt("{s}.h", .{name}), .out_lib_filename = undefined, .out_pdb_filename = owner.fmt("{s}.pdb", .{name}), @@ -375,18 +391,16 @@ pub fn create(owner: *std.Build, options: Options) *CompileStep { .rpaths = ArrayList(FileSource).init(owner.allocator), .framework_dirs = ArrayList(FileSource).init(owner.allocator), .installed_headers = ArrayList(*Step).init(owner.allocator), - .object_src = undefined, .c_std = std.Build.CStd.C99, .zig_lib_dir = null, .main_pkg_path = null, .exec_cmd_args = null, - .filter = null, - .test_runner = null, + .filter = options.filter, + .test_runner = options.test_runner, .disable_stack_probing = false, .disable_sanitize_c = false, .sanitize_thread = false, .rdynamic = false, - .output_dir = null, .override_dest_dir = null, .installed_path = null, .force_undefined_symbols = StringHashMap(void).init(owner.allocator), @@ -397,70 +411,41 @@ pub fn create(owner: *std.Build, options: Options) *CompileStep { .output_pdb_path_source = GeneratedFile{ .step = &self.step }, .output_dirname_source = GeneratedFile{ .step = &self.step }, - .target_info = NativeTargetInfo.detect(self.target) catch @panic("unhandled error"), + .target_info = target_info, }; - self.computeOutFileNames(); - if (root_src) |rs| rs.addStepDependencies(&self.step); - return self; -} - -fn computeOutFileNames(self: *CompileStep) void { - const b = self.step.owner; - const target = self.target_info.target; - - self.out_filename = std.zig.binNameAlloc(b.allocator, .{ - .root_name = self.name, - .target = target, - .output_mode = switch (self.kind) { - .lib => .Lib, - .obj => .Obj, - .exe, .@"test" => .Exe, - }, - .link_mode = if (self.linkage) |some| @as(std.builtin.LinkMode, switch (some) { - .dynamic => .Dynamic, - .static => .Static, - }) else null, - .version = self.version, - }) catch @panic("OOM"); if (self.kind == .lib) { if (self.linkage != null and self.linkage.? == .static) { self.out_lib_filename = self.out_filename; } else if (self.version) |version| { - if (target.isDarwin()) { - self.major_only_filename = b.fmt("lib{s}.{d}.dylib", .{ + if (target_info.target.isDarwin()) { + self.major_only_filename = owner.fmt("lib{s}.{d}.dylib", .{ self.name, version.major, }); - self.name_only_filename = b.fmt("lib{s}.dylib", .{self.name}); + self.name_only_filename = owner.fmt("lib{s}.dylib", .{self.name}); self.out_lib_filename = self.out_filename; - } else if (target.os.tag == .windows) { - self.out_lib_filename = b.fmt("{s}.lib", .{self.name}); + } else if (target_info.target.os.tag == .windows) { + self.out_lib_filename = owner.fmt("{s}.lib", .{self.name}); } else { - self.major_only_filename = b.fmt("lib{s}.so.{d}", .{ self.name, version.major }); - self.name_only_filename = b.fmt("lib{s}.so", .{self.name}); + self.major_only_filename = owner.fmt("lib{s}.so.{d}", .{ self.name, version.major }); + self.name_only_filename = owner.fmt("lib{s}.so", .{self.name}); self.out_lib_filename = self.out_filename; } } else { - if (target.isDarwin()) { + if (target_info.target.isDarwin()) { self.out_lib_filename = self.out_filename; - } else if (target.os.tag == .windows) { - self.out_lib_filename = b.fmt("{s}.lib", .{self.name}); + } else if (target_info.target.os.tag == .windows) { + self.out_lib_filename = owner.fmt("{s}.lib", .{self.name}); } else { self.out_lib_filename = self.out_filename; } } - if (self.output_dir != null) { - self.output_lib_path_source.path = b.pathJoin( - &.{ self.output_dir.?, self.out_lib_filename }, - ); - } } -} -pub fn setOutputDir(self: *CompileStep, dir: []const u8) void { - const b = self.step.owner; - self.output_dir = b.dupePath(dir); + if (root_src) |rs| rs.addStepDependencies(&self.step); + + return self; } pub fn installHeader(cs: *CompileStep, src_path: []const u8, dest_rel_path: []const u8) void { @@ -853,24 +838,6 @@ fn linkSystemLibraryInner(self: *CompileStep, name: []const u8, opts: struct { }) catch @panic("OOM"); } -pub fn setName(self: *CompileStep, text: []const u8) void { - const b = self.step.owner; - assert(self.kind == .@"test"); - self.name = b.dupe(text); -} - -pub fn setFilter(self: *CompileStep, text: ?[]const u8) void { - const b = self.step.owner; - assert(self.kind == .@"test"); - self.filter = if (text) |t| b.dupe(t) else null; -} - -pub fn setTestRunner(self: *CompileStep, path: ?[]const u8) void { - const b = self.step.owner; - assert(self.kind == .@"test"); - self.test_runner = if (path) |p| b.dupePath(p) else null; -} - /// Handy when you have many C/C++ source files and want them all to have the same flags. pub fn addCSourceFiles(self: *CompileStep, files: []const []const u8, flags: []const []const u8) void { const b = self.step.owner; @@ -1864,7 +1831,6 @@ fn make(step: *Step, prog_node: *std.Progress.Node) !void { }); } - try zig_args.append("--enable-cache"); try zig_args.append("--listen=-"); // Windows has an argument length limit of 32,766 characters, macOS 262,144 and Linux @@ -1932,54 +1898,31 @@ fn make(step: *Step, prog_node: *std.Progress.Node) !void { }, else => |e| return e, }; - const build_output_dir = fs.path.dirname(output_bin_path).?; - - if (self.output_dir) |output_dir| { - var src_dir = try fs.cwd().openIterableDir(build_output_dir, .{}); - defer src_dir.close(); - - // Create the output directory if it doesn't exist. - try fs.cwd().makePath(output_dir); - - var dest_dir = try fs.cwd().openDir(output_dir, .{}); - defer dest_dir.close(); - - var it = src_dir.iterate(); - while (try it.next()) |entry| { - // The compiler can put these files into the same directory, but we don't - // want to copy them over. - if (mem.eql(u8, entry.name, "llvm-ar.id") or - mem.eql(u8, entry.name, "libs.txt") or - mem.eql(u8, entry.name, "builtin.zig") or - mem.eql(u8, entry.name, "zld.id") or - mem.eql(u8, entry.name, "lld.id")) continue; - - _ = try src_dir.dir.updateFile(entry.name, dest_dir, entry.name, .{}); - } - } else { - self.output_dir = build_output_dir; - } - - // This will ensure all output filenames will now have the output_dir available! - self.computeOutFileNames(); + const output_dir = fs.path.dirname(output_bin_path).?; // Update generated files - if (self.output_dir != null) { - self.output_dirname_source.path = self.output_dir.?; + { + self.output_dirname_source.path = output_dir; self.output_path_source.path = b.pathJoin( - &.{ self.output_dir.?, self.out_filename }, + &.{ output_dir, self.out_filename }, ); + if (self.kind == .lib) { + self.output_lib_path_source.path = b.pathJoin( + &.{ output_dir, self.out_lib_filename }, + ); + } + if (self.emit_h) { self.output_h_path_source.path = b.pathJoin( - &.{ self.output_dir.?, self.out_h_filename }, + &.{ output_dir, self.out_h_filename }, ); } if (self.target.isWindows() or self.target.isUefi()) { self.output_pdb_path_source.path = b.pathJoin( - &.{ self.output_dir.?, self.out_pdb_filename }, + &.{ output_dir, self.out_pdb_filename }, ); } } diff --git a/lib/std/Build/TranslateCStep.zig b/lib/std/Build/TranslateCStep.zig index 0cfd5d85a883..f2dc23d95074 100644 --- a/lib/std/Build/TranslateCStep.zig +++ b/lib/std/Build/TranslateCStep.zig @@ -100,7 +100,6 @@ fn make(step: *Step, prog_node: *std.Progress.Node) !void { try argv_list.append("translate-c"); try argv_list.append("-lc"); - try argv_list.append("--enable-cache"); try argv_list.append("--listen=-"); if (!self.target.isNative()) { diff --git a/src/main.zig b/src/main.zig index 573c0197438f..d996972e8972 100644 --- a/src/main.zig +++ b/src/main.zig @@ -386,7 +386,6 @@ const usage_build_generic = \\ --cache-dir [path] Override the local cache directory \\ --global-cache-dir [path] Override the global cache directory \\ --zig-lib-dir [path] Override path to Zig installation lib directory - \\ --enable-cache Output to cache directory; print path to stdout \\ \\Compile Options: \\ -target [name] -- see the targets command @@ -756,7 +755,6 @@ fn buildOutputType( var link_libcpp = false; var link_libunwind = false; var want_native_include_dirs = false; - var enable_cache: ?bool = null; var want_pic: ?bool = null; var want_pie: ?bool = null; var want_lto: ?bool = null; @@ -1203,8 +1201,6 @@ fn buildOutputType( build_id = true; } else if (mem.eql(u8, arg, "-fno-build-id")) { build_id = false; - } else if (mem.eql(u8, arg, "--enable-cache")) { - enable_cache = true; } else if (mem.eql(u8, arg, "--test-cmd-bin")) { try test_exec_args.append(null); } else if (mem.eql(u8, arg, "--test-evented-io")) { @@ -2641,7 +2637,7 @@ fn buildOutputType( var cleanup_emit_bin_dir: ?fs.Dir = null; defer if (cleanup_emit_bin_dir) |*dir| dir.close(); - const have_enable_cache = enable_cache orelse false; + const output_to_cache = listen != .none; const optional_version = if (have_version) version else null; const resolved_soname: ?[]const u8 = switch (soname) { @@ -2668,7 +2664,7 @@ fn buildOutputType( switch (arg_mode) { .run, .zig_test => break :blk null, else => { - if (have_enable_cache) { + if (output_to_cache) { break :blk null; } else { break :blk .{ .path = null, .handle = fs.cwd() }; @@ -2686,12 +2682,6 @@ fn buildOutputType( }, .yes => |full_path| b: { const basename = fs.path.basename(full_path); - if (have_enable_cache) { - break :b Compilation.EmitLoc{ - .basename = basename, - .directory = null, - }; - } if (fs.path.dirname(full_path)) |dirname| { const handle = fs.cwd().openDir(dirname, .{}) catch |err| { fatal("unable to open output directory '{s}': {s}", .{ dirname, @errorName(err) }); @@ -3145,7 +3135,7 @@ fn buildOutputType( .test_filter = test_filter, .test_name_prefix = test_name_prefix, .test_runner_path = test_runner_path, - .disable_lld_caching = !have_enable_cache, + .disable_lld_caching = !output_to_cache, .subsystem = subsystem, .wasi_exec_model = wasi_exec_model, .debug_compile_errors = debug_compile_errors, @@ -3240,19 +3230,7 @@ fn buildOutputType( return cmdTranslateC(comp, arena, null); } - const hook: AfterUpdateHook = blk: { - if (!have_enable_cache) - break :blk .none; - - switch (emit_bin) { - .no => break :blk .none, - .yes_default_path => break :blk .print_emit_bin_dir_path, - .yes => |full_path| break :blk .{ .update = full_path }, - .yes_a_out => break :blk .{ .update = a_out_basename }, - } - }; - - updateModule(gpa, comp, hook) catch |err| switch (err) { + updateModule(comp) catch |err| switch (err) { error.SemanticAnalyzeFail => if (listen == .none) process.exit(1), else => |e| return e, }; @@ -3800,13 +3778,7 @@ fn runOrTestHotSwap( } } -const AfterUpdateHook = union(enum) { - none, - print_emit_bin_dir_path, - update: []const u8, -}; - -fn updateModule(gpa: Allocator, comp: *Compilation, hook: AfterUpdateHook) !void { +fn updateModule(comp: *Compilation) !void { { // If the terminal is dumb, we dont want to show the user all the output. var progress: std.Progress = .{ .dont_print_on_dumb = true }; @@ -3832,43 +3804,6 @@ fn updateModule(gpa: Allocator, comp: *Compilation, hook: AfterUpdateHook) !void if (errors.errorMessageCount() > 0) { errors.renderToStdErr(renderOptions(comp.color)); return error.SemanticAnalyzeFail; - } else switch (hook) { - .none => {}, - .print_emit_bin_dir_path => { - const emit = comp.bin_file.options.emit.?; - const full_path = try emit.directory.join(gpa, &.{emit.sub_path}); - defer gpa.free(full_path); - const dir_path = fs.path.dirname(full_path).?; - try io.getStdOut().writer().print("{s}\n", .{dir_path}); - }, - .update => |full_path| { - const bin_sub_path = comp.bin_file.options.emit.?.sub_path; - const cwd = fs.cwd(); - const cache_dir = comp.bin_file.options.emit.?.directory.handle; - _ = try cache_dir.updateFile(bin_sub_path, cwd, full_path, .{}); - - // If a .pdb file is part of the expected output, we must also copy - // it into place here. - const is_coff = comp.bin_file.options.target.ofmt == .coff; - const have_pdb = is_coff and !comp.bin_file.options.strip; - if (have_pdb) { - // Replace `.out` or `.exe` with `.pdb` on both the source and destination - const src_bin_ext = fs.path.extension(bin_sub_path); - const dst_bin_ext = fs.path.extension(full_path); - - const src_pdb_path = try std.fmt.allocPrint(gpa, "{s}.pdb", .{ - bin_sub_path[0 .. bin_sub_path.len - src_bin_ext.len], - }); - defer gpa.free(src_pdb_path); - - const dst_pdb_path = try std.fmt.allocPrint(gpa, "{s}.pdb", .{ - full_path[0 .. full_path.len - dst_bin_ext.len], - }); - defer gpa.free(dst_pdb_path); - - _ = try cache_dir.updateFile(src_pdb_path, cwd, dst_pdb_path, .{}); - } - }, } } @@ -4499,7 +4434,7 @@ pub fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !voi }; defer comp.destroy(); - updateModule(gpa, comp, .none) catch |err| switch (err) { + updateModule(comp) catch |err| switch (err) { error.SemanticAnalyzeFail => process.exit(2), else => |e| return e, }; diff --git a/test/standalone/issue_13970/build.zig b/test/standalone/issue_13970/build.zig index 7d2799e29e90..cc70144596df 100644 --- a/test/standalone/issue_13970/build.zig +++ b/test/standalone/issue_13970/build.zig @@ -6,16 +6,16 @@ pub fn build(b: *std.Build) void { const test1 = b.addTest(.{ .root_source_file = .{ .path = "test_root/empty.zig" }, + .test_runner = "src/main.zig", }); const test2 = b.addTest(.{ .root_source_file = .{ .path = "src/empty.zig" }, + .test_runner = "src/main.zig", }); const test3 = b.addTest(.{ .root_source_file = .{ .path = "empty.zig" }, + .test_runner = "src/main.zig", }); - test1.setTestRunner("src/main.zig"); - test2.setTestRunner("src/main.zig"); - test3.setTestRunner("src/main.zig"); test_step.dependOn(&b.addRunArtifact(test1).step); test_step.dependOn(&b.addRunArtifact(test2).step); diff --git a/test/standalone/test_runner_module_imports/build.zig b/test/standalone/test_runner_module_imports/build.zig index 307957faeeac..f27771889827 100644 --- a/test/standalone/test_runner_module_imports/build.zig +++ b/test/standalone/test_runner_module_imports/build.zig @@ -3,8 +3,8 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const t = b.addTest(.{ .root_source_file = .{ .path = "src/main.zig" }, + .test_runner = "test_runner/main.zig", }); - t.setTestRunner("test_runner/main.zig"); const module1 = b.createModule(.{ .source_file = .{ .path = "module1/main.zig" } }); const module2 = b.createModule(.{ diff --git a/test/tests.zig b/test/tests.zig index a9bed635e2d4..18af132992b1 100644 --- a/test/tests.zig +++ b/test/tests.zig @@ -977,11 +977,11 @@ pub fn addModuleTests(b: *std.Build, options: ModuleTestOptions) *Step { .optimize = test_target.optimize_mode, .target = test_target.target, .max_rss = max_rss, + .filter = options.test_filter, }); const single_threaded_txt = if (test_target.single_threaded) "single" else "multi"; const backend_txt = if (test_target.backend) |backend| @tagName(backend) else "default"; these_tests.single_threaded = test_target.single_threaded; - these_tests.setFilter(options.test_filter); if (test_target.link_libc) { these_tests.linkSystemLibrary("c"); } @@ -1037,10 +1037,15 @@ pub fn addCAbiTests(b: *std.Build, skip_non_native: bool, skip_release: bool) *S continue; } + const triple_prefix = c_abi_target.zigTriple(b.allocator) catch @panic("OOM"); + const test_step = b.addTest(.{ .root_source_file = .{ .path = "test/c_abi/main.zig" }, .optimize = optimize_mode, .target = c_abi_target, + .name = b.fmt("test-c-abi-{s}-{s}", .{ + triple_prefix, @tagName(optimize_mode), + }), }); if (c_abi_target.abi != null and c_abi_target.abi.?.isMusl()) { // TODO NativeTargetInfo insists on dynamically linking musl @@ -1057,11 +1062,6 @@ pub fn addCAbiTests(b: *std.Build, skip_non_native: bool, skip_release: bool) *S test_step.want_lto = false; } - const triple_prefix = c_abi_target.zigTriple(b.allocator) catch @panic("OOM"); - test_step.setName(b.fmt("test-c-abi-{s}-{s} ", .{ - triple_prefix, @tagName(optimize_mode), - })); - const run = b.addRunArtifact(test_step); run.skip_foreign_checks = true; step.dependOn(&run.step);