From 0b2474a476b8d54967c7362c2d6bdfc76af1f05b Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 14 Apr 2024 22:42:57 +0200 Subject: Nix build on x86_64-linux (not static yet) --- default.nix | 14 +++++++++---- flake.nix | 70 ++++++++++++++++++++++++++++++++++++------------------------- meson.build | 17 +++++++++++++-- 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) -- cgit 1.4.1