Merge pull request #213533 from atorres1985-contrib/small-fixups

ppsspp: refactor
This commit is contained in:
Nick Cao 2023-02-01 09:55:07 +08:00 committed by GitHub
commit 57cbd07426
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 71 additions and 65 deletions

View File

@ -12,89 +12,92 @@
, makeWrapper
, pkg-config
, python3
, qtbase ? null
, qtmultimedia ? null
, qtbase
, qtmultimedia
, snappy
, vulkan-loader
, wayland
, wrapQtAppsHook ? null
, wrapQtAppsHook
, zlib
, enableQt ? false
, enableVulkan ? true
, forceWayland ? false
}:
let
enableQt = (qtbase != null);
frontend = if enableQt then "Qt" else "SDL and headless";
vulkanPath = lib.makeLibraryPath [ vulkan-loader ];
# experimental, see https://github.com/hrydgard/ppsspp/issues/13845
vulkanWayland = enableVulkan && forceWayland;
in
# Only SDL front end needs to specify whether to use Wayland
assert forceWayland -> !enableQt;
stdenv.mkDerivation (finalAttrs: {
pname = "ppsspp"
+ lib.optionalString enableQt "-qt"
+ lib.optionalString (!enableQt) "-sdl"
+ lib.optionalString forceWayland "-wayland";
version = "1.14.4";
# Only SDL frontend needs to specify whether to use Wayland
assert forceWayland -> !enableQt;
stdenv.mkDerivation (self: {
pname = "ppsspp"
+ lib.optionalString enableQt "-qt"
+ lib.optionalString (!enableQt) "-sdl"
+ lib.optionalString forceWayland "-wayland";
version = "1.14.4";
src = fetchFromGitHub {
owner = "hrydgard";
repo = "ppsspp";
rev = "v${finalAttrs.version}";
fetchSubmodules = true;
sha256 = "sha256-7xzhN8JIQD4LZg8sQ8rLNYZrW0nCNBfZFgzoKdoWbKc=";
};
src = fetchFromGitHub {
owner = "hrydgard";
repo = "ppsspp";
rev = "v${self.version}";
fetchSubmodules = true;
sha256 = "sha256-7xzhN8JIQD4LZg8sQ8rLNYZrW0nCNBfZFgzoKdoWbKc=";
};
postPatch = ''
substituteInPlace git-version.cmake --replace unknown ${finalAttrs.src.rev}
substituteInPlace UI/NativeApp.cpp --replace /usr/share $out/share
'';
postPatch = ''
substituteInPlace git-version.cmake --replace unknown ${self.src.rev}
substituteInPlace UI/NativeApp.cpp --replace /usr/share $out/share
'';
nativeBuildInputs = [
cmake
copyDesktopItems
makeWrapper
pkg-config
python3
wrapQtAppsHook
];
nativeBuildInputs = [
cmake
copyDesktopItems
makeWrapper
pkg-config
python3
] ++ lib.optional enableQt wrapQtAppsHook;
buildInputs = [
SDL2
ffmpeg
(glew.override { enableEGL = forceWayland; })
libzip
qtbase
qtmultimedia
snappy
zlib
] ++ lib.optional enableVulkan vulkan-loader
++ lib.optionals vulkanWayland [ wayland libffi ];
buildInputs = [
SDL2
ffmpeg
(glew.override { enableEGL = forceWayland; })
libzip
snappy
zlib
] ++ lib.optionals enableQt [
qtbase
qtmultimedia
] ++ lib.optional enableVulkan vulkan-loader
++ lib.optionals vulkanWayland [ wayland libffi ];
cmakeFlags = [
"-DHEADLESS=${if enableQt then "OFF" else "ON"}"
"-DOpenGL_GL_PREFERENCE=GLVND"
"-DUSE_SYSTEM_FFMPEG=ON"
"-DUSE_SYSTEM_LIBZIP=ON"
"-DUSE_SYSTEM_SNAPPY=ON"
"-DUSE_WAYLAND_WSI=${if vulkanWayland then "ON" else "OFF"}"
"-DUSING_QT_UI=${if enableQt then "ON" else "OFF"}"
];
cmakeFlags = [
"-DHEADLESS=${if enableQt then "OFF" else "ON"}"
"-DOpenGL_GL_PREFERENCE=GLVND"
"-DUSE_SYSTEM_FFMPEG=ON"
"-DUSE_SYSTEM_LIBZIP=ON"
"-DUSE_SYSTEM_SNAPPY=ON"
"-DUSE_WAYLAND_WSI=${if vulkanWayland then "ON" else "OFF"}"
"-DUSING_QT_UI=${if enableQt then "ON" else "OFF"}"
];
desktopItems = [(makeDesktopItem {
desktopItems = [
(makeDesktopItem {
desktopName = "PPSSPP";
name = "ppsspp";
exec = "ppsspp";
icon = "ppsspp";
comment = "Play PSP games on your computer";
categories = [ "Game" "Emulator" ];
})];
})
];
installPhase = ''
installPhase = let
vulkanPath = lib.makeLibraryPath [ vulkan-loader ];
in
''
runHook preInstall
mkdir -p $out/share/{applications,ppsspp}
'' + (if enableQt then ''
install -Dm555 PPSSPPQt $out/bin/ppsspp
@ -108,14 +111,16 @@ in
--prefix LD_LIBRARY_PATH : ${vulkanPath} \
'' + "\n" + ''
mv assets $out/share/ppsspp
runHook postInstall
'';
meta = with lib; {
homepage = "https://www.ppsspp.org/";
description = "A HLE Playstation Portable emulator, written in C++ (${frontend})";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ AndersonTorres ];
platforms = platforms.linux;
};
})
meta = with lib; {
homepage = "https://www.ppsspp.org/";
description = "A HLE Playstation Portable emulator, written in C++ ("
++ (if enableQt then "Qt" else "SDL + headless") ++ ")";
license = lib.licenses.gpl2Plus;
maintainers = [ lib.maintainers.AndersonTorres ];
platforms = lib.platforms.linux;
};
})

View File

@ -2182,6 +2182,7 @@ with pkgs;
ppsspp-qt = ppsspp.override {
inherit (libsForQt5) qtbase qtmultimedia wrapQtAppsHook;
enableQt = true;
enableVulkan = false; # https://github.com/hrydgard/ppsspp/issues/11628
};