diff options
| -rw-r--r-- | default.nix | 17 | ||||
| -rw-r--r-- | flake.nix | 34 | ||||
| -rw-r--r-- | meson.build | 5 |
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') |
