|
@@ -11,36 +11,6 @@ comptime {
|
|
@compileError("Raylib requires zig version " ++ min_ver);
|
|
@compileError("Raylib requires zig version " ++ min_ver);
|
|
}
|
|
}
|
|
|
|
|
|
-// NOTE(freakmangd): I don't like using a global here, but it prevents having to
|
|
|
|
-// get the flags a second time when adding raygui
|
|
|
|
-var raylib_flags_arr: std.ArrayListUnmanaged([]const u8) = .{};
|
|
|
|
-
|
|
|
|
-// This has been tested with zig version 0.13.0
|
|
|
|
-pub fn addRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, options: Options) !*std.Build.Step.Compile {
|
|
|
|
- const raylib_dep = b.dependencyFromBuildZig(@This(), .{
|
|
|
|
- .target = target,
|
|
|
|
- .optimize = optimize,
|
|
|
|
- .raudio = options.raudio,
|
|
|
|
- .rmodels = options.rmodels,
|
|
|
|
- .rshapes = options.rshapes,
|
|
|
|
- .rtext = options.rtext,
|
|
|
|
- .rtextures = options.rtextures,
|
|
|
|
- .platform = options.platform,
|
|
|
|
- .shared = options.shared,
|
|
|
|
- .linux_display_backend = options.linux_display_backend,
|
|
|
|
- .opengl_version = options.opengl_version,
|
|
|
|
- .config = options.config,
|
|
|
|
- });
|
|
|
|
- const raylib = raylib_dep.artifact("raylib");
|
|
|
|
-
|
|
|
|
- if (options.raygui) {
|
|
|
|
- const raygui_dep = b.dependency(options.raygui_dependency_name, .{});
|
|
|
|
- addRaygui(b, raylib, raygui_dep);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return raylib;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
fn setDesktopPlatform(raylib: *std.Build.Step.Compile, platform: PlatformBackend) void {
|
|
fn setDesktopPlatform(raylib: *std.Build.Step.Compile, platform: PlatformBackend) void {
|
|
raylib.defineCMacro("PLATFORM_DESKTOP", null);
|
|
raylib.defineCMacro("PLATFORM_DESKTOP", null);
|
|
|
|
|
|
@@ -107,21 +77,26 @@ const config_h_flags = outer: {
|
|
};
|
|
};
|
|
|
|
|
|
fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, options: Options) !*std.Build.Step.Compile {
|
|
fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, options: Options) !*std.Build.Step.Compile {
|
|
- raylib_flags_arr.clearRetainingCapacity();
|
|
|
|
|
|
+ var raylib_flags_arr = std.ArrayList([]const u8).init(b.allocator);
|
|
|
|
+ defer raylib_flags_arr.deinit();
|
|
|
|
|
|
- const shared_flags = &[_][]const u8{
|
|
|
|
- "-fPIC",
|
|
|
|
- "-DBUILD_LIBTYPE_SHARED",
|
|
|
|
- };
|
|
|
|
- try raylib_flags_arr.appendSlice(b.allocator, &[_][]const u8{
|
|
|
|
|
|
+ try raylib_flags_arr.appendSlice(&[_][]const u8{
|
|
"-std=gnu99",
|
|
"-std=gnu99",
|
|
"-D_GNU_SOURCE",
|
|
"-D_GNU_SOURCE",
|
|
"-DGL_SILENCE_DEPRECATION=199309L",
|
|
"-DGL_SILENCE_DEPRECATION=199309L",
|
|
"-fno-sanitize=undefined", // https://github.com/raysan5/raylib/issues/3674
|
|
"-fno-sanitize=undefined", // https://github.com/raysan5/raylib/issues/3674
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ if (options.shared) {
|
|
|
|
+ try raylib_flags_arr.appendSlice(&[_][]const u8{
|
|
|
|
+ "-fPIC",
|
|
|
|
+ "-DBUILD_LIBTYPE_SHARED",
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
if (options.config.len > 0) {
|
|
if (options.config.len > 0) {
|
|
// Sets a flag indiciating the use of a custom `config.h`
|
|
// Sets a flag indiciating the use of a custom `config.h`
|
|
- try raylib_flags_arr.append(b.allocator, "-DEXTERNAL_CONFIG_FLAGS");
|
|
|
|
|
|
+ try raylib_flags_arr.append("-DEXTERNAL_CONFIG_FLAGS");
|
|
|
|
|
|
// Splits a space-separated list of config flags into multiple flags
|
|
// Splits a space-separated list of config flags into multiple flags
|
|
//
|
|
//
|
|
@@ -131,7 +106,7 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
|
|
|
|
|
// Apply config flags supplied by the user
|
|
// Apply config flags supplied by the user
|
|
while (config_iter.next()) |config_flag|
|
|
while (config_iter.next()) |config_flag|
|
|
- try raylib_flags_arr.append(b.allocator, config_flag);
|
|
|
|
|
|
+ try raylib_flags_arr.append(config_flag);
|
|
|
|
|
|
// Apply all relevant configs from `src/config.h` *except* the user-specified ones
|
|
// Apply all relevant configs from `src/config.h` *except* the user-specified ones
|
|
//
|
|
//
|
|
@@ -149,14 +124,10 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
|
}
|
|
}
|
|
|
|
|
|
// Otherwise, append default value from config.h to compile flags
|
|
// Otherwise, append default value from config.h to compile flags
|
|
- try raylib_flags_arr.append(b.allocator, flag);
|
|
|
|
|
|
+ try raylib_flags_arr.append(flag);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (options.shared) {
|
|
|
|
- try raylib_flags_arr.appendSlice(b.allocator, shared_flags);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
const raylib = if (options.shared)
|
|
const raylib = if (options.shared)
|
|
b.addSharedLibrary(.{
|
|
b.addSharedLibrary(.{
|
|
.name = "raylib",
|
|
.name = "raylib",
|
|
@@ -288,7 +259,7 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
|
}
|
|
}
|
|
|
|
|
|
// On macos rglfw.c include Objective-C files.
|
|
// On macos rglfw.c include Objective-C files.
|
|
- try raylib_flags_arr.append(b.allocator, "-ObjC");
|
|
|
|
|
|
+ try raylib_flags_arr.append("-ObjC");
|
|
raylib.root_module.addCSourceFile(.{
|
|
raylib.root_module.addCSourceFile(.{
|
|
.file = b.path("src/rglfw.c"),
|
|
.file = b.path("src/rglfw.c"),
|
|
.flags = raylib_flags_arr.items,
|
|
.flags = raylib_flags_arr.items,
|
|
@@ -327,25 +298,19 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
|
.flags = raylib_flags_arr.items,
|
|
.flags = raylib_flags_arr.items,
|
|
});
|
|
});
|
|
|
|
|
|
- return raylib;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/// This function does not need to be called if you passed .raygui = true to addRaylib
|
|
|
|
-pub fn addRaygui(b: *std.Build, raylib: *std.Build.Step.Compile, raygui_dep: *std.Build.Dependency) void {
|
|
|
|
- if (raylib_flags_arr.items.len == 0) {
|
|
|
|
- @panic(
|
|
|
|
- \\argument 2 `raylib` in `addRaygui` must come from b.dependency("raylib", ...).artifact("raylib")
|
|
|
|
- );
|
|
|
|
- }
|
|
|
|
|
|
+ if (options.raygui) {
|
|
|
|
+ const raygui_dep = b.dependency(options.raygui_dependency_name, .{});
|
|
|
|
|
|
- var gen_step = b.addWriteFiles();
|
|
|
|
- raylib.step.dependOn(&gen_step.step);
|
|
|
|
|
|
+ var gen_step = b.addWriteFiles();
|
|
|
|
+ raylib.step.dependOn(&gen_step.step);
|
|
|
|
|
|
- const raygui_c_path = gen_step.add("raygui.c", "#define RAYGUI_IMPLEMENTATION\n#include \"raygui.h\"\n");
|
|
|
|
- raylib.addCSourceFile(.{ .file = raygui_c_path, .flags = raylib_flags_arr.items });
|
|
|
|
- raylib.addIncludePath(raygui_dep.path("src"));
|
|
|
|
|
|
+ const raygui_c_path = gen_step.add("raygui.c", "#define RAYGUI_IMPLEMENTATION\n#include \"raygui.h\"\n");
|
|
|
|
+ raylib.addCSourceFile(.{ .file = raygui_c_path, .flags = raylib_flags_arr.items });
|
|
|
|
+ raylib.addIncludePath(raygui_dep.path("src"));
|
|
|
|
+ raylib.installHeader(raygui_dep.path("src/raygui.h"), "raygui.h");
|
|
|
|
+ }
|
|
|
|
|
|
- raylib.installHeader(raygui_dep.path("src/raygui.h"), "raygui.h");
|
|
|
|
|
|
+ return raylib;
|
|
}
|
|
}
|
|
|
|
|
|
pub const Options = struct {
|
|
pub const Options = struct {
|