summary refs log tree commit diff
path: root/flake.nix
blob: b13d1e978dc48c3552e3ce9ab9fc3485ce7195b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{
  description = "a dumb minecraft in c++ and opengl.";

  inputs = {
    nixpkgs.url = "nixpkgs/nixos-23.11";
  };

  outputs = { self, nixpkgs }: 
  let
    allSystems = [ "x86_64-linux" "x86_64-darwin" ];

    pkgsForSystem = system: nixpkgs.legacyPackages.${system};

    forAllSystems = f: nixpkgs.lib.genAttrs allSystems
      (system: f { inherit system; pkgs = pkgsForSystem system; });

  in {
    packages = forAllSystems ({ system, pkgs }: {  
      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 (oldAttrs: {
        pname = "glfw-static";
        cmakeFlags = oldAttrs.cmakeFlags ++ [
          "-DBUILD_SHARED_LIBS=OFF"
        ];
      })).override { waylandSupport = pkgs.stdenv.isLinux; };

      glew-static =  pkgs.glew.overrideAttrs {
        pname = "glew-static";
        cmakeFlags = [ "-DBUILD_SHARED_LIBS=OFF" ];
      };
    });

    devShells = forAllSystems ({ system, pkgs }: 
    let
      inherit (pkgs) lib stdenv;

      darwinFrameworks = pkgs.darwin.apple_sdk.frameworks;
    in
    { 
      default = pkgs.mkShell {
        buildInputs = (with pkgs; [
          pkg-config ninja cmake meson lldb
        ]) ++ (with self.packages.${system}; [
          glfw-static glew-static
        ]) ++ lib.optionals stdenv.isDarwin (with darwinFrameworks; [
          Cocoa OpenGL
        ]) ++ lib.optionals stdenv.isLinux (with pkgs; [
          wayland wayland-protocols libffi
        ]);
      };
    });
  };
}