A SpaceTraders Agent
1const std = @import("std");
2const Build = std.Build;
3
4pub fn build(b: *Build) void {
5 const target = b.standardTargetOptions(.{});
6 const optimize = b.standardOptimizeOption(.{});
7
8 const known_folders = b.dependency("known_folders", .{}).module("known-folders");
9 const pretty = b.dependency("pretty", .{}).module("pretty");
10 const zqlite = b.dependency("zqlite", .{}).module("zqlite");
11
12 const sqlite3 = b.dependency("sqlite3", .{});
13
14 const mod_sqlite3 = b.createModule(.{
15 .target = target,
16 .optimize = optimize,
17 .link_libc = true,
18 });
19 mod_sqlite3.addIncludePath(sqlite3.path(""));
20 mod_sqlite3.addCSourceFile(.{
21 .file = sqlite3.path("sqlite3.c"),
22 .flags = &[_][]const u8{
23 "-DSQLITE_DQS=0",
24 "-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1",
25 "-DSQLITE_USE_ALLOCA=1",
26 "-DSQLITE_THREADSAFE=1",
27 "-DSQLITE_TEMP_STORE=3",
28 "-DSQLITE_ENABLE_API_ARMOR=1",
29 "-DSQLITE_ENABLE_UNLOCK_NOTIFY",
30 "-DSQLITE_DEFAULT_FILE_PERMISSIONS=0600",
31 "-DSQLITE_OMIT_DECLTYPE=1",
32 "-DSQLITE_OMIT_DEPRECATED=1",
33 "-DSQLITE_OMIT_LOAD_EXTENSION=1",
34 "-DSQLITE_OMIT_PROGRESS_CALLBACK=1",
35 "-DSQLITE_OMIT_SHARED_CACHE",
36 "-DSQLITE_OMIT_TRACE=1",
37 "-DSQLITE_OMIT_UTF16=1",
38 "-DHAVE_USLEEP=0",
39 },
40 });
41
42 const libsqlite = b.addLibrary(.{
43 .name = "sqlite3",
44 .linkage = .static,
45 .root_module = mod_sqlite3,
46 });
47
48 const meta = b.createModule(.{
49 .root_source_file = b.path("src/meta/root.zig"),
50 .target = target,
51 .optimize = optimize,
52 });
53
54 const st = b.addModule("st", .{
55 .root_source_file = b.path("src/st/root.zig"),
56 .target = target,
57 .optimize = optimize,
58 .imports = &.{
59 .{ .name = "meta", .module = meta },
60 .{ .name = "pretty", .module = pretty },
61 },
62 });
63
64 const agent = b.addModule("agent", .{
65 .root_source_file = b.path("src/agent/root.zig"),
66 .target = target,
67 .optimize = optimize,
68 .imports = &.{
69 .{ .name = "known-folders", .module = known_folders },
70 .{ .name = "zqlite", .module = zqlite },
71 // Modules
72 .{ .name = "st", .module = st },
73 .{ .name = "meta", .module = meta },
74 },
75 });
76 agent.linkLibrary(libsqlite);
77
78 const space = b.createModule(.{
79 .root_source_file = b.path("src/main.zig"),
80 .target = target,
81 .optimize = optimize,
82 .imports = &.{
83 .{ .name = "known-folders", .module = known_folders },
84 // Modules
85 .{ .name = "st", .module = st },
86 .{ .name = "agent", .module = agent },
87 .{ .name = "meta", .module = meta },
88 .{ .name = "pretty", .module = pretty },
89 },
90 });
91
92 const exe = b.addExecutable(.{
93 .root_module = space,
94 .name = "space",
95 });
96 b.installArtifact(exe);
97
98 const run_cmd = b.addRunArtifact(exe);
99 run_cmd.step.dependOn(b.getInstallStep());
100
101 if (b.args) |args| run_cmd.addArgs(args);
102
103 const run_step = b.step("run", "Run the app");
104 run_step.dependOn(&run_cmd.step);
105
106 const test_step = b.step("test", "Run tests");
107 addTest(b, test_step, "meta", meta);
108 addTest(b, test_step, "st", st);
109 addTest(b, test_step, "agent", agent);
110}
111
112fn addTest(b: *Build, step: *Build.Step, name: []const u8, root_module: *Build.Module) void {
113 const t = b.addTest(.{
114 .name = name,
115 .root_module = root_module,
116 });
117 const run_test = b.addRunArtifact(t);
118 step.dependOn(&run_test.step);
119}