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 {...@@ -328,7 +328,7 @@ pub fn build(b: *Builder) !void {
328 ));328 ));
329329
330 toolchain_step.dependOn(tests.addCompareOutputTests(b, test_filter, modes));330 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));
332 toolchain_step.dependOn(tests.addStackTraceTests(b, test_filter, modes));332 toolchain_step.dependOn(tests.addStackTraceTests(b, test_filter, modes));
333 toolchain_step.dependOn(tests.addCliTests(b, test_filter, modes));333 toolchain_step.dependOn(tests.addCliTests(b, test_filter, modes));
334 toolchain_step.dependOn(tests.addAssembleAndLinkTests(b, test_filter, modes));334 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 {...@@ -8,26 +8,26 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
8 cases.add("test/standalone/guess_number/main.zig");8 cases.add("test/standalone/guess_number/main.zig");
9 cases.add("test/standalone/main_return_error/error_u8.zig");9 cases.add("test/standalone/main_return_error/error_u8.zig");
10 cases.add("test/standalone/main_return_error/error_u8_non_zero.zig");10 cases.add("test/standalone/main_return_error/error_u8_non_zero.zig");
11 cases.addBuildFile("test/standalone/main_pkg_path/build.zig");11 cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{});
12 cases.addBuildFile("test/standalone/shared_library/build.zig");12 cases.addBuildFile("test/standalone/shared_library/build.zig", .{});
13 cases.addBuildFile("test/standalone/mix_o_files/build.zig");13 cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{});
14 cases.addBuildFile("test/standalone/global_linkage/build.zig");14 cases.addBuildFile("test/standalone/global_linkage/build.zig", .{});
15 cases.addBuildFile("test/standalone/static_c_lib/build.zig");15 cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{});
16 cases.addBuildFile("test/standalone/link_interdependent_static_c_libs/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");17 cases.addBuildFile("test/standalone/link_static_lib_as_system_lib/build.zig", .{});
18 cases.addBuildFile("test/standalone/issue_339/build.zig");18 cases.addBuildFile("test/standalone/issue_339/build.zig", .{});
19 cases.addBuildFile("test/standalone/issue_8550/build.zig");19 cases.addBuildFile("test/standalone/issue_8550/build.zig", .{});
20 cases.addBuildFile("test/standalone/issue_794/build.zig");20 cases.addBuildFile("test/standalone/issue_794/build.zig", .{});
21 cases.addBuildFile("test/standalone/issue_5825/build.zig");21 cases.addBuildFile("test/standalone/issue_5825/build.zig", .{});
22 cases.addBuildFile("test/standalone/pkg_import/build.zig");22 cases.addBuildFile("test/standalone/pkg_import/build.zig", .{});
23 cases.addBuildFile("test/standalone/use_alias/build.zig");23 cases.addBuildFile("test/standalone/use_alias/build.zig", .{});
24 cases.addBuildFile("test/standalone/brace_expansion/build.zig");24 cases.addBuildFile("test/standalone/brace_expansion/build.zig", .{});
25 cases.addBuildFile("test/standalone/empty_env/build.zig");25 cases.addBuildFile("test/standalone/empty_env/build.zig", .{});
26 cases.addBuildFile("test/standalone/issue_7030/build.zig");26 cases.addBuildFile("test/standalone/issue_7030/build.zig", .{});
27 if (std.Target.current.os.tag != .wasi) {27 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", .{});
29 }29 }
30 if (std.Target.current.cpu.arch == .x86_64) { // TODO add C ABI support for other architectures30 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", .{});
32 }32 }
33}33}
test/tests.zig+29-7
...@@ -399,7 +399,7 @@ pub fn addCompileErrorTests(b: *build.Builder, test_filter: ?[]const u8, modes:...@@ -399,7 +399,7 @@ pub fn addCompileErrorTests(b: *build.Builder, test_filter: ?[]const u8, modes:
399 return cases.step;399 return cases.step;
400}400}
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 {
403 const cases = b.allocator.create(StandaloneContext) catch unreachable;403 const cases = b.allocator.create(StandaloneContext) catch unreachable;
404 cases.* = StandaloneContext{404 cases.* = StandaloneContext{
405 .b = b,405 .b = b,
...@@ -407,6 +407,8 @@ pub fn addStandaloneTests(b: *build.Builder, test_filter: ?[]const u8, modes: []...@@ -407,6 +407,8 @@ pub fn addStandaloneTests(b: *build.Builder, test_filter: ?[]const u8, modes: []
407 .test_index = 0,407 .test_index = 0,
408 .test_filter = test_filter,408 .test_filter = test_filter,
409 .modes = modes,409 .modes = modes,
410 .skip_non_native = skip_non_native,
411 .target = target,
410 };412 };
411413
412 standalone.addCases(cases);414 standalone.addCases(cases);
...@@ -1136,6 +1138,8 @@ pub const StandaloneContext = struct {...@@ -1136,6 +1138,8 @@ pub const StandaloneContext = struct {
1136 test_index: usize,1138 test_index: usize,
1137 test_filter: ?[]const u8,1139 test_filter: ?[]const u8,
1138 modes: []const Mode,1140 modes: []const Mode,
1141 skip_non_native: bool,
1142 target: std.zig.CrossTarget,
11391143
1140 pub fn addC(self: *StandaloneContext, root_src: []const u8) void {1144 pub fn addC(self: *StandaloneContext, root_src: []const u8) void {
1141 self.addAllArgs(root_src, true);1145 self.addAllArgs(root_src, true);
...@@ -1145,10 +1149,10 @@ pub const StandaloneContext = struct {...@@ -1145,10 +1149,10 @@ pub const StandaloneContext = struct {
1145 self.addAllArgs(root_src, false);1149 self.addAllArgs(root_src, false);
1146 }1150 }
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 {
1149 const b = self.b;1153 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});
1152 if (self.test_filter) |filter| {1156 if (self.test_filter) |filter| {
1153 if (mem.indexOf(u8, annotated_case_name, filter) == null) return;1157 if (mem.indexOf(u8, annotated_case_name, filter) == null) return;
1154 }1158 }
...@@ -1167,12 +1171,30 @@ pub const StandaloneContext = struct {...@@ -1167,12 +1171,30 @@ pub const StandaloneContext = struct {
1167 zig_args.append("--verbose") catch unreachable;1171 zig_args.append("--verbose") catch unreachable;
1168 }1172 }
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});1192 const run_cmd = b.addSystemCommand(zig_args.items);
1173 log_step.step.dependOn(&run_cmd.step);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 }
1176 }1198 }
11771199
1178 pub fn addAllArgs(self: *StandaloneContext, root_src: []const u8, link_libc: bool) void {1200 pub fn addAllArgs(self: *StandaloneContext, root_src: []const u8, link_libc: bool) void {