地圖 (Jido) is a lightweight Unix TUI file explorer designed for speed and simplicity.
at main 132 lines 4.9 kB view raw
1const std = @import("std"); 2const builtin = @import("builtin"); 3 4///Must match the `version` in `build.zig.zon`. 5const version = std.SemanticVersion{ .major = 1, .minor = 4, .patch = 0 }; 6 7const targets: []const std.Target.Query = &.{ 8 .{ .cpu_arch = .aarch64, .os_tag = .macos }, 9 .{ .cpu_arch = .aarch64, .os_tag = .linux }, 10 .{ .cpu_arch = .x86_64, .os_tag = .linux }, 11 .{ .cpu_arch = .x86_64, .os_tag = .macos }, 12}; 13 14fn createExe( 15 b: *std.Build, 16 exe_name: []const u8, 17 target: std.Build.ResolvedTarget, 18 optimize: std.builtin.OptimizeMode, 19 build_options: *std.Build.Module, 20) !*std.Build.Step.Compile { 21 const libvaxis = b.dependency("vaxis", .{ .target = target, .optimize = optimize }).module("vaxis"); 22 const fuzzig = b.dependency("fuzzig", .{ .target = target, .optimize = optimize }).module("fuzzig"); 23 const zeit = b.dependency("zeit", .{ .target = target, .optimize = optimize }).module("zeit"); 24 const zuid = b.dependency("zuid", .{ .target = target, .optimize = optimize }).module("zuid"); 25 26 const exe = b.addExecutable(.{ 27 .name = exe_name, 28 .root_module = b.createModule(.{ 29 .root_source_file = b.path("src/main.zig"), 30 .target = target, 31 .optimize = optimize, 32 }), 33 }); 34 35 exe.root_module.addImport("options", build_options); 36 exe.root_module.addImport("vaxis", libvaxis); 37 exe.root_module.addImport("fuzzig", fuzzig); 38 exe.root_module.addImport("zeit", zeit); 39 exe.root_module.addImport("zuid", zuid); 40 41 return exe; 42} 43 44pub fn build(b: *std.Build) !void { 45 const target = b.standardTargetOptions(.{}); 46 const optimize = b.standardOptimizeOption(.{}); 47 48 const build_options = b.addOptions(); 49 build_options.step.name = "build options"; 50 build_options.addOption(std.SemanticVersion, "version", version); 51 const build_options_module = build_options.createModule(); 52 53 const build_all = b.option(bool, "all-targets", "Build all targets in ReleaseSafe mode.") orelse false; 54 if (build_all) { 55 try buildTargets(b, build_options_module); 56 return; 57 } 58 59 const exe = try createExe(b, "jido", target, optimize, build_options_module); 60 b.installArtifact(exe); 61 62 const run_cmd = b.addRunArtifact(exe); 63 run_cmd.step.dependOn(b.getInstallStep()); 64 if (b.args) |args| { 65 run_cmd.addArgs(args); 66 } 67 const run_step = b.step("run", "Run the app"); 68 run_step.dependOn(&run_cmd.step); 69 70 const libvaxis = b.dependency("vaxis", .{ .target = target, .optimize = optimize }).module("vaxis"); 71 const fuzzig = b.dependency("fuzzig", .{ .target = target, .optimize = optimize }).module("fuzzig"); 72 const zuid = b.dependency("zuid", .{ .target = target, .optimize = optimize }).module("zuid"); 73 const zeit = b.dependency("zeit", .{ .target = target, .optimize = optimize }).module("zeit"); 74 const test_step = b.step("test", "Run unit tests"); 75 const unit_tests = b.addTest(.{ 76 .root_module = b.createModule(.{ 77 .root_source_file = b.path("src/main.zig"), 78 .target = target, 79 .optimize = optimize, 80 }), 81 }); 82 unit_tests.root_module.addImport("options", build_options_module); 83 unit_tests.root_module.addImport("vaxis", libvaxis); 84 unit_tests.root_module.addImport("fuzzig", fuzzig); 85 unit_tests.root_module.addImport("zeit", zeit); 86 unit_tests.root_module.addImport("zuid", zuid); 87 88 const run_unit_tests = b.addRunArtifact(unit_tests); 89 test_step.dependOn(&run_unit_tests.step); 90 91 const integration_tests = &[_][]const u8{ 92 "src/test_navigation.zig", 93 "src/test_file_operations.zig", 94 }; 95 96 for (integration_tests) |test_file| { 97 const test_exe = b.addTest(.{ 98 .root_module = b.createModule(.{ 99 .root_source_file = b.path(test_file), 100 .target = target, 101 .optimize = optimize, 102 }), 103 }); 104 test_exe.root_module.addImport("vaxis", libvaxis); 105 test_exe.root_module.addImport("fuzzig", fuzzig); 106 test_exe.root_module.addImport("zuid", zuid); 107 test_exe.root_module.addImport("zeit", zeit); 108 test_exe.root_module.addImport("options", build_options_module); 109 110 const run_test = b.addRunArtifact(test_exe); 111 test_step.dependOn(&run_test.step); 112 } 113} 114 115fn buildTargets(b: *std.Build, build_options: *std.Build.Module) !void { 116 for (targets) |t| { 117 const target = b.resolveTargetQuery(t); 118 119 const exe = try createExe(b, "jido", target, .ReleaseSafe, build_options); 120 b.installArtifact(exe); 121 122 const target_output = b.addInstallArtifact(exe, .{ 123 .dest_dir = .{ 124 .override = .{ 125 .custom = try t.zigTriple(b.allocator), 126 }, 127 }, 128 }); 129 130 b.getInstallStep().dependOn(&target_output.step); 131 } 132}