diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 03d24c5..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -libraylib.a diff --git a/build.zig b/build.zig index 82edbfb..d6bc6ab 100644 --- a/build.zig +++ b/build.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const raylib = @import("./3rdparty/raylib/src/build.zig"); +const raylib = @import("build_raylib.zig"); pub fn build(b: *std.build.Builder) void { // Standard target options allows the person running `zig build` to choose diff --git a/build_raylib.zig b/build_raylib.zig new file mode 100644 index 0000000..bced3d0 --- /dev/null +++ b/build_raylib.zig @@ -0,0 +1,83 @@ +const std = @import("std"); + +pub fn Pkg(srcdir: []const u8) type { + return struct { + pub fn addRaylib(b: *std.build.Builder, target: std.zig.CrossTarget) *std.build.LibExeObjStep { + // Standard release options allow the person running `zig build` to select + // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. + const mode = b.standardReleaseOptions(); + + const raylib_flags = &[_][]const u8{ + "-std=gnu99", + "-DPLATFORM_DESKTOP", + "-DGL_SILENCE_DEPRECATION=199309L", + "-fno-sanitize=undefined", // https://github.com/raysan5/raylib/issues/1891 + }; + + const raylib = b.addStaticLibrary("raylib", srcdir ++ "/raylib.h"); + raylib.setTarget(target); + raylib.setBuildMode(mode); + raylib.linkLibC(); + + raylib.addIncludeDir(srcdir ++ "/external/glfw/include"); + + raylib.addCSourceFiles(&.{ + srcdir ++ "/raudio.c", + srcdir ++ "/rcore.c", + srcdir ++ "/rmodels.c", + srcdir ++ "/rshapes.c", + srcdir ++ "/rtext.c", + srcdir ++ "/rtextures.c", + srcdir ++ "/utils.c", + }, raylib_flags); + + switch (raylib.target.toTarget().os.tag) { + .windows => { + raylib.addCSourceFiles(&.{srcdir ++ "/rglfw.c"}, raylib_flags); + raylib.linkSystemLibrary("winmm"); + raylib.linkSystemLibrary("gdi32"); + raylib.linkSystemLibrary("opengl32"); + raylib.addIncludeDir("external/glfw/deps/mingw"); + }, + .linux => { + raylib.addCSourceFiles(&.{srcdir ++ "/rglfw.c"}, raylib_flags); + raylib.linkSystemLibrary("GL"); + raylib.linkSystemLibrary("rt"); + raylib.linkSystemLibrary("dl"); + raylib.linkSystemLibrary("m"); + raylib.linkSystemLibrary("X11"); + }, + .macos => { + // On macos rglfw.c include Objective-C files. + const raylib_flags_extra_macos = &[_][]const u8{ + "-ObjC", + }; + raylib.addCSourceFiles( + &.{srcdir ++ "/rglfw.c"}, + raylib_flags ++ raylib_flags_extra_macos, + ); + raylib.linkFramework("Foundation"); + }, + else => { + @panic("Unsupported OS"); + }, + } + + raylib.setOutputDir("./"); + raylib.install(); + return raylib; + } + }; +} + +const lib = Pkg("./3rdparty/raylib/src"); + +pub fn build(b: *std.build.Builder) void { + // 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. + const target = b.standardTargetOptions(.{}); + + _ = lib.addRaylib(b, target); +} diff --git a/justfile b/justfile deleted file mode 100644 index acbc9ed..0000000 --- a/justfile +++ /dev/null @@ -1,2 +0,0 @@ -run: - nixGL zig build run diff --git a/shell.nix b/shell.nix index 9f0dece..ec522b7 100644 --- a/shell.nix +++ b/shell.nix @@ -2,7 +2,6 @@ pkgs.mkShell { buildInputs = with pkgs; [ - just zig xorg.libX11