diff --git a/build.zig b/build.zig index b181eaefae..c64015fe88 100644 --- a/build.zig +++ b/build.zig @@ -443,16 +443,15 @@ pub fn build(b: *std.Build) !void { })); test_step.dependOn(tests.addCompareOutputTests(b, test_filter, optimization_modes)); - //test_step.dependOn(tests.addStandaloneTests( - // b, - // test_filter, - // optimization_modes, - // skip_non_native, - // enable_macos_sdk, - // target, - // skip_stage2_tests, - // enable_symlinks_windows, - //)); + test_step.dependOn(tests.addStandaloneTests( + b, + test_filter, + optimization_modes, + skip_non_native, + enable_macos_sdk, + skip_stage2_tests, + enable_symlinks_windows, + )); test_step.dependOn(tests.addCAbiTests(b, skip_non_native, skip_release)); test_step.dependOn(tests.addLinkTests(b, enable_macos_sdk, skip_stage2_tests, enable_symlinks_windows)); test_step.dependOn(tests.addStackTraceTests(b, test_filter, optimization_modes)); diff --git a/test/link.zig b/test/link.zig index fb18e27c22..610cbd4a3d 100644 --- a/test/link.zig +++ b/test/link.zig @@ -174,6 +174,3 @@ pub const cases = [_]Case{ .import = @import("link/macho/weak_framework/build.zig"), }, }; - -const std = @import("std"); -const builtin = @import("builtin"); diff --git a/test/src/Standalone.zig b/test/src/Standalone.zig deleted file mode 100644 index c07bb511c5..0000000000 --- a/test/src/Standalone.zig +++ /dev/null @@ -1,141 +0,0 @@ -b: *std.Build, -step: *Step, -test_index: usize, -test_filter: ?[]const u8, -optimize_modes: []const OptimizeMode, -skip_non_native: bool, -enable_macos_sdk: bool, -target: std.zig.CrossTarget, -omit_stage2: bool, -enable_darling: bool = false, -enable_qemu: bool = false, -enable_rosetta: bool = false, -enable_wasmtime: bool = false, -enable_wine: bool = false, -enable_symlinks_windows: bool, - -pub fn addC(self: *Standalone, root_src: []const u8) void { - self.addAllArgs(root_src, true); -} - -pub fn add(self: *Standalone, root_src: []const u8) void { - self.addAllArgs(root_src, false); -} - -pub fn addBuildFile(self: *Standalone, build_file: []const u8, features: struct { - build_modes: bool = false, - cross_targets: bool = false, - requires_macos_sdk: bool = false, - requires_stage2: bool = false, - use_emulation: bool = false, - requires_symlinks: bool = false, - extra_argv: []const []const u8 = &.{}, -}) void { - const b = self.b; - - if (features.requires_macos_sdk and !self.enable_macos_sdk) return; - if (features.requires_stage2 and self.omit_stage2) return; - if (features.requires_symlinks and !self.enable_symlinks_windows and builtin.os.tag == .windows) return; - - const annotated_case_name = b.fmt("build {s}", .{build_file}); - if (self.test_filter) |filter| { - if (mem.indexOf(u8, annotated_case_name, filter) == null) return; - } - - var zig_args = ArrayList([]const u8).init(b.allocator); - const rel_zig_exe = fs.path.relative(b.allocator, b.build_root.path orelse ".", b.zig_exe) catch unreachable; - zig_args.append(rel_zig_exe) catch unreachable; - zig_args.append("build") catch unreachable; - - // TODO: fix the various non-concurrency-safe issues in zig's standalone tests, - // and then remove this! - zig_args.append("-j1") catch @panic("OOM"); - - zig_args.append("--build-file") catch unreachable; - zig_args.append(b.pathFromRoot(build_file)) catch unreachable; - - zig_args.appendSlice(features.extra_argv) catch unreachable; - - zig_args.append("test") catch unreachable; - - if (b.verbose) { - zig_args.append("--verbose") catch unreachable; - } - - if (features.cross_targets and !self.target.isNative()) { - const target_triple = self.target.zigTriple(b.allocator) catch unreachable; - const target_arg = fmt.allocPrint(b.allocator, "-Dtarget={s}", .{target_triple}) catch unreachable; - zig_args.append(target_arg) catch unreachable; - } - - if (features.use_emulation) { - if (self.enable_darling) { - zig_args.append("-fdarling") catch unreachable; - } - if (self.enable_qemu) { - zig_args.append("-fqemu") catch unreachable; - } - if (self.enable_rosetta) { - zig_args.append("-frosetta") catch unreachable; - } - if (self.enable_wasmtime) { - zig_args.append("-fwasmtime") catch unreachable; - } - if (self.enable_wine) { - zig_args.append("-fwine") catch unreachable; - } - } - - const optimize_modes = if (features.build_modes) self.optimize_modes else &[1]OptimizeMode{.Debug}; - for (optimize_modes) |optimize_mode| { - const arg = switch (optimize_mode) { - .Debug => "", - .ReleaseFast => "-Doptimize=ReleaseFast", - .ReleaseSafe => "-Doptimize=ReleaseSafe", - .ReleaseSmall => "-Doptimize=ReleaseSmall", - }; - const zig_args_base_len = zig_args.items.len; - if (arg.len > 0) - zig_args.append(arg) catch unreachable; - defer zig_args.resize(zig_args_base_len) catch unreachable; - - const run_cmd = b.addSystemCommand(zig_args.items); - self.step.dependOn(&run_cmd.step); - } -} - -pub fn addAllArgs(self: *Standalone, root_src: []const u8, link_libc: bool) void { - const b = self.b; - - for (self.optimize_modes) |optimize| { - const annotated_case_name = fmt.allocPrint(self.b.allocator, "build {s} ({s})", .{ - root_src, - @tagName(optimize), - }) catch unreachable; - if (self.test_filter) |filter| { - if (mem.indexOf(u8, annotated_case_name, filter) == null) continue; - } - - const exe = b.addExecutable(.{ - .name = "test", - .root_source_file = .{ .path = root_src }, - .optimize = optimize, - .target = .{}, - }); - if (link_libc) { - exe.linkSystemLibrary("c"); - } - - self.step.dependOn(&exe.step); - } -} - -const Standalone = @This(); -const std = @import("std"); -const builtin = @import("builtin"); -const Step = std.Build.Step; -const OptimizeMode = std.builtin.OptimizeMode; -const fmt = std.fmt; -const mem = std.mem; -const ArrayList = std.ArrayList; -const fs = std.fs; diff --git a/test/standalone.zig b/test/standalone.zig index 7aa4d81f97..fa67d6a14d 100644 --- a/test/standalone.zig +++ b/test/standalone.zig @@ -1,117 +1,144 @@ -const std = @import("std"); -const builtin = @import("builtin"); -const tests = @import("tests.zig"); +pub const SimpleCase = struct { + src_path: []const u8, + link_libc: bool = false, + all_modes: bool = false, + target: std.zig.CrossTarget = .{}, +}; -pub fn addCases(cases: *tests.StandaloneContext) void { - cases.add("test/standalone/hello_world/hello.zig"); - cases.addC("test/standalone/hello_world/hello_libc.zig"); +pub const BuildCase = struct { + build_root: []const u8, + import: type, +}; - cases.addBuildFile("test/standalone/options/build.zig", .{ - .extra_argv = &.{ - "-Dbool_true", - "-Dbool_false=false", - "-Dint=1234", - "-De=two", - "-Dstring=hello", - }, - }); +pub const simple_cases = [_]SimpleCase{ + .{ + .src_path = "test/standalone/hello_world/hello.zig", + .all_modes = true, + }, + .{ + .src_path = "test/standalone/hello_world/hello_libc.zig", + .link_libc = true, + .all_modes = true, + }, + .{ + .src_path = "test/standalone/cat/main.zig", + }, + // https://github.com/ziglang/zig/issues/6025 + //.{ + // .src_path = "test/standalone/issue_9693/main.zig", + //}, - cases.add("test/standalone/cat/main.zig"); - if (builtin.zig_backend == .stage1) { // https://github.com/ziglang/zig/issues/6025 - cases.add("test/standalone/issue_9693/main.zig"); - } - cases.add("test/standalone/issue_12471/main.zig"); - cases.add("test/standalone/guess_number/main.zig"); - cases.add("test/standalone/main_return_error/error_u8.zig"); - cases.add("test/standalone/main_return_error/error_u8_non_zero.zig"); - cases.add("test/standalone/noreturn_call/inline.zig"); - cases.add("test/standalone/noreturn_call/as_arg.zig"); - cases.addBuildFile("test/standalone/test_runner_path/build.zig", .{ .requires_stage2 = true }); - cases.addBuildFile("test/standalone/issue_13970/build.zig", .{}); - cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{}); - cases.addBuildFile("test/standalone/shared_library/build.zig", .{}); - cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{}); - cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{ - .build_modes = true, - .cross_targets = true, - }); - cases.addBuildFile("test/standalone/global_linkage/build.zig", .{}); - cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{}); - cases.addBuildFile("test/standalone/issue_339/build.zig", .{}); - cases.addBuildFile("test/standalone/issue_8550/build.zig", .{}); - cases.addBuildFile("test/standalone/issue_794/build.zig", .{}); - cases.addBuildFile("test/standalone/issue_5825/build.zig", .{}); - cases.addBuildFile("test/standalone/pkg_import/build.zig", .{}); - cases.addBuildFile("test/standalone/use_alias/build.zig", .{}); - cases.addBuildFile("test/standalone/brace_expansion/build.zig", .{}); - if (builtin.os.tag != .windows or builtin.cpu.arch != .aarch64) { - // https://github.com/ziglang/zig/issues/13685 - cases.addBuildFile("test/standalone/empty_env/build.zig", .{}); - } - cases.addBuildFile("test/standalone/issue_7030/build.zig", .{}); - cases.addBuildFile("test/standalone/install_raw_hex/build.zig", .{}); - if (builtin.zig_backend == .stage1) { // https://github.com/ziglang/zig/issues/12194 - cases.addBuildFile("test/standalone/issue_9812/build.zig", .{}); - } - if (builtin.os.tag != .windows) { - // https://github.com/ziglang/zig/issues/12419 - cases.addBuildFile("test/standalone/issue_11595/build.zig", .{}); - } + .{ .src_path = "test/standalone/issue_12471/main.zig" }, + .{ .src_path = "test/standalone/guess_number/main.zig" }, + .{ .src_path = "test/standalone/main_return_error/error_u8.zig" }, + .{ .src_path = "test/standalone/main_return_error/error_u8_non_zero.zig" }, + .{ .src_path = "test/standalone/noreturn_call/inline.zig" }, + .{ .src_path = "test/standalone/noreturn_call/as_arg.zig" }, - if (builtin.os.tag != .wasi and - // https://github.com/ziglang/zig/issues/13550 - (builtin.os.tag != .macos or builtin.cpu.arch != .aarch64) and - // https://github.com/ziglang/zig/issues/13686 - (builtin.os.tag != .windows or builtin.cpu.arch != .aarch64)) - { - cases.addBuildFile("test/standalone/load_dynamic_library/build.zig", .{}); - } - - if (builtin.os.tag == .windows) { - cases.addBuildFile("test/standalone/windows_spawn/build.zig", .{}); - } - - cases.addBuildFile("test/standalone/c_compiler/build.zig", .{ - .build_modes = true, - .cross_targets = true, - }); - - if (builtin.os.tag == .windows) { - cases.addC("test/standalone/issue_9402/main.zig"); - } - // Try to build and run a PIE executable. - if (builtin.os.tag == .linux) { - cases.addBuildFile("test/standalone/pie/build.zig", .{}); - } - cases.addBuildFile("test/standalone/issue_12706/build.zig", .{}); - if (std.os.have_sigpipe_support) { - cases.addBuildFile("test/standalone/sigpipe/build.zig", .{}); - } + .{ + .src_path = "test/standalone/issue_9402/main.zig", + .target = .{ .os_tag = .windows }, + .link_libc = true, + }, // Ensure the development tools are buildable. Alphabetically sorted. // No need to build `tools/spirv/grammar.zig`. - cases.add("tools/extract-grammar.zig"); - cases.add("tools/gen_outline_atomics.zig"); - cases.add("tools/gen_spirv_spec.zig"); - cases.add("tools/gen_stubs.zig"); - cases.add("tools/generate_linux_syscalls.zig"); - cases.add("tools/process_headers.zig"); - cases.add("tools/update-license-headers.zig"); - cases.add("tools/update-linux-headers.zig"); - cases.add("tools/update_clang_options.zig"); - cases.add("tools/update_cpu_features.zig"); - cases.add("tools/update_glibc.zig"); - cases.add("tools/update_spirv_features.zig"); + .{ .src_path = "tools/extract-grammar.zig" }, + .{ .src_path = "tools/gen_outline_atomics.zig" }, + .{ .src_path = "tools/gen_spirv_spec.zig" }, + .{ .src_path = "tools/gen_stubs.zig" }, + .{ .src_path = "tools/generate_linux_syscalls.zig" }, + .{ .src_path = "tools/process_headers.zig" }, + .{ .src_path = "tools/update-license-headers.zig" }, + .{ .src_path = "tools/update-linux-headers.zig" }, + .{ .src_path = "tools/update_clang_options.zig" }, + .{ .src_path = "tools/update_cpu_features.zig" }, + .{ .src_path = "tools/update_glibc.zig" }, + .{ .src_path = "tools/update_spirv_features.zig" }, +}; - cases.addBuildFile("test/standalone/issue_13030/build.zig", .{ .build_modes = true }); - cases.addBuildFile("test/standalone/emit_asm_and_bin/build.zig", .{}); - cases.addBuildFile("test/standalone/issue_12588/build.zig", .{}); - cases.addBuildFile("test/standalone/embed_generated_file/build.zig", .{}); - cases.addBuildFile("test/standalone/extern/build.zig", .{}); +pub const build_cases = [_]BuildCase{}; - cases.addBuildFile("test/standalone/dep_diamond/build.zig", .{}); - cases.addBuildFile("test/standalone/dep_triangle/build.zig", .{}); - cases.addBuildFile("test/standalone/dep_recursive/build.zig", .{}); - cases.addBuildFile("test/standalone/dep_mutually_recursive/build.zig", .{}); - cases.addBuildFile("test/standalone/dep_shared_builtin/build.zig", .{}); -} +//pub fn addCases(cases: *tests.StandaloneContext) void { +// cases.addBuildFile("test/standalone/options/build.zig", .{ +// .extra_argv = &.{ +// "-Dbool_true", +// "-Dbool_false=false", +// "-Dint=1234", +// "-De=two", +// "-Dstring=hello", +// }, +// }); +// +// cases.addBuildFile("test/standalone/test_runner_path/build.zig", .{ .requires_stage2 = true }); +// cases.addBuildFile("test/standalone/issue_13970/build.zig", .{}); +// cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{}); +// cases.addBuildFile("test/standalone/shared_library/build.zig", .{}); +// cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{}); +// cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{ +// .build_modes = true, +// .cross_targets = true, +// }); +// cases.addBuildFile("test/standalone/global_linkage/build.zig", .{}); +// cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{}); +// cases.addBuildFile("test/standalone/issue_339/build.zig", .{}); +// cases.addBuildFile("test/standalone/issue_8550/build.zig", .{}); +// cases.addBuildFile("test/standalone/issue_794/build.zig", .{}); +// cases.addBuildFile("test/standalone/issue_5825/build.zig", .{}); +// cases.addBuildFile("test/standalone/pkg_import/build.zig", .{}); +// cases.addBuildFile("test/standalone/use_alias/build.zig", .{}); +// cases.addBuildFile("test/standalone/brace_expansion/build.zig", .{}); +// if (builtin.os.tag != .windows or builtin.cpu.arch != .aarch64) { +// // https://github.com/ziglang/zig/issues/13685 +// cases.addBuildFile("test/standalone/empty_env/build.zig", .{}); +// } +// cases.addBuildFile("test/standalone/issue_7030/build.zig", .{}); +// cases.addBuildFile("test/standalone/install_raw_hex/build.zig", .{}); +// if (builtin.zig_backend == .stage1) { // https://github.com/ziglang/zig/issues/12194 +// cases.addBuildFile("test/standalone/issue_9812/build.zig", .{}); +// } +// if (builtin.os.tag != .windows) { +// // https://github.com/ziglang/zig/issues/12419 +// cases.addBuildFile("test/standalone/issue_11595/build.zig", .{}); +// } +// +// if (builtin.os.tag != .wasi and +// // https://github.com/ziglang/zig/issues/13550 +// (builtin.os.tag != .macos or builtin.cpu.arch != .aarch64) and +// // https://github.com/ziglang/zig/issues/13686 +// (builtin.os.tag != .windows or builtin.cpu.arch != .aarch64)) +// { +// cases.addBuildFile("test/standalone/load_dynamic_library/build.zig", .{}); +// } +// +// if (builtin.os.tag == .windows) { +// cases.addBuildFile("test/standalone/windows_spawn/build.zig", .{}); +// } +// +// cases.addBuildFile("test/standalone/c_compiler/build.zig", .{ +// .build_modes = true, +// .cross_targets = true, +// }); +// +// // Try to build and run a PIE executable. +// if (builtin.os.tag == .linux) { +// cases.addBuildFile("test/standalone/pie/build.zig", .{}); +// } +// cases.addBuildFile("test/standalone/issue_12706/build.zig", .{}); +// if (std.os.have_sigpipe_support) { +// cases.addBuildFile("test/standalone/sigpipe/build.zig", .{}); +// } +// +// cases.addBuildFile("test/standalone/issue_13030/build.zig", .{ .build_modes = true }); +// cases.addBuildFile("test/standalone/emit_asm_and_bin/build.zig", .{}); +// cases.addBuildFile("test/standalone/issue_12588/build.zig", .{}); +// cases.addBuildFile("test/standalone/embed_generated_file/build.zig", .{}); +// +// cases.addBuildFile("test/standalone/dep_diamond/build.zig", .{}); +// cases.addBuildFile("test/standalone/dep_triangle/build.zig", .{}); +// cases.addBuildFile("test/standalone/dep_recursive/build.zig", .{}); +// cases.addBuildFile("test/standalone/dep_mutually_recursive/build.zig", .{}); +// cases.addBuildFile("test/standalone/dep_shared_builtin/build.zig", .{}); +//} + +const std = @import("std"); diff --git a/test/tests.zig b/test/tests.zig index a1945246a3..038111136a 100644 --- a/test/tests.zig +++ b/test/tests.zig @@ -20,7 +20,6 @@ pub const TranslateCContext = @import("src/translate_c.zig").TranslateCContext; pub const RunTranslatedCContext = @import("src/run_translated_c.zig").RunTranslatedCContext; pub const CompareOutputContext = @import("src/CompareOutput.zig"); pub const StackTracesContext = @import("src/StackTrace.zig"); -pub const StandaloneContext = @import("src/Standalone.zig"); const TestTarget = struct { target: CrossTarget = @as(CrossTarget, .{}), @@ -565,27 +564,34 @@ pub fn addStandaloneTests( optimize_modes: []const OptimizeMode, skip_non_native: bool, enable_macos_sdk: bool, - target: std.zig.CrossTarget, omit_stage2: bool, enable_symlinks_windows: bool, ) *Step { - const cases = b.allocator.create(StandaloneContext) catch @panic("OOM"); - cases.* = .{ - .b = b, - .step = b.step("test-standalone", "Run the standalone tests"), - .test_index = 0, - .test_filter = test_filter, - .optimize_modes = optimize_modes, - .skip_non_native = skip_non_native, - .enable_macos_sdk = enable_macos_sdk, - .target = target, - .omit_stage2 = omit_stage2, - .enable_symlinks_windows = enable_symlinks_windows, - }; + const step = b.step("test-standalone", "Run the standalone tests"); - standalone.addCases(cases); + _ = test_filter; + _ = skip_non_native; + _ = enable_macos_sdk; + _ = omit_stage2; + _ = enable_symlinks_windows; - return cases.step; + for (standalone.simple_cases) |case| { + for (optimize_modes) |optimize| { + if (!case.all_modes and optimize != .Debug) continue; + + const exe = b.addExecutable(.{ + .name = std.fs.path.stem(case.src_path), + .root_source_file = .{ .path = case.src_path }, + .optimize = optimize, + .target = case.target, + }); + if (case.link_libc) exe.linkLibC(); + + step.dependOn(&exe.step); + } + } + + return step; } pub fn addLinkTests(