Skip to content

Update to use zig package manager #15

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ Module.symvers
Mkfile.old
dkms.conf

zig-cache/
/zig-cache/
/zig-out/

.vscode/settings.json

Expand Down
3 changes: 0 additions & 3 deletions .gitmodules

This file was deleted.

55 changes: 43 additions & 12 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -14,33 +27,46 @@ 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",
});
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",
});
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",
Expand Down Expand Up @@ -71,6 +97,11 @@ 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"));
_ = b.addModule("raylib", .{
.source_file = std.build.FileSource.relative("raylib.zig"),
});
}

// above: generate library
Expand All @@ -84,27 +115,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);
}
11 changes: 11 additions & 0 deletions build.zig.zon
Original file line number Diff line number Diff line change
@@ -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",
}
}
}