diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..bd799223 --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1722813957, + "narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..5074a7fb --- /dev/null +++ b/flake.nix @@ -0,0 +1,72 @@ +{ + description = "Nintendo DS emulator"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + inherit (pkgs.lib) cmakeBool optionals makeLibraryPath; + inherit (pkgs.stdenv) isLinux isDarwin; + + versionSuffix = with self; if sourceInfo?dirtyShortRev + then sourceInfo.dirtyShortRev + else sourceInfo.shortRev; + + melonDS = pkgs.stdenv.mkDerivation { + pname = "melonDS"; + version = "0.9.5-${versionSuffix}"; + src = ./.; + + nativeBuildInputs = with pkgs; [ + cmake + ninja + pkg-config + kdePackages.wrapQtAppsHook + ]; + + buildInputs = (with pkgs; [ + kdePackages.qtbase + kdePackages.qtmultimedia + extra-cmake-modules + SDL2 + zstd + libarchive + libGL + libslirp + ]) ++ optionals isLinux [ + pkgs.wayland + pkgs.kdePackages.qtwayland + ]; + + cmakeFlags = [ + (cmakeBool "USE_QT6" true) + (cmakeBool "USE_SYSTEM_LIBSLIRP" true) + ]; + + qtWrapperArgs = optionals isLinux [ + "--prefix LD_LIBRARY_PATH : ${makeLibraryPath [ pkgs.libpcap ]}" + ] ++ optionals isDarwin [ + "--prefix DYLD_LIBRARY_PATH : ${makeLibraryPath [ pkgs.libpcap ]}" + ]; + + passthru = { + exePath = if isDarwin then + "/Applications/melonDS.app/Contents/MacOS/melonDS" + else "/bin/melonDS"; + }; + }; + in { + packages.default = melonDS; + apps.default = flake-utils.lib.mkApp { + drv = self.packages.${system}.default; + }; + devShells.default = pkgs.mkShell { + inputsFrom = [ self.packages.${system}.default ]; + }; + } + ); +} diff --git a/src/frontend/qt_sdl/CMakeLists.txt b/src/frontend/qt_sdl/CMakeLists.txt index c857bbbc..fc7819a1 100644 --- a/src/frontend/qt_sdl/CMakeLists.txt +++ b/src/frontend/qt_sdl/CMakeLists.txt @@ -240,6 +240,8 @@ if (UNIX AND NOT APPLE) INTERPROCEDURAL_OPTIMIZATION OFF INTERPROCEDURAL_OPTIMIZATION_RELEASE OFF) endif() +elseif(APPLE) + install(TARGETS melonDS BUNDLE DESTINATION "${CMAKE_INSTALL_PREFIX}/Applications") endif() if (ENABLE_OGLRENDERER)