diff --git a/pkgs/misc/emulators/citra/default.nix b/pkgs/misc/emulators/citra/default.nix index c1d4724cee9b..92d0f5b1d364 100644 --- a/pkgs/misc/emulators/citra/default.nix +++ b/pkgs/misc/emulators/citra/default.nix @@ -3,21 +3,23 @@ , fetchFromGitHub , cmake , wrapQtAppsHook -, SDL2 -, qtbase -, qtmultimedia , boost17x -, libpulseaudio , pkg-config , libusb1 , zstd , libressl -, alsa-lib -, rapidjson -, aacHleDecoding ? true -, fdk_aac -, ffmpeg-full +, enableSdl2 ? true, SDL2 +, enableQt ? true, qtbase, qtmultimedia +, enableQtTranslation ? enableQt, qttools +, enableWebService ? true +, enableCubeb ? true, libpulseaudio +, enableFfmpegAudioDecoder ? true +, enableFfmpegVideoDumper ? true +, ffmpeg +, useDiscordRichPresence ? true, rapidjson +, enableFdk ? false, fdk_aac }: +assert lib.assertMsg (!enableFfmpegAudioDecoder || !enableFdk) "Can't enable both enableFfmpegAudioDecoder and enableFdk"; stdenv.mkDerivation { pname = "citra"; @@ -31,36 +33,43 @@ stdenv.mkDerivation { fetchSubmodules = true; }; - nativeBuildInputs = [ cmake wrapQtAppsHook pkg-config ]; + nativeBuildInputs = [ + cmake + pkg-config + ] + ++ lib.optionals enableQt [ wrapQtAppsHook ]; + buildInputs = [ - SDL2 - qtbase - qtmultimedia - libpulseaudio boost17x libusb1 - alsa-lib - rapidjson # for discord-rpc - ] ++ lib.optional aacHleDecoding [ fdk_aac ffmpeg-full ]; + ] + ++ lib.optionals enableSdl2 [ SDL2 ] + ++ lib.optionals enableQt [ qtbase qtmultimedia ] + ++ lib.optionals enableQtTranslation [ qttools ] + ++ lib.optionals enableCubeb [ libpulseaudio ] + ++ lib.optionals (enableFfmpegAudioDecoder || enableFfmpegVideoDumper) [ ffmpeg ] + ++ lib.optionals useDiscordRichPresence [ rapidjson ] + ++ lib.optionals enableFdk [ fdk_aac ]; cmakeFlags = [ "-DUSE_SYSTEM_BOOST=ON" - "-DUSE_DISCORD_PRESENCE=ON" - ] ++ lib.optionals aacHleDecoding [ - "-DENABLE_FFMPEG_AUDIO_DECODER=ON" - "-DCITRA_USE_BUNDLED_FFMPEG=OFF" - ]; + ] + ++ lib.optionals (!enableSdl2) [ "-DENABLE_SDL2=OFF" ] + ++ lib.optionals (!enableQt) [ "-DENABLE_QT=OFF" ] + ++ lib.optionals enableQtTranslation [ "-DENABLE_QT_TRANSLATION=ON" ] + ++ lib.optionals (!enableWebService) [ "-DENABLE_WEB_SERVICE=OFF" ] + ++ lib.optionals (!enableCubeb) [ "-DENABLE_CUBEB=OFF" ] + ++ lib.optionals enableFfmpegAudioDecoder [ "-DENABLE_FFMPEG_AUDIO_DECODER=ON"] + ++ lib.optionals enableFfmpegVideoDumper [ "-DENABLE_FFMPEG_VIDEO_DUMPER=ON" ] + ++ lib.optionals useDiscordRichPresence [ "-DUSE_DISCORD_PRESENCE=ON" ] + ++ lib.optionals enableFdk [ "-DENABLE_FDK=ON" ]; postPatch = '' - # we already know the submodules are present + # We already know the submodules are present substituteInPlace CMakeLists.txt \ --replace "check_submodules_present()" "" - # Trick configure system. - sed -n 's,^ *path = \(.*\),\1,p' .gitmodules | while read path; do - mkdir "$path/.git" - done - + # Devendoring rm -rf externals/zstd externals/libressl cp -r ${zstd.src} externals/zstd tar xf ${libressl.src} -C externals/ @@ -69,6 +78,7 @@ stdenv.mkDerivation { ''; # Todo: cubeb audio backend (the default one) doesn't work on the SDL interface. + # This seems to be a problem with libpulseaudio, other applications have similar problems (e.g Duckstation). # Note that the two interfaces have two separate configuration files. meta = with lib; {