authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-03-07 22:40:53-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-03-15 10:48:14-07:00
log15c4fae1c93d970d02a9eede96371fb7c053837f
treef55fcd70efa87474d51c9d81bd3eec06a2bee911
parent1142e0534351a57b81bd4a127f29745c62cc59c9

re-enable the simple standalone tests


5 files changed, 167 insertions(+), 279 deletions(-)

build.zig+9-10
......@@ -443,16 +443,15 @@ pub fn build(b: *std.Build) !void {
443443 }));
444444
445445 test_step.dependOn(tests.addCompareOutputTests(b, test_filter, optimization_modes));
446 //test_step.dependOn(tests.addStandaloneTests(
447 // b,
448 // test_filter,
449 // optimization_modes,
450 // skip_non_native,
451 // enable_macos_sdk,
452 // target,
453 // skip_stage2_tests,
454 // enable_symlinks_windows,
455 //));
446 test_step.dependOn(tests.addStandaloneTests(
447 b,
448 test_filter,
449 optimization_modes,
450 skip_non_native,
451 enable_macos_sdk,
452 skip_stage2_tests,
453 enable_symlinks_windows,
454 ));
456455 test_step.dependOn(tests.addCAbiTests(b, skip_non_native, skip_release));
457456 test_step.dependOn(tests.addLinkTests(b, enable_macos_sdk, skip_stage2_tests, enable_symlinks_windows));
458457 test_step.dependOn(tests.addStackTraceTests(b, test_filter, optimization_modes));
test/link.zig-3
......@@ -174,6 +174,3 @@ pub const cases = [_]Case{
174174 .import = @import("link/macho/weak_framework/build.zig"),
175175 },
176176};
177
178const std = @import("std");
179const builtin = @import("builtin");
test/src/Standalone.zig deleted-141
......@@ -1,141 +0,0 @@
1b: *std.Build,
2step: *Step,
3test_index: usize,
4test_filter: ?[]const u8,
5optimize_modes: []const OptimizeMode,
6skip_non_native: bool,
7enable_macos_sdk: bool,
8target: std.zig.CrossTarget,
9omit_stage2: bool,
10enable_darling: bool = false,
11enable_qemu: bool = false,
12enable_rosetta: bool = false,
13enable_wasmtime: bool = false,
14enable_wine: bool = false,
15enable_symlinks_windows: bool,
16
17pub fn addC(self: *Standalone, root_src: []const u8) void {
18 self.addAllArgs(root_src, true);
19}
20
21pub fn add(self: *Standalone, root_src: []const u8) void {
22 self.addAllArgs(root_src, false);
23}
24
25pub fn addBuildFile(self: *Standalone, build_file: []const u8, features: struct {
26 build_modes: bool = false,
27 cross_targets: bool = false,
28 requires_macos_sdk: bool = false,
29 requires_stage2: bool = false,
30 use_emulation: bool = false,
31 requires_symlinks: bool = false,
32 extra_argv: []const []const u8 = &.{},
33}) void {
34 const b = self.b;
35
36 if (features.requires_macos_sdk and !self.enable_macos_sdk) return;
37 if (features.requires_stage2 and self.omit_stage2) return;
38 if (features.requires_symlinks and !self.enable_symlinks_windows and builtin.os.tag == .windows) return;
39
40 const annotated_case_name = b.fmt("build {s}", .{build_file});
41 if (self.test_filter) |filter| {
42 if (mem.indexOf(u8, annotated_case_name, filter) == null) return;
43 }
44
45 var zig_args = ArrayList([]const u8).init(b.allocator);
46 const rel_zig_exe = fs.path.relative(b.allocator, b.build_root.path orelse ".", b.zig_exe) catch unreachable;
47 zig_args.append(rel_zig_exe) catch unreachable;
48 zig_args.append("build") catch unreachable;
49
50 // TODO: fix the various non-concurrency-safe issues in zig's standalone tests,
51 // and then remove this!
52 zig_args.append("-j1") catch @panic("OOM");
53
54 zig_args.append("--build-file") catch unreachable;
55 zig_args.append(b.pathFromRoot(build_file)) catch unreachable;
56
57 zig_args.appendSlice(features.extra_argv) catch unreachable;
58
59 zig_args.append("test") catch unreachable;
60
61 if (b.verbose) {
62 zig_args.append("--verbose") catch unreachable;
63 }
64
65 if (features.cross_targets and !self.target.isNative()) {
66 const target_triple = self.target.zigTriple(b.allocator) catch unreachable;
67 const target_arg = fmt.allocPrint(b.allocator, "-Dtarget={s}", .{target_triple}) catch unreachable;
68 zig_args.append(target_arg) catch unreachable;
69 }
70
71 if (features.use_emulation) {
72 if (self.enable_darling) {
73 zig_args.append("-fdarling") catch unreachable;
74 }
75 if (self.enable_qemu) {
76 zig_args.append("-fqemu") catch unreachable;
77 }
78 if (self.enable_rosetta) {
79 zig_args.append("-frosetta") catch unreachable;
80 }
81 if (self.enable_wasmtime) {
82 zig_args.append("-fwasmtime") catch unreachable;
83 }
84 if (self.enable_wine) {
85 zig_args.append("-fwine") catch unreachable;
86 }
87 }
88
89 const optimize_modes = if (features.build_modes) self.optimize_modes else &[1]OptimizeMode{.Debug};
90 for (optimize_modes) |optimize_mode| {
91 const arg = switch (optimize_mode) {
92 .Debug => "",
93 .ReleaseFast => "-Doptimize=ReleaseFast",
94 .ReleaseSafe => "-Doptimize=ReleaseSafe",
95 .ReleaseSmall => "-Doptimize=ReleaseSmall",
96 };
97 const zig_args_base_len = zig_args.items.len;
98 if (arg.len > 0)
99 zig_args.append(arg) catch unreachable;
100 defer zig_args.resize(zig_args_base_len) catch unreachable;
101
102 const run_cmd = b.addSystemCommand(zig_args.items);
103 self.step.dependOn(&run_cmd.step);
104 }
105}
106
107pub fn addAllArgs(self: *Standalone, root_src: []const u8, link_libc: bool) void {
108 const b = self.b;
109
110 for (self.optimize_modes) |optimize| {
111 const annotated_case_name = fmt.allocPrint(self.b.allocator, "build {s} ({s})", .{
112 root_src,
113 @tagName(optimize),
114 }) catch unreachable;
115 if (self.test_filter) |filter| {
116 if (mem.indexOf(u8, annotated_case_name, filter) == null) continue;
117 }
118
119 const exe = b.addExecutable(.{
120 .name = "test",
121 .root_source_file = .{ .path = root_src },
122 .optimize = optimize,
123 .target = .{},
124 });
125 if (link_libc) {
126 exe.linkSystemLibrary("c");
127 }
128
129 self.step.dependOn(&exe.step);
130 }
131}
132
133const Standalone = @This();
134const std = @import("std");
135const builtin = @import("builtin");
136const Step = std.Build.Step;
137const OptimizeMode = std.builtin.OptimizeMode;
138const fmt = std.fmt;
139const mem = std.mem;
140const ArrayList = std.ArrayList;
141const fs = std.fs;
test/standalone.zig+135-108
......@@ -1,117 +1,144 @@
1const std = @import("std");
2const builtin = @import("builtin");
3const tests = @import("tests.zig");
4
5pub fn addCases(cases: *tests.StandaloneContext) void {
6 cases.add("test/standalone/hello_world/hello.zig");
7 cases.addC("test/standalone/hello_world/hello_libc.zig");
8
9 cases.addBuildFile("test/standalone/options/build.zig", .{
10 .extra_argv = &.{
11 "-Dbool_true",
12 "-Dbool_false=false",
13 "-Dint=1234",
14 "-De=two",
15 "-Dstring=hello",
16 },
17 });
1pub const SimpleCase = struct {
2 src_path: []const u8,
3 link_libc: bool = false,
4 all_modes: bool = false,
5 target: std.zig.CrossTarget = .{},
6};
187
19 cases.add("test/standalone/cat/main.zig");
20 if (builtin.zig_backend == .stage1) { // https://github.com/ziglang/zig/issues/6025
21 cases.add("test/standalone/issue_9693/main.zig");
22 }
23 cases.add("test/standalone/issue_12471/main.zig");
24 cases.add("test/standalone/guess_number/main.zig");
25 cases.add("test/standalone/main_return_error/error_u8.zig");
26 cases.add("test/standalone/main_return_error/error_u8_non_zero.zig");
27 cases.add("test/standalone/noreturn_call/inline.zig");
28 cases.add("test/standalone/noreturn_call/as_arg.zig");
29 cases.addBuildFile("test/standalone/test_runner_path/build.zig", .{ .requires_stage2 = true });
30 cases.addBuildFile("test/standalone/issue_13970/build.zig", .{});
31 cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{});
32 cases.addBuildFile("test/standalone/shared_library/build.zig", .{});
33 cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{});
34 cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{
35 .build_modes = true,
36 .cross_targets = true,
37 });
38 cases.addBuildFile("test/standalone/global_linkage/build.zig", .{});
39 cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{});
40 cases.addBuildFile("test/standalone/issue_339/build.zig", .{});
41 cases.addBuildFile("test/standalone/issue_8550/build.zig", .{});
42 cases.addBuildFile("test/standalone/issue_794/build.zig", .{});
43 cases.addBuildFile("test/standalone/issue_5825/build.zig", .{});
44 cases.addBuildFile("test/standalone/pkg_import/build.zig", .{});
45 cases.addBuildFile("test/standalone/use_alias/build.zig", .{});
46 cases.addBuildFile("test/standalone/brace_expansion/build.zig", .{});
47 if (builtin.os.tag != .windows or builtin.cpu.arch != .aarch64) {
48 // https://github.com/ziglang/zig/issues/13685
49 cases.addBuildFile("test/standalone/empty_env/build.zig", .{});
50 }
51 cases.addBuildFile("test/standalone/issue_7030/build.zig", .{});
52 cases.addBuildFile("test/standalone/install_raw_hex/build.zig", .{});
53 if (builtin.zig_backend == .stage1) { // https://github.com/ziglang/zig/issues/12194
54 cases.addBuildFile("test/standalone/issue_9812/build.zig", .{});
55 }
56 if (builtin.os.tag != .windows) {
57 // https://github.com/ziglang/zig/issues/12419
58 cases.addBuildFile("test/standalone/issue_11595/build.zig", .{});
59 }
8pub const BuildCase = struct {
9 build_root: []const u8,
10 import: type,
11};
6012
61 if (builtin.os.tag != .wasi and
62 // https://github.com/ziglang/zig/issues/13550
63 (builtin.os.tag != .macos or builtin.cpu.arch != .aarch64) and
64 // https://github.com/ziglang/zig/issues/13686
65 (builtin.os.tag != .windows or builtin.cpu.arch != .aarch64))
66 {
67 cases.addBuildFile("test/standalone/load_dynamic_library/build.zig", .{});
68 }
13pub const simple_cases = [_]SimpleCase{
14 .{
15 .src_path = "test/standalone/hello_world/hello.zig",
16 .all_modes = true,
17 },
18 .{
19 .src_path = "test/standalone/hello_world/hello_libc.zig",
20 .link_libc = true,
21 .all_modes = true,
22 },
23 .{
24 .src_path = "test/standalone/cat/main.zig",
25 },
26 // https://github.com/ziglang/zig/issues/6025
27 //.{
28 // .src_path = "test/standalone/issue_9693/main.zig",
29 //},
6930
70 if (builtin.os.tag == .windows) {
71 cases.addBuildFile("test/standalone/windows_spawn/build.zig", .{});
72 }
31 .{ .src_path = "test/standalone/issue_12471/main.zig" },
32 .{ .src_path = "test/standalone/guess_number/main.zig" },
33 .{ .src_path = "test/standalone/main_return_error/error_u8.zig" },
34 .{ .src_path = "test/standalone/main_return_error/error_u8_non_zero.zig" },
35 .{ .src_path = "test/standalone/noreturn_call/inline.zig" },
36 .{ .src_path = "test/standalone/noreturn_call/as_arg.zig" },
7337
74 cases.addBuildFile("test/standalone/c_compiler/build.zig", .{
75 .build_modes = true,
76 .cross_targets = true,
77 });
78
79 if (builtin.os.tag == .windows) {
80 cases.addC("test/standalone/issue_9402/main.zig");
81 }
82 // Try to build and run a PIE executable.
83 if (builtin.os.tag == .linux) {
84 cases.addBuildFile("test/standalone/pie/build.zig", .{});
85 }
86 cases.addBuildFile("test/standalone/issue_12706/build.zig", .{});
87 if (std.os.have_sigpipe_support) {
88 cases.addBuildFile("test/standalone/sigpipe/build.zig", .{});
89 }
38 .{
39 .src_path = "test/standalone/issue_9402/main.zig",
40 .target = .{ .os_tag = .windows },
41 .link_libc = true,
42 },
9043
9144 // Ensure the development tools are buildable. Alphabetically sorted.
9245 // No need to build `tools/spirv/grammar.zig`.
93 cases.add("tools/extract-grammar.zig");
94 cases.add("tools/gen_outline_atomics.zig");
95 cases.add("tools/gen_spirv_spec.zig");
96 cases.add("tools/gen_stubs.zig");
97 cases.add("tools/generate_linux_syscalls.zig");
98 cases.add("tools/process_headers.zig");
99 cases.add("tools/update-license-headers.zig");
100 cases.add("tools/update-linux-headers.zig");
101 cases.add("tools/update_clang_options.zig");
102 cases.add("tools/update_cpu_features.zig");
103 cases.add("tools/update_glibc.zig");
104 cases.add("tools/update_spirv_features.zig");
46 .{ .src_path = "tools/extract-grammar.zig" },
47 .{ .src_path = "tools/gen_outline_atomics.zig" },
48 .{ .src_path = "tools/gen_spirv_spec.zig" },
49 .{ .src_path = "tools/gen_stubs.zig" },
50 .{ .src_path = "tools/generate_linux_syscalls.zig" },
51 .{ .src_path = "tools/process_headers.zig" },
52 .{ .src_path = "tools/update-license-headers.zig" },
53 .{ .src_path = "tools/update-linux-headers.zig" },
54 .{ .src_path = "tools/update_clang_options.zig" },
55 .{ .src_path = "tools/update_cpu_features.zig" },
56 .{ .src_path = "tools/update_glibc.zig" },
57 .{ .src_path = "tools/update_spirv_features.zig" },
58};
59
60pub const build_cases = [_]BuildCase{};
10561
106 cases.addBuildFile("test/standalone/issue_13030/build.zig", .{ .build_modes = true });
107 cases.addBuildFile("test/standalone/emit_asm_and_bin/build.zig", .{});
108 cases.addBuildFile("test/standalone/issue_12588/build.zig", .{});
109 cases.addBuildFile("test/standalone/embed_generated_file/build.zig", .{});
110 cases.addBuildFile("test/standalone/extern/build.zig", .{});
62//pub fn addCases(cases: *tests.StandaloneContext) void {
63// cases.addBuildFile("test/standalone/options/build.zig", .{
64// .extra_argv = &.{
65// "-Dbool_true",
66// "-Dbool_false=false",
67// "-Dint=1234",
68// "-De=two",
69// "-Dstring=hello",
70// },
71// });
72//
73// cases.addBuildFile("test/standalone/test_runner_path/build.zig", .{ .requires_stage2 = true });
74// cases.addBuildFile("test/standalone/issue_13970/build.zig", .{});
75// cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{});
76// cases.addBuildFile("test/standalone/shared_library/build.zig", .{});
77// cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{});
78// cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{
79// .build_modes = true,
80// .cross_targets = true,
81// });
82// cases.addBuildFile("test/standalone/global_linkage/build.zig", .{});
83// cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{});
84// cases.addBuildFile("test/standalone/issue_339/build.zig", .{});
85// cases.addBuildFile("test/standalone/issue_8550/build.zig", .{});
86// cases.addBuildFile("test/standalone/issue_794/build.zig", .{});
87// cases.addBuildFile("test/standalone/issue_5825/build.zig", .{});
88// cases.addBuildFile("test/standalone/pkg_import/build.zig", .{});
89// cases.addBuildFile("test/standalone/use_alias/build.zig", .{});
90// cases.addBuildFile("test/standalone/brace_expansion/build.zig", .{});
91// if (builtin.os.tag != .windows or builtin.cpu.arch != .aarch64) {
92// // https://github.com/ziglang/zig/issues/13685
93// cases.addBuildFile("test/standalone/empty_env/build.zig", .{});
94// }
95// cases.addBuildFile("test/standalone/issue_7030/build.zig", .{});
96// cases.addBuildFile("test/standalone/install_raw_hex/build.zig", .{});
97// if (builtin.zig_backend == .stage1) { // https://github.com/ziglang/zig/issues/12194
98// cases.addBuildFile("test/standalone/issue_9812/build.zig", .{});
99// }
100// if (builtin.os.tag != .windows) {
101// // https://github.com/ziglang/zig/issues/12419
102// cases.addBuildFile("test/standalone/issue_11595/build.zig", .{});
103// }
104//
105// if (builtin.os.tag != .wasi and
106// // https://github.com/ziglang/zig/issues/13550
107// (builtin.os.tag != .macos or builtin.cpu.arch != .aarch64) and
108// // https://github.com/ziglang/zig/issues/13686
109// (builtin.os.tag != .windows or builtin.cpu.arch != .aarch64))
110// {
111// cases.addBuildFile("test/standalone/load_dynamic_library/build.zig", .{});
112// }
113//
114// if (builtin.os.tag == .windows) {
115// cases.addBuildFile("test/standalone/windows_spawn/build.zig", .{});
116// }
117//
118// cases.addBuildFile("test/standalone/c_compiler/build.zig", .{
119// .build_modes = true,
120// .cross_targets = true,
121// });
122//
123// // Try to build and run a PIE executable.
124// if (builtin.os.tag == .linux) {
125// cases.addBuildFile("test/standalone/pie/build.zig", .{});
126// }
127// cases.addBuildFile("test/standalone/issue_12706/build.zig", .{});
128// if (std.os.have_sigpipe_support) {
129// cases.addBuildFile("test/standalone/sigpipe/build.zig", .{});
130// }
131//
132// cases.addBuildFile("test/standalone/issue_13030/build.zig", .{ .build_modes = true });
133// cases.addBuildFile("test/standalone/emit_asm_and_bin/build.zig", .{});
134// cases.addBuildFile("test/standalone/issue_12588/build.zig", .{});
135// cases.addBuildFile("test/standalone/embed_generated_file/build.zig", .{});
136//
137// cases.addBuildFile("test/standalone/dep_diamond/build.zig", .{});
138// cases.addBuildFile("test/standalone/dep_triangle/build.zig", .{});
139// cases.addBuildFile("test/standalone/dep_recursive/build.zig", .{});
140// cases.addBuildFile("test/standalone/dep_mutually_recursive/build.zig", .{});
141// cases.addBuildFile("test/standalone/dep_shared_builtin/build.zig", .{});
142//}
111143
112 cases.addBuildFile("test/standalone/dep_diamond/build.zig", .{});
113 cases.addBuildFile("test/standalone/dep_triangle/build.zig", .{});
114 cases.addBuildFile("test/standalone/dep_recursive/build.zig", .{});
115 cases.addBuildFile("test/standalone/dep_mutually_recursive/build.zig", .{});
116 cases.addBuildFile("test/standalone/dep_shared_builtin/build.zig", .{});
117}
144const std = @import("std");
test/tests.zig+23-17
......@@ -20,7 +20,6 @@ pub const TranslateCContext = @import("src/translate_c.zig").TranslateCContext;
2020pub const RunTranslatedCContext = @import("src/run_translated_c.zig").RunTranslatedCContext;
2121pub const CompareOutputContext = @import("src/CompareOutput.zig");
2222pub const StackTracesContext = @import("src/StackTrace.zig");
23pub const StandaloneContext = @import("src/Standalone.zig");
2423
2524const TestTarget = struct {
2625 target: CrossTarget = @as(CrossTarget, .{}),
......@@ -565,27 +564,34 @@ pub fn addStandaloneTests(
565564 optimize_modes: []const OptimizeMode,
566565 skip_non_native: bool,
567566 enable_macos_sdk: bool,
568 target: std.zig.CrossTarget,
569567 omit_stage2: bool,
570568 enable_symlinks_windows: bool,
571569) *Step {
572 const cases = b.allocator.create(StandaloneContext) catch @panic("OOM");
573 cases.* = .{
574 .b = b,
575 .step = b.step("test-standalone", "Run the standalone tests"),
576 .test_index = 0,
577 .test_filter = test_filter,
578 .optimize_modes = optimize_modes,
579 .skip_non_native = skip_non_native,
580 .enable_macos_sdk = enable_macos_sdk,
581 .target = target,
582 .omit_stage2 = omit_stage2,
583 .enable_symlinks_windows = enable_symlinks_windows,
584 };
570 const step = b.step("test-standalone", "Run the standalone tests");
585571
586 standalone.addCases(cases);
572 _ = test_filter;
573 _ = skip_non_native;
574 _ = enable_macos_sdk;
575 _ = omit_stage2;
576 _ = enable_symlinks_windows;
577
578 for (standalone.simple_cases) |case| {
579 for (optimize_modes) |optimize| {
580 if (!case.all_modes and optimize != .Debug) continue;
581
582 const exe = b.addExecutable(.{
583 .name = std.fs.path.stem(case.src_path),
584 .root_source_file = .{ .path = case.src_path },
585 .optimize = optimize,
586 .target = case.target,
587 });
588 if (case.link_libc) exe.linkLibC();
587589
588 return cases.step;
590 step.dependOn(&exe.step);
591 }
592 }
593
594 return step;
589595}
590596
591597pub fn addLinkTests(