{ pname , version , src , branch , compat-list , lib , stdenv , runCommandLocal , substituteAll , wrapQtAppsHook , alsa-lib , boost , catch2 , cmake , doxygen , ffmpeg , fmt_8 , glslang , libjack2 , libopus , libpulseaudio , libusb1 , libva , libzip , lz4 , nlohmann_json , perl , pkg-config , python3 , qtbase , qttools , qtwebengine , rapidjson , SDL2 , sndio , speexdsp , udev , vulkan-headers , vulkan-loader , zlib , zstd }: stdenv.mkDerivation rec { inherit pname version src; # Replace icons licensed under CC BY-ND 3.0 with free ones to allow # for binary redistribution: https://github.com/yuzu-emu/yuzu/pull/8104 # The patch hosted on GitHub has the binary information stripped, so # it has been regenerated with "git format-patch --text --full-index --binary" patches = [ ./yuzu-free-icons.patch ]; nativeBuildInputs = [ cmake doxygen perl pkg-config python3 wrapQtAppsHook ]; buildInputs = [ alsa-lib boost catch2 ffmpeg fmt_8 glslang libjack2 libopus libpulseaudio libusb1 libva libzip lz4 nlohmann_json qtbase qttools qtwebengine rapidjson SDL2 sndio speexdsp udev zlib zstd ]; doCheck = true; # This changes `ir/opt` to `ir/var/empty` in `externals/dynarmic/src/dynarmic/CMakeLists.txt` # making the build fail, as that path does not exist dontFixCmake = true; cmakeFlags = [ "-DYUZU_USE_BUNDLED_QT=OFF" "-DYUZU_USE_BUNDLED_FFMPEG=OFF" "-DYUZU_USE_BUNDLED_OPUS=OFF" "-DYUZU_USE_EXTERNAL_SDL2=OFF" "-DENABLE_QT_TRANSLATION=ON" "-DYUZU_USE_QT_WEB_ENGINE=ON" "-DUSE_DISCORD_PRESENCE=ON" # We dont want to bother upstream with potentially outdated compat reports "-DYUZU_ENABLE_COMPATIBILITY_REPORTING=OFF" "-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF" # We provide this deterministically ]; preConfigure = '' # This prevents a check for submodule directories. rm -f .gitmodules # see https://github.com/NixOS/nixpkgs/issues/114044, setting this through cmakeFlags does not work. cmakeFlagsArray+=( "-DTITLE_BAR_FORMAT_IDLE=yuzu ${branch} ${version}" "-DTITLE_BAR_FORMAT_RUNNING=yuzu ${branch} ${version} | {3}" ) ''; # This must be done after cmake finishes as it overwrites the file postConfigure = '' ln -sf ${compat-list} ./dist/compatibility_list/compatibility_list.json ''; # Fix vulkan detection postFixup = '' for bin in $out/bin/yuzu $out/bin/yuzu-cmd; do wrapProgram $bin --prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib done ''; passthru.updateScript = runCommandLocal "yuzu-${branch}-updateScript" { script = substituteAll { src = ./update.sh; inherit branch; }; } "install -Dm755 $script $out"; meta = with lib; { homepage = "https://yuzu-emu.org"; changelog = "https://yuzu-emu.org/entry"; description = "The ${branch} branch of an experimental Nintendo Switch emulator written in C++"; longDescription = '' An experimental Nintendo Switch emulator written in C++. Using the mainline branch is recommanded for general usage. Using the early-access branch is recommanded if you would like to try out experimental features, with a cost of stability. ''; mainProgram = "yuzu"; platforms = [ "x86_64-linux" ]; license = with licenses; [ gpl3Plus # Icons. Note that this would be cc0 and cc-by-nd-30 without the "yuzu-free-icons" patch asl20 mit cc0 ]; maintainers = with maintainers; [ ashley ivar joshuafern sbruder ]; }; }