diff options
Diffstat (limited to 'gnu/packages/emulators.scm')
-rw-r--r-- | gnu/packages/emulators.scm | 972 |
1 files changed, 439 insertions, 533 deletions
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm index 84fb848b4f..b260ca38f7 100644 --- a/gnu/packages/emulators.scm +++ b/gnu/packages/emulators.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2015, 2018 David Thompson <dthompson2@worcester.edu> ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il> -;;; Copyright © 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr> +;;; Copyright © 2017-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr> ;;; Copyright © 2017, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> @@ -16,6 +16,7 @@ ;;; Copyright © 2021 Felipe Balbi <balbi@kernel.org> ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net> ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -35,6 +36,7 @@ (define-module (gnu packages emulators) #:use-module (ice-9 match) #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix gexp) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) @@ -47,10 +49,12 @@ #:use-module (gnu packages audio) #:use-module (gnu packages autogen) #:use-module (gnu packages autotools) + #:use-module (gnu packages backup) #:use-module (gnu packages base) + #:use-module (gnu packages bash) #:use-module (gnu packages bison) #:use-module (gnu packages boost) - #:use-module (gnu packages backup) + #:use-module (gnu packages build-tools) #:use-module (gnu packages cdrom) #:use-module (gnu packages check) #:use-module (gnu packages compression) @@ -102,38 +106,39 @@ #:use-module (guix build-system cmake) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) + #:use-module (guix build-system meson) #:use-module (guix build-system python)) (define-public vice (package (name "vice") - (version "3.5") + (version "3.6") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/vice-emu/releases/" "vice-" version ".tar.gz")) (sha256 - (base32 - "03nwcldg2h7dxj6aa77ggqc0442hqc1lsq5x69h8kcmqmvx7ifan")))) + (base32 "1zfkl9j40v2417l1fmczdvl9yzh81jlpcy5cl2svjzb2rrffbgv5")))) (build-system gnu-build-system) (arguments - `(#:configure-flags '("--disable-pdf-docs"))) + `(#:configure-flags '("--disable-html-docs" + "--disable-pdf-docs"))) (native-inputs - `(("bison" ,bison) - ("dos2unix" ,dos2unix) - ("flex" ,flex) - ("glib" ,glib "bin") ; for glib-genmarshal, etc. - ("pkg-config" ,pkg-config))) + (list bison + dos2unix + flex + `(,glib "bin") ; for glib-genmarshal, etc. + pkg-config)) (inputs - `(("alsa-lib" ,alsa-lib) - ("glew" ,glew) - ("glib" ,glib) - ("gtk+" ,gtk+) - ("pulseaudio" ,pulseaudio) - ("sdl" ,sdl) - ("sdl-image" ,sdl-image) - ("xa" ,xa))) + (list alsa-lib + glew + glib + gtk+ + pulseaudio + sdl + sdl-image + xa)) (home-page "https://vice-emu.sourceforge.io/") (synopsis "The versatile Commodore emulator") (description @@ -184,7 +189,10 @@ SuperCPU.") (add-after 'unpack 'fix-source (lambda _ (substitute* (find-files "." ".*\\.[ch]") - (("\"zlib/zlib.h\"") "<zlib.h>")))) + (("\"zlib/zlib.h\"") "<zlib.h>")) + (substitute* "Makefile" + (("CFLAGS:=-std=gnu99" all) + (string-append all " -fcommon"))))) (delete 'configure) (replace 'install (lambda* args @@ -197,12 +205,9 @@ SuperCPU.") ("shaders" "share/blastem/shaders")) args)))))) (inputs - `(("glew" ,glew) - ("mesa" ,mesa) - ("sdl2" ,sdl2) - ("zlib" ,zlib))) + (list glew mesa sdl2 zlib)) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (home-page "https://www.retrodev.com/blastem/") (synopsis "Genesis/Mega Drive emulator") (description "Blastem is an emulator for the Sega Genesis/Mega Drive @@ -230,14 +235,9 @@ console.") `(#:configure-flags '("--enable-wifi" "--enable-openal"))) (native-inputs - `(("pkg-config" ,pkg-config) - ("intltool" ,intltool))) + (list pkg-config intltool)) (inputs - `(("zlib" ,zlib) - ("sdl" ,sdl) - ("glib" ,glib) - ("gtk+" ,gtk+-2) - ("glu" ,glu))) + (list zlib sdl glib gtk+-2 glu)) (home-page "http://desmume.org/") (synopsis "Nintendo DS emulator") (description @@ -284,11 +284,10 @@ console.") (add-before 'configure 'generate-fonts&hardcore-libvulkan-path (lambda* (#:key inputs outputs #:allow-other-keys) (let ((fontfile - (string-append (assoc-ref inputs "font-wqy-microhei") - "/share/fonts/truetype/wqy-microhei.ttc")) + (search-input-file inputs + "/share/fonts/truetype/wqy-microhei.ttc")) (libvulkan - (string-append (assoc-ref inputs "vulkan-loader") - "/lib/libvulkan.so"))) + (search-input-file inputs "/lib/libvulkan.so"))) (chdir "docs") (invoke "bash" "-c" "g++ -O2 $(freetype-config \ --cflags --libs) gc-font-tool.cpp -o gc-font-tool") @@ -318,39 +317,39 @@ console.") `(("pkg-config" ,pkg-config) ("gettext" ,gettext-minimal))) (inputs - `(("alsa-lib" ,alsa-lib) - ("ao" ,ao) - ("bluez" ,bluez) - ("curl" ,curl) - ("eudev" ,eudev) - ("ffmpeg" ,ffmpeg) - ("font-wqy-microhei" ,font-wqy-microhei) - ("freetype" ,freetype) - ("glew" ,glew) - ("glib" ,glib) - ("glu" ,glu) - ("gtk+" ,gtk+-2) - ("hidapi" ,hidapi) - ("libevdev" ,libevdev) - ("libpng" ,libpng) - ("libusb" ,libusb) - ("libx11" ,libx11) - ("libxi" ,libxi) - ("libxrandr" ,libxrandr) - ("lzo" ,lzo) - ("mbedtls-apache" ,mbedtls-apache) - ("mesa" ,mesa) - ("miniupnpc" ,miniupnpc) - ("openal" ,openal) - ("pugixml" ,pugixml) - ("pulseaudio" ,pulseaudio) - ("qtbase" ,qtbase-5) - ("sdl2" ,sdl2) - ("sfml" ,sfml) - ("soil" ,soil) - ("soundtouch" ,soundtouch) - ("vulkan-loader" ,vulkan-loader) - ("zlib" ,zlib))) + (list alsa-lib + ao + bluez + curl + eudev + ffmpeg + font-wqy-microhei + freetype + glew + glib + glu + gtk+-2 + hidapi + libevdev + libpng + libusb + libx11 + libxi + libxrandr + lzo + mbedtls-apache + mesa + miniupnpc + openal + pugixml + pulseaudio + qtbase-5 + sdl2 + sfml + soil + soundtouch + vulkan-loader + zlib)) (home-page "https://dolphin-emu.org/") (synopsis "Nintendo Wii and GameCube emulator") (description @@ -376,15 +375,14 @@ turbo speed, networked multiplayer, and graphical enhancements.") "02i648i50dwicv1vaql15rccv4g8h5blf5g6inv67lrfxpbkvlf0")))) (build-system gnu-build-system) (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake))) + (list autoconf automake)) (inputs - `(("sdl" ,sdl) - ("libpng" ,libpng) - ("zlib" ,zlib) - ("alsa-lib" ,alsa-lib) - ("glu" ,glu) - ("mesa" ,mesa))) + (list sdl + libpng + zlib + alsa-lib + glu + mesa)) (home-page "https://www.dosbox.com") (synopsis "X86 emulator with CGA/EGA/VGA/etc. graphics and sound") (description "DOSBox is a DOS-emulator that uses the SDL library. DOSBox @@ -398,7 +396,7 @@ older games.") ;; This is not a patch staging area for DOSBox, but an unaffiliated fork. (package (name "dosbox-staging") - (version "0.76.0") + (version "0.78.1") (source (origin (method git-fetch) @@ -407,34 +405,30 @@ older games.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "14zlkm9qmaq2x4zdiadczsxvdnrf35w13ccvkxzd8cwrzxv84fvd")))) - (build-system gnu-build-system) + (base32 "16byip1j9ckq0ik7ilrj0fc9dal3495s48xd21drpbb8q9jwb342")))) + (build-system meson-build-system) (arguments - `(#:configure-flags - (let* ((flags (list "-O3" - ;; From scripts/automator/build/gcc-defaults. - "-fstrict-aliasing" - "-fno-signed-zeros" - "-fno-trapping-math" - "-fassociative-math" - "-frename-registers" - "-ffunction-sections" - "-fdata-sections")) - (CFLAGS (string-join flags " "))) - ;; Several files #include <SDL_net.h> instead of <SDL2/SDL_net.h>, - ;; including configure.ac itself. - (list (string-append "CPPFLAGS=-I" (assoc-ref %build-inputs "sdl2") - "/include/SDL2") - (string-append "CFLAGS=" CFLAGS) - (string-append "CXXFLAGS=-DNDEBUG " CFLAGS))))) + (list #:configure-flags + #~(list + ;; These both try to git clone subprojects. + "-Dunit_tests=disabled" ; gtest + "-Duse_mt32emu=false" + ;; Not packaged. + "-Duse_slirp=false") + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'fix-includes + (lambda _ + (substitute* (find-files "." "\\.(cpp|h)") + (("^(#include <)(SDL[_.])" _ include file) + (string-append include "SDL2/" file)))))))) (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs `(("alsa-lib" ,alsa-lib) ("fluidsynth" ,fluidsynth) ("libpng" ,libpng) + ("mesa" ,mesa) ("opusfile" ,opusfile) ("sdl2" ,(sdl-union (list sdl2 sdl2-net))) ("zlib" ,zlib))) @@ -515,8 +509,7 @@ emulate a serial nullmodem over TCP/IP.") #t)))) #:tests? #f)) ; test suite wants mips toolchain (inputs - `(("elfutils" ,elfutils) - ("qtbase" ,qtbase-5))) + (list elfutils qtbase-5)) (home-page "https://github.com/cvut/QtMips") (synopsis "MIPS CPU emulator") (description "This package contains a MIPS CPU emulator. The simulator @@ -575,7 +568,7 @@ and a game metadata scraper.") (base32 "11rvm53c3p2f6zk8xbyv2j51xp8zmqnch7zravhj3fk590qrjrr2")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs `(("alsa-lib" ,alsa-lib) ("ao" ,ao) @@ -617,8 +610,7 @@ and a game metadata scraper.") (bin (string-append out "/bin")) (higan (string-append bin "/higan")) (higan-original (string-append higan "-original")) - (bash (string-append (assoc-ref inputs "bash") - "/bin/bash")) + (bash (search-input-file inputs "/bin/bash")) (coreutils (assoc-ref inputs "coreutils")) (mkdir (string-append coreutils "/bin/mkdir")) (cp (string-append coreutils "/bin/cp")) @@ -663,14 +655,14 @@ V2.") (define-public mednafen (package (name "mednafen") - (version "1.27.1") + (version "1.29.0") (source (origin (method url-fetch) (uri (string-append "https://mednafen.github.io/releases/files/" "mednafen-" version ".tar.xz")) (sha256 - (base32 "1ysmb56wzr17ki6f1b486r2dzjr11igd021qb4r3437l68prpa7k")))) + (base32 "0binkxnki8w8jgiyf3xr9503m5cynlf5vylb087vxybp53qbqgys")))) (build-system gnu-build-system) (arguments `(#:configure-flags @@ -678,7 +670,7 @@ V2.") ;; "--with-external-mpcdec" "--with-external-lzo"))) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs `(("alsa" ,alsa-lib) ("flac" ,flac) @@ -725,7 +717,7 @@ The following systems are supported: (define-public mgba (package (name "mgba") - (version "0.9.2") + (version "0.9.3") (source (origin (method git-fetch) @@ -734,7 +726,7 @@ The following systems are supported: (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "16kngkzf08jflqxwbgafb47091vqqb9pbhazg9cd94cy81ahz3q3")) + (base32 "1bg4ax5gjkr6d4cpzsgzv3bpa3i2c2b1ckwrjklqiy835b5ni6yi")) (modules '((guix build utils))) (snippet ;; Make sure we don't use the bundled software. @@ -751,22 +743,21 @@ The following systems are supported: (list "-DUSE_LZMA=OFF" ;do not use bundled LZMA "-DUSE_LIBZIP=OFF"))) ;use "zlib" instead (native-inputs - `(("pkg-config" ,pkg-config) - ("qttools" ,qttools))) + (list pkg-config qttools)) (inputs - `(("ffmpeg" ,ffmpeg) - ("libedit" ,libedit) - ("libelf" ,libelf) - ("libepoxy" ,libepoxy) - ("libpng" ,libpng) - ("mesa" ,mesa) - ("minizip" ,minizip) - ("ncurses" ,ncurses) - ("qtbase" ,qtbase-5) - ("qtmultimedia" ,qtmultimedia) - ("sdl2" ,sdl2) - ("sqlite" ,sqlite) - ("zlib" ,zlib))) + (list ffmpeg + libedit + libelf + libepoxy + libpng + mesa + minizip + ncurses + qtbase-5 + qtmultimedia + sdl2 + sqlite + zlib)) (home-page "https://mgba.io") (synopsis "Game Boy Advance emulator") (description @@ -781,7 +772,7 @@ and Game Boy Color games.") (define-public sameboy (package (name "sameboy") - (version "0.14.4") + (version "0.14.7") (source (origin (method git-fetch) @@ -790,13 +781,12 @@ and Game Boy Color games.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0zp11qm8b3cmx70pzczyh4vv4jyhlh4jnci8kn6b30c8lzl43g83")))) + (base32 "1r391jdh0gjnx8bwmr63dcdmq58lpm162mng2ncrx53ydbb13xxf")))) (build-system gnu-build-system) (native-inputs - `(("rgbds" ,rgbds) - ("pkg-config" ,pkg-config))) + (list rgbds pkg-config)) (inputs - `(("sdl2" ,sdl2))) + (list sdl2)) (arguments `(#:tests? #f ; There are no tests #:make-flags `(,(string-append "CC=" ,(cc-for-target)) @@ -815,8 +805,7 @@ and Game Boy Color games.") (with-directory-excursion "build/bin/SDL" (install-file "sameboy" bin) (delete-file "sameboy") - (copy-recursively "." data)) - #t)))))) + (copy-recursively "." data)))))))) (home-page "https://sameboy.github.io/") (synopsis "Accurate Game Boy, Game Boy Color and Super Game Boy emulator") (description "SameBoy is a user friendly Game Boy, Game Boy Color @@ -840,26 +829,26 @@ from an emulator---from save states to scaling filters.") (base32 "116fndl6652zrp1r6ag4xv3dzp1x52mlvadj8xwflq07fd5rhri1")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("which" ,which))) + (list pkg-config which)) (inputs - `(("freetype" ,freetype) - ("glu" ,glu) - ("libpng" ,libpng) - ("mesa" ,mesa) - ("sdl2" ,sdl2) - ("zlib" ,zlib))) + (list freetype + glu + libpng + mesa + sdl2 + zlib)) (arguments '(#:phases (modify-phases %standard-phases ;; The mupen64plus build system has no configure phase. - (delete 'configure) + (replace 'configure + (lambda _ + (substitute* "projects/unix/Makefile" + (("\\$\\(CFLAGS\\)") + "$(CFLAGS) -fcommon")))) ;; Makefile is in a subdirectory. - (add-before - 'build 'chdir-to-project-directory - (lambda _ - (chdir "projects/unix") - #t))) + (add-before 'build 'chdir-to-project-directory + (lambda _ (chdir "projects/unix")))) #:make-flags (let ((out (assoc-ref %outputs "out"))) (list "all" (string-append "PREFIX=" out))) ;; There are no tests. @@ -889,11 +878,9 @@ core library.") (base32 "0z19amfg9vr2pqjjri1ipc7hs681fzjcnb0f9y7bjhp5n8d7p6bb")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("which" ,which))) + (list pkg-config which)) (inputs - `(("mupen64plus-core" ,mupen64plus-core) - ("sdl2" ,sdl2))) + (list mupen64plus-core sdl2)) (arguments '(#:phases (modify-phases %standard-phases @@ -935,10 +922,9 @@ SDL audio plugin.") (base32 "1dyazfbdjycdfslq8jixqiqhziw0rlkvach2r9dz91229jmkyc9c")))) (build-system gnu-build-system) (native-inputs - `(("which" ,which))) + (list which)) (inputs - `(("mupen64plus-core" ,mupen64plus-core) - ("sdl2" ,sdl2))) + (list mupen64plus-core sdl2)) (arguments '(#:phases (modify-phases %standard-phases @@ -980,7 +966,7 @@ SDL input plugin.") (base32 "0pi31qzjjp7aypdvvnz6ms18g09c4gqzxi6328zj8sji94b75gf0")))) (build-system gnu-build-system) (inputs - `(("mupen64plus-core" ,mupen64plus-core))) + (list mupen64plus-core)) (arguments '(#:phases (modify-phases %standard-phases @@ -1022,7 +1008,7 @@ high-level emulation (HLE) RSP processor plugin.") (base32 "0nfyjns9k8xbg3aqs7593nfaxvlj72h3l8h467442xlk8ajfcylx")))) (build-system gnu-build-system) (inputs - `(("mupen64plus-core" ,mupen64plus-core))) + (list mupen64plus-core)) (arguments '(#:phases (modify-phases %standard-phases @@ -1064,11 +1050,9 @@ Z64 RSP processor plugin.") (base32 "1v9fqwpb6pawr8z5cm2ki7bqkks4iyr5c4jy4v5khj6h8zcv55gc")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("which" ,which))) + (list pkg-config which)) (inputs - `(("mesa" ,mesa) - ("mupen64plus-core" ,mupen64plus-core))) + (list mesa mupen64plus-core)) (arguments '(#:phases (modify-phases %standard-phases @@ -1110,12 +1094,9 @@ Arachnoid video plugin.") (base32 "0qn5za7g7796kh2ag3xpmhbqg0yf71g9liz6ks0rha8pz73lgs01")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("which" ,which))) + (list pkg-config which)) (inputs - `(("mesa" ,mesa) - ("mupen64plus-core" ,mupen64plus-core) - ("sdl2" ,sdl2))) + (list mesa mupen64plus-core sdl2)) (arguments '(#:phases (modify-phases %standard-phases @@ -1164,15 +1145,14 @@ Glide64 video plugin.") (base32 "08pm28a36dpr0cvr8pzw0n5ksdazp7jqvlmqfy2lwb4dm0cwhkqd")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("which" ,which))) + (list pkg-config which)) (inputs - `(("boost" ,boost) - ("libpng" ,libpng) - ("mesa" ,mesa) - ("mupen64plus-core" ,mupen64plus-core) - ("sdl2" ,sdl2) - ("zlib" ,zlib))) + (list boost + libpng + mesa + mupen64plus-core + sdl2 + zlib)) (arguments '(#:phases (modify-phases %standard-phases @@ -1214,13 +1194,9 @@ Glide64MK2 video plugin.") (base32 "0rpmbcq67gsj5h5jjis146378qc1mskskvx20y1ikx59yhbamh13")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("which" ,which))) + (list pkg-config which)) (inputs - `(("libpng" ,libpng) - ("mesa" ,mesa) - ("mupen64plus-core" ,mupen64plus-core) - ("sdl2" ,sdl2))) + (list libpng mesa mupen64plus-core sdl2)) (arguments '(#:phases (modify-phases %standard-phases @@ -1263,12 +1239,9 @@ Rice Video plugin.") (patches (search-patches "mupen64plus-video-z64-glew-correct-path.patch")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("which" ,which))) + (list pkg-config which)) (inputs - `(("glew" ,glew) - ("mupen64plus-core" ,mupen64plus-core) - ("sdl2" ,sdl2))) + (list glew mupen64plus-core sdl2)) (arguments '(#:phases (modify-phases %standard-phases @@ -1318,10 +1291,9 @@ Z64 video plugin.") (patches (search-patches "mupen64plus-ui-console-notice.patch")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("which" ,which))) + (list pkg-config which)) (inputs - `(("sdl2" ,sdl2))) + (list sdl2)) ;; Mupen64Plus supports a single data directory and a single plugin ;; directory in its configuration, yet we need data and plugin files from ;; a variety of packages. The best way to deal with this is to install @@ -1331,13 +1303,13 @@ Z64 video plugin.") ;; mupen64plus-ui-console-notice also gives users instructions on what ;; they need to do in order to point the configuration to their profile. (propagated-inputs - `(("mupen64plus-core" ,mupen64plus-core) - ("mupen64plus-audio-sdl" ,mupen64plus-audio-sdl) - ("mupen64plus-input-sdl" ,mupen64plus-input-sdl) - ("mupen64plus-rsp-hle" ,mupen64plus-rsp-hle) - ("mupen64plus-video-glide64" ,mupen64plus-video-glide64) - ("mupen64plus-video-glide64mk2" ,mupen64plus-video-glide64mk2) - ("mupen64plus-video-rice" ,mupen64plus-video-rice))) + (list mupen64plus-core + mupen64plus-audio-sdl + mupen64plus-input-sdl + mupen64plus-rsp-hle + mupen64plus-video-glide64 + mupen64plus-video-glide64mk2 + mupen64plus-video-rice)) (arguments '(#:phases (modify-phases %standard-phases @@ -1382,10 +1354,7 @@ towards a working Mupen64Plus for casual users.") (base32 "1g19gz33jav00rwzkpcnynf5ps41vl64a9qx0xjd6lva4bgn8s57")))) (build-system gnu-build-system) (native-inputs - `(("autoconf" ,autoconf) - ("autoconf-archive" ,autoconf-archive) - ("automake" ,automake) - ("pkg-config" ,pkg-config))) + (list autoconf autoconf-archive automake pkg-config)) (inputs `(("fltk" ,fltk) ("fontconfig", fontconfig) @@ -1445,7 +1414,7 @@ as RetroArch.") (define-public retroarch (package (name "retroarch") - (version "1.9.4") + (version "1.9.11") (source (origin (method git-fetch) @@ -1454,7 +1423,7 @@ as RetroArch.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1wky28y52nsjmannks3y1hbjgw0dvqh85gxrllr98f9y7kvk1cvf")) + (base32 "0hd77kw1f655s40qcz1righdhd9czqyy40rf7gigdag1bkchdx6z")) (patches (search-patches "retroarch-LIBRETRO_DIRECTORY.patch")))) (build-system gnu-build-system) @@ -1516,9 +1485,7 @@ as RetroArch.") ("wayland" ,wayland) ("zlib" ,zlib))) (native-inputs - `(("pkg-config" ,pkg-config) - ("wayland-protocols" ,wayland-protocols) - ("which" ,which))) + (list pkg-config wayland-protocols which)) (native-search-paths (list (search-path-specification (variable "LIBRETRO_DIRECTORY") @@ -1537,14 +1504,14 @@ multi-system game/emulator system.") (define-public scummvm (package (name "scummvm") - (version "2.2.0") + (version "2.5.1") (source (origin (method url-fetch) (uri (string-append "https://downloads.scummvm.org/frs/scummvm/" version "/scummvm-" version ".tar.xz")) (sha256 - (base32 "11vknasm5dna2vqr6gk343qynh7nhsq3kf60zayarn1vb5z6as8l")))) + (base32 "00az0dm85kh8rq0yqj74x0c5zrq4ybvwvnilijzl8qa5whwdpn4z")))) (build-system gnu-build-system) (arguments `(#:tests? #f ;require "git" @@ -1554,34 +1521,35 @@ multi-system game/emulator system.") (replace 'configure ;; configure does not work followed by both "SHELL=..." and ;; "CONFIG_SHELL=..."; set environment variables instead - (lambda* (#:key outputs configure-flags #:allow-other-keys) + (lambda* (#:key inputs outputs configure-flags #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (bash (which "bash")) + (bash (search-input-file inputs "/bin/bash")) (flags `(,(string-append "--prefix=" out) ,@configure-flags))) (setenv "SHELL" bash) (setenv "CONFIG_SHELL" bash) (apply invoke "./configure" flags))))))) (native-inputs - `(("nasm" ,nasm) - ("pkg-config" ,pkg-config))) + (list nasm pkg-config)) (inputs - `(("alsa-lib" ,alsa-lib) - ("faad2" ,faad2) - ("fluidsynth" ,fluidsynth) - ("freetype" ,freetype) - ("fribidi" ,fribidi) - ("liba52" ,liba52) - ("libflac" ,flac) - ("libjpeg-turbo" ,libjpeg-turbo) - ("libmad" ,libmad) - ("libmpeg2" ,libmpeg2) - ("libogg" ,libogg) - ("libpng" ,libpng) - ("libtheora" ,libtheora) - ("libvorbis" ,libvorbis) - ("sdl2" ,(sdl-union (list sdl2 sdl2-net))) - ("zlib" ,zlib))) + (list alsa-lib + faad2 + fluidsynth + freetype + fribidi + glew + giflib + liba52 + flac + libjpeg-turbo + libmad + libmpeg2 + libogg + libpng + libtheora + libvorbis + (sdl-union (list sdl2 sdl2-net)) + zlib)) (home-page "https://www.scummvm.org/") (synopsis "Engine for several graphical adventure games") (description "ScummVM is a program which allows you to run certain @@ -1615,15 +1583,14 @@ play them on systems for which they were never designed!") (chdir (string-append "libticables2-" ,version)) #t))))) (native-inputs - `(("autoconf" ,autoconf) - ("autogen" ,autogen) - ("automake" ,automake) - ("gettext" ,gnu-gettext) - ("libtool" ,libtool) - ("pkg-config" ,pkg-config))) + (list autoconf + autogen + automake + gnu-gettext + libtool + pkg-config)) (inputs - `(("glib" ,glib) - ("libusb" ,libusb))) + (list glib libusb)) (synopsis "Link cable library for TI calculators") (description "This package contains libticables, a library for operations on @@ -1658,12 +1625,9 @@ This is a part of the TiLP project.") (chdir (string-append "libticonv-" ,version)) #t))))) (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("libtool" ,libtool) - ("pkg-config" ,pkg-config))) + (list autoconf automake libtool pkg-config)) (inputs - `(("glib" ,glib))) + (list glib)) (synopsis "Character conversion library for TI calculators") (description "This package contains libticonv, a library to support working with @@ -1696,15 +1660,9 @@ This is a part of the TiLP project.") (chdir (string-append "libtifiles2-" ,version)) #t))))) (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("gettext" ,gnu-gettext) - ("libtool" ,libtool) - ("pkg-config" ,pkg-config))) + (list autoconf automake gnu-gettext libtool pkg-config)) (inputs - `(("glib" ,glib) - ("libarchive" ,libarchive) - ("libticonv" ,libticonv))) + (list glib libarchive libticonv)) (synopsis "File functions library for TI calculators") (description "This package contains libticonv, a library to support working with @@ -1737,17 +1695,9 @@ This is a part of the TiLP project.") (chdir (string-append "libticalcs2-" ,version)) #t))))) (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("gettext" ,gnu-gettext) - ("libtool" ,libtool) - ("pkg-config" ,pkg-config))) + (list autoconf automake gnu-gettext libtool pkg-config)) (inputs - `(("glib" ,glib) - ("libarchive" ,libarchive) - ("libticables2" ,libticables2) - ("libticonv" ,libticonv) - ("libtifiles2" ,libtifiles2))) + (list glib libarchive libticables2 libticonv libtifiles2)) (synopsis "Support library for TI calculators") (description "This project aims to develop a multi-platform linking program for use @@ -1761,7 +1711,7 @@ This is a part of the TiLP project.") (define-public mame (package (name "mame") - (version "0.236") + (version "0.239") (source (origin (method git-fetch) @@ -1770,7 +1720,7 @@ This is a part of the TiLP project.") (commit (apply string-append "mame" (string-split version #\.))))) (file-name (git-file-name name version)) (sha256 - (base32 "0pxvvdirbwakl5cy7lp0zib6z176ckxx8c3mazsd7q1ddxxd3l8x")) + (base32 "02by0pq0j8pi5dllk90g94nbszynp9wqg75bl5x8bqrc7h80a0dq")) (modules '((guix build utils))) (snippet ;; Remove bundled libraries. @@ -1782,21 +1732,20 @@ This is a part of the TiLP project.") "SDL2-override" "sqlite3" "utf8proc" "zlib"))))))) (build-system gnu-build-system) (arguments - `(#:make-flags - (cons* - ;; A 'strict-overflow' error pops up on i686 so disable '-Werror'. - "NOWERROR=1" - (string-append "QT_HOME=" (assoc-ref %build-inputs "qtbase")) - (string-append "SDL_INI_PATH=" - (assoc-ref %outputs "out") - "/share/mame/ini") - (map (lambda (lib) - (string-append "USE_SYSTEM_LIB_" (string-upcase lib) "=1")) - '("asio" "expat" "flac" "glm" "jpeg" "lua" "portaudio" "portmidi" - "pugixml" "rapidjson" "sqlite3" "utf8proc" "zlib"))) - #:tests? #f ;no test in regular release - #:phases - (modify-phases %standard-phases + (list + #:make-flags + #~(cons* + ;; A 'strict-overflow' error pops up on i686 so disable '-Werror'. + "NOWERROR=1" + (string-append "QT_HOME=" #$(this-package-input "qtbase")) + (string-append "SDL_INI_PATH=" #$output "/share/mame/ini") + (map (lambda (lib) + (string-append "USE_SYSTEM_LIB_" (string-upcase lib) "=1")) + '("asio" "expat" "flac" "glm" "jpeg" "lua" "portaudio" "portmidi" + "pugixml" "rapidjson" "sqlite3" "utf8proc" "zlib"))) + #:tests? #f ;no test in regular release + #:phases + `(modify-phases %standard-phases (delete 'configure) (add-after 'build 'build-documentation (lambda _ (invoke "make" "-C" "docs" "man" "info"))) @@ -1904,32 +1853,32 @@ This is a part of the TiLP project.") Keywords=Game;Emulator;Arcade;~%" executable))))))))) (native-inputs - `(("pkg-config" ,pkg-config) - ("sphinx" ,python-sphinx) - ("sphinxcontrib-svg2pdfconverter" ,python-sphinxcontrib-svg2pdfconverter) - ("texinfo" ,texinfo))) + (list pkg-config + python-sphinx + python-sphinxcontrib-svg2pdfconverter + texinfo)) (inputs - `(("alsa-lib" ,alsa-lib) - ("asio" ,asio-1.12) ;the bundled copy is at 1.11 - ("expat" ,expat) - ("flac" ,flac) - ("fontconfig" ,fontconfig) - ("glm" ,glm) - ("libjpeg" ,libjpeg-turbo) - ("libxi" ,libxi) - ("libxinerama" ,libxinerama) - ("lua" ,lua) - ("portaudio" ,portaudio) - ("portmidi" ,portmidi) - ("pugixml" ,pugixml) - ("pulseaudio" ,pulseaudio) - ("python-wrapper" ,python-wrapper) - ("qtbase" ,qtbase-5) - ("rapidjson" ,rapidjson) - ("sdl" ,(sdl-union (list sdl2 sdl2-ttf))) - ("sqlite" ,sqlite) - ("utf8proc" ,utf8proc) - ("zlib" ,zlib))) + (list alsa-lib + asio + expat + flac + fontconfig + glm + libjpeg-turbo + libxi + libxinerama + lua + portaudio + portmidi + pugixml + pulseaudio + python-wrapper + qtbase-5 + rapidjson + (sdl-union (list sdl2 sdl2-ttf)) + sqlite + utf8proc + zlib)) (home-page "https://www.mamedev.org") (synopsis "Multi-purpose emulation framework") (description "MAME's purpose is to preserve decades of software @@ -1991,7 +1940,7 @@ functions. The source code to MAME serves as this documentation.") (install-file "../source/data/tile/TILE.TXT" tile)) #t))))) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs `(("mame" ,mame) ("gtk" ,gtk+) @@ -2038,8 +1987,7 @@ emulator.") (lambda* (#:key inputs #:allow-other-keys) (substitute* "cmake/FindCdio.cmake" (("/usr/include/cdio") - (string-append (assoc-ref inputs "libcdio") "/include/cdio"))) - #t)) + (search-input-directory inputs "/include/cdio"))))) (add-after 'install 'wrap-program (lambda* (#:key inputs outputs #:allow-other-keys) (wrap-program (string-append (assoc-ref outputs "out") @@ -2050,17 +1998,16 @@ emulator.") "/share/glib-2.0/schemas")))) #t))))) (native-inputs - `(("pkg-config" ,pkg-config) - ("intltool" ,intltool) - ("glib" ,glib "bin"))) + (list pkg-config intltool + `(,glib "bin"))) (inputs - `(("libcdio" ,libcdio) - ("sdl2" ,sdl2) - ("gtk+" ,gtk+) - ("ffmpeg" ,ffmpeg) - ("libxv" ,libxv) - ("libarchive" ,libarchive) - ("pulseaudio" ,pulseaudio))) + (list libcdio + sdl2 + gtk+ + ffmpeg + libxv + libarchive + pulseaudio)) (home-page "https://archive.codeplex.com/?p=pcsxr") (synopsis "PlayStation emulator") (description @@ -2092,8 +2039,7 @@ improvements.") (("GTK_CFLAGS=\"\\$GTK_CFLAGS .*\"") "")) #t))))) (native-inputs - `(("pkg-config" ,pkg-config) - ("nasm" ,nasm))) + (list pkg-config nasm)) (inputs `(("sdl" ,sdl) ("gtk" ,gtk+-2))) @@ -2130,7 +2076,7 @@ from various forks of Gens, and improved platform portability.") #:phases (modify-phases %standard-phases (delete 'configure)))) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs `(("alsa-lib" ,alsa-lib) ("ao" ,ao) @@ -2182,17 +2128,6 @@ performance, features, and ease of use.") (guix build utils)) #:phases (modify-phases %standard-phases - (add-after 'unpack 'install-bindings-to-python-output - (lambda* (#:key outputs #:allow-other-keys) - ;; python-build-system will build the bindings and install them to - ;; the "out" output, so change the build-internal names of the - ;; outputs. - ;; - ;; TODO: remove this once #40469 lands, through the core-updates - ;; holding zone, on master. - (set-car! (assoc "out" outputs) "lib") - (set-car! (assoc "python" outputs) "out") - #t)) (add-before 'build 'build-library (lambda* (#:key inputs #:allow-other-keys) (invoke "make" @@ -2205,7 +2140,7 @@ performance, features, and ease of use.") "UNICORN_STATIC=no" (string-append "PREFIX=" - (assoc-ref outputs "lib"))))) + (assoc-ref outputs "out"))))) (add-before 'build 'prepare-bindings (lambda* (#:key outputs #:allow-other-keys) (chdir "bindings/python") @@ -2218,7 +2153,7 @@ performance, features, and ease of use.") (("_path_list = \\[.*") (string-append "_path_list = [\"" - (assoc-ref outputs "lib") + (assoc-ref outputs "out") ;; eat the rest of the list "/lib\"] + 0*["))) #t)) @@ -2239,10 +2174,10 @@ performance, features, and ease of use.") (let* ((python-samples (find-files "." "sample_.*")) (c-samples (find-files "../../samples" ".*\\.c")) (python-docdir - (string-append (assoc-ref outputs "out") + (string-append (assoc-ref outputs "python") "/share/doc/unicorn/samples")) (c-docdir - (string-append (assoc-ref outputs "lib") + (string-append (assoc-ref outputs "out") "/share/doc/unicorn/samples"))) (for-each (cut install-file <> c-docdir) c-samples) (for-each (cut install-file <> python-docdir) python-samples) @@ -2262,214 +2197,186 @@ framework based on QEMU.") (license license:gpl2+)))) (define-public ppsspp - ;; Use a recent commit as fixes for ffmpeg 4.4 haven't been released as of - ;; 1.11.3. - (let ((commit "69fa20744958aef8da9ca052ba7675fdc1636e46") - (revision "1")) - (package - (name "ppsspp") - (version (git-version "1.11.3" revision commit)) - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/hrydgard/ppsspp") - (commit commit))) - (sha256 - (base32 "0r8w4hllhn6zsfxlajxw3sn3f8vsri45srr4mdwsffzcb4hvl0cr")) - (file-name (git-file-name name version)) - (patches - (search-patches "ppsspp-disable-upgrade-and-gold.patch")) - (modules '((guix build utils))) - (snippet - `(begin - ;; The following is quite a heavy-handed way of unbundling PPSSPP. - ;; There are still a number of external sources, that we don't - ;; remove here. Some may be packaged, others are not. - ;; First, we patch existing sources to include the right headers. - (substitute* (append (find-files "Common" ".*\\.(h|cpp)") - (find-files "Core" ".*\\.(h|cpp)") - (find-files "GPU" ".*\\.(h|cpp)") - (find-files "SDL" ".*\\.(h|cpp)") - (find-files "UI" ".*\\.(h|cpp)")) - ;; These headers are all hard-coded in the original source. - (("ext/cityhash/") "") - (("ext/glslang/glslang/") "glslang/") - (("ext/glslang/") "glslang/") - (("ext/miniupnp/") "") - (("ext/SPIRV-Cross/") "spirv_cross/") - (("ext/vulkan/") "vulkan/") - (("ext/xxhash.h") "xxhash.h") - ;; These definitions do not actually exist in the Vulkan headers, - ;; but PPSSPP defines them in ext/vulkan. - (("VK_FORMAT_BEGIN_RANGE") "VK_FORMAT_UNDEFINED") - (("VK_FORMAT_END_RANGE") "VK_FORMAT_ASTC_12x12_SRGB_BLOCK")) - ;; Next, we patch CMakeLists. - (substitute* "CMakeLists.txt" - ;; Drop unnecessary includes and targets. - (("include_directories\\(ext/glslang\\)") "") - (("include_directories\\(ext/xxhash\\)") "") - (("include_directories\\(ext/cityhash\\)") "") - (("include_directories\\(ext/zstd.*") "") - (("libzstd_static") "zstd") - (("set_target_properties\\(cityhash .*\\)") "") - ;; Fix linking to GLEW. - (("TARGET Ext::GLEW") "true") - (("target_link_libraries\\(native Ext::GLEW\\)") - "find_package(GLEW)\ntarget_link_libraries(native GLEW::GLEW)") - (("Ext::Snappy") "snappy") - ;; Don't search for cityhash/xxhash, we already have them. - (("add_library\\((city|xx)hash STATIC") "if()\nendif(") - (("ext/xxhash\\.[ch]") "") - (("ext/cityhash/.*\\.(cpp|h)") "") - (("if\\(USE_MINIUPNPC\\)" all) - (string-append all " + (package + (name "ppsspp") + (version "1.12.3") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hrydgard/ppsspp") + (commit (string-append "v" version)))) + (sha256 + (base32 "1p6pmp0lhqhk9h5r9xsjicd0zn08bwx3y8533npps96ixwbm2y15")) + (file-name (git-file-name name version)) + (patches + (search-patches "ppsspp-disable-upgrade-and-gold.patch")) + (modules '((guix build utils))) + (snippet + `(begin + ;; The following is quite a heavy-handed way of unbundling PPSSPP. + ;; There are still a number of external sources, that we don't + ;; remove here. Some may be packaged, others are not. + ;; First, we patch existing sources to include the right headers. + (substitute* (append (find-files "Common" ".*\\.(h|cpp)") + (find-files "Core" ".*\\.(h|cpp)") + (find-files "GPU" ".*\\.(h|cpp)") + (find-files "SDL" ".*\\.(h|cpp)") + (find-files "UI" ".*\\.(h|cpp)")) + ;; These headers are all hard-coded in the original source. + (("ext/cityhash/") "") + (("ext/glslang/glslang/") "glslang/") + (("ext/glslang/") "glslang/") + (("ext/miniupnp/") "") + (("ext/SPIRV-Cross/") "spirv_cross/") + (("ext/vulkan/") "vulkan/") + (("ext/xxhash.h") "xxhash.h") + ;; These definitions do not actually exist in the Vulkan headers, + ;; but PPSSPP defines them in ext/vulkan. + (("VK_FORMAT_BEGIN_RANGE") "VK_FORMAT_UNDEFINED") + (("VK_FORMAT_END_RANGE") "VK_FORMAT_ASTC_12x12_SRGB_BLOCK")) + ;; Next, we patch CMakeLists. + (substitute* "CMakeLists.txt" + ;; Drop unnecessary includes and targets. + (("include_directories\\(ext/glslang\\)") "") + (("include_directories\\(ext/xxhash\\)") "") + (("include_directories\\(ext/cityhash\\)") "") + (("include_directories\\(ext/zstd.*") "") + (("libzstd_static") "zstd") + (("set_target_properties\\(cityhash .*\\)") "") + ;; Fix linking to GLEW. + (("TARGET Ext::GLEW") "true") + (("target_link_libraries\\(native Ext::GLEW\\)") + "find_package(GLEW)\ntarget_link_libraries(native GLEW::GLEW)") + (("Ext::Snappy") "snappy") + ;; Don't search for cityhash/xxhash, we already have them. + (("add_library\\((city|xx)hash STATIC") "if()\nendif(") + (("ext/xxhash\\.[ch]") "") + (("ext/cityhash/.*\\.(cpp|h)") "") + (("if\\(USE_MINIUPNPC\\)" all) + (string-append all " find_package(miniupnpc) target_link_libraries(${CoreLibName} miniupnpc ${LDLIBS}) elseif(FALSE)")) - ;; Link all of spirv-cross. - (("spirv-cross-glsl" all) - (string-append all - " spirv-cross-core spirv-cross-cpp" - " spirv-cross-reflect spirv-cross-util"))) - (substitute* "ext/CMakeLists.txt" - (("add_subdirectory\\(glew.*") "") - (("add_subdirectory\\(glslang.*") "") - (("add_subdirectory\\(snappy.*") "") - (("add_subdirectory\\(SPIRV-Cross-build.*") "") - (("add_subdirectory\\(zstd.*") "")) - ;; Finally, we can delete the bundled sources. - (for-each delete-file-recursively - '("MoltenVK" - "ext/cmake" - "ext/glew" - "ext/glslang" "ext/glslang-build" - "ext/miniupnp" "ext/miniupnp-build" - "ext/native" - "ext/snappy" - "ext/SPIRV-Cross" "ext/SPIRV-Cross-build" - "ext/vulkan" - "ext/xxhash.c" - "ext/xxhash.h" - "ext/zlib" - "ext/zstd")) - ;; Since we are not including git as an input, PPSSPP is confused - ;; about its version. Let's fix that here. - (substitute* "git-version.cmake" - (("unknown") ,version)))))) - (build-system cmake-build-system) - (native-inputs - `(("pkg-config" ,pkg-config) - ("python" ,python))) - (inputs - `(("cityhash" ,cityhash) - ;; ppsspp doesn't yet build with ffmpeg 4.4 (see: - ("ffmpeg" ,ffmpeg) - ("glew" ,glew) - ("glslang" ,glslang) - ("libpng" ,libpng) - ("libzip" ,libzip) - ("mesa" ,mesa) - ("miniupnpc" ,miniupnpc) - ("sdl2" ,sdl2) - ("snappy" ,snappy) - ("spirv-cross" ,spirv-cross) - ("vulkan-headers" ,vulkan-headers) - ("vulkan-loader" ,vulkan-loader) - ("xxhash" ,xxhash) - ("zlib" ,zlib) - ("zstd" ,zstd "lib") -; ("zstd" ,zstd "static") - ;; TODO: unbundle armips. - ("armips-source" ,(package-source armips)) - ("lang" - ,(let ((commit "6bd5b4bc983917ea8402f73c726b46e36f3de0b4")) - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/hrydgard/ppsspp-lang") - (commit commit))) - (sha256 - (base32 "08npr3a4xskf85gnlxidl4ksc3rhc7m5rgnj7vsbjvhvw5ap02qx")) - (file-name (git-file-name "ppsspp-lang" commit))))) - ("tests" - ,(let ((commit "1047400eaec6bcbdb2a64d326375ef6a6617c4ac")) - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/hrydgard/pspautotests") - (commit commit))) - (sha256 - (base32 "0nxv1lskcr8zbg6nrfai21mxsw0n5vaqhbsa41c3cxfyx5c4w2pg")) - (file-name (git-file-name "pspautotests" commit))))))) - (arguments - `(#:out-of-source? #f - #:configure-flags (list "-DUSE_DISCORD=OFF" - "-DUSE_SYSTEM_FFMPEG=ON" - "-DUSE_SYSTEM_LIBZIP=ON" - ;; for testing - "-DUNITTEST=ON" "-DHEADLESS=ON") - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'add-external-sources - (lambda* (#:key inputs #:allow-other-keys) - ;; TODO: unbundle armips. - (copy-recursively (assoc-ref inputs "armips-source") - "ext/armips") - ;; Some tests are externalised, so we add them here. - (copy-recursively (assoc-ref inputs "tests") - "pspautotests") - ;; i18n is externalised, so we add it here. - (copy-recursively (assoc-ref inputs "lang") - "assets/lang") - #t)) - (add-after 'unpack 'fix-unittest-build - (lambda _ - (substitute* "CMakeLists.txt" - (("unittest/TestVertexJit.cpp" all) - (string-append all " unittest/TestShaderGenerators.cpp"))) - (substitute* "unittest/TestVertexJit.cpp" - (("#include \"unittest/UnitTest.h\"" all) - (string-append all "\n#include <cmath>"))) - #t)) - (replace 'check - (lambda _ - (for-each - (lambda (t) (invoke "./unitTest" t)) - '("Arm64Emitter" "ArmEmitter" "X64Emitter" "VertexJit" "Asin" - "SinCos" #|"VFPUSinCos" SIGSEGV|# "MathUtil" "Parsers" "Jit" - "MatrixTranspose" "ParseLBN" "QuickTexHash" "CLZ" - #|"ShaderGenerators"|#)) - (invoke "python3" "test.py" "-g") - #t)) - (replace 'install - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (bin/ppsspp (string-append out "/bin/ppsspp")) - (share (string-append out "/share/ppsspp"))) - (copy-recursively "icons/hicolor" - (string-append out "/share/icons/hicolor")) - (install-file "PPSSPPSDL" share) - (copy-recursively "assets" (string-append share "/assets")) + ;; Link all of spirv-cross. + (("spirv-cross-glsl" all) + (string-append all + " spirv-cross-core spirv-cross-cpp" + " spirv-cross-reflect spirv-cross-util"))) + (substitute* "ext/CMakeLists.txt" + (("add_subdirectory\\(glew.*") "") + (("add_subdirectory\\(glslang.*") "") + (("add_subdirectory\\(snappy.*") "") + (("add_subdirectory\\(SPIRV-Cross-build.*") "") + (("add_subdirectory\\(zstd.*") "")) + ;; Finally, we can delete the bundled sources. + (for-each delete-file-recursively + '("ext/cmake" + "ext/glew" + "ext/glslang" "ext/glslang-build" + "ext/miniupnp" "ext/miniupnp-build" + "ext/native" + "ext/snappy" + "ext/SPIRV-Cross" "ext/SPIRV-Cross-build" + "ext/vulkan" + "ext/xxhash.c" + "ext/xxhash.h" + "ext/zlib" + "ext/zstd")) + ;; Since we are not including git as an input, PPSSPP is confused + ;; about its version. Let's fix that here. + (substitute* "git-version.cmake" + (("unknown") ,version)))))) + (build-system cmake-build-system) + (native-inputs (list pkg-config python)) + (inputs (list bash + cityhash + ffmpeg + glew + glslang + libpng + libzip + mesa + miniupnpc + sdl2 + snappy + spirv-cross + vulkan-headers + vulkan-loader + xxhash + zlib + `(,zstd "lib"))) + (arguments + (list + #:out-of-source? #f + #:configure-flags #~(list "-DUSE_DISCORD=OFF" + "-DUSE_SYSTEM_FFMPEG=ON" + "-DUSE_SYSTEM_LIBZIP=ON" + ;; for testing + "-DUNITTEST=ON" "-DHEADLESS=ON") + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'add-external-sources + (lambda* (#:key inputs #:allow-other-keys) + ;; TODO: unbundle armips. + (copy-recursively #$(package-source armips) "ext/armips") + ;; Some tests are externalised, so we add them here. + (copy-recursively + #$(let ((commit "1047400eaec6bcbdb2a64d326375ef6a6617c4ac")) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hrydgard/pspautotests") + (commit commit))) + (sha256 + (base32 "0nxv1lskcr8zbg6nrfai21mxsw0n5vaqhbsa41c3cxfyx5c4w2pg")) + (file-name (git-file-name "pspautotests" commit)))) + "pspautotests"))) + (add-after 'unpack 'fix-unittest-build + (lambda _ + (substitute* "CMakeLists.txt" + (("unittest/TestVertexJit.cpp" all) + (string-append all " unittest/TestShaderGenerators.cpp"))) + (substitute* "unittest/TestVertexJit.cpp" + (("#include \"unittest/UnitTest.h\"" all) + (string-append all "\n#include <cmath>"))))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (for-each + (lambda (t) (invoke "./unitTest" t)) + '("Arm64Emitter" "ArmEmitter" "X64Emitter" "VertexJit" "Asin" + "SinCos" "VFPUSinCos" "MathUtil" "Parsers" "Jit" + "MatrixTranspose" "ParseLBN" "QuickTexHash" "CLZ" + #|"ShaderGenerators"|#)) + (invoke "python3" "test.py" "-g")))) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin/ppsspp (string-append out "/bin/ppsspp")) + (share (string-append out "/share/ppsspp"))) + (copy-recursively "icons/hicolor" + (string-append out "/share/icons/hicolor")) + (install-file "PPSSPPSDL" share) + (copy-recursively "assets" (string-append share "/assets")) - (make-desktop-entry-file - (string-append out "/share/applications/ppsspp.desktop") - #:name "PPSSPP" - #:exec (string-append share "/PPSSPPSDL") - #:icon "ppsspp") - (mkdir-p (string-append out "/bin")) - (with-output-to-file bin/ppsspp - (lambda () - (format #t "#!~a~%exec ~a/PPSSPPSDL \"$@\"" - (which "sh") share))) - (chmod bin/ppsspp #o755) - #t)))))) - (home-page "https://www.ppsspp.org/") - (synopsis "PSP emulator") - (description - "PPSSPP is a ``high-level'' emulator simulating the PSP operating + (make-desktop-entry-file + (string-append out "/share/applications/ppsspp.desktop") + #:name "PPSSPP" + #:exec (string-append share "/PPSSPPSDL") + #:icon "ppsspp") + (mkdir-p (string-append out "/bin")) + (with-output-to-file bin/ppsspp + (lambda () + (format #t "#!~a~%exec ~a/PPSSPPSDL \"$@\"" + (search-input-file inputs "/bin/bash") share))) + (chmod bin/ppsspp #o755))))))) + (home-page "https://www.ppsspp.org/") + (synopsis "PSP emulator") + (description + "PPSSPP is a ``high-level'' emulator simulating the PSP operating system.") - (license license:gpl2+)))) + (license license:gpl2+))) (define-public exomizer (package @@ -2510,8 +2417,7 @@ system.") (install-file "exobasic" out-bin)) #t))))) (native-inputs - `(("flex" ,flex) - ("bison" ,bison))) + (list flex bison)) (synopsis "Compressor for use on Commodore home computers") (description "This program compresses files in a way that tries to be as efficient as possible but still allows them to be decompressed in environments |