const std = @import("std"); pub fn build(b: *std.Build) void { // When built by Kepr Builds, KEPR_TARGET carries the cross-compile triple // so the same command works across all platforms without shell expansion. const target = if (b.graph.environ_map.get("KEPR_TARGET")) |t| b.resolveTargetQuery(std.Target.Query.parse( .{ .arch_os_abi = t }, ) catch std.Target.Query{}) else b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); // VERSION file → build_options.version, accessible from version.zig. const version_raw = @embedFile("VERSION"); const version = std.mem.trim(u8, version_raw, " \r\n\t"); const options = b.addOptions(); options.addOption([]const u8, "version", version); const exe = b.addExecutable(.{ .name = "nina", .root_module = b.createModule(.{ .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }), }); exe.root_module.addOptions("build_options", options); b.installArtifact(exe); const run_cmd = b.addRunArtifact(exe); run_cmd.step.dependOn(b.getInstallStep()); if (b.args) |args| run_cmd.addArgs(args); const run_step = b.step("run", "Run nina"); run_step.dependOn(&run_cmd.step); const tests = b.addTest(.{ .root_module = b.createModule(.{ .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }), }); tests.root_module.addOptions("build_options", options); const test_step = b.step("test", "Run unit tests"); test_step.dependOn(&b.addRunArtifact(tests).step); }