test: Enable -Dtest-target-filter=... to work for test-cases and test-translate-c.

This commit is contained in:
Alex Rønne Petersen 2024-11-23 18:00:00 +01:00
parent 9c7776a938
commit 2a29381117
No known key found for this signature in database
4 changed files with 35 additions and 10 deletions

View File

@ -442,7 +442,7 @@ pub fn build(b: *std.Build) !void {
test_step.dependOn(check_fmt); test_step.dependOn(check_fmt);
const test_cases_step = b.step("test-cases", "Run the main compiler test cases"); const test_cases_step = b.step("test-cases", "Run the main compiler test cases");
try tests.addCases(b, test_cases_step, test_filters, target, .{ try tests.addCases(b, test_cases_step, test_filters, test_target_filters, target, .{
.skip_translate_c = skip_translate_c, .skip_translate_c = skip_translate_c,
.skip_run_translated_c = skip_run_translated_c, .skip_run_translated_c = skip_run_translated_c,
}, .{ }, .{

View File

@ -539,13 +539,14 @@ pub fn lowerToTranslateCSteps(
b: *std.Build, b: *std.Build,
parent_step: *std.Build.Step, parent_step: *std.Build.Step,
test_filters: []const []const u8, test_filters: []const []const u8,
test_target_filters: []const []const u8,
target: std.Build.ResolvedTarget, target: std.Build.ResolvedTarget,
translate_c_options: TranslateCOptions, translate_c_options: TranslateCOptions,
) void { ) void {
const tests = @import("../tests.zig"); const tests = @import("../tests.zig");
const test_translate_c_step = b.step("test-translate-c", "Run the C translation tests"); const test_translate_c_step = b.step("test-translate-c", "Run the C translation tests");
if (!translate_c_options.skip_translate_c) { if (!translate_c_options.skip_translate_c) {
tests.addTranslateCTests(b, test_translate_c_step, test_filters); tests.addTranslateCTests(b, test_translate_c_step, test_filters, test_target_filters);
parent_step.dependOn(test_translate_c_step); parent_step.dependOn(test_translate_c_step);
} }
@ -620,6 +621,7 @@ pub fn lowerToBuildSteps(
b: *std.Build, b: *std.Build,
parent_step: *std.Build.Step, parent_step: *std.Build.Step,
test_filters: []const []const u8, test_filters: []const []const u8,
test_target_filters: []const []const u8,
) void { ) void {
const host = std.zig.system.resolveTargetQuery(.{}) catch |err| const host = std.zig.system.resolveTargetQuery(.{}) catch |err|
std.debug.panic("unable to detect native host: {s}\n", .{@errorName(err)}); std.debug.panic("unable to detect native host: {s}\n", .{@errorName(err)});
@ -648,6 +650,14 @@ pub fn lowerToBuildSteps(
if (std.mem.indexOf(u8, case.name, test_filter)) |_| break; if (std.mem.indexOf(u8, case.name, test_filter)) |_| break;
} else if (test_filters.len > 0) continue; } else if (test_filters.len > 0) continue;
const triple_txt = case.target.result.zigTriple(b.allocator) catch @panic("OOM");
if (test_target_filters.len > 0) {
for (test_target_filters) |filter| {
if (std.mem.indexOf(u8, triple_txt, filter) != null) break;
} else continue;
}
const writefiles = b.addWriteFiles(); const writefiles = b.addWriteFiles();
var file_sources = std.StringHashMap(std.Build.LazyPath).init(b.allocator); var file_sources = std.StringHashMap(std.Build.LazyPath).init(b.allocator);
defer file_sources.deinit(); defer file_sources.deinit();
@ -740,7 +750,7 @@ pub fn lowerToBuildSteps(
"--", "--",
"-lc", "-lc",
"-target", "-target",
case.target.result.zigTriple(b.allocator) catch @panic("OOM"), triple_txt,
}); });
run_c.addArtifactArg(artifact); run_c.addArtifactArg(artifact);
break :run_step run_c; break :run_step run_c;

View File

@ -2,6 +2,7 @@ b: *std.Build,
step: *std.Build.Step, step: *std.Build.Step,
test_index: usize, test_index: usize,
test_filters: []const []const u8, test_filters: []const []const u8,
test_target_filters: []const []const u8,
const TestCase = struct { const TestCase = struct {
name: []const u8, name: []const u8,
@ -92,6 +93,16 @@ pub fn addCase(self: *TranslateCContext, case: *const TestCase) void {
if (mem.indexOf(u8, annotated_case_name, test_filter)) |_| break; if (mem.indexOf(u8, annotated_case_name, test_filter)) |_| break;
} else if (self.test_filters.len > 0) return; } else if (self.test_filters.len > 0) return;
const target = b.resolveTargetQuery(case.target);
if (self.test_target_filters.len > 0) {
const triple_txt = target.result.zigTriple(b.allocator) catch @panic("OOM");
for (self.test_target_filters) |filter| {
if (std.mem.indexOf(u8, triple_txt, filter) != null) break;
} else return;
}
const write_src = b.addWriteFiles(); const write_src = b.addWriteFiles();
const first_src = case.sources.items[0]; const first_src = case.sources.items[0];
const root_source_file = write_src.add(first_src.filename, first_src.source); const root_source_file = write_src.add(first_src.filename, first_src.source);
@ -101,7 +112,7 @@ pub fn addCase(self: *TranslateCContext, case: *const TestCase) void {
const translate_c = b.addTranslateC(.{ const translate_c = b.addTranslateC(.{
.root_source_file = root_source_file, .root_source_file = root_source_file,
.target = b.resolveTargetQuery(case.target), .target = target,
.optimize = .Debug, .optimize = .Debug,
}); });

View File

@ -1237,18 +1237,22 @@ pub fn addAssembleAndLinkTests(b: *std.Build, test_filters: []const []const u8,
return cases.step; return cases.step;
} }
pub fn addTranslateCTests(b: *std.Build, parent_step: *std.Build.Step, test_filters: []const []const u8) void { pub fn addTranslateCTests(
b: *std.Build,
parent_step: *std.Build.Step,
test_filters: []const []const u8,
test_target_filters: []const []const u8,
) void {
const cases = b.allocator.create(TranslateCContext) catch @panic("OOM"); const cases = b.allocator.create(TranslateCContext) catch @panic("OOM");
cases.* = TranslateCContext{ cases.* = TranslateCContext{
.b = b, .b = b,
.step = parent_step, .step = parent_step,
.test_index = 0, .test_index = 0,
.test_filters = test_filters, .test_filters = test_filters,
.test_target_filters = test_target_filters,
}; };
translate_c.addCases(cases); translate_c.addCases(cases);
return;
} }
pub fn addRunTranslatedCTests( pub fn addRunTranslatedCTests(
@ -1267,8 +1271,6 @@ pub fn addRunTranslatedCTests(
}; };
run_translated_c.addCases(cases); run_translated_c.addCases(cases);
return;
} }
const ModuleTestOptions = struct { const ModuleTestOptions = struct {
@ -1565,6 +1567,7 @@ pub fn addCases(
b: *std.Build, b: *std.Build,
parent_step: *Step, parent_step: *Step,
test_filters: []const []const u8, test_filters: []const []const u8,
test_target_filters: []const []const u8,
target: std.Build.ResolvedTarget, target: std.Build.ResolvedTarget,
translate_c_options: @import("src/Cases.zig").TranslateCOptions, translate_c_options: @import("src/Cases.zig").TranslateCOptions,
build_options: @import("cases.zig").BuildOptions, build_options: @import("cases.zig").BuildOptions,
@ -1580,12 +1583,13 @@ pub fn addCases(
cases.addFromDir(dir, b); cases.addFromDir(dir, b);
try @import("cases.zig").addCases(&cases, build_options, b); try @import("cases.zig").addCases(&cases, build_options, b);
cases.lowerToTranslateCSteps(b, parent_step, test_filters, target, translate_c_options); cases.lowerToTranslateCSteps(b, parent_step, test_filters, test_target_filters, target, translate_c_options);
cases.lowerToBuildSteps( cases.lowerToBuildSteps(
b, b,
parent_step, parent_step,
test_filters, test_filters,
test_target_filters,
); );
} }