-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.zig
100 lines (85 loc) · 3.55 KB
/
build.zig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
const std = @import("std");
// const zon: struct { version: []const u8 } = @import("./build.zig.zon");
const name = "zigbar";
const version = std.SemanticVersion.parse("0.6.0") catch unreachable;
const targets: []const std.Target.Query = &.{
.{ .cpu_arch = .aarch64, .os_tag = .macos },
.{ .cpu_arch = .aarch64, .os_tag = .linux },
.{ .cpu_arch = .x86_64, .os_tag = .linux },
};
pub fn build(b: *std.Build) !void {
const optimize = b.standardOptimizeOption(.{});
const tarball = b.option(
bool,
"tarball",
"Generate tarball with signature",
) orelse false;
for (targets) |t| {
const triple = try t.zigTriple(b.allocator);
const target = b.resolveTargetQuery(t);
const minizign = b.dependency("minizign", .{
.target = target,
.optimize = optimize,
});
const mod = b.createModule(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});
const options = b.addOptions();
options.addOption([]const u8, "name", name);
options.addOption([]const u8, "triple", triple);
options.addOption(std.SemanticVersion, "version", version);
options.addOption([]const u8, "minisign_public_key", "RWRdnhTwGE7SUzRJwb+f48phQN3hyxCfOXXpOBBFq9L1BwFU51JlXly2");
mod.addOptions("config", options);
mod.addImport("minizign", minizign.module("minizign"));
const exe = b.addExecutable(.{
.name = name,
.root_module = mod,
});
const exe_dir = exe.getEmittedBinDirectory();
const out = b.addInstallArtifact(exe, .{
.dest_dir = .{
.override = .{ .custom = triple },
},
});
b.getInstallStep().dependOn(&out.step);
if (tarball) {
// Archive executable
const tar_name = try std.mem.concat(b.allocator, u8, &.{ name, "-", triple, ".tar.gz" });
const tar = b.addSystemCommand(&.{"tar"});
tar.setCwd(exe_dir);
tar.addArgs(&.{"-czf"});
tar.addArg(tar_name);
tar.addArg(exe.out_filename);
tar.step.dependOn(&out.step);
// Sign archive file
const sign_name = try std.mem.concat(b.allocator, u8, &.{ tar_name, ".minisig" });
const sign = b.addSystemCommand(&.{"minisign"});
sign.addPrefixedFileArg("-Sm", exe_dir.path(b, tar_name));
sign.addPrefixedFileArg("-x", exe_dir.path(b, sign_name));
sign.addPrefixedFileArg("-s", b.path("minisign.key"));
sign.step.dependOn(&tar.step);
const install_tar = b.addInstallFile(
exe_dir.path(b, tar_name),
b.pathJoin(&.{ triple, tar_name }),
);
install_tar.step.dependOn(&tar.step);
b.getInstallStep().dependOn(&install_tar.step);
const install_sign = b.addInstallFile(
exe_dir.path(b, sign_name),
b.pathJoin(&.{ triple, sign_name }),
);
install_sign.step.dependOn(&sign.step);
b.getInstallStep().dependOn(&install_sign.step);
}
// Use `zig build run` for debug
if (optimize == .Debug and t.os_tag == .macos) {
const run_cmd = b.addRunArtifact(exe);
run_cmd.addArgs(b.args orelse &.{"prompt"});
run_cmd.step.dependOn(b.getInstallStep());
const run_step = b.step("run", "Run");
run_step.dependOn(&run_cmd.step);
}
}
}