Add back duckstation.
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
llvmPackages,
|
||||
SDL2,
|
||||
callPackage,
|
||||
cmake,
|
||||
cpuinfo,
|
||||
cubeb,
|
||||
curl,
|
||||
extra-cmake-modules,
|
||||
libXrandr,
|
||||
libbacktrace,
|
||||
libwebp,
|
||||
makeWrapper,
|
||||
ninja,
|
||||
pkg-config,
|
||||
qt6,
|
||||
vulkan-loader,
|
||||
wayland,
|
||||
wayland-scanner,
|
||||
}:
|
||||
|
||||
let
|
||||
sources = callPackage ./sources.nix { };
|
||||
inherit (qt6)
|
||||
qtbase
|
||||
qtsvg
|
||||
qttools
|
||||
qtwayland
|
||||
wrapQtAppsHook
|
||||
;
|
||||
in
|
||||
llvmPackages.stdenv.mkDerivation (finalAttrs: {
|
||||
inherit (sources.duckstation) pname version src;
|
||||
|
||||
patches = [
|
||||
# Tests are not built by default
|
||||
./001-fix-test-inclusion.diff
|
||||
# Patching yet another script that fills data based on git commands . . .
|
||||
./002-hardcode-vars.diff
|
||||
# Fix NEON intrinsics usage
|
||||
./003-fix-NEON-intrinsics.patch
|
||||
./remove-cubeb-vendor.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
extra-cmake-modules
|
||||
ninja
|
||||
pkg-config
|
||||
qttools
|
||||
wayland-scanner
|
||||
wrapQtAppsHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
SDL2
|
||||
cpuinfo
|
||||
cubeb
|
||||
curl
|
||||
libXrandr
|
||||
libbacktrace
|
||||
libwebp
|
||||
qtbase
|
||||
qtsvg
|
||||
qtwayland
|
||||
sources.discord-rpc-patched
|
||||
sources.lunasvg
|
||||
sources.shaderc-patched
|
||||
sources.soundtouch-patched
|
||||
sources.spirv-cross-patched
|
||||
wayland
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
(lib.cmakeBool "BUILD_TESTS" true)
|
||||
];
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
doInstallCheck = true;
|
||||
|
||||
postPatch = ''
|
||||
gitHash=$(cat .nixpkgs-auxfiles/git_hash) \
|
||||
gitBranch=$(cat .nixpkgs-auxfiles/git_branch) \
|
||||
gitTag=$(cat .nixpkgs-auxfiles/git_tag) \
|
||||
gitDate=$(cat .nixpkgs-auxfiles/git_date) \
|
||||
substituteAllInPlace src/scmversion/gen_scmversion.sh
|
||||
'';
|
||||
|
||||
# error: cannot convert 'int16x8_t' to '__Int32x4_t'
|
||||
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isAarch64 "-flax-vector-conversions";
|
||||
|
||||
installCheckPhase = ''
|
||||
runHook preInstallCheck
|
||||
|
||||
$out/share/duckstation/common-tests
|
||||
|
||||
runHook postInstallCheck
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin $out/share
|
||||
|
||||
cp -r bin $out/share/duckstation
|
||||
ln -s $out/share/duckstation/duckstation-qt $out/bin/
|
||||
|
||||
install -Dm644 $src/scripts/org.duckstation.DuckStation.desktop $out/share/applications/org.duckstation.DuckStation.desktop
|
||||
install -Dm644 $src/scripts/org.duckstation.DuckStation.png $out/share/pixmaps/org.duckstation.DuckStation.png
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
qtWrapperArgs =
|
||||
let
|
||||
libPath = lib.makeLibraryPath ([
|
||||
sources.shaderc-patched
|
||||
sources.spirv-cross-patched
|
||||
vulkan-loader
|
||||
]);
|
||||
in
|
||||
[
|
||||
"--prefix LD_LIBRARY_PATH : ${libPath}"
|
||||
];
|
||||
|
||||
# https://github.com/stenzek/duckstation/blob/master/scripts/appimage/apprun-hooks/default-to-x11.sh
|
||||
# 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/duckstation-qt \
|
||||
--run 'if [[ -z $I_WANT_A_BROKEN_WAYLAND_UI ]]; then export QT_QPA_PLATFORM=xcb; fi'
|
||||
'';
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/stenzek/duckstation";
|
||||
description = "Fast PlayStation 1 emulator for x86-64/AArch32/AArch64";
|
||||
license = lib.licenses.gpl3Only;
|
||||
mainProgram = "duckstation-qt";
|
||||
maintainers = with lib.maintainers; [
|
||||
guibou
|
||||
];
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
})
|
||||
Reference in New Issue
Block a user