summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-04-14 22:42:57 +0200
committerMel <einebeere@gmail.com>2024-04-14 22:42:57 +0200
commit0b2474a476b8d54967c7362c2d6bdfc76af1f05b (patch)
tree08c1e81e36c50e5bf3240876fa345ae9eddfe21e
parent659c8b58e5307baad98f52199372a8b0261b4106 (diff)
downloadmeowcraft-0b2474a476b8d54967c7362c2d6bdfc76af1f05b.tar.zst
meowcraft-0b2474a476b8d54967c7362c2d6bdfc76af1f05b.zip
Nix build on x86_64-linux (not static yet)
-rw-r--r--default.nix14
-rw-r--r--flake.nix66
-rw-r--r--meson.build17
3 files changed, 64 insertions, 33 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;
- };
+ 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" ];
- };
+ # 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" ];
- };
+ 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)