diff options
Diffstat (limited to 'pkgs/applications/emulators/citra/generic.nix')
-rw-r--r-- | pkgs/applications/emulators/citra/generic.nix | 107 |
1 files changed, 64 insertions, 43 deletions
diff --git a/pkgs/applications/emulators/citra/generic.nix b/pkgs/applications/emulators/citra/generic.nix index 8df720e60b79..21b60bb4056e 100644 --- a/pkgs/applications/emulators/citra/generic.nix +++ b/pkgs/applications/emulators/citra/generic.nix @@ -6,70 +6,93 @@ , lib , stdenv -, fetchFromGitHub , cmake , boost , pkg-config -, libusb1 +, catch2_3 +, cpp-jwt +, cryptopp +, enet +, ffmpeg +, fmt , glslang +, httplib +, inih +, libusb1 +, nlohmann_json +, openal +, openssl +, SDL2 +, soundtouch +, spirv-tools , zstd -, libressl -, enableSdl2 ? true, SDL2 -, enableQt ? true, qtbase, qtmultimedia, wrapQtAppsHook +, vulkan-headers +, vulkan-loader +, enableSdl2Frontend ? true +, enableQt ? true, qtbase, qtmultimedia, qtwayland, wrapQtAppsHook , enableQtTranslation ? enableQt, qttools , enableWebService ? true , enableCubeb ? true, cubeb -, enableFfmpegAudioDecoder ? true -, enableFfmpegVideoDumper ? true -, ffmpeg_4 , useDiscordRichPresence ? true, rapidjson -, enableFdk ? false, fdk_aac }: -assert lib.assertMsg (!enableFfmpegAudioDecoder || !enableFdk) "Can't enable both enableFfmpegAudioDecoder and enableFdk"; - -stdenv.mkDerivation rec { +stdenv.mkDerivation { inherit pname version src; nativeBuildInputs = [ cmake - glslang pkg-config + ffmpeg + glslang ] ++ lib.optionals enableQt [ wrapQtAppsHook ]; buildInputs = [ boost + catch2_3 + cpp-jwt + cryptopp + # intentionally omitted: dynarmic - prefer vendored version for compatibility + enet + fmt + httplib + inih libusb1 - ] ++ lib.optionals enableQt [ qtbase qtmultimedia ] - ++ lib.optional enableSdl2 SDL2 + nlohmann_json + openal + openssl + SDL2 + soundtouch + spirv-tools + vulkan-headers + # intentionally omitted: xbyak - prefer vendored version for compatibility + zstd + ] ++ lib.optionals enableQt [ qtbase qtmultimedia qtwayland ] ++ lib.optional enableQtTranslation qttools - ++ lib.optionals enableCubeb cubeb.passthru.backendLibs - ++ lib.optional (enableFfmpegAudioDecoder || enableFfmpegVideoDumper) ffmpeg_4 - ++ lib.optional useDiscordRichPresence rapidjson - ++ lib.optional enableFdk fdk_aac; + ++ lib.optional enableCubeb cubeb + ++ lib.optional useDiscordRichPresence rapidjson; cmakeFlags = [ - "-DUSE_SYSTEM_BOOST=ON" - "-DCITRA_WARNINGS_AS_ERRORS=OFF" - "-DCITRA_USE_BUNDLED_FFMPEG=OFF" - "-DCITRA_USE_BUNDLED_QT=OFF" - "-DUSE_SYSTEM_SDL2=ON" - "-DCMAKE_INSTALL_INCLUDEDIR=include" - "-DCMAKE_INSTALL_LIBDIR=lib" + "-DUSE_SYSTEM_LIBS=ON" + + "-DDISABLE_SYSTEM_DYNARMIC=ON" + "-DDISABLE_SYSTEM_GLSLANG=ON" # The following imported targets are referenced, but are missing: SPIRV-Tools-opt + "-DDISABLE_SYSTEM_LODEPNG=ON" # Not packaged in nixpkgs + "-DDISABLE_SYSTEM_VMA=ON" + "-DDISABLE_SYSTEM_XBYAK=ON" - # We dont want to bother upstream with potentially outdated compat reports + # We don't want to bother upstream with potentially outdated compat reports "-DCITRA_ENABLE_COMPATIBILITY_REPORTING=ON" "-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF" # We provide this deterministically - ] ++ lib.optional (!enableSdl2) "-DENABLE_SDL2=OFF" + ] ++ lib.optional (!enableSdl2Frontend) "-DENABLE_SDL2_FRONTEND=OFF" ++ lib.optional (!enableQt) "-DENABLE_QT=OFF" ++ lib.optional enableQtTranslation "-DENABLE_QT_TRANSLATION=ON" ++ lib.optional (!enableWebService) "-DENABLE_WEB_SERVICE=OFF" ++ lib.optional (!enableCubeb) "-DENABLE_CUBEB=OFF" - ++ lib.optional enableFfmpegAudioDecoder "-DENABLE_FFMPEG_AUDIO_DECODER=ON" - ++ lib.optional enableFfmpegVideoDumper "-DENABLE_FFMPEG_VIDEO_DUMPER=ON" - ++ lib.optional useDiscordRichPresence "-DUSE_DISCORD_PRESENCE=ON" - ++ lib.optional enableFdk "-DENABLE_FDK=ON"; + ++ lib.optional useDiscordRichPresence "-DUSE_DISCORD_PRESENCE=ON"; - postPatch = with lib; let + # causes redefinition of _FORTIFY_SOURCE + hardeningDisable = [ "fortify3" ]; + + postPatch = let branchCaptialized = (lib.toUpper (lib.substring 0 1 branch) + lib.substring 1 (-1) branch); in '' # Fix file not found when looking in var/empty instead of opt @@ -85,19 +108,17 @@ stdenv.mkDerivation rec { # Add versions echo 'set(BUILD_FULLNAME "${branchCaptialized} ${version}")' >> CMakeModules/GenerateBuildInfo.cmake - - # Devendoring - 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 ''; - # Fixes https://github.com/NixOS/nixpkgs/issues/171173 - postInstall = lib.optionalString (enableCubeb && enableSdl2) '' + postInstall = let + libs = lib.makeLibraryPath [ vulkan-loader ]; + in lib.optionalString enableSdl2Frontend '' wrapProgram "$out/bin/citra" \ - --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath cubeb.passthru.backendLibs} + --prefix LD_LIBRARY_PATH : ${libs} + '' + lib.optionalString enableQt '' + qtWrapperArgs+=( + --prefix LD_LIBRARY_PATH : ${libs} + ) ''; meta = with lib; { |