diff options
| -rw-r--r-- | test/standalone/build.zig.zon | 3 | ||||
| -rw-r--r-- | test/standalone/tsan/build.zig | 59 | ||||
| -rw-r--r-- | test/standalone/tsan/main.zig | 3 |
3 files changed, 65 insertions, 0 deletions
diff --git a/test/standalone/build.zig.zon b/test/standalone/build.zig.zon index bdd059ab37..c57837c8e6 100644 --- a/test/standalone/build.zig.zon +++ b/test/standalone/build.zig.zon @@ -208,6 +208,9 @@ .run_cwd = .{ .path = "run_cwd", }, + .tsan = .{ + .path = "tsan", + }, }, .paths = .{ "build.zig", diff --git a/test/standalone/tsan/build.zig b/test/standalone/tsan/build.zig new file mode 100644 index 0000000000..85f5f3ae6d --- /dev/null +++ b/test/standalone/tsan/build.zig @@ -0,0 +1,59 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) !void { + const test_step = b.step("test", "Test the program"); + b.default_step = test_step; + + const is_macos = b.graph.host.result.os.tag == .macos; + + for ([_]struct { std.Target.Os.Tag, []const std.Target.Cpu.Arch }{ + // .s390x and mips64(el) fail to build + .{ .linux, &.{ .aarch64, .aarch64_be, .loongarch64, .powerpc64, .powerpc64le, .riscv64, .x86_64 } }, + .{ .macos, &.{ .x86_64, .aarch64 } }, + + // Missing system headers + // https://github.com/ziglang/zig/issues/24736 + // .{ .freebsd, &.{ .aarch64, .powerpc64, .powerpc64le, .riscv64, .x86_64 } }, + // https://github.com/ziglang/zig/issues/24737 + // .{ .netbsd, &.{ .aarch64, .aarch64_be, .x86_64 } }, + + // TSan doesn't have full support for windows yet. + // .{ .windows, &.{ .aarch64, .x86_64 } }, + }) |entry| { + switch (entry[0]) { + // compiling tsan on macos requires system headers that aren't present during cross-compilation + .macos => { + if (!is_macos) continue; + const target = b.resolveTargetQuery(.{}); + const exe = b.addExecutable(.{ + .name = b.fmt("tsan_{s}_{s}", .{ @tagName(entry[0]), @tagName(target.result.cpu.arch) }), + .root_module = b.createModule(.{ + .root_source_file = b.path("main.zig"), + .target = target, + .optimize = .Debug, + .sanitize_thread = true, + }), + }); + const install_exe = b.addInstallArtifact(exe, .{}); + test_step.dependOn(&install_exe.step); + }, + else => for (entry[1]) |arch| { + const target = b.resolveTargetQuery(.{ + .os_tag = entry[0], + .cpu_arch = arch, + }); + const exe = b.addExecutable(.{ + .name = b.fmt("tsan_{s}_{s}", .{ @tagName(entry[0]), @tagName(arch) }), + .root_module = b.createModule(.{ + .root_source_file = b.path("main.zig"), + .target = target, + .optimize = .Debug, + .sanitize_thread = true, + }), + }); + const install_exe = b.addInstallArtifact(exe, .{}); + test_step.dependOn(&install_exe.step); + }, + } + } +} diff --git a/test/standalone/tsan/main.zig b/test/standalone/tsan/main.zig new file mode 100644 index 0000000000..13ab026f85 --- /dev/null +++ b/test/standalone/tsan/main.zig @@ -0,0 +1,3 @@ +const std = @import("std"); + +pub fn main() !void {} |
