diff options
Diffstat (limited to 'gnu/packages/emulators.scm')
-rw-r--r-- | gnu/packages/emulators.scm | 436 |
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+))) |