summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk6
-rw-r--r--gnu/packages/emulators.scm340
-rw-r--r--gnu/packages/patches/dolphin-emu-data.patch15
-rw-r--r--gnu/packages/patches/dolphin-emu-unbundle-tinygltf.patch80
-rw-r--r--gnu/packages/patches/dolphin-emu-unbundle-watcher.patch50
-rw-r--r--gnu/packages/patches/libretro-dolphin-emu-gc-font-tool.patch17
-rw-r--r--gnu/packages/patches/libretro-dolphin-emu-libusb-assert.patch33
-rw-r--r--gnu/packages/patches/libretro-dolphin-emu-vulkan-headers.patch16
8 files changed, 412 insertions, 145 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 76f2e402b5..17375a2903 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1214,7 +1214,8 @@ dist_patch_DATA = \
%D%/packages/patches/docbook2x-static-datadir-evaluation.patch \
%D%/packages/patches/doc++-include-directives.patch \
%D%/packages/patches/doc++-segfault-fix.patch \
- %D%/packages/patches/dolphin-emu-data.patch \
+ %D%/packages/patches/dolphin-emu-unbundle-tinygltf.patch \
+ %D%/packages/patches/dolphin-emu-unbundle-watcher.patch \
%D%/packages/patches/dovecot-opensslv3.patch \
%D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch \
%D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch \
@@ -1687,6 +1688,9 @@ dist_patch_DATA = \
%D%/packages/patches/libguestfs-syms.patch \
%D%/packages/patches/libinfinity-renew-test-certificate.patch \
%D%/packages/patches/libretro-dolphin-emu-data.patch \
+ %D%/packages/patches/libretro-dolphin-emu-gc-font-tool.patch \
+ %D%/packages/patches/libretro-dolphin-emu-libusb-assert.patch \
+ %D%/packages/patches/libretro-dolphin-emu-vulkan-headers.patch \
%D%/packages/patches/librewolf-add-store-to-rdd-allowlist.patch \
%D%/packages/patches/librewolf-neuter-locale-download.patch \
%D%/packages/patches/librewolf-use-system-wide-dir.patch \
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 366007fdb0..b7ead65fa5 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -15,7 +15,7 @@
;;; Copyright © 2020 Christopher Howard <christopher@librehacker.com>
;;; Copyright © 2021 Felipe Balbi <balbi@kernel.org>
;;; Copyright © 2021, 2024 Felix Gruber <felgru@posteo.net>
-;;; Copyright © 2021, 2024, 2025 Maxim Cournoyer <maxim@guixotic.coop>
+;;; Copyright © 2021, 2024-2025 Maxim Cournoyer <maxim@guixotic.coop>
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2023 c4droid <c4droid@foxmail.com>
;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
@@ -73,6 +73,7 @@
#:use-module (gnu packages digest)
#:use-module (gnu packages engineering)
#:use-module (gnu packages elf)
+ #:use-module (gnu packages file-systems)
#:use-module (gnu packages flex)
#:use-module (gnu packages fltk)
#:use-module (gnu packages fonts)
@@ -111,6 +112,7 @@
#:use-module (gnu packages texinfo)
#:use-module (gnu packages textutils)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages toolkits)
#:use-module (gnu packages upnp)
#:use-module (gnu packages video)
#:use-module (gnu packages vulkan)
@@ -322,97 +324,96 @@ console.")
It aims to support Nintendo DSi and 3DS as well.")
(license license:gpl3+)))
-;; Building from recent Git because the official 5.0 release no longer builds.
-;; Following commits and revision numbers of beta versions listed at
-;; https://dolphin-emu.org/download/.
+(define dolphin-rcheevos-submodule
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/RetroAchievements/rcheevos")
+ (commit "b443902b1cdfee5a66b09fec20a94d2d2afaf2ec")))
+ (file-name "dolphin-rcheevos-submodule-checkout")
+ (sha256
+ (base32
+ "1118l6ln73rjj7hw45712lm2i24m96nygiiw57hlcyaxijppl1vj"))))
+
(define-public dolphin-emu
- (let ((commit "f9deb68aee962564b1495ff04c54c015e58d086f")
- (revision "13669"))
+ ;; Note: make sure to update the above rcheevos commit to match that of the
+ ;; corresponding git submodule in dolphin (see:
+ ;; <https://github.com/dolphin-emu/dolphin/tree/master/Externals/>).
+ (let ((commit "64d4c4020cf444d5afea708b38d1b363e532c7ba")
+ (revision "0"))
(package
(name "dolphin-emu")
- (version (git-version "5.0" revision commit))
+ (version (git-version "2506" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
- (url "https://github.com/dolphin-emu/dolphin")
- (commit commit)))
+ (url "https://github.com/dolphin-emu/dolphin")
+ (commit commit)))
(file-name (git-file-name name version))
(sha256
- (base32 "1p8qsxlabgmz3nic0a9ghh9d3lzl5f8i3kmdrrvx6w8kdlp33018"))
+ (base32 "095326n1dznaplll5crlfdg2d39qxxlhgch5fn7vz8majz0qb5pg"))
(modules '((guix build utils)
- (ice-9 regex)))
+ (ice-9 ftw)
+ (ice-9 regex)
+ (srfi srfi-26)))
(snippet
- '(begin
- ;; Remove external stuff we don't need.
- (for-each (lambda (dir)
- (delete-file-recursively
- (string-append "Externals/" dir)))
- '("LZO" "OpenAL" "Qt" "SFML" "bzip2"
- ;; XXX: Attempting to use the vulkan-headers package
- ;; results in "error:
- ;; ‘VK_PRESENT_MODE_RANGE_SIZE_KHR’ was not declared
- ;; in this scope".
- ;;"Vulkan"
- "cubeb" "curl" "enet"
- "ffmpeg" "fmt" "gettext"
- ;; XXX: Attempting to use an unbundled glslang at the
- ;; exact commit used by Dolphin still results in
- ;; "error: ‘DefaultTBuiltInResource’ is not a member
- ;; of ‘glslang’".
- ;;"glslang"
- ;; XXX: Googletest cannot currently easily be
- ;; unbundled, as there are missing linking
- ;; directives.
- ;;"gtest"
- "hidapi" "libpng" "libusb" "mbedtls"
- "miniupnpc" "minizip" "MoltenVK" "pugixml"
- "soundtouch"
- "xxhash" "zlib" "zstd"))
- ;; Clean up the source.
- (for-each delete-file
- (find-files
- "."
- (lambda (file _)
- (and (string-match "\\.(bin|dsy|exe|jar|rar)$" file)
- ;; Preserve the important wc24 .bin
- ;; configuration *data* files.
- (not (member (basename file)
- '("misc.bin"
- "nwc24dl.bin"
- "nwc24fl.bin"
- "nwc24fls.bin")))))))
- ;; Do not attempt to include now-missing directories.
- (substitute* "CMakeLists.txt"
- ((".*add_subdirectory.*Externals/enet.*") "")
- ((".*add_subdirectory.*Externals/soundtouch.*") "")
- ((".*add_subdirectory.*Externals/xxhash.*") ""))))
- (patches (search-patches "dolphin-emu-data.patch"))))
+ #~(begin
+ (define (delete-all-but directory . preserve)
+ (with-directory-excursion directory
+ (let* ((pred (negate (cut member <>
+ (cons* "." ".." preserve))))
+ (items (scandir "." pred)))
+ (for-each (cut delete-file-recursively <>) items))))
+
+ ;; Clean up the source from bundled libraries we don't need.
+ (delete-all-but "Externals"
+ ;; XXX: The build system is currently hard-coded
+ ;; to rely on these bundled copies.
+ "Bochs_disasm"
+ "FatFs"
+ "FreeSurround"
+ "cpp-optparse"
+ "expr"
+ "glslang"
+ "imgui"
+ "implot" ;submodule
+ "picojson"
+ "rangeset"
+ "rcheevos") ;submodule
+ (with-directory-excursion "Externals"
+ (copy-recursively #$dolphin-rcheevos-submodule
+ "rcheevos/rcheevos")
+ (copy-recursively #$(package-source implot)
+ "implot/implot"))
+
+ (for-each delete-file
+ (find-files
+ "."
+ (lambda (file _)
+ (and (string-match "\\.(bin|dsy|exe|jar|rar)$" file)
+ ;; Preserve the important wc24 .bin
+ ;; configuration *data* files.
+ (not (member (basename file)
+ '("misc.bin"
+ "nwc24dl.bin"
+ "nwc24fl.bin"
+ "nwc24fls.bin")))))))))
+ (patches (search-patches "dolphin-emu-unbundle-watcher.patch"
+ "dolphin-emu-unbundle-tinygltf.patch"))))
(build-system cmake-build-system)
(arguments
(list
#:phases
#~(modify-phases %standard-phases
- (add-before 'configure 'remove-unittests-target-post-build-command
- (lambda _
- ;; To skip a few problematic tests, CTest will be manually
- ;; invoked in the post-check phase.
- (with-directory-excursion "Source/UnitTests"
- (substitute* "CMakeLists.txt"
- (("add_custom_command\\(TARGET unittests POST_BUILD.*")
- "")))))
- (add-before 'configure 'generate-fonts&hardcore-libvulkan-path
+ (add-before 'configure 'generate-fonts&hardcode-libvulkan-path
(lambda* (#:key inputs #:allow-other-keys)
(let ((fontfile
- (search-input-file inputs
- "/share/fonts/truetype/wqy-microhei.ttc"))
+ (search-input-file
+ inputs "/share/fonts/truetype/wqy-microhei.ttc"))
(libvulkan
(search-input-file inputs "/lib/libvulkan.so")))
(chdir "docs")
- ;; Include a missing header, needed for gcc@14.
- (substitute* "gc-font-tool.cpp"
- (("#include <cstring>" all)
- (string-append all "\n#include <cstdint>")))
(invoke "bash" "-c" "g++ -O2 $(freetype-config \
--cflags --libs) gc-font-tool.cpp -o gc-font-tool")
(invoke "./gc-font-tool" "a" fontfile "font_western.bin")
@@ -424,21 +425,6 @@ It aims to support Nintendo DSi and 3DS as well.")
(("\"vulkan\", 1") (string-append "\"vulkan\""))
(("\"vulkan\"") (string-append "\"" libvulkan "\""))
(("Common::DynamicLibrary::GetVersionedFilename") "")))))
- (add-after 'check 'post-check
- (lambda* (#:key tests? #:allow-other-keys)
- (when tests?
- (with-directory-excursion "Source/UnitTests"
- (invoke "ctest" "-V" "--output-on-failure"
- ;; These tests fail due to libusb failing to
- ;; init inside the build container.
- "-E" (string-join
- '("MMIOTest"
- "PageFaultTest"
- "CoreTimingTest"
- "FileSystemTest"
- "PowerPCTest"
- "VertexLoaderTest")
- "|"))))))
(add-before 'install 'build-codeloader.bin
(lambda _
(with-directory-excursion "../source/docs"
@@ -462,26 +448,14 @@ It aims to support Nintendo DSi and 3DS as well.")
(with-directory-excursion "../source"
(invoke "python3" "docs/DSP/free_dsp_rom/generate_coefs.py")
(rename-file "dsp_coef.bin" "Data/Sys/GC/dsp_coef.bin")))))
- ;; The FindGTK2 cmake script only checks hardcoded directories for
- ;; glib/gtk headers. Also add some include directories via the CXX
- ;; flags to let GCC find some headers not actively searched by the
- ;; build system.
#:configure-flags
- #~(list (string-append "-DCMAKE_CXX_FLAGS="
- "-I" (search-input-directory
- %build-inputs "include/soundtouch"))
- "-DDSPTOOL=ON"
- (string-append "-DX11_INCLUDE_DIR="
- #$(this-package-input "libx11")
- "/include")
- (string-append "-DX11_LIBRARIES="
- (search-input-file %build-inputs
- "lib/libX11.so"))
- "-DX11_FOUND=1")
+ #~(list "-DUSE_DISCORD_PRESENCE=OFF" ;avoid bundled discord-rpc lib
+ "-DDSPTOOL=ON")
#:test-target "unittests"))
(native-inputs
(list (cross-gcc "powerpc-linux-gnu")
gettext-minimal
+ googletest
pkg-config
python-minimal
python-numpy))
@@ -494,14 +468,14 @@ It aims to support Nintendo DSi and 3DS as well.")
curl
enet
eudev
- ffmpeg-4
- fmt-7
+ ffmpeg
+ fmt-11
font-wqy-microhei
freetype
glew
glib
glu
- gtk+-2
+ gtk+
hidapi
libevdev
libpng
@@ -509,20 +483,28 @@ It aims to support Nintendo DSi and 3DS as well.")
libx11
libxi
libxrandr
+ lz4
lzo
mbedtls-lts
+ mgba-for-dolphin
mesa
miniupnpc
- minizip-ng-compat
+ minizip-ng
openal
pugixml
pulseaudio
- qtbase-5
- sdl2
- sfml-2
+ qtbase
+ qtsvg
+ sdl3
+ sfml
soil
- soundtouch-1/integer-samples
+ spirv-cross
+ spng
+ tinygltf
+ vulkan-headers ;references loader
vulkan-loader
+ vulkan-memory-allocator
+ watcher
xxhash
zlib
`(,zstd "lib")))
@@ -536,36 +518,102 @@ turbo speed, networked multiplayer, and graphical enhancements.")
;; dolphin/Data/Sys/GC/font_*.bin: Licensed under ASL2.0.
(license (list license:gpl2+ license:asl2.0 license:fdl1.2+)))))
+;;; XXX: The libretro port is currently based on an old version of dolphin, so
+;;; its packaging/inputs are lagging behind.
(define-public libretro-dolphin-emu
;; There are no tag or release; use the latest commit.
- (let ((commit "89a4df725d4eb24537728f7d655cddb1add25c18")
- (revision "0"))
+ (let ((commit "a09f78f735f0d2184f64ba5b134abe98ee99c65f")
+ (revision "1"))
(package
(inherit dolphin-emu)
(name "libretro-dolphin-emu")
(version (git-version "5.0" revision commit))
- (source (origin
- (inherit (package-source dolphin-emu))
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/libretro/dolphin")
- (commit commit)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "1fvm6hy0ihc0j3sgv88a7ak08c0kyikmmiif827j981fy7zvglvz"))
- (patches (search-patches "libretro-dolphin-emu-data.patch"))))
+ (source
+ (origin
+ (inherit (package-source dolphin-emu))
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/libretro/dolphin")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "15vv3kz1vcsk53m4b19ckx9xx9cx8l0lgpzalpy625iv7qvdcj9m"))
+ (modules '((guix build utils)
+ (ice-9 ftw)
+ (ice-9 regex)
+ (srfi srfi-26)))
+ (snippet
+ #~(begin
+ ;; XXX: 'delete-all-but' is copied from the turbovnc package.
+ (define (delete-all-but directory . preserve)
+ (define (directory? x)
+ (and=> (stat x #f)
+ (compose (cut eq? 'directory <>) stat:type)))
+ (with-directory-excursion directory
+ (let* ((pred
+ (negate (cut member <> (append '("." "..") preserve))))
+ (items (scandir "." pred)))
+ (for-each (lambda (item)
+ (if (directory? item)
+ (delete-file-recursively item)
+ (delete-file item)))
+ items))))
+
+ ;; Clean up the source from bundled libraries we don't need.
+ (delete-all-but "Externals"
+ ;; XXX: The build system is currently hard-coded
+ ;; to rely on these bundled copies.
+ "Bochs_disasm"
+ "FreeSurround"
+ "Libretro"
+ "cpp-optparse"
+ "glslang"
+ "imgui"
+ "picojson")
+ (for-each delete-file
+ (find-files
+ "."
+ (lambda (file _)
+ (and (string-match "\\.(bin|dsy|exe|jar|rar)$" file)
+ ;; Preserve the important wc24 .bin
+ ;; configuration *data* files.
+ (not (member (basename file)
+ '("misc.bin"
+ "nwc24dl.bin"
+ "nwc24fl.bin"
+ "nwc24fls.bin")))))))))
+ (patches
+ (search-patches "libretro-dolphin-emu-data.patch"
+ "libretro-dolphin-emu-gc-font-tool.patch"
+ "libretro-dolphin-emu-libusb-assert.patch"
+ "libretro-dolphin-emu-vulkan-headers.patch"))))
(arguments
(substitute-keyword-arguments (package-arguments dolphin-emu)
((#:configure-flags flags ''())
- #~(cons "-DLIBRETRO=ON" #$flags))
+ #~(cons* (string-append "-DCMAKE_CXX_FLAGS="
+ "-I" (search-input-directory
+ %build-inputs "include/soundtouch"))
+ "-DLIBRETRO=ON"
+ "-DUSE_SHARED_ENET=ON"
+ #$flags))
((#:phases phases '%standard-phases)
#~(modify-phases #$phases
+ (add-after 'unpack 'link-unittest-to-gtest
+ (lambda _
+ ;; Otherwise, linking with the tests with gtest_main fails
+ ;; with a "DSO missing from command line"
+ (substitute* "Source/UnitTests/CMakeLists.txt"
+ (("PRIVATE core uicommon gtest_main" all)
+ (string-append all " gtest")))))
(add-after 'unpack 'deregister-bundled-sources
(lambda _
(substitute* "CMakeLists.txt"
((".*add_subdirectory.*Externals/curl.*") "")
- ((".*add_subdirectory.*Externals/libpng.*") ""))))
+ ((".*add_subdirectory.*Externals/gtest.*") "")
+ ((".*add_subdirectory.*Externals/libpng.*") "")
+ ((".*add_subdirectory.*Externals/soundtouch.*") "")
+ ((".*add_subdirectory.*Externals/xxhash.*") ""))))
(replace 'install
(lambda _
(install-file "dolphin_libretro.so"
@@ -581,11 +629,45 @@ turbo speed, networked multiplayer, and graphical enhancements.")
(copy-recursively "../source/Data/Sys"
(string-append sysdir "/Sys")))))))))
(inputs
- ;; Delete large and extraneous inputs.
- (modify-inputs (package-inputs dolphin-emu)
- (delete "ffmpeg"
- "gtk+"
- "qtbase")))
+ (list alsa-lib
+ ao
+ bluez
+ bzip2
+ cubeb
+ curl
+ enet
+ eudev
+ fmt
+ font-wqy-microhei
+ freetype
+ glew
+ glib
+ glu
+ googletest
+ hidapi
+ libevdev
+ libpng
+ libusb
+ libx11
+ libxi
+ libxrandr
+ lzo
+ mbedtls-lts
+ mesa
+ miniupnpc
+ minizip-ng-compat
+ openal
+ pugixml
+ pulseaudio
+ sdl2
+ sfml-2
+ soil
+ soundtouch-1/integer-samples
+ xxhash
+ vulkan-loader
+ vulkan-headers
+ zlib
+ `(,zstd "lib")))
(synopsis "Libretro port of Dolphin, the Nintendo Wii/GameCube emulator"))))
(define-public dosbox
diff --git a/gnu/packages/patches/dolphin-emu-data.patch b/gnu/packages/patches/dolphin-emu-data.patch
deleted file mode 100644
index 6ba959b929..0000000000
--- a/gnu/packages/patches/dolphin-emu-data.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Resolve a hang in the menu of this game.
-
-Upstream-status: https://github.com/dolphin-emu/dolphin/pull/13285
-
-diff --git a/Data/Sys/GameSettings/GWR.ini b/Data/Sys/GameSettings/GWR.ini
-new file mode 100644
-index 0000000000..fdbc0c312f
---- /dev/null
-+++ b/Data/Sys/GameSettings/GWR.ini
-@@ -0,0 +1,5 @@
-+# GWR - WAVE RACE / BLUE STORM
-+
-+[Core]
-+# Disable multi-threading to avoid a hang in the game menu.
-+CPUThread = False
diff --git a/gnu/packages/patches/dolphin-emu-unbundle-tinygltf.patch b/gnu/packages/patches/dolphin-emu-unbundle-tinygltf.patch
new file mode 100644
index 0000000000..1c91823785
--- /dev/null
+++ b/gnu/packages/patches/dolphin-emu-unbundle-tinygltf.patch
@@ -0,0 +1,80 @@
+Upstream-status: https://github.com/dolphin-emu/dolphin/pull/13824
+
+diff --git a/CMake/DolphinLibraryTools.cmake b/CMake/DolphinLibraryTools.cmake
+index 4c395a8ef9..efa0d6a9e2 100644
+--- a/CMake/DolphinLibraryTools.cmake
++++ b/CMake/DolphinLibraryTools.cmake
+@@ -1,14 +1,3 @@
+-# like add_library(new ALIAS old) but avoids add_library cannot create ALIAS target "new" because target "old" is imported but not globally visible. on older cmake
+-# This can be replaced with a direct alias call once our minimum is cmake 3.18
+-function(dolphin_alias_library new old)
+- string(REPLACE "::" "" library_no_namespace ${old})
+- if (NOT TARGET _alias_${library_no_namespace})
+- add_library(_alias_${library_no_namespace} INTERFACE)
+- target_link_libraries(_alias_${library_no_namespace} INTERFACE ${old})
+- endif()
+- add_library(${new} ALIAS _alias_${library_no_namespace})
+-endfunction()
+-
+ # Makes an imported target if it doesn't exist. Useful for when find scripts from older versions of cmake don't make the targets you need
+ function(dolphin_make_imported_target_if_missing target lib)
+ if(${lib}_FOUND AND NOT TARGET ${target})
+@@ -85,7 +74,7 @@ function(dolphin_find_optional_system_library_pkgconfig library search alias bun
+ endif()
+ if(${library}_FOUND)
+ message(STATUS "Using system ${library}")
+- dolphin_alias_library(${alias} PkgConfig::${library})
++ add_library(${alias} ALIAS PkgConfig::${library})
+ set(${library}_TYPE "System" PARENT_SCOPE)
+ else()
+ dolphin_add_bundled_library(${library} ${use_system} ${bundled_path})
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index c277e2a10a..67b72179f3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ ########################################
+ # General setup
+ #
+-cmake_minimum_required(VERSION 3.13)
++cmake_minimum_required(VERSION 3.18)
+
+ cmake_policy(SET CMP0079 NEW) # let target_link_libraries() link to a target defined in a different directory
+ cmake_policy(SET CMP0080 OLD) # allow using BundleUtilities at configure time
+@@ -657,7 +657,11 @@ add_subdirectory(Externals/glslang)
+ if(WIN32 OR APPLE)
+ add_subdirectory(Externals/spirv_cross)
+ endif()
+-add_subdirectory(Externals/tinygltf)
++
++dolphin_find_optional_system_library(TinyGLTF Externals/tinygltf)
++if(NOT DEFINED tinygltf)
++ add_library(tinygltf ALIAS tinygltf::tinygltf) # using system library
++endif()
+
+ if(ENABLE_VULKAN)
+ add_definitions(-DHAS_VULKAN)
+diff --git a/Externals/tinygltf/CMakeLists.txt b/Externals/tinygltf/CMakeLists.txt
+index 0d86268bbe..9e6a99c6f8 100644
+--- a/Externals/tinygltf/CMakeLists.txt
++++ b/Externals/tinygltf/CMakeLists.txt
+@@ -7,5 +7,5 @@ if (NOT MSVC)
+ endif()
+ target_sources(tinygltf PRIVATE
+ tinygltf/tiny_gltf.cc)
+-target_include_directories(tinygltf INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
++target_include_directories(tinygltf INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/tinygltf)
+ dolphin_disable_warnings(tinygltf)
+diff --git a/Source/Core/VideoCommon/Assets/MeshAsset.cpp b/Source/Core/VideoCommon/Assets/MeshAsset.cpp
+index bde8c8aab6..13eb2b4448 100644
+--- a/Source/Core/VideoCommon/Assets/MeshAsset.cpp
++++ b/Source/Core/VideoCommon/Assets/MeshAsset.cpp
+@@ -7,7 +7,7 @@
+ #include <array>
+ #include <utility>
+
+-#include <tinygltf/tiny_gltf.h>
++#include <tiny_gltf.h>
+
+ #include "Common/IOFile.h"
+ #include "Common/Logging/Log.h"
diff --git a/gnu/packages/patches/dolphin-emu-unbundle-watcher.patch b/gnu/packages/patches/dolphin-emu-unbundle-watcher.patch
new file mode 100644
index 0000000000..c18a6c2ec4
--- /dev/null
+++ b/gnu/packages/patches/dolphin-emu-unbundle-watcher.patch
@@ -0,0 +1,50 @@
+Upstream-status: https://github.com/dolphin-emu/dolphin/pull/13823
+
+diff --git a/CMake/DolphinLibraryTools.cmake b/CMake/DolphinLibraryTools.cmake
+index 4c395a8ef9..fb806b1b90 100644
+--- a/CMake/DolphinLibraryTools.cmake
++++ b/CMake/DolphinLibraryTools.cmake
+@@ -92,3 +92,30 @@ function(dolphin_find_optional_system_library_pkgconfig library search alias bun
+ set(${library}_TYPE "Bundled" PARENT_SCOPE)
+ endif()
+ endfunction()
++
++# This can be used for header-only libraries that doesn't offer a
++# pkg-config or CMake file. It uses CMake's find_file. LIBRARY is the
++# name of the library providing it, INCLUDE is the header file name
++# without its installation prefix (e.g. "wtr/watcher.hpp") while
++# BUNDLED_PATH is the root directory of the bundled library.
++function(dolphin_find_optional_system_include library include bundled_path)
++ dolphin_optional_system_library(use_system ${library})
++ string(TOUPPER ${library} upperlib)
++ if(use_system)
++ find_file(${library}_INCLUDE ${include})
++ if((NOT ${library}_INCLUDE) AND (NOT ${use_system} STREQUAL "AUTO"))
++ message(FATAL_ERROR "No system ${library} headers found. \
++Please install it or set USE_SYSTEM_${upperlib} to AUTO or OFF.")
++ endif()
++ endif()
++ if(${library}_INCLUDE)
++ message(STATUS "Using system ${library} headers")
++ set(${library}_TYPE "System" PARENT_SCOPE)
++ add_library(${library} INTERFACE IMPORTED GLOBAL)
++ set_target_properties(${library} PROPERTIES
++ INTERFACE_INCLUDE_DIRECTORIES ${${library}_INCLUDE})
++ else()
++ dolphin_add_bundled_library(${library} ${use_system} ${bundled_path})
++ set(${library}_TYPE "Bundled" PARENT_SCOPE)
++ endif()
++endfunction()
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index c277e2a10a..12b1c36ef0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -786,7 +786,7 @@ if (USE_RETRO_ACHIEVEMENTS)
+ add_subdirectory(Externals/rcheevos)
+ endif()
+
+-add_subdirectory(Externals/watcher)
++dolphin_find_optional_system_include(watcher wtr/watcher.hpp Externals/watcher)
+
+ ########################################
+ # Pre-build events: Define configuration variables and write SCM info header
diff --git a/gnu/packages/patches/libretro-dolphin-emu-gc-font-tool.patch b/gnu/packages/patches/libretro-dolphin-emu-gc-font-tool.patch
new file mode 100644
index 0000000000..6aeeec0e4f
--- /dev/null
+++ b/gnu/packages/patches/libretro-dolphin-emu-gc-font-tool.patch
@@ -0,0 +1,17 @@
+This patch is already merged in dolphin.
+
+It'll appear in libretro-dolphin whenever it is rebased on top of current
+dolphin source.
+
+diff --git a/docs/gc-font-tool.cpp b/docs/gc-font-tool.cpp
+index f09964609a..c43496d2fa 100644
+--- a/docs/gc-font-tool.cpp
++++ b/docs/gc-font-tool.cpp
+@@ -76,6 +76,7 @@
+ // Font data is encoded in 2 bit greyscale and in 8x8 blocks.
+
+ #include <cerrno>
++#include <cstdint>
+ #include <cstring>
+ #include <fstream>
+ #include <iostream>
diff --git a/gnu/packages/patches/libretro-dolphin-emu-libusb-assert.patch b/gnu/packages/patches/libretro-dolphin-emu-libusb-assert.patch
new file mode 100644
index 0000000000..ae07987602
--- /dev/null
+++ b/gnu/packages/patches/libretro-dolphin-emu-libusb-assert.patch
@@ -0,0 +1,33 @@
+This patch is already merged in dolphin.
+
+It'll appear in libretro-dolphin whenever it is rebased on top of current
+dolphin source.
+
+diff --git a/Source/Core/Core/LibusbUtils.cpp b/Source/Core/Core/LibusbUtils.cpp
+index a4083e2d06..1ef9777e71 100644
+--- a/Source/Core/Core/LibusbUtils.cpp
++++ b/Source/Core/Core/LibusbUtils.cpp
+@@ -9,8 +9,8 @@
+ #include <libusb.h>
+ #endif
+
+-#include "Common/Assert.h"
+ #include "Common/Flag.h"
++#include "Common/Logging/Log.h"
+ #include "Common/Thread.h"
+ #include "Core/LibusbUtils.h"
+
+@@ -23,9 +23,12 @@ public:
+ Impl()
+ {
+ const int ret = libusb_init(&m_context);
+- ASSERT_MSG(IOS_USB, ret == LIBUSB_SUCCESS, "Failed to init libusb: %s", libusb_error_name(ret));
+ if (ret != LIBUSB_SUCCESS)
++ {
++ ERROR_LOG(IOS_USB, "Failed to init libusb: %s", libusb_error_name(ret));
+ return;
++ }
++
+
+ #ifdef _WIN32
+ libusb_set_option(m_context, LIBUSB_OPTION_USE_USBDK);
diff --git a/gnu/packages/patches/libretro-dolphin-emu-vulkan-headers.patch b/gnu/packages/patches/libretro-dolphin-emu-vulkan-headers.patch
new file mode 100644
index 0000000000..9453f60688
--- /dev/null
+++ b/gnu/packages/patches/libretro-dolphin-emu-vulkan-headers.patch
@@ -0,0 +1,16 @@
+Partial backport from dolphin commit
+8e3dbe9671afa631e7a64496f5bfcb2a8206f152 ("Vulkan: update Vulkan headers to v1.3.204.")
+
+diff --git a/Source/Core/VideoBackends/Vulkan/SwapChain.h b/Source/Core/VideoBackends/Vulkan/SwapChain.h
+index 0077a93ec1..d83ee57051 100644
+--- a/Source/Core/VideoBackends/Vulkan/SwapChain.h
++++ b/Source/Core/VideoBackends/Vulkan/SwapChain.h
+@@ -94,7 +94,7 @@ private:
+ WindowSystemInfo m_wsi;
+ VkSurfaceKHR m_surface = VK_NULL_HANDLE;
+ VkSurfaceFormatKHR m_surface_format = {};
+- VkPresentModeKHR m_present_mode = VK_PRESENT_MODE_RANGE_SIZE_KHR;
++ VkPresentModeKHR m_present_mode = VK_PRESENT_MODE_IMMEDIATE_KHR;
+ AbstractTextureFormat m_texture_format = AbstractTextureFormat::Undefined;
+ bool m_vsync_enabled = false;
+ bool m_fullscreen_supported = false;