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 step = b.option([]const u8, "step", "") orelse "run";
10
11 if (std.mem.eql(u8, step, "run")) {
12 addExeStep(b, target, mode, "zig-unicode-ucd", "src/main.zig", "Run the app");
13 }
14 if (std.mem.eql(u8, step, "generate")) {
15 addExeStep(b, target, mode, "generate", "generate.zig", "Generate the bindings");
16 }
17
18 const tests = b.addTest(.{
19 .root_module = b.createModule(.{
20 .root_source_file = b.path("test.zig"),
21 .target = target,
22 .optimize = mode,
23 }),
24 });
25 deps.addAllTo(tests);
26 tests.use_llvm = !disable_llvm;
27 tests.use_lld = !disable_llvm;
28 b.getInstallStep().dependOn(&tests.step);
29
30 const test_step = b.step("test", "Run all library tests");
31 const tests_run = b.addRunArtifact(tests);
32 tests_run.setCwd(b.path("."));
33 tests_run.has_side_effects = true;
34 test_step.dependOn(&tests_run.step);
35}
36
37fn addExeStep(b: *std.Build, target: std.Build.ResolvedTarget, mode: std.builtin.OptimizeMode, name: []const u8, root_src: []const u8, sdescription: []const u8) void {
38 const exe = b.addExecutable(.{
39 .name = name,
40 .root_module = b.createModule(.{
41 .root_source_file = b.path(root_src),
42 .target = target,
43 .optimize = mode,
44 }),
45 });
46 deps.addAllTo(exe);
47 b.installArtifact(exe);
48
49 const cmd = b.addRunArtifact(exe);
50 cmd.step.dependOn(b.getInstallStep());
51 if (b.args) |args| {
52 cmd.addArgs(args);
53 }
54
55 const step = b.step("run", sdescription);
56 step.dependOn(&cmd.step);
57}