From ccc06a5dba48d1913016b9e3f2848c0a4b287df0 Mon Sep 17 00:00:00 2001 From: Simon Hartcher Date: Tue, 30 May 2023 13:35:56 +1000 Subject: [PATCH 1/3] update to use zig package manager --- .gitignore | 3 ++- .gitmodules | 3 --- build.zig | 50 ++++++++++++++++++++++++++++++++++++++------------ build.zig.zon | 11 +++++++++++ 4 files changed, 51 insertions(+), 16 deletions(-) delete mode 100644 .gitmodules create mode 100644 build.zig.zon diff --git a/.gitignore b/.gitignore index 5bd9db1..df8b0ca 100644 --- a/.gitignore +++ b/.gitignore @@ -51,7 +51,8 @@ Module.symvers Mkfile.old dkms.conf -zig-cache/ +/zig-cache/ +/zig-out/ .vscode/settings.json diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 3ba065a..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "raylib"] - path = raylib - url = https://github.com/raysan5/raylib diff --git a/build.zig b/build.zig index c1acadd..8b78d21 100644 --- a/build.zig +++ b/build.zig @@ -2,9 +2,22 @@ const std = @import("std"); const generate = @import("generate.zig"); pub fn build(b: *std.Build) !void { - const raylibSrc = "raylib/src/"; - const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const lib_raylib = b.dependency("raylib", .{ + .target = target, + .optimize = optimize, + }); + + var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = general_purpose_allocator.deinit(); + + const gpa = general_purpose_allocator.allocator(); + + const raylib_dir = lib_raylib.builder.build_root.path.?; + const raylib_src = try std.fs.path.join(gpa, &.{ raylib_dir, "src" }); + defer gpa.free(raylib_src); //--- parse raylib and generate JSONs for all signatures -------------------------------------- const jsons = b.step("parse", "parse raylib headers and generate raylib jsons"); @@ -14,13 +27,20 @@ pub fn build(b: *std.Build) !void { .target = target, .optimize = .ReleaseFast, }); - raylib_parser_build.addCSourceFile("raylib/parser/raylib_parser.c", &.{}); + + const raylib_parser_c_path = try std.fs.path.join(gpa, &.{ raylib_dir, "parser", "raylib_parser.c" }); + defer gpa.free(raylib_parser_c_path); + + raylib_parser_build.addCSourceFile(raylib_parser_c_path, &.{}); raylib_parser_build.linkLibC(); //raylib + const raylib_h_path = try std.fs.path.join(gpa, &.{ raylib_src, "raylib.h" }); + defer gpa.free(raylib_h_path); + const raylib_H = b.addRunArtifact(raylib_parser_build); raylib_H.addArgs(&.{ - "-i", raylibSrc ++ "raylib.h", + "-i", raylib_h_path, "-o", "raylib.json", "-f", "JSON", "-d", "RLAPI", @@ -28,9 +48,12 @@ pub fn build(b: *std.Build) !void { jsons.dependOn(&raylib_H.step); //raymath + const raymath_h_path = try std.fs.path.join(gpa, &.{ raylib_src, "raymath.h" }); + defer gpa.free(raymath_h_path); + const raymath_H = b.addRunArtifact(raylib_parser_build); raymath_H.addArgs(&.{ - "-i", raylibSrc ++ "raymath.h", + "-i", raymath_h_path, "-o", "raymath.json", "-f", "JSON", "-d", "RMAPI", @@ -38,9 +61,12 @@ pub fn build(b: *std.Build) !void { jsons.dependOn(&raymath_H.step); //rlgl + const rlgl_h_path = try std.fs.path.join(gpa, &.{ raylib_src, "rlgl.h" }); + defer gpa.free(rlgl_h_path); + const rlgl_H = b.addRunArtifact(raylib_parser_build); rlgl_H.addArgs(&.{ - "-i", raylibSrc ++ "rlgl.h", + "-i", rlgl_h_path, "-o", "rlgl.json", "-f", "JSON", "-d", "RLAPI", @@ -84,27 +110,27 @@ const cwd = std.fs.path.dirname(current_file()).?; const sep = std.fs.path.sep_str; const dir_raylib = cwd ++ sep ++ "raylib/src"; -const raylib_build = @import("raylib/src/build.zig"); - fn linkThisLibrary(b: *std.Build, target: std.zig.CrossTarget, optimize: std.builtin.Mode) *std.build.LibExeObjStep { const exe = b.addStaticLibrary(.{ .name = "raylib-zig", .target = target, .optimize = optimize }); exe.addIncludePath(dir_raylib); exe.addIncludePath(cwd); exe.linkLibC(); exe.addCSourceFile(cwd ++ sep ++ "marshal.c", &.{}); - // const lib_raylib = raylib_build.addRaylib(b, target); - // exe.linkLibrary(lib_raylib); return exe; } /// add this package to exe pub fn addTo(b: *std.Build, exe: *std.build.LibExeObjStep, target: std.zig.CrossTarget, optimize: std.builtin.Mode) void { + const lib_raylib = b.dependency("raylib", .{ + .target = target, + .optimize = optimize, + }); + exe.addAnonymousModule("raylib", .{ .source_file = .{ .path = cwd ++ sep ++ "raylib.zig" } }); exe.addIncludePath(dir_raylib); exe.addIncludePath(cwd); const lib = linkThisLibrary(b, target, optimize); - const lib_raylib = raylib_build.addRaylib(b, target, optimize); - exe.linkLibrary(lib_raylib); + exe.linkLibrary(lib_raylib.artifact("raylib")); exe.linkLibrary(lib); } diff --git a/build.zig.zon b/build.zig.zon new file mode 100644 index 0000000..2d5b4c6 --- /dev/null +++ b/build.zig.zon @@ -0,0 +1,11 @@ +.{ + .name = "raylib-zig", + .version = "4.6.0-dev", + + .dependencies = .{ + .raylib = .{ + .url = "https://github.com/raysan5/raylib/archive/15cbf313bb3f490a64c25b0d54a5635742b6de53.tar.gz", + .hash = "1220fbebf8988ab0566f9d965de0015b99b4b69cc5b49f8eeb688889957b75a7fe2b", + } + } +} From 23ca36bdbc1ac37a7fe679deab2ea87d8b1c5233 Mon Sep 17 00:00:00 2001 From: Simon Hartcher Date: Tue, 30 May 2023 14:09:29 +1000 Subject: [PATCH 2/3] install raylib artifact --- build.zig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.zig b/build.zig index 8b78d21..6125002 100644 --- a/build.zig +++ b/build.zig @@ -97,6 +97,8 @@ pub fn build(b: *std.Build) !void { const raylib_parser_install = b.step("raylib_parser", "build ./zig-out/bin/raylib_parser.exe"); const generateBindings_install = b.addInstallArtifact(raylib_parser_build); raylib_parser_install.dependOn(&generateBindings_install.step); + + b.installArtifact(lib_raylib.artifact("raylib")); } // above: generate library From bd1c53086602aaa757b7a79e5893123daa685dd8 Mon Sep 17 00:00:00 2001 From: Simon Hartcher Date: Tue, 30 May 2023 14:13:55 +1000 Subject: [PATCH 3/3] add raylib module to build --- build.zig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.zig b/build.zig index 6125002..dd47fc5 100644 --- a/build.zig +++ b/build.zig @@ -99,6 +99,9 @@ pub fn build(b: *std.Build) !void { raylib_parser_install.dependOn(&generateBindings_install.step); b.installArtifact(lib_raylib.artifact("raylib")); + _ = b.addModule("raylib", .{ + .source_file = std.build.FileSource.relative("raylib.zig"), + }); } // above: generate library