diff --git a/build.zig b/build.zig index bbc0c57b80..0466b79bf2 100644 --- a/build.zig +++ b/build.zig @@ -576,6 +576,7 @@ pub fn build(b: *std.Build) !void { enable_macos_sdk, enable_ios_sdk, enable_symlinks_windows, + skip_translate_c, )); test_step.dependOn(tests.addCAbiTests(b, .{ .test_target_filters = test_target_filters, diff --git a/test/standalone/build.zig b/test/standalone/build.zig index cf08c9b182..b284f25483 100644 --- a/test/standalone/build.zig +++ b/test/standalone/build.zig @@ -9,6 +9,7 @@ pub fn build(b: *std.Build) void { const enable_macos_sdk = b.option(bool, "enable_macos_sdk", "Run tests requiring presence of macOS SDK and frameworks") orelse enable_ios_sdk; const enable_symlinks_windows = b.option(bool, "enable_symlinks_windows", "Run tests requiring presence of symlinks on Windows") orelse false; const omit_symlinks = builtin.os.tag == .windows and !enable_symlinks_windows; + const skip_translate_c = b.option(bool, "skip_translate_c", "Test suite skips translate-c tests") orelse false; const simple_skip_debug = b.option(bool, "simple_skip_debug", "Simple tests skip debug builds") orelse false; const simple_skip_release_safe = b.option(bool, "simple_skip_release_safe", "Simple tests skip release-safe builds") orelse false; @@ -20,6 +21,7 @@ pub fn build(b: *std.Build) void { .skip_release_safe = simple_skip_release_safe, .skip_release_fast = simple_skip_release_fast, .skip_release_small = simple_skip_release_small, + .skip_translate_c = skip_translate_c, }); const simple_dep_step = simple_dep.builder.default_step; simple_dep_step.name = "standalone_test_cases.simple"; @@ -97,9 +99,12 @@ pub fn build(b: *std.Build) void { pkg.build_zig.requires_macos_sdk; const requires_symlinks = @hasDecl(pkg.build_zig, "requires_symlinks") and pkg.build_zig.requires_symlinks; + const requires_translate_c = @hasDecl(pkg.build_zig, "requires_translate_c") and + pkg.build_zig.requires_translate_c; if ((requires_symlinks and omit_symlinks) or (requires_macos_sdk and !enable_macos_sdk) or - (requires_ios_sdk and !enable_ios_sdk)) + (requires_ios_sdk and !enable_ios_sdk) or + (requires_translate_c and skip_translate_c)) { continue :add_dep_steps; } diff --git a/test/standalone/dep_lazypath/build.zig b/test/standalone/dep_lazypath/build.zig index 01b4be8fd4..9649a02500 100644 --- a/test/standalone/dep_lazypath/build.zig +++ b/test/standalone/dep_lazypath/build.zig @@ -1,5 +1,7 @@ const std = @import("std"); +pub const requires_translate_c = true; + pub fn build(b: *std.Build) void { const test_step = b.step("test", "Test it"); b.default_step = test_step; diff --git a/test/standalone/glibc_compat/build.zig b/test/standalone/glibc_compat/build.zig index 6c2c924cae..fd3bbaf084 100644 --- a/test/standalone/glibc_compat/build.zig +++ b/test/standalone/glibc_compat/build.zig @@ -1,6 +1,8 @@ const std = @import("std"); const builtin = @import("builtin"); +pub const requires_translate_c = true; + // To run executables linked against a specific glibc version, the // run-time glibc version needs to be new enough. Check the host's glibc // version. Note that this does not allow for translation/vm/emulation diff --git a/test/standalone/issue_794/build.zig b/test/standalone/issue_794/build.zig index 0f3f0a16f7..b0afe51bf4 100644 --- a/test/standalone/issue_794/build.zig +++ b/test/standalone/issue_794/build.zig @@ -1,5 +1,7 @@ const std = @import("std"); +pub const requires_translate_c = true; + pub fn build(b: *std.Build) void { const test_step = b.step("test", "Test it"); b.default_step = test_step; diff --git a/test/standalone/simple/build.zig b/test/standalone/simple/build.zig index 5bd76a3540..dbfca21f83 100644 --- a/test/standalone/simple/build.zig +++ b/test/standalone/simple/build.zig @@ -9,6 +9,7 @@ pub fn build(b: *std.Build) void { const skip_release_safe = b.option(bool, "skip_release_safe", "Skip release-safe builds") orelse false; const skip_release_fast = b.option(bool, "skip_release_fast", "Skip release-fast builds") orelse false; const skip_release_small = b.option(bool, "skip_release_small", "Skip release-small builds") orelse false; + const skip_translate_c = b.option(bool, "skip_translate_c", "Test suite skips translate-c tests") orelse false; var optimize_modes_buf: [4]std.builtin.OptimizeMode = undefined; var optimize_modes_len: usize = 0; @@ -36,6 +37,7 @@ pub fn build(b: *std.Build) void { if (case.os_filter) |os_tag| { if (os_tag != builtin.os.tag) continue; } + if (case.uses_translate_c and skip_translate_c) continue; const resolved_target = b.resolveTargetQuery(case.target); @@ -82,6 +84,7 @@ const Case = struct { is_exe: bool = true, /// Run only on this OS. os_filter: ?std.Target.Os.Tag = null, + uses_translate_c: bool = false, }; const cases = [_]Case{ @@ -93,6 +96,7 @@ const cases = [_]Case{ .src_path = "hello_world/hello_libc.zig", .link_libc = true, .all_modes = true, + .uses_translate_c = true, }, .{ .src_path = "cat/main.zig", @@ -108,7 +112,10 @@ const cases = [_]Case{ .os_tag = .freestanding, }, }, - .{ .src_path = "issue_12471/main.zig" }, + .{ + .src_path = "issue_12471/main.zig", + .uses_translate_c = true, + }, .{ .src_path = "guess_number/main.zig" }, .{ .src_path = "main_return_error/error_u8.zig" }, .{ .src_path = "main_return_error/error_u8_non_zero.zig" }, diff --git a/test/tests.zig b/test/tests.zig index ae30243e67..8bcdce7aad 100644 --- a/test/tests.zig +++ b/test/tests.zig @@ -1893,6 +1893,7 @@ pub fn addStandaloneTests( enable_macos_sdk: bool, enable_ios_sdk: bool, enable_symlinks_windows: bool, + skip_translate_c: bool, ) *Step { const step = b.step("test-standalone", "Run the standalone tests"); if (compilerHasPackageManager(b)) { @@ -1905,6 +1906,7 @@ pub fn addStandaloneTests( .simple_skip_release_safe = mem.indexOfScalar(OptimizeMode, optimize_modes, .ReleaseSafe) == null, .simple_skip_release_fast = mem.indexOfScalar(OptimizeMode, optimize_modes, .ReleaseFast) == null, .simple_skip_release_small = mem.indexOfScalar(OptimizeMode, optimize_modes, .ReleaseSmall) == null, + .skip_translate_c = skip_translate_c, }); const test_cases_dep_step = test_cases_dep.builder.default_step; test_cases_dep_step.name = b.dupe(test_cases_dep_name);