summaryrefslogtreecommitdiff
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')