From 5326ca5fbe51dc33c49579b7667d5e2344ea153b Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 1 Aug 2022 01:33:21 +0200 Subject: [PATCH] all: add support for macOS to flake.nix The Nix version of the macOS toolchain has difficulties compiling Objective-C modules; disable modules instead of figuring out why. It also doesn't include any frameworks automatically; add them explicitly. While here, move suppression of OpenGL deprecation to a GL-specific file. Signed-off-by: Elias Naur --- app/gl_macos.go | 3 ++ app/gl_macos.m | 3 +- app/metal_darwin.go | 7 +-- app/metal_macos.go | 8 ++-- app/os_darwin.m | 4 +- app/os_macos.go | 3 +- app/os_macos.m | 2 +- flake.lock | 69 ++++++++++-------------------- flake.nix | 6 +++ gpu/headless/headless_darwin.go | 6 +-- gpu/internal/metal/metal_darwin.go | 6 +-- internal/cocoainit/cocoa_darwin.go | 3 +- 12 files changed, 51 insertions(+), 69 deletions(-) diff --git a/app/gl_macos.go b/app/gl_macos.go index 7511bbd7..a0d63e62 100644 --- a/app/gl_macos.go +++ b/app/gl_macos.go @@ -16,6 +16,9 @@ import ( ) /* +#cgo CFLAGS: -DGL_SILENCE_DEPRECATION -xobjective-c -fobjc-arc +#cgo LDFLAGS: -framework OpenGL + #include #include #include diff --git a/app/gl_macos.m b/app/gl_macos.m index fe837431..e545391d 100644 --- a/app/gl_macos.m +++ b/app/gl_macos.m @@ -2,8 +2,7 @@ // +build darwin,!ios,nometal -@import AppKit; - +#import #include #include #include "_cgo_export.h" diff --git a/app/metal_darwin.go b/app/metal_darwin.go index 06b89f3b..e93b0251 100644 --- a/app/metal_darwin.go +++ b/app/metal_darwin.go @@ -12,10 +12,11 @@ import ( ) /* -#cgo CFLAGS: -Werror -xobjective-c -fmodules -fobjc-arc +#cgo CFLAGS: -Werror -xobjective-c -fobjc-arc +#cgo LDFLAGS: -framework QuartzCore -framework Metal -@import Metal; -@import QuartzCore.CAMetalLayer; +#import +#import #include diff --git a/app/metal_macos.go b/app/metal_macos.go index 7db06a99..8b602ee3 100644 --- a/app/metal_macos.go +++ b/app/metal_macos.go @@ -6,12 +6,10 @@ package app /* -#cgo CFLAGS: -Werror -xobjective-c -fmodules -fobjc-arc - -@import AppKit; - -@import QuartzCore.CAMetalLayer; +#cgo CFLAGS: -Werror -xobjective-c -fobjc-arc +#import +#import #include CALayer *gio_layerFactory(void) { diff --git a/app/os_darwin.m b/app/os_darwin.m index 772cc28d..5723037e 100644 --- a/app/os_darwin.m +++ b/app/os_darwin.m @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Unlicense OR MIT -@import Dispatch; -@import Foundation; +#import +#import #include "_cgo_export.h" diff --git a/app/os_macos.go b/app/os_macos.go index 4f43f7e1..0d50ea47 100644 --- a/app/os_macos.go +++ b/app/os_macos.go @@ -24,7 +24,8 @@ import ( ) /* -#cgo CFLAGS: -DGL_SILENCE_DEPRECATION -Werror -Wno-deprecated-declarations -fmodules -fobjc-arc -x objective-c +#cgo CFLAGS: -Werror -Wno-deprecated-declarations -fobjc-arc -x objective-c +#cgo LDFLAGS: -framework AppKit -framework QuartzCore #include diff --git a/app/os_macos.m b/app/os_macos.m index b94a568d..7e0517d1 100644 --- a/app/os_macos.m +++ b/app/os_macos.m @@ -2,7 +2,7 @@ // +build darwin,!ios -@import AppKit; +#import #include "_cgo_export.h" diff --git a/flake.lock b/flake.lock index 1007cbd1..4d6a949f 100644 --- a/flake.lock +++ b/flake.lock @@ -3,17 +3,17 @@ "android": { "inputs": { "devshell": "devshell", - "flake-utils": "flake-utils_2", + "flake-utils": "flake-utils", "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1654115078, - "narHash": "sha256-V1XCuFIl6QJuCSJvWKWZKzoHZ+oXP2jYEev4Wf49qk4=", + "lastModified": 1659298920, + "narHash": "sha256-LgRMge8BZUG15EN43iDJOlnEMX1dvRprB7SaoNqgibU=", "owner": "tadfisher", "repo": "android-nixpkgs", - "rev": "5573d91ad076bfceeae780d9942ab6ec4ef000f0", + "rev": "d4f20a3cd4ce961bb23b48447457f6810d69ae5e", "type": "github" }, "original": { @@ -24,15 +24,21 @@ }, "devshell": { "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "flake-utils": [ + "android", + "nixpkgs" + ], + "nixpkgs": [ + "android", + "nixpkgs" + ] }, "locked": { - "lastModified": 1653917170, - "narHash": "sha256-FyxOnEE/V4PNEcMU62ikY4FfYPo349MOhMM97HS0XEo=", + "lastModified": 1658746384, + "narHash": "sha256-CCJcoMOcXyZFrV1ag4XMTpAPjLWb4Anbv+ktXFI1ry0=", "owner": "numtide", "repo": "devshell", - "rev": "fc7a3e3adde9bbcab68af6d1e3c6eb738e296a92", + "rev": "0ffc7937bb5e8141af03d462b468bd071eb18e1b", "type": "github" }, "original": { @@ -43,26 +49,11 @@ }, "flake-utils": { "locked": { - "lastModified": 1642700792, - "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", + "lastModified": 1656928814, + "narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=", "owner": "numtide", "repo": "flake-utils", - "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "locked": { - "lastModified": 1653893745, - "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249", "type": "github" }, "original": { @@ -73,27 +64,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1643381941, - "narHash": "sha256-pHTwvnN4tTsEKkWlXQ8JMY423epos8wUOhthpwJjtpc=", + "lastModified": 1659305579, + "narHash": "sha256-SFeQTmh7hc9Y2fSkooHaoS8mDfPa04sfmUCtQ8MA6Pg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5efc8ca954272c4376ac929f4c5ffefcc20551d5", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1654165167, - "narHash": "sha256-cx57sQl9Q+kJoIB0INg8Gomvyl2KahCL9UPz0F6g20Y=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "7adf49bbab9814d5b071d50cf17cce4270e1c294", + "rev": "5857574d45925585baffde730369414319228a84", "type": "github" }, "original": { @@ -105,7 +80,7 @@ "root": { "inputs": { "android": "android", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs" } } }, diff --git a/flake.nix b/flake.nix index 0e6b2a5b..f0bd65e0 100644 --- a/flake.nix +++ b/flake.nix @@ -47,6 +47,12 @@ xorg.libXfixes libGL pkgconfig + ] else if stdenv.isDarwin then [ + darwin.apple_sdk_11_0.frameworks.Foundation + darwin.apple_sdk_11_0.frameworks.Metal + darwin.apple_sdk_11_0.frameworks.QuartzCore + darwin.apple_sdk_11_0.frameworks.AppKit + darwin.apple_sdk_11_0.MacOSX-SDK ] else [ ]); } // (if stdenv.isLinux then { LD_LIBRARY_PATH = "${vulkan-loader}/lib"; diff --git a/gpu/headless/headless_darwin.go b/gpu/headless/headless_darwin.go index 6be7fddc..02ee406b 100644 --- a/gpu/headless/headless_darwin.go +++ b/gpu/headless/headless_darwin.go @@ -10,10 +10,10 @@ import ( ) /* -#cgo CFLAGS: -Werror -Wno-deprecated-declarations -fmodules -fobjc-arc -x objective-c -#cgo LDFLAGS: -framework CoreGraphics +#cgo CFLAGS: -Werror -Wno-deprecated-declarations -fobjc-arc -x objective-c +#cgo LDFLAGS: -framework CoreGraphics -framework Metal -framework Foundation -@import Metal; +#import static CFTypeRef createDevice(void) { @autoreleasepool { diff --git a/gpu/internal/metal/metal_darwin.go b/gpu/internal/metal/metal_darwin.go index c180731e..1d1aabaf 100644 --- a/gpu/internal/metal/metal_darwin.go +++ b/gpu/internal/metal/metal_darwin.go @@ -13,10 +13,8 @@ import ( ) /* -#cgo CFLAGS: -Werror -xobjective-c -fmodules -fobjc-arc -#cgo LDFLAGS: -framework CoreGraphics - -@import Metal; +#cgo CFLAGS: -Werror -xobjective-c -fobjc-arc +#cgo LDFLAGS: -framework CoreGraphics -framework Metal -framework Foundation #include #include diff --git a/internal/cocoainit/cocoa_darwin.go b/internal/cocoainit/cocoa_darwin.go index 2a34e575..aa2fc6ee 100644 --- a/internal/cocoainit/cocoa_darwin.go +++ b/internal/cocoainit/cocoa_darwin.go @@ -5,7 +5,8 @@ package cocoainit /* -#cgo CFLAGS: -xobjective-c -fmodules -fobjc-arc +#cgo CFLAGS: -xobjective-c -fobjc-arc +#cgo LDFLAGS: -framework Foundation #import static inline void activate_cocoa_multithreading() {