From ef0a20c1f8e89dfd28a6f53cd2d84fe6033a0781 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 10 Apr 2026 15:17:39 +0300 Subject: [PATCH] build: move map & rng logic to their own libraries Signed-off-by: NotAShelf Change-Id: I1802469f3baff4576f61accfb5a197d86a6a6964 --- build.zig | 72 ++++++++++++++++++++++++++++++++------- {src => libs/map}/map.c | 2 +- {src => libs/map}/map.h | 0 {src => libs/map}/utils.c | 0 {src => libs/map}/utils.h | 0 {src => libs/rng}/rng.c | 0 {src => libs/rng}/rng.h | 0 src/enemy.c | 4 +-- src/items.c | 4 +-- src/main.c | 4 +-- src/movement.c | 2 +- 11 files changed, 68 insertions(+), 20 deletions(-) rename {src => libs/map}/map.c (99%) rename {src => libs/map}/map.h (100%) rename {src => libs/map}/utils.c (100%) rename {src => libs/map}/utils.h (100%) rename {src => libs/rng}/rng.c (100%) rename {src => libs/rng}/rng.h (100%) diff --git a/build.zig b/build.zig index 4d6f6b2..9b56898 100644 --- a/build.zig +++ b/build.zig @@ -4,6 +4,56 @@ pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); + const c_flags = [_][]const u8{ + "-std=c99", + "-Wall", + "-Wextra", + "-O2", + }; + + // RNG library + const rng_lib = b.addLibrary(.{ + .name = "rng", + .root_module = b.createModule(.{ + .target = target, + .optimize = optimize, + .link_libc = true, + }), + }); + rng_lib.addCSourceFiles(.{ + .files = &[_][]const u8{"libs/rng/rng.c"}, + .flags = &c_flags, + }); + rng_lib.addIncludePath(b.path("libs/rng")); + + // Map library + const map_lib = b.addLibrary(.{ + .name = "map", + .root_module = b.createModule(.{ + .target = target, + .optimize = optimize, + .link_libc = true, + }), + }); + map_lib.addCSourceFiles(.{ + .files = &[_][]const u8{ + "libs/map/map.c", + "libs/map/utils.c", + }, + .flags = &c_flags, + }); + // map.h includes common.h and settings.h which live in src/ + map_lib.addIncludePath(b.path("src")); + // map.c includes rng/rng.h via libs/ root + map_lib.addIncludePath(b.path("libs")); + // utils.h is co-located with map.c + map_lib.addIncludePath(b.path("libs/map")); + map_lib.linkLibrary(rng_lib); + // map.c doesn't call raylib, but common.h (via map.h) includes raylib.h; + // add the include path without linking the library into the static archive + const raylib_include = std.mem.trim(u8, b.run(&.{ "pkg-config", "--variable=includedir", "raylib" }), "\n "); + map_lib.addSystemIncludePath(.{ .cwd_relative = raylib_include }); + // Zig combat library const combat_lib = b.addLibrary(.{ .name = "combat", @@ -14,29 +64,22 @@ pub fn build(b: *std.Build) void { .link_libc = true, }), }); + // common.h and settings.h live in src/; rng.h exposed bare from libs/rng combat_lib.addIncludePath(b.path("src")); + combat_lib.addIncludePath(b.path("libs/rng")); + combat_lib.linkLibrary(rng_lib); combat_lib.linkSystemLibrary("raylib"); - // C sources (everything except combat, which is now Zig) + // C sources remaining in src/ const c_sources = [_][]const u8{ "src/audio.c", "src/enemy.c", "src/items.c", "src/main.c", - "src/map.c", - "src/player.c", "src/movement.c", + "src/player.c", "src/render.c", - "src/rng.c", "src/settings.c", - "src/utils.c", - }; - - const c_flags = [_][]const u8{ - "-std=c99", - "-Wall", - "-Wextra", - "-O2", }; // Main executable @@ -54,7 +97,12 @@ pub fn build(b: *std.Build) void { .flags = &c_flags, }); + // src/ for own headers; libs/ so "rng/rng.h" and "map/map.h" resolve exe.addIncludePath(b.path("src")); + exe.addIncludePath(b.path("libs")); + + exe.linkLibrary(rng_lib); + exe.linkLibrary(map_lib); exe.linkLibrary(combat_lib); exe.linkSystemLibrary("raylib"); exe.linkSystemLibrary("m"); diff --git a/src/map.c b/libs/map/map.c similarity index 99% rename from src/map.c rename to libs/map/map.c index 011c06b..911d487 100644 --- a/src/map.c +++ b/libs/map/map.c @@ -1,5 +1,5 @@ #include "map.h" -#include "rng.h" +#include "rng/rng.h" #include "settings.h" #include "utils.h" #include diff --git a/src/map.h b/libs/map/map.h similarity index 100% rename from src/map.h rename to libs/map/map.h diff --git a/src/utils.c b/libs/map/utils.c similarity index 100% rename from src/utils.c rename to libs/map/utils.c diff --git a/src/utils.h b/libs/map/utils.h similarity index 100% rename from src/utils.h rename to libs/map/utils.h diff --git a/src/rng.c b/libs/rng/rng.c similarity index 100% rename from src/rng.c rename to libs/rng/rng.c diff --git a/src/rng.h b/libs/rng/rng.h similarity index 100% rename from src/rng.h rename to libs/rng/rng.h diff --git a/src/enemy.c b/src/enemy.c index 57eff34..6832386 100644 --- a/src/enemy.c +++ b/src/enemy.c @@ -1,9 +1,9 @@ #include "enemy.h" #include "combat.h" #include "common.h" -#include "map.h" +#include "map/map.h" #include "movement.h" -#include "rng.h" +#include "rng/rng.h" #include "settings.h" #include diff --git a/src/items.c b/src/items.c index e5bf212..27f343d 100644 --- a/src/items.c +++ b/src/items.c @@ -1,6 +1,6 @@ #include "common.h" -#include "map.h" -#include "rng.h" +#include "map/map.h" +#include "rng/rng.h" #include "settings.h" #include diff --git a/src/main.c b/src/main.c index 6bd5351..747631e 100644 --- a/src/main.c +++ b/src/main.c @@ -3,12 +3,12 @@ #include "common.h" #include "enemy.h" #include "items.h" -#include "map.h" +#include "map/map.h" #include "movement.h" #include "player.h" #include "raylib.h" #include "render.h" -#include "rng.h" +#include "rng/rng.h" #include "settings.h" #include #include diff --git a/src/movement.c b/src/movement.c index 0f7fd8f..89e74e1 100644 --- a/src/movement.c +++ b/src/movement.c @@ -1,6 +1,6 @@ #include "movement.h" #include "enemy.h" -#include "map.h" +#include "map/map.h" #include // Check if position is occupied by player