summary refs log tree commit diff
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-04-14 14:41:31 +0200
committerMel <einebeere@gmail.com>2024-04-14 14:41:31 +0200
commitfbc76cef9fa96862be253dff5d891c14a93d2791 (patch)
treeb20fbee981a96985d756f6f81dd997c869912c49
parent727983e0a7033e0b778c38e0a0b51a5bc0e9fc2b (diff)
downloadmeowcraft-fbc76cef9fa96862be253dff5d891c14a93d2791.tar.zst
meowcraft-fbc76cef9fa96862be253dff5d891c14a93d2791.zip
Build static GLFW and GLEW dependencies
-rw-r--r--default.nix17
-rw-r--r--flake.nix34
-rw-r--r--meson.build5
3 files changed, 43 insertions, 13 deletions
diff --git a/default.nix b/default.nix
index afaf4e9..5fb4943 100644
--- a/default.nix
+++ b/default.nix
@@ -1,4 +1,5 @@
-{ lib, stdenv, meson, ninja, pkg-config, glew, glfw }:
+{ lib, stdenv, meson, ninja, pkg-config, lld, glew, glfw, Cocoa, OpenGL }:
+
 
 stdenv.mkDerivation {
   pname = "meowcraft";
@@ -6,16 +7,18 @@ stdenv.mkDerivation {
 
   src = ./.;
 
-  nativeBuildInputs = [ meson ninja pkg-config ];
-  buildInputs = [ glew glfw ];
-  # NOTE: Don't packages usually also add the Apple SDKs as buildInputs?
-  # Like OpenGL.framework, etc.? It seems to work without them, but I'm not sure.
+  nativeBuildInputs = [ meson ninja pkg-config lld ];
+  buildInputs = [ glew glfw ]
+    ++ lib.optionals stdenv.isDarwin [ Cocoa OpenGL ];
 
   mesonFlags = [
-    "--buildtype" "release"
-    "--prefix" "${placeholder "out"}"
+    "--buildtype=release"
+    "--prefix=${placeholder "out"}"
   ];
 
+  # FIXME: Currently the built binary on darwin can not be run outside
+  # of the nix store, because of it's dependencies on the nix libc++ and libc++abi dylibs.
+
   meta = with lib; {
     description = "a dumb minecraft in c++ and opengl.";
     homepage = "https://git.rnrd.eu/meowcraft";
diff --git a/flake.nix b/flake.nix
index 020ef53..8c317d4 100644
--- a/flake.nix
+++ b/flake.nix
@@ -8,17 +8,41 @@
   outputs = { self, nixpkgs }: 
   let
     system = "x86_64-darwin";
-    pkgs = import nixpkgs { inherit system; };
+    pkgs = nixpkgs.legacyPackages.${system};
   in {
     packages = { 
-      ${system}.default = pkgs.callPackage ./. {};
+      ${system} = { 
+        default = pkgs.callPackage ./. {
+          inherit (pkgs.darwin.apple_sdk.frameworks)
+            Cocoa OpenGL;
+          glfw = self.packages.${system}.glfw-static;
+          glew = self.packages.${system}.glew-static;
+        };
+
+        # NOTE: GLFW depends on OpenSSL and coreutils, which are very
+        # large dependencies and have to be rebuilt from source to be able
+        # to be linked statically. Maybe there is a way to avoid this?
+        glfw-static =  pkgs.glfw.overrideAttrs {
+          pname = "glfw-static";
+          cmakeFlags = [ "-DBUILD_SHARED_LIBS=OFF" ];
+        };
+
+        glew-static =  pkgs.glew.overrideAttrs {
+          pname = "glew-static";
+          cmakeFlags = [ "-DBUILD_SHARED_LIBS=OFF" ];
+        };
+      };
     };
 
     devShells = {
       ${system}.default = pkgs.mkShell {
-        buildInputs = with pkgs; [
-          pkg-config cmake meson glfw glew
-        ];
+        buildInputs = (with pkgs; [
+          pkg-config cmake meson lld
+        ]) ++ (with self.packages.${system}; [
+          glfw-static glew-static
+        ]) ++ (with pkgs.darwin.apple_sdk.frameworks; [
+          Cocoa OpenGL
+        ]);
       };
     };
   };
diff --git a/meson.build b/meson.build
index c0935c3..8d3ed27 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,9 @@
 project('meowcraft', 'cpp',
   version : '0.0.1',
-  default_options : ['warning_level=3'])
+  default_options : [
+    'cpp_std=c++17',
+    'warning_level=3',
+    'prefer_static=true'])
 
 subdir('assets')
 subdir('src')