about summary refs log tree commit diff
path: root/build.zig
diff options
context:
space:
mode:
authorNguyễn Gia Phong <cnx@loang.net>2025-03-11 17:57:57 +0900
committerNguyễn Gia Phong <cnx@loang.net>2025-03-11 17:57:57 +0900
commitc5ad891da3d5cee9958a02d660db99a41fec111b (patch)
treea05a27125c1fa1acde723b4234dabf89997e4ead /build.zig
parent30f666f3ada479974353cdd7f3be9cdcec497fa1 (diff)
downloadblackshades-main.tar.gz
Port to Zig 0.14 HEAD main
Awaiting upstream libraries to support Zig 0.14 to purge the submodules:
* ini: https://github.com/ziglibs/ini/pull/14#issuecomment-2712560632
* qoi: https://github.com/ikskuh/zig-qoi/pull/14
Diffstat (limited to 'build.zig')
-rw-r--r--build.zig74
1 files changed, 32 insertions, 42 deletions
diff --git a/build.zig b/build.zig
index 8c5c4c8..97957bd 100644
--- a/build.zig
+++ b/build.zig
@@ -1,5 +1,5 @@
 // Build recipe
-// Copyright (C) 2021-2023  Nguyễn Gia Phong
+// Copyright (C) 2021-2023, 2025  Nguyễn Gia Phong
 //
 // This file is part of Black Shades.
 //
@@ -18,61 +18,51 @@
 
 const Build = @import("std").Build;
 const Compile = Build.Step.Compile;
-const InstallDirectoryOptions = Build.InstallDirectoryOptions;
-
-const data = InstallDirectoryOptions{
-    .source_dir = .{ .path = "data" },
-    .install_dir = .{ .custom = "share" },
-    .install_subdir = "blackshades",
-};
 
 pub fn build(b: *Build) void {
-    const bin = b.addExecutable(.{
-        .name = "blackshades",
-        .root_source_file = .{ .path = "src/main.zig" },
+    const mod = b.createModule(.{
+        .root_source_file = b.path("src/main.zig"),
         .target = b.standardTargetOptions(.{}),
         .optimize = b.standardOptimizeOption(.{}),
     });
-    bin.addIncludePath(.{ .path = "src" });
-    bin.addCSourceFiles(&.{
-        "src/GameDraw.cpp",
-        "src/GameInitDispose.cpp",
-        "src/GameLoop.cpp",
-        "src/GameTick.cpp",
-        "src/Globals.cpp",
-        "src/Person.cpp",
-        "src/Skeleton.cpp",
-        "src/Sprites.cpp",
-    }, &.{ "--std=c++17", "-Wall", "-Werror", "-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++");
+    mod.addIncludePath(b.path("src"));
+    mod.addCSourceFiles(.{
+        .files = &.{
+            "src/GameDraw.cpp",
+            "src/GameInitDispose.cpp",
+            "src/GameLoop.cpp",
+            "src/GameTick.cpp",
+            "src/Globals.cpp",
+            "src/Person.cpp",
+            "src/Skeleton.cpp",
+            "src/Sprites.cpp",
+        },
+        .flags = &.{ "--std=c++17", "-Wall", "-Werror" },
+    });
+    mod.linkSystemLibrary("GL", .{});
+    mod.linkSystemLibrary("GLU", .{});
+    mod.linkSystemLibrary("c++", .{});
 
+    inline for (.{ "gfz", "ini", "known-folders", "qoi", "zeal" }) |lib|
+        mod.addImport(lib, b.dependency(lib, .{}).module(lib));
+    const data = Build.Step.InstallDir.Options{
+        .source_dir = b.path("data"),
+        .install_dir = .{ .custom = "share" },
+        .install_subdir = "blackshades",
+    };
     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);
+    mod.addOptions("build_options", options);
 
+    const bin = b.addExecutable(.{ .name = "blackshades", .root_module = mod });
+    b.installArtifact(bin);
     const run_cmd = b.addRunArtifact(bin);
-    run_cmd.step.dependOn(b.getInstallStep());
+    //run_cmd.step.dependOn(b.getInstallStep());
     if (b.args) |args|
         run_cmd.addArgs(args);
 
-    const run_step = b.step("run", "Run the app");
+    const run_step = b.step("run", "Run the game");
     run_step.dependOn(&run_cmd.step);
 }