about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/emulators/pcsx2/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/emulators/pcsx2/default.nix')
-rw-r--r--nixpkgs/pkgs/applications/emulators/pcsx2/default.nix140
1 files changed, 140 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/emulators/pcsx2/default.nix b/nixpkgs/pkgs/applications/emulators/pcsx2/default.nix
new file mode 100644
index 000000000000..ce14caab746d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/pcsx2/default.nix
@@ -0,0 +1,140 @@
+{ cmake
+, fetchFromGitHub
+, lib
+, llvmPackages_17
+, cubeb
+, curl
+, extra-cmake-modules
+, ffmpeg
+, libaio
+, libbacktrace
+, libpcap
+, libwebp
+, libXrandr
+, libzip
+, lz4
+, makeWrapper
+, pkg-config
+, qtbase
+, qtsvg
+, qttools
+, qtwayland
+, SDL2
+, soundtouch
+, strip-nondeterminism
+, vulkan-headers
+, vulkan-loader
+, wayland
+, wrapQtAppsHook
+, xz
+, zip
+, zstd
+}:
+
+let
+  # The pre-zipped files in releases don't have a versioned link, we need to zip them ourselves
+  pcsx2_patches = fetchFromGitHub {
+    owner = "PCSX2";
+    repo = "pcsx2_patches";
+    rev = "189f79d73f8cd9fd85c7394a14ee4419ddfa267b";
+    sha256 = "sha256-gxwAxR7N7QU4sTGHTdd656dmsW8MrcfroYPvv2UoeRc=";
+  };
+in
+llvmPackages_17.stdenv.mkDerivation rec {
+  pname = "pcsx2";
+  version = "1.7.5497";
+
+  src = fetchFromGitHub {
+    owner = "PCSX2";
+    repo = "pcsx2";
+    fetchSubmodules = true;
+    rev = "v${version}";
+    sha256 = "sha256-gbJkeelSyEHwD4DH/hbzPNNv47hmdgc4kyvX38txYhc=";
+  };
+
+  patches = [
+    ./define-rev.patch
+  ];
+
+  cmakeFlags = [
+    "-DDISABLE_ADVANCE_SIMD=ON"
+    "-DUSE_LINKED_FFMPEG=ON"
+    "-DPCSX2_GIT_REV=v${version}"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    pkg-config
+    strip-nondeterminism
+    wrapQtAppsHook
+    zip
+  ];
+
+  buildInputs = [
+    curl
+    ffmpeg
+    libaio
+    libbacktrace
+    libpcap
+    libwebp
+    libXrandr
+    libzip
+    lz4
+    qtbase
+    qtsvg
+    qttools
+    qtwayland
+    SDL2
+    soundtouch
+    vulkan-headers
+    wayland
+    xz
+    zstd
+  ]
+  ++ cubeb.passthru.backendLibs;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a bin/pcsx2-qt bin/resources $out/bin/
+
+    install -Dm644 $src/pcsx2-qt/resources/icons/AppIcon64.png $out/share/pixmaps/PCSX2.png
+    install -Dm644 $src/.github/workflows/scripts/linux/pcsx2-qt.desktop $out/share/applications/PCSX2.desktop
+
+    zip -jq $out/bin/resources/patches.zip ${pcsx2_patches}/patches/*
+    strip-nondeterminism $out/bin/resources/patches.zip
+  '';
+
+  qtWrapperArgs =
+    let
+      libs = lib.makeLibraryPath ([
+        vulkan-loader
+      ] ++ cubeb.passthru.backendLibs);
+    in [
+      "--prefix LD_LIBRARY_PATH : ${libs}"
+    ];
+
+  # https://github.com/PCSX2/pcsx2/pull/10200
+  # Can't avoid the double wrapping, the binary wrapper from qtWrapperArgs doesn't support --run
+  postFixup = ''
+    source "${makeWrapper}/nix-support/setup-hook"
+    wrapProgram $out/bin/pcsx2-qt \
+      --run 'if [[ -z $I_WANT_A_BROKEN_WAYLAND_UI ]]; then export QT_QPA_PLATFORM=xcb; fi'
+  '';
+
+  meta = with lib; {
+    description = "Playstation 2 emulator";
+    longDescription = ''
+      PCSX2 is an open-source PlayStation 2 (AKA PS2) emulator. Its purpose
+      is to emulate the PS2 hardware, using a combination of MIPS CPU
+      Interpreters, Recompilers and a Virtual Machine which manages hardware
+      states and PS2 system memory. This allows you to play PS2 games on your
+      PC, with many additional features and benefits.
+    '';
+    homepage = "https://pcsx2.net";
+    license = with licenses; [ gpl3 lgpl3 ];
+    maintainers = with maintainers; [ hrdinka govanify ];
+    mainProgram = "pcsx2-qt";
+    platforms = platforms.x86_64;
+  };
+}