diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..3ba065a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "raylib"] + path = raylib + url = https://github.com/raysan5/raylib diff --git a/build.zig b/build.zig index 6ad06fc..0ada318 100755 --- a/build.zig +++ b/build.zig @@ -7,39 +7,70 @@ const std = @import("std"); const Builder = std.build.Builder; +const raylib = @import("lib.zig").Pkg("."); -pub fn createExe(b: *Builder, name: []const u8, source: []const u8, desc: []const u8) *std.build.LibExeObjStep -{ +const Program = struct { + name: []const u8, + path: []const u8, + desc: []const u8, +}; + +pub fn build(b: *Builder) void { const mode = b.standardReleaseOptions(); + const target = b.standardTargetOptions(.{}); - var exe = b.addExecutable(name, source); - exe.setBuildMode(mode); - exe.linkSystemLibrary("raylib"); - exe.addPackagePath("raylib", "lib/raylib-zig.zig"); - exe.addPackagePath("raylib-math", "lib/raylib-zig-math.zig"); + const examples = [_]Program{ + .{ + .name = "basic_window", + .path = "examples/core/basic_window.zig", + .desc = "Creates a basic window with text", + }, + .{ + .name = "input_keys", + .path = "examples/core/input_keys.zig", + .desc = "Simple keyboard input", + }, + .{ + .name = "input_mouse", + .path = "examples/core/input_mouse.zig", + .desc = "Simple mouse input", + }, + .{ + .name = "input_mouse_wheel", + .path = "examples/core/input_mouse_wheel.zig", + .desc = "Mouse wheel input", + }, + .{ + .name = "input_multitouch", + .path = "examples/core/input_multitouch.zig", + .desc = "Multitouch input", + }, + .{ + .name = "2d_camera", + .path = "examples/core/2d_camera.zig", + .desc = "Shows the functionality of a 2D camera", + }, + .{ + .name = "models_loading", + .path = "examples/models/models_loading.zig", + .desc = "Loads a model and renders it", + }, + }; - const runExe = exe.run(); - const exeStep = b.step(name, desc); - exeStep.dependOn(&runExe.step); - return exe; -} + const examples_step = b.step("examples", "Builds all the examples"); -pub fn build(b: *Builder) void -{ - var basicWindow = createExe(b, "basic_window" , "examples/core/basic_window.zig" , "Creates a basic window with text"); - var inputKeys = createExe(b, "input_keys" , "examples/core/input_keys.zig" , "Simple keyboard input"); - var inputMouse = createExe(b, "input_mouse" , "examples/core/input_mouse.zig" , "Simple mouse input"); - var inputMouseWheel = createExe(b, "input_mouse_wheel", "examples/core/input_mouse_wheel.zig", "Mouse wheel input"); - var inputMultitouch = createExe(b, "input_multitouch" , "examples/core/input_multitouch.zig" , "Multitouch input"); - var twoDCamera = createExe(b, "2d_camera" , "examples/core/2d_camera.zig" , "Shows the functionality of a 2D camera"); - var modelsLoading = createExe(b, "models_loading" , "examples/models/models_loading.zig" , "Loads a model and renders it"); + for (examples) |ex| { + const exe = b.addExecutable(ex.name, ex.path); + exe.setBuildMode(mode); + exe.setTarget(target); - const examplesStep = b.step("examples", "Builds all the examples"); - examplesStep.dependOn(&basicWindow.step); - examplesStep.dependOn(&inputKeys.step); - examplesStep.dependOn(&inputMouse.step); - examplesStep.dependOn(&inputMouseWheel.step); - examplesStep.dependOn(&inputMultitouch.step); - examplesStep.dependOn(&twoDCamera.step); - examplesStep.dependOn(&modelsLoading.step); -} + raylib.link(exe); + raylib.addAsPackage("raylib", exe); + raylib.math.addAsPackage("raylib-math", exe); + + const run_cmd = exe.run(); + const run_step = b.step(ex.name, ex.desc); + run_step.dependOn(&run_cmd.step); + examples_step.dependOn(&exe.step); + } +} \ No newline at end of file diff --git a/lib.zig b/lib.zig new file mode 100644 index 0000000..2fdfb89 --- /dev/null +++ b/lib.zig @@ -0,0 +1,42 @@ +const std = @import("std"); +const Builder = std.build.Builder; +const LibExeObjStep = std.build.LibExeObjStep; + +pub fn Pkg(pkgdir: comptime []const u8) type { + return struct { + pub fn link(exe: *LibExeObjStep) void { + const raylibFlags = &[_][]const u8{ + "-std=c99", + "-DPLATFORM_DESKTOP", + "-D_POSIX_C_SOURCE", + }; + if (exe.target.toTarget().os.tag == .windows) { + exe.linkSystemLibrary("winmm"); + exe.linkSystemLibrary("gdi32"); + } else { + exe.linkSystemLibrary("m"); + exe.linkSystemLibrary("X11"); + } + exe.linkLibC(); + + exe.addSystemIncludeDir(pkgdir ++ "/raylib/src"); + exe.addSystemIncludeDir(pkgdir ++ "/raylib/src/external/glfw/include"); + exe.addCSourceFile(pkgdir ++ "/raylib/src/core.c", raylibFlags); + exe.addCSourceFile(pkgdir ++ "/raylib/src/models.c", raylibFlags); + exe.addCSourceFile(pkgdir ++ "/raylib/src/raudio.c", raylibFlags); + exe.addCSourceFile(pkgdir ++ "/raylib/src/rglfw.c", raylibFlags); + exe.addCSourceFile(pkgdir ++ "/raylib/src/shapes.c", raylibFlags); + exe.addCSourceFile(pkgdir ++ "/raylib/src/text.c", raylibFlags); + exe.addCSourceFile(pkgdir ++ "/raylib/src/textures.c", raylibFlags); + exe.addCSourceFile(pkgdir ++ "/raylib/src/utils.c", raylibFlags); + } + pub fn addAsPackage(name: comptime []const u8, to: *LibExeObjStep) void { + to.addPackagePath(name, pkgdir ++ "/lib/raylib-zig.zig"); + } + pub const math = struct { + pub fn addAsPackage(name: comptime []const u8, to: *LibExeObjStep) void { + to.addPackagePath(name, pkgdir ++ "/lib/raylib-zig-math.zig"); + } + }; + }; +} diff --git a/raylib b/raylib new file mode 160000 index 0000000..7ef114d --- /dev/null +++ b/raylib @@ -0,0 +1 @@ +Subproject commit 7ef114d1da2c34a70bba5442497103441647d8f3