Add OpenGL support to build.zig

This commit is contained in:
Brandon Dyck 2021-12-10 17:45:53 -07:00
parent df6b6667ee
commit 1f8c4c7679

View File

@ -1,6 +1,6 @@
const std = @import("std"); const std = @import("std");
const cflags: []const []const u8 = &.{ const base_cflags: []const []const u8 = &.{
"-Wall", "-Wall",
"-Wextra", "-Wextra",
"-pedantic", "-pedantic",
@ -10,25 +10,38 @@ const cflags: []const []const u8 = &.{
"-std=c11", "-std=c11",
}; };
pub fn build(b: *std.build.Builder) void { pub fn build(b: *std.build.Builder) !void {
// Standard release options allow the person running `zig build` to select
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
const mode = b.standardReleaseOptions(); const mode = b.standardReleaseOptions();
const target = b.standardTargetOptions(.{}); const target = b.standardTargetOptions(.{});
const lib = b.addStaticLibrary("minifb-zig-port", null); var c_flags = try std.ArrayList([]const u8).initCapacity(b.allocator, base_cflags.len);
lib.addCSourceFiles(&.{ defer c_flags.deinit();
try c_flags.appendSlice(base_cflags);
var c_sources = std.ArrayList([]const u8).init(b.allocator);
defer c_sources.deinit();
try c_sources.appendSlice(&.{
"src/MiniFB_common.c", "src/MiniFB_common.c",
"src/MiniFB_internal.c", "src/MiniFB_internal.c",
"src/MiniFB_timer.c", "src/MiniFB_timer.c",
"src/windows/WinMiniFB.c", "src/windows/WinMiniFB.c",
}, cflags); });
const use_opengl = b.option(bool, "opengl", "Use OpenGL") orelse false;
const lib = b.addStaticLibrary("minifb-zig-port", null);
lib.addIncludeDir("src"); lib.addIncludeDir("src");
lib.addIncludeDir("include"); lib.addIncludeDir("include");
lib.linkSystemLibraryName("gdi32"); lib.linkSystemLibraryName("gdi32");
lib.linkLibC(); lib.linkLibC();
lib.setBuildMode(mode); lib.setBuildMode(mode);
lib.install(); lib.install();
if (use_opengl) {
try c_flags.append("-DUSE_OPENGL_API");
try c_sources.append("src/gl/MiniFB_GL.c");
lib.linkSystemLibraryName("Opengl32");
}
lib.addCSourceFiles(c_sources.items, c_flags.items);
addExample(b, "noise", "tests/noise.c", lib, target, mode); addExample(b, "noise", "tests/noise.c", lib, target, mode);
addExample(b, "multiple-windows", "tests/multiple_windows.c", lib, target, mode); addExample(b, "multiple-windows", "tests/multiple_windows.c", lib, target, mode);
@ -42,7 +55,7 @@ fn addExample(b: *std.build.Builder, comptime name: []const u8, file: []const u8
exe.setTarget(target); exe.setTarget(target);
exe.linkLibrary(lib); exe.linkLibrary(lib);
exe.addIncludeDir("include"); exe.addIncludeDir("include");
exe.addCSourceFile(file, cflags); exe.addCSourceFile(file, base_cflags);
exe.install(); exe.install();
const step_name = "run-" ++ name; const step_name = "run-" ++ name;