From b201817d1284e4d436776cbcad08af55a1e731db Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Wed, 4 Oct 2023 14:20:49 +0200 Subject: [PATCH] call raylib from zig --- zig/build.zig | 18 ++++++++---------- zig/justfile | 16 ++++++++++++++++ zig/src/main.zig | 26 ++++++++++++++------------ 3 files changed, 38 insertions(+), 22 deletions(-) create mode 100644 zig/justfile diff --git a/zig/build.zig b/zig/build.zig index 93ff5e0..047fe53 100644 --- a/zig/build.zig +++ b/zig/build.zig @@ -4,26 +4,24 @@ const std = @import("std"); // declaratively construct a build graph that will be executed by an external // runner. pub fn build(b: *std.Build) 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(.{}); - - // Standard optimization options allow the person running `zig build` to select - // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. Here we do not - // set a preferred release mode, allowing the user to decide how to optimize. const optimize = b.standardOptimizeOption(.{}); const exe = b.addExecutable(.{ .name = "zig", - // In this case the main source file is merely a path, however, in more - // complicated build scripts, this could be a generated file. .root_source_file = .{ .path = "src/main.zig" }, .target = target, .optimize = optimize, }); + // We cannot directly use modules since v4.5 is not compatible with zig + // v0.11 + const raylib_dep = b.anonymousDependency("3rd-party/raylib/", @import("3rd-party/raylib/build.zig"), .{ + .target = target, + .optimize = optimize, + }); + exe.linkLibrary(raylib_dep.artifact("raylib")); + // This declares intent for the executable to be installed into the // standard location when the user invokes the "install" step (the default // step when running `zig build`). diff --git a/zig/justfile b/zig/justfile new file mode 100644 index 0000000..3abe747 --- /dev/null +++ b/zig/justfile @@ -0,0 +1,16 @@ +alias b := build +alias r := run +alias t := test +alias fmt := format + +build: + zig build + +run: + nixGL zig build run + +test: + zig build test + +format: + fd -e zig -X zig fmt {} diff --git a/zig/src/main.zig b/zig/src/main.zig index c8a3f67..d9cff41 100644 --- a/zig/src/main.zig +++ b/zig/src/main.zig @@ -1,19 +1,21 @@ const std = @import("std"); +const raylib = @cImport({ + @cInclude("raylib.h"); +}); pub fn main() !void { - // Prints to stderr (it's a shortcut based on `std.io.getStdErr()`) - std.debug.print("All your {s} are belong to us.\n", .{"codebase"}); + const screen_width = 800; + const screen_height = 450; + raylib.InitWindow(screen_width, screen_height, "raylib [core] example - basic window"); + raylib.SetTargetFPS(60); + while (!raylib.WindowShouldClose()) { + raylib.BeginDrawing(); + defer raylib.EndDrawing(); - // stdout is for the actual output of your application, for example if you - // are implementing gzip, then only the compressed bytes should be sent to - // stdout, not any debugging messages. - const stdout_file = std.io.getStdOut().writer(); - var bw = std.io.bufferedWriter(stdout_file); - const stdout = bw.writer(); - - try stdout.print("Run `zig build test` to run the tests.\n", .{}); - - try bw.flush(); // don't forget to flush! + raylib.ClearBackground(raylib.RAYWHITE); + raylib.DrawText("Congrats! You created your first window!", 190, 200, 20, raylib.LIGHTGRAY); + } + raylib.CloseWindow(); } test "simple test" {