diff --git a/pkgs/misc/emulators/citra/default.nix b/pkgs/misc/emulators/citra/default.nix index 5efe27770b60..c1d4724cee9b 100644 --- a/pkgs/misc/emulators/citra/default.nix +++ b/pkgs/misc/emulators/citra/default.nix @@ -1,27 +1,76 @@ -{ mkDerivation, lib, fetchgit, cmake, SDL2, qtbase, qtmultimedia, boost -, wrapQtAppsHook }: +{ lib +, stdenv +, fetchFromGitHub +, cmake +, wrapQtAppsHook +, SDL2 +, qtbase +, qtmultimedia +, boost17x +, libpulseaudio +, pkg-config +, libusb1 +, zstd +, libressl +, alsa-lib +, rapidjson +, aacHleDecoding ? true +, fdk_aac +, ffmpeg-full +}: -mkDerivation { +stdenv.mkDerivation { pname = "citra"; version = "2021-11-01"; - # Submodules - src = fetchgit { - url = "https://github.com/citra-emu/citra"; + src = fetchFromGitHub { + owner = "citra-emu"; + repo = "citra"; rev = "5a7d80172dd115ad9bc6e8e85cee6ed9511c48d0"; sha256 = "sha256-vy2JMizBsnRK9NBEZ1dxT7fP/HFhOZSsC+5P+Dzi27s="; + fetchSubmodules = true; }; - nativeBuildInputs = [ cmake wrapQtAppsHook ]; - buildInputs = [ SDL2 qtbase qtmultimedia boost ]; + nativeBuildInputs = [ cmake wrapQtAppsHook pkg-config ]; + buildInputs = [ + SDL2 + qtbase + qtmultimedia + libpulseaudio + boost17x + libusb1 + alsa-lib + rapidjson # for discord-rpc + ] ++ lib.optional aacHleDecoding [ fdk_aac ffmpeg-full ]; + + cmakeFlags = [ + "-DUSE_SYSTEM_BOOST=ON" + "-DUSE_DISCORD_PRESENCE=ON" + ] ++ lib.optionals aacHleDecoding [ + "-DENABLE_FFMPEG_AUDIO_DECODER=ON" + "-DCITRA_USE_BUNDLED_FFMPEG=OFF" + ]; + + postPatch = '' + # we already know the submodules are present + substituteInPlace CMakeLists.txt \ + --replace "check_submodules_present()" "" - preConfigure = '' # Trick configure system. sed -n 's,^ *path = \(.*\),\1,p' .gitmodules | while read path; do - mkdir "$path/.git" + mkdir "$path/.git" done + + rm -rf externals/zstd externals/libressl + cp -r ${zstd.src} externals/zstd + tar xf ${libressl.src} -C externals/ + mv externals/${libressl.name} externals/libressl + chmod -R a+w externals/zstd ''; + # Todo: cubeb audio backend (the default one) doesn't work on the SDL interface. + # Note that the two interfaces have two separate configuration files. + meta = with lib; { homepage = "https://citra-emu.org"; description = "An open-source emulator for the Nintendo 3DS";