1const std = @import("std");
2const deps = @import("./deps.zig");
3
4pub fn build(b: *std.Build) void {
5 const target = b.standardTargetOptions(.{});
6 const mode = b.option(std.builtin.OptimizeMode, "mode", "") orelse .Debug;
7 const disable_llvm = b.option(bool, "disable_llvm", "use the non-llvm zig codegen") orelse false;
8
9 const mod = b.addModule("tracer", .{ .root_source_file = b.path("src/mod.zig") });
10
11 addTest(b, target, mode, disable_llvm, mod, 0);
12 addTest(b, target, mode, disable_llvm, mod, 1);
13 addTest(b, target, mode, disable_llvm, mod, 2);
14 addTest(b, target, mode, disable_llvm, mod, 3);
15 addTest(b, target, mode, disable_llvm, mod, 4);
16
17 const test_step = b.step("test", "Run all library tests");
18 test_step.dependOn(b.getInstallStep());
19}
20
21fn addTest(b: *std.Build, target: std.Build.ResolvedTarget, mode: std.builtin.OptimizeMode, disable_llvm: bool, mod: *std.Build.Module, comptime backend: u8) void {
22 _ = mod;
23 const options = b.addOptions();
24 options.addOption(u8, "backend", backend);
25 options.addOption([]const u8, "version", std.mem.trimRight(u8, b.run(&.{ "git", "describe", "--tags" }), "\n"));
26
27 const exe = b.addExecutable(.{
28 .name = "test" ++ std.fmt.comptimePrint("{d}", .{backend}),
29 .root_module = b.createModule(.{
30 .root_source_file = b.path("src/main.zig"),
31 .target = target,
32 .optimize = mode,
33 }),
34 });
35 deps.addAllTo(exe);
36 exe.root_module.link_libc = true;
37 exe.root_module.addImport("build_options", options.createModule());
38 exe.use_llvm = !disable_llvm;
39 exe.use_lld = !disable_llvm;
40 b.installArtifact(exe);
41
42 const run_t = b.addRunArtifact(exe);
43 run_t.setCwd(b.path("."));
44 run_t.has_side_effects = true;
45 b.getInstallStep().dependOn(&run_t.step);
46}