authorgravatar for xavierb@gmail.comxavier <xavierb@gmail.com> 2021-05-03 08:48:14+02:00
committergravatar for xavierb@gmail.comxavier <xavierb@gmail.com> 2021-05-25 00:19:23+02:00
log7e4f28fac9a20fb548c85cf81f4a62b069cf4ac8
tree96a444a5b8f212a9ab2bf054ee5ddbb4e8b0d49c
parent8c5d4295e5f6459ba99d219c1922a30ec6da24bf

standalone tests may now test cross targets and build modes.


3 files changed, 48 insertions(+), 26 deletions(-)

build.zig+1-1
......@@ -328,7 +328,7 @@ pub fn build(b: *Builder) !void {
328328 ));
329329
330330 toolchain_step.dependOn(tests.addCompareOutputTests(b, test_filter, modes));
331 toolchain_step.dependOn(tests.addStandaloneTests(b, test_filter, modes));
331 toolchain_step.dependOn(tests.addStandaloneTests(b, test_filter, modes, skip_non_native, target));
332332 toolchain_step.dependOn(tests.addStackTraceTests(b, test_filter, modes));
333333 toolchain_step.dependOn(tests.addCliTests(b, test_filter, modes));
334334 toolchain_step.dependOn(tests.addAssembleAndLinkTests(b, test_filter, modes));
test/standalone.zig+18-18
......@@ -8,26 +8,26 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
88 cases.add("test/standalone/guess_number/main.zig");
99 cases.add("test/standalone/main_return_error/error_u8.zig");
1010 cases.add("test/standalone/main_return_error/error_u8_non_zero.zig");
11 cases.addBuildFile("test/standalone/main_pkg_path/build.zig");
12 cases.addBuildFile("test/standalone/shared_library/build.zig");
13 cases.addBuildFile("test/standalone/mix_o_files/build.zig");
14 cases.addBuildFile("test/standalone/global_linkage/build.zig");
15 cases.addBuildFile("test/standalone/static_c_lib/build.zig");
16 cases.addBuildFile("test/standalone/link_interdependent_static_c_libs/build.zig");
17 cases.addBuildFile("test/standalone/link_static_lib_as_system_lib/build.zig");
18 cases.addBuildFile("test/standalone/issue_339/build.zig");
19 cases.addBuildFile("test/standalone/issue_8550/build.zig");
20 cases.addBuildFile("test/standalone/issue_794/build.zig");
21 cases.addBuildFile("test/standalone/issue_5825/build.zig");
22 cases.addBuildFile("test/standalone/pkg_import/build.zig");
23 cases.addBuildFile("test/standalone/use_alias/build.zig");
24 cases.addBuildFile("test/standalone/brace_expansion/build.zig");
25 cases.addBuildFile("test/standalone/empty_env/build.zig");
26 cases.addBuildFile("test/standalone/issue_7030/build.zig");
11 cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{});
12 cases.addBuildFile("test/standalone/shared_library/build.zig", .{});
13 cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{});
14 cases.addBuildFile("test/standalone/global_linkage/build.zig", .{});
15 cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{});
16 cases.addBuildFile("test/standalone/link_interdependent_static_c_libs/build.zig", .{});
17 cases.addBuildFile("test/standalone/link_static_lib_as_system_lib/build.zig", .{});
18 cases.addBuildFile("test/standalone/issue_339/build.zig", .{});
19 cases.addBuildFile("test/standalone/issue_8550/build.zig", .{});
20 cases.addBuildFile("test/standalone/issue_794/build.zig", .{});
21 cases.addBuildFile("test/standalone/issue_5825/build.zig", .{});
22 cases.addBuildFile("test/standalone/pkg_import/build.zig", .{});
23 cases.addBuildFile("test/standalone/use_alias/build.zig", .{});
24 cases.addBuildFile("test/standalone/brace_expansion/build.zig", .{});
25 cases.addBuildFile("test/standalone/empty_env/build.zig", .{});
26 cases.addBuildFile("test/standalone/issue_7030/build.zig", .{});
2727 if (std.Target.current.os.tag != .wasi) {
28 cases.addBuildFile("test/standalone/load_dynamic_library/build.zig");
28 cases.addBuildFile("test/standalone/load_dynamic_library/build.zig", .{});
2929 }
3030 if (std.Target.current.cpu.arch == .x86_64) { // TODO add C ABI support for other architectures
31 cases.addBuildFile("test/stage1/c_abi/build.zig");
31 cases.addBuildFile("test/stage1/c_abi/build.zig", .{});
3232 }
3333}
test/tests.zig+29-7
......@@ -399,7 +399,7 @@ pub fn addCompileErrorTests(b: *build.Builder, test_filter: ?[]const u8, modes:
399399 return cases.step;
400400}
401401
402pub fn addStandaloneTests(b: *build.Builder, test_filter: ?[]const u8, modes: []const Mode) *build.Step {
402pub fn addStandaloneTests(b: *build.Builder, test_filter: ?[]const u8, modes: []const Mode, skip_non_native: bool, target: std.zig.CrossTarget) *build.Step {
403403 const cases = b.allocator.create(StandaloneContext) catch unreachable;
404404 cases.* = StandaloneContext{
405405 .b = b,
......@@ -407,6 +407,8 @@ pub fn addStandaloneTests(b: *build.Builder, test_filter: ?[]const u8, modes: []
407407 .test_index = 0,
408408 .test_filter = test_filter,
409409 .modes = modes,
410 .skip_non_native = skip_non_native,
411 .target = target,
410412 };
411413
412414 standalone.addCases(cases);
......@@ -1136,6 +1138,8 @@ pub const StandaloneContext = struct {
11361138 test_index: usize,
11371139 test_filter: ?[]const u8,
11381140 modes: []const Mode,
1141 skip_non_native: bool,
1142 target: std.zig.CrossTarget,
11391143
11401144 pub fn addC(self: *StandaloneContext, root_src: []const u8) void {
11411145 self.addAllArgs(root_src, true);
......@@ -1145,10 +1149,10 @@ pub const StandaloneContext = struct {
11451149 self.addAllArgs(root_src, false);
11461150 }
11471151
1148 pub fn addBuildFile(self: *StandaloneContext, build_file: []const u8) void {
1152 pub fn addBuildFile(self: *StandaloneContext, build_file: []const u8, features: struct { build_modes: bool = false, cross_targets: bool = false }) void {
11491153 const b = self.b;
11501154
1151 const annotated_case_name = b.fmt("build {s} (Debug)", .{build_file});
1155 const annotated_case_name = b.fmt("build {s}", .{build_file});
11521156 if (self.test_filter) |filter| {
11531157 if (mem.indexOf(u8, annotated_case_name, filter) == null) return;
11541158 }
......@@ -1167,12 +1171,30 @@ pub const StandaloneContext = struct {
11671171 zig_args.append("--verbose") catch unreachable;
11681172 }
11691173
1170 const run_cmd = b.addSystemCommand(zig_args.items);
1174 if (features.cross_targets and !self.target.isNative()) {
1175 const target_arg = fmt.allocPrint(b.allocator, "-Dtarget={s}", .{self.target.zigTriple(b.allocator) catch unreachable}) catch unreachable;
1176 zig_args.append(target_arg) catch unreachable;
1177 }
1178
1179 const modes = if (features.build_modes) self.modes else &[1]Mode{.Debug};
1180 for (modes) |mode| {
1181 const arg = switch (mode) {
1182 .Debug => "",
1183 .ReleaseFast => "-Drelease-fast",
1184 .ReleaseSafe => "-Drelease-safe",
1185 .ReleaseSmall => "-Drelease-small",
1186 };
1187 const zig_args_base_len = zig_args.items.len;
1188 if (arg.len > 0)
1189 zig_args.append(arg) catch unreachable;
1190 defer zig_args.resize(zig_args_base_len) catch unreachable;
11711191
1172 const log_step = b.addLog("PASS {s}\n", .{annotated_case_name});
1173 log_step.step.dependOn(&run_cmd.step);
1192 const run_cmd = b.addSystemCommand(zig_args.items);
1193 const log_step = b.addLog("PASS {s} ({s})\n", .{ annotated_case_name, @tagName(mode) });
1194 log_step.step.dependOn(&run_cmd.step);
11741195
1175 self.step.dependOn(&log_step.step);
1196 self.step.dependOn(&log_step.step);
1197 }
11761198 }
11771199
11781200 pub fn addAllArgs(self: *StandaloneContext, root_src: []const u8, link_libc: bool) void {