summaryrefslogtreecommitdiff
path: root/gnu/packages/emulators.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/emulators.scm')
-rw-r--r--gnu/packages/emulators.scm436
1 files changed, 273 insertions, 163 deletions
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 7c8202dd71..362e38a231 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -25,6 +25,7 @@
;;; Copyright © 2025 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2025 Andrew Wong <wongandj@icloud.comg>
;;; Copyright © 2025 Anderson Torres <anderson.torres.8519@gmail.com>
+;;; Copyright © 2025 Laura Kirsch <laurakirsch240406@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -377,7 +378,7 @@ console.")
(define-public melonds
(package
(name "melonds")
- (version "1.0rc")
+ (version "1.0")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -386,13 +387,12 @@ console.")
(file-name (git-file-name name version))
(sha256
(base32
- "1y8ilin758znizmxyq23plx1wnx2pc9zqd2qrvr1cgy0s2wzxr7z"))))
+ "0qrpqgiw678kcdvjl6hm9wi223m6igngppkvws3q86lmkwrhg039"))))
(build-system cmake-build-system)
(arguments ; no test suite
'(#:tests? #f))
(native-inputs
- (list gcc-13
- extra-cmake-modules
+ (list extra-cmake-modules
pkg-config))
(inputs
(list enet
@@ -468,10 +468,10 @@ It aims to support Nintendo DSi and 3DS as well.")
"rangeset"
"rcheevos") ;submodule
(with-directory-excursion "Externals"
+ ;; Note: Not copying implot sources here, which would
+ ;; introduce a top-level circular dependency.
(copy-recursively #$dolphin-rcheevos-submodule
- "rcheevos/rcheevos")
- (copy-recursively #$(package-source implot)
- "implot/implot"))
+ "rcheevos/rcheevos"))
(for-each delete-file
(find-files
@@ -495,6 +495,10 @@ It aims to support Nintendo DSi and 3DS as well.")
(guix build utils))
#:phases
#~(modify-phases %standard-phases
+ (add-after 'unpack 'copy-implot-source
+ (lambda _
+ (copy-recursively #$(package-source implot)
+ "Externals/implot/implot")))
(add-before 'configure 'generate-fonts&hardcode-libvulkan-path
(lambda* (#:key inputs #:allow-other-keys)
(let ((fontfile
@@ -639,18 +643,11 @@ turbo speed, networked multiplayer, and graphical enhancements.")
#~(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))))
+ (let* ((pred (negate (cut member <>
+ (cons* "." ".." preserve))))
(items (scandir "." pred)))
- (for-each (lambda (item)
- (if (directory? item)
- (delete-file-recursively item)
- (delete-file item)))
- items))))
+ (for-each (cut delete-file-recursively <>) items))))
;; Clean up the source from bundled libraries we don't need.
(delete-all-but "Externals"
@@ -1090,67 +1087,74 @@ The following systems are supported:
(license (list license:gpl2+ license:bsd-3))))
(define-public mgba
- (package
- (name "mgba")
- (version "0.10.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mgba-emu/mgba")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "1scyvcp8l5z1sy1hcr0wgdf8zrirg07fzqjdmhkjnyhxmb9sibb5"))
- (modules '((guix build utils)
- (ice-9 ftw)
- (srfi srfi-26)))
- (snippet
- #~(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))))
+ ;; Use the latest commit, as the last release does not support Qt 6 yet.
+ (let ((commit "c6aa8f5523b21fd84336c9855b7f4df54a606a32")
+ (revision "0"))
+ (package
+ (name "mgba")
+ (version (git-version "0.10.5" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/mgba-emu/mgba")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0dfsz4dsh49dc9xx9rjhfzfkg4h91i2ksgp2inlr9yhgldw9q8h3"))
+ (modules '((guix build utils)
+ (ice-9 ftw)
+ (srfi srfi-26)))
+ (snippet
+ #~(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))))
- (delete-all-but "src/third-party"
- "blip_buf"
- "inih")))))
- (build-system qt-build-system)
- (arguments
- (list
- #:qtbase qtbase
- #:configure-flags
- #~(list "-DBUILD_SUITE=ON"
- "-DUSE_DISCORD_RPC=OFF" ;avoid bundled copy
- "-DUSE_LIBZIP=OFF" ;use "zlib" instead
- "-DUSE_LZMA=OFF"))) ;do not use bundled LZMA
- (native-inputs (list cmocka pkg-config qttools))
- (inputs
- (list ffmpeg
- libedit
- elfutils
- libepoxy
- libpng
- mesa
- minizip
- ncurses
- qtbase
- qtmultimedia
- sdl2
- sqlite
- zlib))
- (home-page "https://mgba.io")
- (synopsis "Game Boy Advance emulator")
- (description
- "mGBA is an emulator for running Game Boy Advance games. It aims to be
-faster and more accurate than many existing Game Boy Advance emulators, as
-well as adding features that other emulators lack. It also supports Game Boy
-and Game Boy Color games")
- (license (list license:mpl2.0 ;mgba itself
- license:lgpl2.1+ ;blip_buf bundled library
- license:bsd-3)))) ;inih bundled library
+ (delete-all-but "src/third-party"
+ "blip_buf"
+ "inih")))))
+ (build-system qt-build-system)
+ (arguments
+ (list
+ #:qtbase qtbase
+ #:configure-flags
+ #~(list "-DBUILD_SUITE=ON"
+ "-DUSE_DISCORD_RPC=OFF" ;avoid bundled copy
+ "-DUSE_LIBZIP=OFF" ;use "zlib" instead
+ "-DUSE_LZMA=OFF") ;do not use bundled LZMA
+ ;; The platform-qt-autoscript and platform-qt-library tests fails due
+ ;; to 'LibraryModelTest::testList' not returning the expected value
+ ;; (see: <https://github.com/mgba-emu/mgba/issues/3593>).
+ #:test-exclude "(platform-qt-autoscript|platform-qt-library)"))
+ (native-inputs (list cmocka pkg-config qttools))
+ (inputs
+ (list ffmpeg
+ libedit
+ elfutils
+ libepoxy
+ libpng
+ mesa
+ minizip
+ ncurses
+ qtbase
+ qtmultimedia
+ sdl2
+ sqlite
+ zlib))
+ (home-page "https://mgba.io")
+ (synopsis "Game Boy Advance emulator")
+ (description
+ "mGBA is an emulator for running Game Boy Advance games. It aims to be
+ faster and more accurate than many existing Game Boy Advance emulators, as
+ well as adding features that other emulators lack. It also supports Game Boy
+ and Game Boy Color games")
+ (license (list license:mpl2.0 ;mgba itself
+ license:lgpl2.1+ ;blip_buf bundled library
+ license:bsd-3))))) ;inih bundled library
(define-public mgba-for-dolphin
;; The commit should match that of the mgba git submodule in dolphin (see:
@@ -2862,18 +2866,11 @@ GLSL (@file{.slang}) shaders for use with RetroArch.")
(srfi srfi-26))
;; 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))))
+ (let* ((pred (negate (cut member <>
+ (cons* "." ".." preserve))))
(items (scandir "." pred)))
- (for-each (lambda (item)
- (if (directory? item)
- (delete-file-recursively item)
- (delete-file item)))
- items))))
+ (for-each (cut delete-file-recursively <>) items))))
;; Remove as much bundled sources as possible, shaving off about
;; 65 MiB.
(delete-all-but "deps"
@@ -2952,7 +2949,7 @@ GLSL (@file{.slang}) shaders for use with RetroArch.")
(list alsa-lib
dbus
eudev
- ffmpeg
+ ffmpeg-6
flac
fontconfig
freetype
@@ -4139,7 +4136,9 @@ graphic filters. Some of its features include:
(("include\\(cmake/")
"include(")))))
(build-system pyproject-build-system)
- (native-inputs (list cmake-minimal pkg-config python-setuptools python-wheel))
+ (arguments
+ (list #:tests? #f)) ;XXX: No tests in PyPI, check git-fetch.
+ (native-inputs (list cmake-minimal pkg-config python-setuptools))
(home-page "https://www.unicorn-engine.org")
(synopsis "Generic CPU emulator framework")
(description
@@ -4362,72 +4361,96 @@ on a Commodore C64, C128 etc.")
(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)
- (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")))
- (inputs (list alsa-lib
- ao
- curl
- glslang
- libzip
- lua
- miniupnpc
- pulseaudio
- sdl2
- spirv-tools
- vulkan-headers
- pkg-config))
- (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,
+ ;; Use a git snapshot as the latest 2.5 release is still on an older glslang
+ ;; version that doesn't build with GCC 14.
+ (let ((commit "33833cfd1ed2d94d907223442fdb8cdafd8d5d80")
+ (revision "0"))
+ (package
+ (name "flycast")
+ (version (git-version "2.5" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/flyinghead/flycast")
+ (commit commit)
+ ;; There are many bundled packages here included as git
+ ;; submodules, but removing many of them would require patching
+ ;; the source code and repository layout (see: <>).
+ (recursive? #t)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "16vwhw33zhq2b8mpg863cn7sz4f04wxjz2650jgqjv7i5lkdd1g9"))
+ (modules '((guix build utils)))
+ (snippet #~(begin
+ ;; TODO: Uncomment after our vulkan-headers
+ ;; are update to 1.3.261.0 or newer.
+ ;; (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"
+ ;; TODO: Uncomment after our vulkan-headers
+ ;; are update to 1.3.261.0 or newer.
+ ;;"Vulkan-Headers"
+ "breakpad"
+ "discord-rpc"
+ ;; XXX: The libretro build requires the bundled
+ ;; libzip, which it uses to produce a
+ ;; static library.
+ ;;"libzip"
+ "oboe")))))))
+ (build-system cmake-build-system)
+ (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_LIBCDIO=ON"
+ "-DUSE_LUA=ON"
+ "-DUSE_PULSEAUDIO=ON"
+ "-DUSE_VULKAN=ON")))
+ (native-inputs (list pkg-config))
+ (inputs (list alsa-lib
+ ao
+ curl
+ glslang
+ libcdio
+ libzip
+ lua
+ miniupnpc
+ pulseaudio
+ sdl2
+ spirv-tools
+ ;; TODO: Uncomment after vulkan-headers
+ ;; is updated to 1.3.261.0 or newer.
+ ;;vulkan-headers
+ ))
+ (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+)))
+ (license license:gpl2+))))
+
+(define-public libretro-flycast
+ (package/inherit flycast
+ (name "libretro-flycast")
+ (arguments (substitute-keyword-arguments (package-arguments flycast)
+ ((#:configure-flags flags)
+ #~(cons "-DLIBRETRO=ON" #$flags))))))
(define-public freedisksysrom
;; There is no release; use the latest commit.
@@ -4533,11 +4556,11 @@ cache visualization. Developed at FEE CTU for computer architecture classes.")
(license license:zlib)))
(define-public uxn
- (let ((commit "83237c9641490d303a42c81ca247314d11055dea")
+ (let ((commit "f2e858273890abcffe7451b0566669e610036f49")
(revision "1"))
(package
(name "uxn")
- (version (git-version "0.1.0" revision commit))
+ (version (git-version "1.0" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
@@ -4546,7 +4569,7 @@ cache visualization. Developed at FEE CTU for computer architecture classes.")
(file-name (string-append name "-" version))
(sha256
(base32
- "159qfz66k1jc43jhyl8by3yiphsr2dyiyclw1x7mkr3zciwc29z3"))))
+ "1li0ly8di2vpzvi3wzlcm355dg38m6sfp0i6mryp9x4ibq7kqmy0"))))
(build-system gnu-build-system)
(arguments
(list #:tests? #f ;no tests
@@ -4562,12 +4585,10 @@ cache visualization. Developed at FEE CTU for computer architecture classes.")
(share (string-append #$output
"/share/uxn")))
(with-directory-excursion "bin"
- (for-each (lambda (x)
- (install-file x bin))
- '("uxnasm" "uxncli" "uxnemu"))
- (for-each (lambda (x)
- (install-file x share))
- '("asma.rom" "launcher.rom")))))))))
+ (for-each
+ (lambda (x)
+ (install-file x bin))
+ '("uxnasm" "uxncli" "uxnemu")))))))))
(inputs (list sdl2))
(home-page "https://100r.co/site/uxn.html")
(synopsis "Assembler and emulator for the Uxn stack-machine")
@@ -4576,6 +4597,51 @@ cache visualization. Developed at FEE CTU for computer architecture classes.")
stack-machine, written in ANSI C. Graphical output is implemented using SDL2.")
(license license:expat))))
+(define-public uxn11
+ (let ((commit "9483266710832a200e2db98d0c6b071d0e72b249")
+ (revision "0"))
+ (package
+ (name "uxn11")
+ (version (git-version "1.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.sr.ht/~rabbits/uxn11")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "14x939ri88kdr9cim2v29f71mfrfw7bxgffa4wcyisfy5jfgsx2c"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:test-target "test"
+ #:make-flags
+ #~(list (string-append "PREFIX=" #$output))
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'configure)
+ (delete 'check)
+ (delete 'build)
+ (add-before 'install 'fix-cc
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "makefile"
+ (("cc") #$(cc-for-target)))))
+ (add-after 'fix-cc 'pre-check
+ (lambda* (#:key inputs #:allow-other-keys)
+ (invoke "make" "bin/uxncli")
+ (invoke "make" "tests")))
+ (add-after 'install 'check
+ (assoc-ref %standard-phases 'check)))))
+ (inputs (list libx11))
+ (home-page "https://100r.co/site/uxn.html")
+ (synopsis "Emulator for the Uxn stack-machine using X11")
+ (description
+ "This package provides an emulator for the Uxn
+stack-machine. Graphical output is implemented using X11, and its Console
+device contains a @code{exec} port to interface with the host system.")
+ (license license:expat))))
+
(define-public python-keystone-engine
(package
(name "python-keystone-engine")
@@ -4587,6 +4653,8 @@ stack-machine, written in ANSI C. Graphical output is implemented using SDL2.")
(sha256
(base32 "1xahdr6bh3dw5swrc2r8kqa8ljhqlb7k2kxv5mrw5rhcmcnzcyig"))))
(build-system pyproject-build-system)
+ (arguments
+ (list #:tests? #f)) ;no tests in PyPI archive
(native-inputs
(list cmake-minimal
python-setuptools
@@ -4699,3 +4767,45 @@ information. Useful for cross-architecture tools (such as @code{python-pyvex}).
(synopsis "8051/8052 emulator with curses-based UI")
(description "emu8051 is a simulator of the 8051/8052 microcontrollers.")
(license license:expat))))
+
+(define-public fceux
+ (package
+ (name "fceux")
+ (version "2.6.6")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/TASEmulators/fceux")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "02s5qmxdxpsa71977z9bs5vfhnszn5nr5hk05wns8cm9nshbg7as"))
+ (modules '((guix build utils)))
+ (snippet #~(map delete-file-recursively
+ (list "output/lua5.1.dll" "output/lua51.dll"
+ "src/drivers/win" "fceux-server" "vc")))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ ;; No test suite.
+ #:tests? #f))
+ (inputs (list qtbase-5
+ zlib
+ minizip
+ sdl2
+ lua-5.1
+ libx264
+ x265
+ ffmpeg
+ libxkbcommon
+ libarchive))
+ (native-inputs (list pkg-config))
+ (synopsis "NES/Famicom emulator")
+ (description
+ "FCEUX is a Nintendo Entertainment System (NES), Famicom, Famicom Disk
+System (FDS), and Dendy emulator. It supports NTSC (USA/JPN), PAL (European),
+and NTSC-PAL Hybrid modes. It also offers tools for debugging, rom-hacking,
+map making, Tool-assisted movies, and Lua scripting.")
+ (home-page "https://fceux.com/web/home.html")
+ (license license:gpl2+)))