summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--default.nix14
-rw-r--r--flake.nix70
-rw-r--r--meson.build17
3 files changed, 66 insertions, 35 deletions
diff --git a/default.nix b/default.nix
index 5fb4943..2c39828 100644
--- a/default.nix
+++ b/default.nix
@@ -1,6 +1,8 @@
-{ lib, stdenv, meson, ninja, pkg-config, lld, glew, glfw, Cocoa, OpenGL }:
-
+{ lib, clangStdenv, meson, ninja, pkg-config, lld, glew, glfw, Cocoa, OpenGL, libX11, libXau, libXdmcp }:
 
+let
+  stdenv = clangStdenv;
+in
 stdenv.mkDerivation {
   pname = "meowcraft";
   version = "0.0.1";
@@ -9,7 +11,11 @@ stdenv.mkDerivation {
 
   nativeBuildInputs = [ meson ninja pkg-config lld ];
   buildInputs = [ glew glfw ]
-    ++ lib.optionals stdenv.isDarwin [ Cocoa OpenGL ];
+    ++ lib.optionals stdenv.isDarwin [ Cocoa OpenGL ]
+    # TODO: Wayland support.
+    # NOTE: Also, even without Wayland, do we really need to link against libXau and
+    # libXdmcp of all things??
+    ++ lib.optionals stdenv.isLinux [ libX11 libXau libXdmcp ];
 
   mesonFlags = [
     "--buildtype=release"
@@ -23,7 +29,7 @@ stdenv.mkDerivation {
     description = "a dumb minecraft in c++ and opengl.";
     homepage = "https://git.rnrd.eu/meowcraft";
     license = licenses.free; # TODO: Choose a specific license.
-    platforms = [ "x86_64-darwin" ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
     mainProgram = "meowcraft";
   };
 }
\ No newline at end of file
diff --git a/flake.nix b/flake.nix
index 8c317d4..2124904 100644
--- a/flake.nix
+++ b/flake.nix
@@ -7,43 +7,55 @@
 
   outputs = { self, nixpkgs }: 
   let
-    system = "x86_64-darwin";
-    pkgs = nixpkgs.legacyPackages.${system};
+    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 = { 
-      ${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" ];
-        };
+    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 {
+        pname = "glfw-static";
+        cmakeFlags = [ "-DBUILD_SHARED_LIBS=OFF" ];
+      };
+
+      glew-static =  pkgs.glew.overrideAttrs {
+        pname = "glew-static";
+        cmakeFlags = [ "-DBUILD_SHARED_LIBS=OFF" ];
       };
-    };
+    });
+
+    devShells = forAllSystems ({ system, pkgs }: 
+    let
+      inherit (pkgs) lib stdenv;
 
-    devShells = {
-      ${system}.default = pkgs.mkShell {
+      darwinFrameworks = pkgs.darwin.apple_sdk.frameworks;
+    in
+    { 
+      default = pkgs.mkShell {
         buildInputs = (with pkgs; [
-          pkg-config cmake meson lld
+          pkg-config ninja cmake meson lldb
         ]) ++ (with self.packages.${system}; [
           glfw-static glew-static
-        ]) ++ (with pkgs.darwin.apple_sdk.frameworks; [
+        ]) ++ lib.optionals stdenv.isDarwin (with darwinFrameworks; [
           Cocoa OpenGL
+        ]) ++ lib.optionals stdenv.isLinux (with pkgs.xorg; [
+          libX11 libXau libXdmcp
         ]);
       };
-    };
+    });
   };
 }
diff --git a/meson.build b/meson.build
index 8d3ed27..f69126f 100644
--- a/meson.build
+++ b/meson.build
@@ -8,11 +8,24 @@ project('meowcraft', 'cpp',
 subdir('assets')
 subdir('src')
 
+dependencies = []
+
 glfw = dependency('glfw3', version : '>=3.3')
 glew = dependency('glew', version : '>=2.1.0')
-opengl = dependency('appleframeworks', modules : ['OpenGL'])
+
+dependencies += [glfw, glew]
+
+if target_machine.system() == 'darwin'
+  darwin_opengl = dependency('appleframeworks', modules : ['OpenGL'])
+  dependencies += [darwin_opengl]
+endif
+
+if target_machine.system() == 'linux'
+  linux_opengl = dependency('gl')
+  dependencies += [linux_opengl]
+endif
 
 executable('meowcraft',
   source_files + [asset_file],
-  dependencies : [glfw, glew, opengl],
+  dependencies : dependencies,
   install : true)