Browse Source

Add macos support to zig build system (#2175)

Anders Holmberg 3 years ago
parent
commit
71f2e2b1e4
2 changed files with 29 additions and 2 deletions
  1. 16 1
      examples/build.zig
  2. 13 1
      src/build.zig

+ 16 - 1
examples/build.zig

@@ -21,13 +21,20 @@ fn add_module(comptime module: []const u8, b: *std.build.Builder, target: std.zi
         // zig's mingw headers do not include pthread.h
         // zig's mingw headers do not include pthread.h
         if (std.mem.eql(u8, "core_loading_thread", name) and target.getOsTag() == .windows) continue;
         if (std.mem.eql(u8, "core_loading_thread", name) and target.getOsTag() == .windows) continue;
 
 
-        const exe = b.addExecutable(name, path);
+        const exe = b.addExecutable(name, null);
+        exe.addCSourceFile(path, switch (target.getOsTag()) {
+            .windows => &[_][]const u8{},
+            .linux => &[_][]const u8{},
+            .macos => &[_][]const u8{"-DPLATFORM_DESKTOP"},
+            else => @panic("Unsupported OS"),
+        });
         exe.setTarget(target);
         exe.setTarget(target);
         exe.setBuildMode(mode);
         exe.setBuildMode(mode);
         exe.linkLibC();
         exe.linkLibC();
         exe.addObjectFile(switch (target.getOsTag()) {
         exe.addObjectFile(switch (target.getOsTag()) {
             .windows => "../src/raylib.lib",
             .windows => "../src/raylib.lib",
             .linux => "../src/libraylib.a",
             .linux => "../src/libraylib.a",
+            .macos => "../src/libraylib.a",
             else => @panic("Unsupported OS"),
             else => @panic("Unsupported OS"),
         });
         });
 
 
@@ -49,6 +56,14 @@ fn add_module(comptime module: []const u8, b: *std.build.Builder, target: std.zi
                 exe.linkSystemLibrary("m");
                 exe.linkSystemLibrary("m");
                 exe.linkSystemLibrary("X11");
                 exe.linkSystemLibrary("X11");
             },
             },
+            .macos => {
+                exe.linkFramework("Foundation");
+                exe.linkFramework("Cocoa");
+                exe.linkFramework("OpenGL");
+                exe.linkFramework("CoreAudio");
+                exe.linkFramework("CoreVideo");
+                exe.linkFramework("IOKit");
+            },
             else => {
             else => {
                 @panic("Unsupported OS");
                 @panic("Unsupported OS");
             },
             },

+ 13 - 1
src/build.zig

@@ -28,7 +28,6 @@ pub fn build(b: *std.build.Builder) void {
     raylib.addCSourceFiles(&.{
     raylib.addCSourceFiles(&.{
         "raudio.c",
         "raudio.c",
         "rcore.c",
         "rcore.c",
-        "rglfw.c",
         "rmodels.c",
         "rmodels.c",
         "rshapes.c",
         "rshapes.c",
         "rtext.c",
         "rtext.c",
@@ -38,18 +37,31 @@ pub fn build(b: *std.build.Builder) void {
 
 
     switch (raylib.target.toTarget().os.tag) {
     switch (raylib.target.toTarget().os.tag) {
         .windows => {
         .windows => {
+            raylib.addCSourceFiles(&.{"rglfw.c"}, raylib_flags);
             raylib.linkSystemLibrary("winmm");
             raylib.linkSystemLibrary("winmm");
             raylib.linkSystemLibrary("gdi32");
             raylib.linkSystemLibrary("gdi32");
             raylib.linkSystemLibrary("opengl32");
             raylib.linkSystemLibrary("opengl32");
             raylib.addIncludeDir("external/glfw/deps/mingw");
             raylib.addIncludeDir("external/glfw/deps/mingw");
         },
         },
         .linux => {
         .linux => {
+            raylib.addCSourceFiles(&.{"rglfw.c"}, raylib_flags);
             raylib.linkSystemLibrary("GL");
             raylib.linkSystemLibrary("GL");
             raylib.linkSystemLibrary("rt");
             raylib.linkSystemLibrary("rt");
             raylib.linkSystemLibrary("dl");
             raylib.linkSystemLibrary("dl");
             raylib.linkSystemLibrary("m");
             raylib.linkSystemLibrary("m");
             raylib.linkSystemLibrary("X11");
             raylib.linkSystemLibrary("X11");
         },
         },
+        .macos => {
+            // On macos rglfw.c include Objective-C files.
+            const raylib_flags_extra_macos = &[_][]const u8{
+                "-ObjC",
+            };
+            raylib.addCSourceFiles(
+                &.{"rglfw.c"},
+                raylib_flags ++ raylib_flags_extra_macos,
+            );
+            raylib.linkFramework("Foundation");
+        },
         else => {
         else => {
             @panic("Unsupported OS");
             @panic("Unsupported OS");
         },
         },