summary refs log tree commit diff
path: root/build.zig
diff options
context:
space:
mode:
Diffstat (limited to 'build.zig')
-rw-r--r--build.zig91
1 files changed, 45 insertions, 46 deletions
diff --git a/build.zig b/build.zig
index 05f9e91..9f69257 100644
--- a/build.zig
+++ b/build.zig
@@ -16,63 +16,62 @@
 // You should have received a copy of the GNU General Public License
 // along with Black Shades.  If not, see <https://www.gnu.org/licenses/>.
 
-const std = @import("std");
-const InstallDirectoryOptions = std.build.InstallDirectoryOptions;
-const Builder = std.build.Builder;
+const Build = @import("std").Build;
+const Compile = Build.Step.Compile;
+const InstallDirectoryOptions = Build.InstallDirectoryOptions;
 
 const data = InstallDirectoryOptions{
-    .source_dir = "data",
+    .source_dir = .{ .path = "data" },
     .install_dir = .{ .custom = "share" },
     .install_subdir = "blackshades",
 };
 
-pub fn build(b: *Builder) void {
+pub fn build(b: *Build) void {
+    const bin = b.addExecutable(.{
+        .name = "blackshades",
+        .root_source_file = .{ .path = "src/main.zig" },
+        .target = b.standardTargetOptions(.{}),
+        .optimize = b.standardOptimizeOption(.{}),
+    });
+    bin.addIncludePath(.{ .path = "src" });
+    bin.addCSourceFiles(&.{
+        "src/Decals.cpp",
+        "src/GameDraw.cpp",
+        "src/GameInitDispose.cpp",
+        "src/GameLoop.cpp",
+        "src/GameTick.cpp",
+        "src/Globals.cpp",
+        "src/Models.cpp",
+        "src/Person.cpp",
+        "src/Quaternions.cpp",
+        "src/Skeleton.cpp",
+        "src/Sprites.cpp",
+    }, &.{ "--std=c++17", "-fno-sanitize=undefined" });
+
+    for ([_]struct { []const u8, []const u8 }{
+        .{ "gfz", "lib/gfz/src/gfz.zig" },
+        .{ "ini", "lib/ini/src/ini.zig" },
+        .{ "loca", "lib/loca/src/main.zig" },
+        .{ "qoi", "lib/qoi/src/qoi.zig" },
+        .{ "zeal", "lib/zeal/src/zeal.zig" },
+    }) |lib|
+        bin.addModule(lib[0], b.createModule(.{
+            .source_file = .{ .path = lib[1] },
+        }));
+    @import("lib/gfz/build.zig").link(bin);
+    @import("lib/zeal/build.zig").link(bin);
+    bin.linkSystemLibrary("GL");
+    bin.linkSystemLibrary("GLU");
+    bin.linkSystemLibrary("c++");
+
     b.installDirectory(data);
     const options = b.addOptions();
     const data_dir = b.getInstallPath(data.install_dir, data.install_subdir);
     options.addOption([]const u8, "data_dir", data_dir);
+    bin.addOptions("build_options", options);
+    b.installArtifact(bin);
 
-    const exe = b.addExecutable("blackshades", "src/main.zig");
-    exe.addIncludePath("src");
-
-    const cxxflags = [_][]const u8{ "--std=c++17", "-fno-sanitize=undefined" };
-    exe.addCSourceFile("src/Decals.cpp", &cxxflags);
-    exe.addCSourceFile("src/GameDraw.cpp", &cxxflags);
-    exe.addCSourceFile("src/GameInitDispose.cpp", &cxxflags);
-    exe.addCSourceFile("src/GameLoop.cpp", &cxxflags);
-    exe.addCSourceFile("src/GameTick.cpp", &cxxflags);
-    exe.addCSourceFile("src/Globals.cpp", &cxxflags);
-    exe.addCSourceFile("src/Models.cpp", &cxxflags);
-    exe.addCSourceFile("src/Person.cpp", &cxxflags);
-    exe.addCSourceFile("src/Quaternions.cpp", &cxxflags);
-    exe.addCSourceFile("src/Skeleton.cpp", &cxxflags);
-    exe.addCSourceFile("src/Sprites.cpp", &cxxflags);
-
-    exe.addPackagePath("gfz", "lib/gfz/src/gfz.zig");
-    @import("lib/gfz/build.zig").link(exe);
-    exe.addPackagePath("ini", "lib/ini/src/ini.zig");
-    exe.addPackagePath("loca", "lib/loca/src/main.zig");
-    exe.addPackagePath("qoi", "lib/qoi/src/qoi.zig");
-    exe.addPackagePath("zeal", "lib/zeal/src/zeal.zig");
-    @import("lib/zeal/build.zig").link(exe);
-
-    exe.linkSystemLibrary("GL");
-    exe.linkSystemLibrary("GLU");
-    exe.linkSystemLibrary("c++");
-
-    // Standard target options allows the person running `zig build` to choose
-    // what target to build for. Here we do not override the defaults, which
-    // means any target is allowed, and the default is native. Other options
-    // for restricting supported target set are available.
-    exe.setTarget(b.standardTargetOptions(.{}));
-
-    // Standard release options allow the person running `zig build` to select
-    // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
-    exe.setBuildMode(b.standardReleaseOptions());
-    exe.addOptions("build_options", options);
-    exe.install();
-
-    const run_cmd = exe.run();
+    const run_cmd = b.addRunArtifact(bin);
     run_cmd.step.dependOn(b.getInstallStep());
     if (b.args) |args|
         run_cmd.addArgs(args);