Subject: [bug#76458] [PATCH] gnu: Add flycast.

From: Andrew Wong <[email-masked]>
Date: Tue, 4 Mar 2025 13:57:49 -0500

* gnu/packages/emulators.scm (flycast): New variable.

Change-Id: I358235492a3493c3126f7ca9f738ed2706e36105
---
 gnu/packages/emulators.scm | 69 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 0eafc3df9e..70e5fad00c 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -23,6 +23,7 @@
 ;;; Copyright © 2023 Zheng Junjie <[email-masked]>
 ;;; Copyright © 2024 Artyom V. Poptsov <[email-masked]>
 ;;; Copyright © 2025 Ricardo Wurmus <[email-masked]>
+;;; Copyright © 2025 Andrew Wong <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -4072,6 +4073,74 @@ (define-public exomizer
     ;; zlib license with an (non-)advertising clause.
     (license license:zlib)))
 
+(define-public flycast
+  (package
+    (name "flycast")
+    (version "2.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/flyinghead/flycast")
+             (commit (string-append "v" version))
+             ;; There are many bundled packages here included as git
+             ;; submodules. Removing many of them would require patching the
+             ;; source code and repository layout.
+             (recursive? #t)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ainy75gkrvilcm89hq6wq9md41w0mxgp6l27q5fzrxxykpjh6ym"))
+       (modules '((guix build utils)))
+       (snippet #~(begin
+                    (substitute* "CMakeLists.txt"
+                      (("add_subdirectory\\(core/deps/Vulkan-Headers\\)")
+                       "find_package(VulkanHeaders)"))
+                    (with-directory-excursion "core/deps"
+                      (for-each delete-file-recursively
+                                '("SDL"
+                                  "Spout"
+                                  "Syphon"
+                                  "Vulkan-Headers"
+                                  "breakpad"
+                                  "discord-rpc"
+                                  "libzip"
+                                  "oboe")))))))
+    (build-system cmake-build-system)
+    (inputs (list alsa-lib
+                  ao
+                  curl
+                  glslang
+                  libzip
+                  lua
+                  miniupnpc
+                  pulseaudio
+                  sdl2
+                  spirv-tools
+                  vulkan-headers
+                  pkg-config))
+    (arguments
+     (list
+      #:tests? #f ; no test suite
+      #:configure-flags
+      #~(list "-DUSE_ALSA=ON"
+              "-DUSE_BREAKPAD=OFF"
+              "-DUSE_DX11=OFF"
+              "-DUSE_DX9=OFF"
+              ;; The USE_HOST_GLSLANG option is not implemented correctly.
+              ;; (see: https://github.com/flyinghead/flycast/issues/1843)
+              "-DUSE_HOST_GLSLANG=OFF"
+              "-DUSE_HOST_LIBZIP=ON"
+              "-DUSE_HOST_SDL=ON"
+              "-DUSE_LIBAO=ON"
+              "-DUSE_LUA=ON"
+              "-DUSE_PULSEAUDIO=ON"
+              "-DUSE_VULKAN=ON")))
+    (home-page "https://github.com/flyinghead/flycast")
+    (synopsis "Sega Dreamcast, Naomi, Naomi 2, and Atomiswave emulator")
+    (description "Flycast is a multi-platform Sega Dreamcast, Naomi, Naomi 2,
+and Atomiswave emulator derived from reicast.")
+    (license license:gpl2+)))
+
 (define-public freedisksysrom
   ;; There is no release; use the latest commit.
   (let ((commit "0d5f95f109bb3aadf2bb9510bfda13879bbd5266")

base-commit: cd20619cfcb32c2631fb602729512740bc510550
-- 
2.48.1