1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539 |
- ;;; GNU Guix --- Functional package management for GNU
- ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
- ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
- ;;; Copyright © 2015, 2016, 2021 Sou Bunnbu <iyzsong@member.fsf.org>
- ;;; Copyright © 2015, 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
- ;;; 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, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
- ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
- ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
- ;;; Copyright © 2019 David Wilson <david@daviwil.com>
- ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
- ;;; Copyright © 2020 Christopher Howard <christopher@librehacker.com>
- ;;; 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.
- ;;;
- ;;; GNU Guix is free software; you can redistribute it and/or modify it
- ;;; under the terms of the GNU General Public License as published by
- ;;; the Free Software Foundation; either version 3 of the License, or (at
- ;;; your option) any later version.
- ;;;
- ;;; GNU Guix is distributed in the hope that it will be useful, but
- ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
- ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ;;; GNU General Public License for more details.
- ;;;
- ;;; You should have received a copy of the GNU General Public License
- ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
- (define-module (gnu packages emulators)
- #:use-module (ice-9 match)
- #:use-module ((guix licenses) #:prefix license:)
- #:use-module (guix packages)
- #:use-module (guix download)
- #:use-module (guix git-download)
- #:use-module (guix svn-download)
- #:use-module (guix hg-download)
- #:use-module (guix utils)
- #:use-module (gnu packages)
- #:use-module (gnu packages algebra)
- #:use-module (gnu packages assembly)
- #: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 bison)
- #:use-module (gnu packages boost)
- #:use-module (gnu packages build-tools)
- #:use-module (gnu packages cdrom)
- #:use-module (gnu packages check)
- #:use-module (gnu packages compression)
- #:use-module (gnu packages cross-base)
- #:use-module (gnu packages curl)
- #:use-module (gnu packages digest)
- #:use-module (gnu packages elf)
- #:use-module (gnu packages flex)
- #:use-module (gnu packages fltk)
- #:use-module (gnu packages fonts)
- #:use-module (gnu packages fontutils)
- #:use-module (gnu packages freedesktop)
- #:use-module (gnu packages fribidi)
- #:use-module (gnu packages game-development)
- #:use-module (gnu packages gcc)
- #:use-module (gnu packages gettext)
- #:use-module (gnu packages gl)
- #:use-module (gnu packages glib)
- #:use-module (gnu packages gtk)
- #:use-module (gnu packages image)
- #:use-module (gnu packages libedit)
- #:use-module (gnu packages libusb)
- #:use-module (gnu packages linux)
- #:use-module (gnu packages lua)
- #:use-module (gnu packages maths)
- #:use-module (gnu packages mp3)
- #:use-module (gnu packages music)
- #:use-module (gnu packages ncurses)
- #:use-module (gnu packages networking)
- #:use-module (gnu packages pkg-config)
- #:use-module (gnu packages pulseaudio)
- #:use-module (gnu packages python)
- #:use-module (gnu packages qt)
- #:use-module (gnu packages sdl)
- #:use-module (gnu packages sphinx)
- #:use-module (gnu packages sqlite)
- #:use-module (gnu packages texinfo)
- #:use-module (gnu packages textutils)
- #:use-module (gnu packages tls)
- #:use-module (gnu packages upnp)
- #:use-module (gnu packages video)
- #:use-module (gnu packages vulkan)
- #:use-module (gnu packages wxwidgets)
- #:use-module (gnu packages xdisorg)
- #:use-module (gnu packages xiph)
- #:use-module (gnu packages xml)
- #:use-module (gnu packages xorg)
- #:use-module (gnu packages web)
- #: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")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "mirror://sourceforge/vice-emu/releases/"
- "vice-" version ".tar.gz"))
- (sha256
- (base32
- "03nwcldg2h7dxj6aa77ggqc0442hqc1lsq5x69h8kcmqmvx7ifan"))))
- (build-system gnu-build-system)
- (arguments
- `(#:configure-flags '("--disable-pdf-docs")))
- (native-inputs
- `(("bison" ,bison)
- ("dos2unix" ,dos2unix)
- ("flex" ,flex)
- ("glib" ,glib "bin") ; for glib-genmarshal, etc.
- ("pkg-config" ,pkg-config)))
- (inputs
- `(("alsa-lib" ,alsa-lib)
- ("glew" ,glew)
- ("glib" ,glib)
- ("gtk+" ,gtk+)
- ("pulseaudio" ,pulseaudio)
- ("sdl" ,sdl)
- ("sdl-image" ,sdl-image)
- ("xa" ,xa)))
- (home-page "https://vice-emu.sourceforge.io/")
- (synopsis "The versatile Commodore emulator")
- (description
- "VICE is a program that emulates the C64, the C64DTV, the C128, the
- VIC20, practically all PET models, the PLUS4 and the CBM-II (aka
- C610/C510). An extra emulator is provided for C64 expanded with the CMD
- SuperCPU.")
- (license license:gpl2+)))
- (define-public blastem
- (package
- (name "blastem")
- (version "0.6.2")
- (source (origin
- (method hg-fetch)
- (uri (hg-reference
- (url "https://www.retrodev.com/repos/blastem")
- (changeset (string-append "v" version))))
- (file-name (string-append name "-" version "-checkout"))
- (sha256
- (base32
- "08ycfisivh9rb9vmijlrpdryaw8spd81ck48960p15cnf8h2535q"))
- (modules '((guix build utils)))
- (snippet
- '(begin
- ;; TODO: Separately package and unbundle nuklear
- (delete-file-recursively "zlib")))))
- (build-system gnu-build-system)
- (arguments
- `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
- "HOST_ZLIB=1"
- "HAS_PROC=-DHAS_PROC"
- (string-append "CONFIG_PATH="
- %output "/share/blastem")
- (string-append "DATA_PATH="
- %output "/share/blastem"))
- #:tests? #f ; No check target and custom tests don't seem to build
- #:imported-modules
- ((guix build copy-build-system)
- ,@%gnu-build-system-modules)
- #:modules
- (((guix build copy-build-system)
- #:prefix copy:)
- (guix build gnu-build-system)
- (guix build utils))
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'fix-source
- (lambda _
- (substitute* (find-files "." ".*\\.[ch]")
- (("\"zlib/zlib.h\"") "<zlib.h>"))
- (substitute* "Makefile"
- (("CFLAGS:=-std=gnu99" all)
- (string-append all " -fcommon")))))
- (delete 'configure)
- (replace 'install
- (lambda* args
- (apply (assoc-ref copy:%standard-phases 'install)
- #:install-plan
- '(("." "bin" #:include ("blastem" "vgmplay"))
- ("." "share/blastem"
- #:include ("default.cfg" "rom.db")
- #:exclude ("android"))
- ("shaders" "share/blastem/shaders"))
- args))))))
- (inputs
- `(("glew" ,glew)
- ("mesa" ,mesa)
- ("sdl2" ,sdl2)
- ("zlib" ,zlib)))
- (native-inputs
- `(("pkg-config" ,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
- console.")
- (license license:gpl3+)))
- (define-public desmume
- (package
- (name "desmume")
- (version "0.9.11")
- (source
- (origin
- (method url-fetch)
- (uri (string-append
- "mirror://sourceforge/desmume/desmume/"
- version "/desmume-" version ".tar.gz"))
- (sha256
- (base32
- "15l8wdw3q61fniy3h93d84dnm6s4pyadvh95a0j6d580rjk4pcrs"))
- (patches (search-patches "desmume-gcc6-fixes.patch"
- "desmume-gcc7-fixes.patch"))))
- (build-system gnu-build-system)
- (arguments
- ;; Enable support for WiFi and microphone.
- `(#:configure-flags '("--enable-wifi"
- "--enable-openal")))
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("intltool" ,intltool)))
- (inputs
- `(("zlib" ,zlib)
- ("sdl" ,sdl)
- ("glib" ,glib)
- ("gtk+" ,gtk+-2)
- ("glu" ,glu)))
- (home-page "http://desmume.org/")
- (synopsis "Nintendo DS emulator")
- (description
- "DeSmuME is an emulator for the Nintendo DS handheld gaming console.")
- (license license:gpl2)))
- ;; 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-public dolphin-emu
- (let ((commit "a34823df61df65168aa40ef5e82e44defd4a0138")
- (revision "13178"))
- (package
- (name "dolphin-emu")
- (version (git-version "5.0" revision commit))
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/dolphin-emu/dolphin")
- (commit commit)))
- (file-name (git-file-name name version))
- (modules '((guix build utils)))
- (snippet
- '(begin
- ;; Remove external stuff we don't need.
- (for-each (lambda (dir)
- (delete-file-recursively
- (string-append "Externals/" dir)))
- '("LZO" "OpenAL" "Qt" "SFML" "curl" "ffmpeg"
- "gettext" "hidapi" "libpng" "libusb" "mbedtls"
- "miniupnpc" "MoltenVK" "zlib"))
- ;; Clean up source.
- (for-each delete-file (find-files "." ".*\\.(bin|dsy|exe|jar|rar)$"))
- #t))
- (sha256
- (base32
- "0j6hnj60iai366kl0kdbn1jkwc183l02g65mp2vq4qb2yd4399l1"))))
- (build-system cmake-build-system)
- (arguments
- '(#:tests? #f
- #:phases
- (modify-phases %standard-phases
- (add-before 'configure 'generate-fonts&hardcore-libvulkan-path
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let ((fontfile
- (search-input-file inputs
- "/share/fonts/truetype/wqy-microhei.ttc"))
- (libvulkan
- (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")
- (invoke "./gc-font-tool" "a" fontfile "font_western.bin")
- (invoke "./gc-font-tool" "s" fontfile "font_japanese.bin")
- (copy-file "font_japanese.bin" "../Data/Sys/GC/font_japanese.bin")
- (copy-file "font_western.bin" "../Data/Sys/GC/font_western.bin")
- (chdir "..")
- (substitute* "Source/Core/VideoBackends/Vulkan/VulkanLoader.cpp"
- (("\"vulkan\", 1") (string-append "\"vulkan\""))
- (("\"vulkan\"") (string-append "\"" libvulkan "\""))
- (("Common::DynamicLibrary::GetVersionedFilename") ""))
- #t))))
- ;; The FindGTK2 cmake script only checks hardcoded directories for
- ;; glib/gtk headers.
- #:configure-flags
- (list (string-append "-DX11_INCLUDE_DIR="
- (assoc-ref %build-inputs "libx11")
- "/include")
- (string-append "-DX11_LIBRARIES="
- (assoc-ref %build-inputs "libx11")
- "/lib/libX11.so")
- "-DX11_FOUND=1")))
- (native-inputs
- `(("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)))
- (home-page "https://dolphin-emu.org/")
- (synopsis "Nintendo Wii and GameCube emulator")
- (description
- "Dolphin is an emulator for two Nintendo video game consoles: the
- GameCube and the Wii. It provides compatibility with all PC controllers,
- turbo speed, networked multiplayer, and graphical enhancements.")
- (supported-systems '("x86_64-linux" "aarch64-linux"))
- ; dolphin/Data/Sys/GC/font_*.bin: Licensed under ASL2.0.
- (license (list license:gpl2+ license:asl2.0 license:fdl1.2+)))))
- (define-public dosbox
- (package
- (name "dosbox")
- (version "0.74-3")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://sourceforge.net/projects/dosbox"
- "/files/dosbox/" version "/dosbox-"
- version ".tar.gz/download"))
- (file-name (string-append name "-" version ".tar.gz"))
- (sha256
- (base32
- "02i648i50dwicv1vaql15rccv4g8h5blf5g6inv67lrfxpbkvlf0"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("autoconf" ,autoconf)
- ("automake" ,automake)))
- (inputs
- `(("sdl" ,sdl)
- ("libpng" ,libpng)
- ("zlib" ,zlib)
- ("alsa-lib" ,alsa-lib)
- ("glu" ,glu)
- ("mesa" ,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
- also emulates CPU:286/386 realmode/protected mode, Directory
- FileSystem/XMS/EMS, Tandy/Hercules/CGA/EGA/VGA/VESA graphics, a
- SoundBlaster/Gravis Ultra Sound card for excellent sound compatibility with
- older games.")
- (license license:gpl2+)))
- (define-public dosbox-staging
- ;; This is not a patch staging area for DOSBox, but an unaffiliated fork.
- (package
- (name "dosbox-staging")
- (version "0.77.1")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/dosbox-staging/dosbox-staging")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32 "07jwmmm1bhfxavlhl854cj8l5iy5hqx5hpwkkjbcwqg7yh9jfs2x"))))
- (build-system meson-build-system)
- (arguments
- `(#:configure-flags
- ;; These both try to git clone subprojects.
- (list "-Dunit_tests=disabled" ; gtest
- "-Duse_mt32emu=false"))) ; mt32emu
- (native-inputs
- `(("pkg-config" ,pkg-config)))
- (inputs
- `(("alsa-lib" ,alsa-lib)
- ("fluidsynth" ,fluidsynth)
- ("libpng" ,libpng)
- ("mesa" ,mesa)
- ("opusfile" ,opusfile)
- ("sdl2" ,(sdl-union (list sdl2 sdl2-net)))
- ("zlib" ,zlib)))
- (home-page "https://dosbox-staging.github.io")
- (synopsis "DOS/x86 PC emulator focusing on ease of use")
- (description
- "The DOSBox Staging project attempts to modernize DOSBox.
- DOSBox emulates an Intel x86 personal computer running an IBM PC compatible disk
- operating system (@dfn{DOS}) in both real and protected modes. It was primarily
- designed to run old DOS games, but aims to be fully compatible with all DOS
- programs and replicate the experience as accurately as possible.
- This fork fixes some perceived issues with DOSBox and adds new features such as
- Wayland support, PowerPC/POWER dynamic recompilation, and FluidSynth MIDI.
- Other features may be removed: for example, physical CDs can no longer be
- played, only emulated media.
- Graphical emulation includes contemporary text mode, Hercules, CGA, EGA, VGA,
- VESA, S3@tie{}Trio@tie{}64, and Tandy hardware.
- Emulated legacy sound devices range from a rudimentary `PC speaker' buzzer to
- the once state-of-the-art Gravis Utrasound sampling sound card. The default is
- a SoundBlaster 16 providing 16-bit stereo sound. MIDI is forwarded to the host
- through an emulated MPU-401.
- An emulated hardware modem is also included, letting one host or dial a
- @acronym{BBS, Bulletin Board System} across the Internet, network over IPX, and
- emulate a serial nullmodem over TCP/IP.")
- (license license:gpl3+)))
- (define-public qtmips
- (package
- (name "qtmips")
- (version "0.7.5")
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/cvut/QtMips")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "1fal7a8y5g0rqqjrk795jh1l50ihz01ppjnrfjrk9vkjbd59szbp"))))
- (build-system cmake-build-system)
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- (replace 'configure
- (lambda* (#:key outputs #:allow-other-keys)
- (invoke "qmake"
- (string-append "PREFIX=" (assoc-ref outputs "out"))
- "qtmips.pro")))
- (replace 'check
- (lambda* (#:key tests? #:allow-other-keys)
- (substitute* "tests/test.sh"
- (("qtchooser.*") ""))
- (substitute* '("tests/cpu_trap/test.sh"
- "tests/registers/test.sh")
- (("sub-qtmips_cli") "qtmips_cli"))
- (if tests?
- (invoke "tests/run-all.sh")
- #t)))
- (replace 'install
- ;; There is no install target.
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (bin (string-append out "/bin"))
- (apps (string-append out "/share/applications"))
- (icons (string-append out "/share/icons/hicolor")))
- (install-file "qtmips_gui/qtmips_gui" bin)
- (install-file "qtmips_cli/qtmips_cli" bin)
- (install-file "data/qtmips.desktop" apps)
- (install-file "data/icons/qtmips_gui.svg"
- (string-append icons "/scalable/apps"))
- (install-file "data/icons/qtmips_gui.png"
- (string-append icons "/48x48/apps"))
- #t))))
- #:tests? #f)) ; test suite wants mips toolchain
- (inputs
- `(("elfutils" ,elfutils)
- ("qtbase" ,qtbase-5)))
- (home-page "https://github.com/cvut/QtMips")
- (synopsis "MIPS CPU emulator")
- (description "This package contains a MIPS CPU emulator. The simulator
- accepts ELF statically linked executables compiled for 32-bit big-endian
- MIPS target, targeting mips-linux-gnu or mips-elf.")
- (license license:gpl2+))) ; License file says GPL3
- (define-public emulation-station
- ;; No release for a long time, new commits fix build issues
- (let ((commit "9cc42adff67946175d2b7e25c6ae69cc374e98a0")
- (revision "1"))
- (package
- (name "emulation-station")
- (version (git-version "2.0.1" revision commit))
- (source (origin
- (method git-fetch) ; no tarball available
- (uri (git-reference
- (url "https://github.com/Aloshi/EmulationStation")
- (commit commit))) ; no version tag
- (file-name (git-file-name name version))
- (sha256
- (base32
- "1cva0ns650v17lfn8in095zci6lc43d23f1x3mlzc41qfqa6mbd1"))))
- (build-system cmake-build-system)
- (arguments
- '(#:tests? #f)) ; no tests
- (inputs
- `(("alsa-lib" ,alsa-lib)
- ("boost" ,boost)
- ("curl" ,curl)
- ("eigin" ,eigen)
- ("freeimage" ,freeimage)
- ("freetype" ,freetype)
- ("mesa" ,mesa)
- ("sdl2" ,sdl2)))
- (synopsis "Video game console emulator front-end")
- (description "EmulationStation provides a graphical front-end to a large
- number of video game console emulators. It features an interface that is
- usable with any game controller that has at least 4 buttons, theming support,
- and a game metadata scraper.")
- (home-page "https://emulationstation.org")
- (license license:expat))))
- (define-public higan
- (package
- (name "higan")
- (version "110")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/higan-emu/higan")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32 "11rvm53c3p2f6zk8xbyv2j51xp8zmqnch7zravhj3fk590qrjrr2"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("pkg-config" ,pkg-config)))
- (inputs
- `(("alsa-lib" ,alsa-lib)
- ("ao" ,ao)
- ("eudev" ,eudev)
- ("gtk+" ,gtk+-2)
- ("gtksourceview-2" ,gtksourceview-2)
- ("libxrandr" ,libxrandr)
- ("libxv" ,libxv)
- ("mesa" ,mesa)
- ("openal" ,openal)
- ("pulseaudio" ,pulseaudio)
- ("sdl2" ,sdl2)))
- (arguments
- '(#:phases
- (let ((build-phase (assoc-ref %standard-phases 'build))
- (install-phase (assoc-ref %standard-phases 'install)))
- (modify-phases %standard-phases
- ;; The higan build system has no configure phase.
- (delete 'configure)
- (add-before 'build 'chdir-to-higan
- (lambda _
- (chdir "higan")
- #t))
- (add-before 'install 'create-/share/applications
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- ;; It seems the author forgot to do this in the Makefile.
- (mkdir-p (string-append out "/share/applications"))
- #t)))
- (add-after 'install 'chdir-to-icarus
- (lambda _
- (chdir "../icarus")
- #t))
- (add-after 'chdir-to-icarus 'build-icarus build-phase)
- (add-after 'build-icarus 'install-icarus install-phase)
- (add-after 'install-icarus 'wrap-higan-executable
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (bin (string-append out "/bin"))
- (higan (string-append bin "/higan"))
- (higan-original (string-append higan "-original"))
- (bash (search-input-file inputs "/bin/bash"))
- (coreutils (assoc-ref inputs "coreutils"))
- (mkdir (string-append coreutils "/bin/mkdir"))
- (cp (string-append coreutils "/bin/cp"))
- (cp-r (string-append cp " -r --no-preserve=mode")))
- ;; First, have the executable make sure ~/.local/share/higan
- ;; contains up to date files. Higan insists on looking there
- ;; for these data files.
- (rename-file higan higan-original)
- (with-output-to-file higan
- (lambda ()
- (display
- (string-append
- "#!" bash "\n"
- ;; higan doesn't respect $XDG_DATA_HOME
- mkdir " -p ~/.local/share\n"
- cp-r " " out "/share/higan ~/.local/share\n"
- "exec " higan-original))))
- (chmod higan #o555)
- ;; Second, make sure higan will find icarus in PATH.
- (wrap-program higan
- `("PATH" ":" prefix (,bin)))
- #t)))))
- #:make-flags
- (list "compiler=g++"
- (string-append "prefix=" (assoc-ref %outputs "out")))
- ;; There is no test suite.
- #:tests? #f))
- (home-page "https://github.com/higan-emu/higan/")
- (synopsis "Multi-system emulator")
- (description
- "higan is a multi-system emulator with an uncompromising focus on
- accuracy and code readability.
- It currently emulates the following systems: Famicom, Famicom Disk System,
- Super Famicom, Super Game Boy, Game Boy, Game Boy Color, Game Boy Advance,
- Game Boy Player, SG-1000, SC-3000, Master System, Game Gear, Mega Drive, Mega
- CD, PC Engine, SuperGrafx, MSX, MSX2, ColecoVision, Neo Geo Pocket, Neo Geo
- Pocket Color, WonderSwan, WonderSwan Color, SwanCrystal, Pocket Challenge
- V2.")
- (license license:gpl3+)))
- (define-public mednafen
- (package
- (name "mednafen")
- (version "1.27.1")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "https://mednafen.github.io/releases/files/"
- "mednafen-" version ".tar.xz"))
- (sha256
- (base32 "1ysmb56wzr17ki6f1b486r2dzjr11igd021qb4r3437l68prpa7k"))))
- (build-system gnu-build-system)
- (arguments
- `(#:configure-flags
- (list
- ;; "--with-external-mpcdec"
- "--with-external-lzo")))
- (native-inputs
- `(("pkg-config" ,pkg-config)))
- (inputs
- `(("alsa" ,alsa-lib)
- ("flac" ,flac)
- ;; ("libmpcdec" ,libmpcdec) FIXME: not recognized.
- ("libsndfile" ,libsndfile)
- ("lzo" ,lzo)
- ("sdl2" ,sdl2)
- ("zlib" ,zlib)))
- (home-page "https://mednafen.github.io/")
- (synopsis "Multi-system emulator utilizing OpenGL and SDL")
- (description
- "Mednafen is a portable, utilizing OpenGL and SDL, argument-driven
- multi-system emulator. Mednafen has the ability to remap hotkey functions and
- virtual system inputs to a keyboard, a joystick, or both simultaneously. Save
- states are supported, as is real-time game rewinding. Screen snapshots may be
- taken, in the PNG file format, at the press of a button. Mednafen can record
- audiovisual movies in the QuickTime file format, with several different
- lossless codecs supported.
- The following systems are supported:
- @itemize
- @item Apple II/II+
- @item Atari Lynx
- @item Neo Geo Pocket (Color)
- @item WonderSwan
- @item GameBoy (Color)
- @item GameBoy Advance
- @item Nintendo Entertainment System
- @item Super Nintendo Entertainment System/Super Famicom
- @item Virtual Boy
- @item PC Engine/TurboGrafx 16 (CD)
- @item SuperGrafx
- @item PC-FX
- @item Sega Game Gear
- @item Sega Genesis/Megadrive
- @item Sega Master System
- @item Sega Saturn (experimental, x86_64 only)
- @item Sony PlayStation
- @end itemize")
- ;; Main license is GPL2+. Some parts are BSD-3.
- (license (list license:gpl2+ license:bsd-3))))
- (define-public mgba
- (package
- (name "mgba")
- (version "0.9.2")
- (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 "16kngkzf08jflqxwbgafb47091vqqb9pbhazg9cd94cy81ahz3q3"))
- (modules '((guix build utils)))
- (snippet
- ;; Make sure we don't use the bundled software.
- '(begin
- (for-each
- (lambda (subdir)
- (let ((lib-subdir (string-append "src/third-party/" subdir)))
- (delete-file-recursively lib-subdir)))
- '("libpng" "lzma" "sqlite3" "zlib"))))))
- (build-system cmake-build-system)
- (arguments
- `(#:tests? #f ;no "test" target
- #:configure-flags
- (list "-DUSE_LZMA=OFF" ;do not use bundled LZMA
- "-DUSE_LIBZIP=OFF"))) ;use "zlib" instead
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("qttools" ,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)))
- (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.")
- ;; Code is mainly MPL 2.0. "blip_buf.c" is LGPL 2.1+, "inih.c" is
- ;; BSD-3, and "discord-rpc" is Expat.
- (license (list license:mpl2.0 license:lgpl2.1+ license:bsd-3 license:expat))))
- (define-public sameboy
- (package
- (name "sameboy")
- (version "0.14.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/LIJI32/SameBoy")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0qqribyksm51fhq923rdhrzb9c4yf16szymprbw8fsz0nzv8frm3"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("rgbds" ,rgbds)
- ("pkg-config" ,pkg-config)))
- (inputs
- `(("sdl2" ,sdl2)))
- (arguments
- `(#:tests? #f ; There are no tests
- #:make-flags `(,(string-append "CC=" ,(cc-for-target))
- "NATIVE_CC=gcc" "CONF=release"
- ,(string-append "DATA_DIR="
- (assoc-ref %outputs "out")
- "/share/sameboy/"))
- #:phases
- (modify-phases %standard-phases
- (delete 'configure)
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (bin (string-append out "/bin"))
- (data (string-append out "/share/sameboy/")))
- (with-directory-excursion "build/bin/SDL"
- (install-file "sameboy" bin)
- (delete-file "sameboy")
- (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
- and Super Game Boy emulator. SameBoy is accurate and includes a wide
- range of debugging features. It has all the features one would expect
- from an emulator---from save states to scaling filters.")
- (license license:expat)))
- (define-public mupen64plus-core
- (package
- (name "mupen64plus-core")
- (version "2.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-core")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "116fndl6652zrp1r6ag4xv3dzp1x52mlvadj8xwflq07fd5rhri1"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("which" ,which)))
- (inputs
- `(("freetype" ,freetype)
- ("glu" ,glu)
- ("libpng" ,libpng)
- ("mesa" ,mesa)
- ("sdl2" ,sdl2)
- ("zlib" ,zlib)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'chdir-to-project-directory
- (lambda _
- (chdir "projects/unix")
- #t)))
- #:make-flags (let ((out (assoc-ref %outputs "out")))
- (list "all" (string-append "PREFIX=" out)))
- ;; There are no tests.
- #:tests? #f))
- ;; As per the Makefile (in projects/unix/Makefile):
- (supported-systems '("i686-linux" "x86_64-linux"))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Nintendo 64 emulator core library")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- core library.")
- (license license:gpl2+)))
- (define-public mupen64plus-audio-sdl
- (package
- (name "mupen64plus-audio-sdl")
- (version "2.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-audio-sdl")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0z19amfg9vr2pqjjri1ipc7hs681fzjcnb0f9y7bjhp5n8d7p6bb"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("which" ,which)))
- (inputs
- `(("mupen64plus-core" ,mupen64plus-core)
- ("sdl2" ,sdl2)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix"))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus SDL input plugin")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- SDL audio plugin.")
- (license license:gpl2+)))
- (define-public mupen64plus-input-sdl
- (package
- (name "mupen64plus-input-sdl")
- (version "2.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-input-sdl")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "1dyazfbdjycdfslq8jixqiqhziw0rlkvach2r9dz91229jmkyc9c"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("which" ,which)))
- (inputs
- `(("mupen64plus-core" ,mupen64plus-core)
- ("sdl2" ,sdl2)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix"))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus SDL input plugin")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- SDL input plugin.")
- (license license:gpl2+)))
- (define-public mupen64plus-rsp-hle
- (package
- (name "mupen64plus-rsp-hle")
- (version "2.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-rsp-hle")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0pi31qzjjp7aypdvvnz6ms18g09c4gqzxi6328zj8sji94b75gf0"))))
- (build-system gnu-build-system)
- (inputs
- `(("mupen64plus-core" ,mupen64plus-core)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix"))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus SDL input plugin")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- high-level emulation (HLE) RSP processor plugin.")
- (license license:gpl2+)))
- (define-public mupen64plus-rsp-z64
- (package
- (name "mupen64plus-rsp-z64")
- (version "2.0.0")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-rsp-z64")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0nfyjns9k8xbg3aqs7593nfaxvlj72h3l8h467442xlk8ajfcylx"))))
- (build-system gnu-build-system)
- (inputs
- `(("mupen64plus-core" ,mupen64plus-core)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix"))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus SDL input plugin")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- Z64 RSP processor plugin.")
- (license license:gpl2+)))
- (define-public mupen64plus-video-arachnoid
- (package
- (name "mupen64plus-video-arachnoid")
- (version "2.0.0")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-video-arachnoid")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "1v9fqwpb6pawr8z5cm2ki7bqkks4iyr5c4jy4v5khj6h8zcv55gc"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("which" ,which)))
- (inputs
- `(("mesa" ,mesa)
- ("mupen64plus-core" ,mupen64plus-core)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix"))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus Rice Video plugin")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- Arachnoid video plugin.")
- (license license:gpl2+)))
- (define-public mupen64plus-video-glide64
- (package
- (name "mupen64plus-video-glide64")
- (version "2.0.0")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-video-glide64")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0qn5za7g7796kh2ag3xpmhbqg0yf71g9liz6ks0rha8pz73lgs01"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("which" ,which)))
- (inputs
- `(("mesa" ,mesa)
- ("mupen64plus-core" ,mupen64plus-core)
- ("sdl2" ,sdl2)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix")))
- ;; XXX Should be unnecessary with the next release.
- (add-before
- 'build 'use-sdl2
- (lambda _
- (substitute* "Makefile"
- (("SDL_CONFIG = (.*)sdl-config" all prefix)
- (string-append "SDL_CONFIG = " prefix "sdl2-config"))))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus Rice Video plugin")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- Glide64 video plugin.")
- (license license:gpl2+)))
- (define-public mupen64plus-video-glide64mk2
- (package
- (name "mupen64plus-video-glide64mk2")
- (version "2.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-video-glide64mk2")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "08pm28a36dpr0cvr8pzw0n5ksdazp7jqvlmqfy2lwb4dm0cwhkqd"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("which" ,which)))
- (inputs
- `(("boost" ,boost)
- ("libpng" ,libpng)
- ("mesa" ,mesa)
- ("mupen64plus-core" ,mupen64plus-core)
- ("sdl2" ,sdl2)
- ("zlib" ,zlib)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix"))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus Rice Video plugin")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- Glide64MK2 video plugin.")
- (license license:gpl2+)))
- (define-public mupen64plus-video-rice
- (package
- (name "mupen64plus-video-rice")
- (version "2.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-video-rice")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0rpmbcq67gsj5h5jjis146378qc1mskskvx20y1ikx59yhbamh13"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("which" ,which)))
- (inputs
- `(("libpng" ,libpng)
- ("mesa" ,mesa)
- ("mupen64plus-core" ,mupen64plus-core)
- ("sdl2" ,sdl2)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix"))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus Rice Video plugin")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- Rice Video plugin.")
- (license license:gpl2+)))
- (define-public mupen64plus-video-z64
- (package
- (name "mupen64plus-video-z64")
- (version "2.0.0")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-video-z64")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "04qa2fdd6dakpk2v0d4l80xh9b4h8gm71g80c0wyyxdhmhwk1r9c"))
- (patches (search-patches "mupen64plus-video-z64-glew-correct-path.patch"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("which" ,which)))
- (inputs
- `(("glew" ,glew)
- ("mupen64plus-core" ,mupen64plus-core)
- ("sdl2" ,sdl2)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix")))
- ;; XXX Should be unnecessary with the next release.
- (add-before
- 'build 'use-sdl2
- (lambda _
- (substitute* "Makefile"
- (("SDL_CONFIG = (.*)sdl-config" all prefix)
- (string-append "SDL_CONFIG = " prefix "sdl2-config"))))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus Z64 video plugin")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- Z64 video plugin.")
- (license license:gpl2+)))
- (define-public mupen64plus-ui-console
- (package
- (name "mupen64plus-ui-console")
- (version "2.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mupen64plus/mupen64plus-ui-console")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0vrf98qa6a0y3647kslsv644fag233dxh5dcr1yncjiiwickcr5a"))
- (patches (search-patches "mupen64plus-ui-console-notice.patch"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("which" ,which)))
- (inputs
- `(("sdl2" ,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
- ;; all packages from which data and plugin files are needed into one's
- ;; profile, and point the configuration there. Hence, propagate the most
- ;; important packages here to save the user from the bother. The patch
- ;; 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)))
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- ;; The mupen64plus build system has no configure phase.
- (delete 'configure)
- ;; Makefile is in a subdirectory.
- (add-before
- 'build 'cd-to-project-dir
- (lambda _
- (chdir "projects/unix"))))
- #:make-flags
- (let ((out (assoc-ref %outputs "out"))
- (m64p (assoc-ref %build-inputs "mupen64plus-core")))
- (list "all"
- (string-append "PREFIX=" out)
- (string-append "APIDIR=" m64p "/include/mupen64plus")
- ;; Trailing slash matters here.
- (string-append "COREDIR=" m64p "/lib/")))
- ;; There are no tests.
- #:tests? #f))
- (home-page "https://www.mupen64plus.org/")
- (synopsis "Mupen64Plus command line user interface")
- (description
- "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
- which is capable of accurately playing many games. This package contains the
- command line user interface. Installing this package is the easiest way
- towards a working Mupen64Plus for casual users.")
- (license license:gpl2+)))
- (define-public nestopia-ue
- (package
- (name "nestopia-ue")
- (version "1.51.1")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/rdanbrook/nestopia")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "1g19gz33jav00rwzkpcnynf5ps41vl64a9qx0xjd6lva4bgn8s57"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("autoconf" ,autoconf)
- ("autoconf-archive" ,autoconf-archive)
- ("automake" ,automake)
- ("pkg-config" ,pkg-config)))
- (inputs
- `(("fltk" ,fltk)
- ("fontconfig", fontconfig)
- ("libarchive" ,libarchive)
- ("libepoxy" ,libepoxy)
- ("libxft" ,libxft)
- ("libxrender" ,libxrender)
- ("sdl2" ,sdl2)
- ("zlib" ,zlib)))
- (arguments
- '(;; There are no tests.
- #:tests? #f))
- (home-page "http://0ldsk00l.ca/nestopia/")
- (synopsis "Nintendo Entertainment System (NES/Famicom) emulator")
- (description
- "Nestopia UE (Undead Edition) is a fork of the Nintendo Entertainment
- System (NES/Famicom) emulator Nestopia, with enhancements from members of the
- emulation community. It provides highly accurate emulation.")
- (license license:gpl2+)))
- (define-public libretro-lowresnx
- (package
- (name "libretro-lowresnx")
- (version "1.2")
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/timoinutilis/lowres-nx")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "0b0vg3iz342dpkffvf7frsnqh8inj8yzi8550bsx8vnbpq5r2ay5"))))
- (build-system gnu-build-system)
- (arguments
- `(#:tests? #f ; no tests
- #:make-flags (list "-C" "platform/LibRetro"
- (string-append "CC=" ,(cc-for-target)))
- #:phases
- (modify-phases %standard-phases
- (delete 'configure) ; no configure script
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (libretrodir (string-append out "/lib/libretro")))
- (install-file "platform/LibRetro/lowresnx_libretro.so"
- libretrodir)
- #t))))))
- (home-page "https://lowresnx.inutilis.com/")
- (synopsis "Libretro core for LowRES NX")
- (description "LowRES NX is a simulated retro game console, which can be
- programmed in the classic BASIC language. This package provides a libretro
- core allowing the lowRES NX programs to be used with libretro frontends such
- as RetroArch.")
- (license license:zlib)))
- (define-public retroarch
- (package
- (name "retroarch")
- (version "1.9.11")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/libretro/RetroArch")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0hd77kw1f655s40qcz1righdhd9czqyy40rf7gigdag1bkchdx6z"))
- (patches
- (search-patches "retroarch-LIBRETRO_DIRECTORY.patch"))))
- (build-system gnu-build-system)
- (arguments
- `(#:tests? #f ; no tests
- #:phases
- (modify-phases %standard-phases
- (replace 'configure
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (etc (string-append out "/etc"))
- (vulkan (assoc-ref inputs "vulkan-loader"))
- (wayland-protocols (assoc-ref inputs "wayland-protocols")))
- ;; Hard-code some store file names.
- (substitute* "gfx/common/vulkan_common.c"
- (("libvulkan.so") (string-append vulkan "/lib/libvulkan.so")))
- (substitute* "gfx/common/wayland/generate_wayland_protos.sh"
- (("/usr/local/share/wayland-protocols")
- (string-append wayland-protocols "/share/wayland-protocols")))
- (substitute* "qb/qb.libs.sh"
- (("/bin/true") (which "true")))
- ;; Use shared zlib.
- (substitute* '("libretro-common/file/archive_file_zlib.c"
- "libretro-common/streams/trans_stream_zlib.c")
- (("<compat/zlib.h>") "<zlib.h>"))
- ;; The configure script does not yet accept the extra arguments
- ;; (like ‘CONFIG_SHELL=’) passed by the default configure phase.
- (invoke
- "./configure"
- ,@(if (string-prefix? "armhf" (or (%current-target-system)
- (%current-system)))
- '("--enable-neon" "--enable-floathard")
- '())
- (string-append "--prefix=" out)
- ;; Non-free software are available through the core updater,
- ;; disable it. See <https://issues.guix.gnu.org/38360>.
- "--disable-update_cores"
- "--disable-builtinminiupnpc")))))))
- (inputs
- `(("alsa-lib" ,alsa-lib)
- ("ffmpeg" ,ffmpeg)
- ("freetype" ,freetype)
- ("libxinerama" ,libxinerama)
- ("libxkbcommon" ,libxkbcommon)
- ("libxml2" ,libxml2)
- ("libxrandr" ,libxrandr)
- ("libxv" ,libxv)
- ("mesa" ,mesa)
- ("miniupnpc" ,miniupnpc)
- ("openal" ,openal)
- ("pulseaudio" ,pulseaudio)
- ("python" ,python)
- ("qtbase" ,qtbase-5)
- ("sdl" ,sdl2)
- ("udev" ,eudev)
- ("vulkan-loader" ,vulkan-loader)
- ("wayland" ,wayland)
- ("zlib" ,zlib)))
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("wayland-protocols" ,wayland-protocols)
- ("which" ,which)))
- (native-search-paths
- (list (search-path-specification
- (variable "LIBRETRO_DIRECTORY")
- (separator #f) ; single entry
- (files '("lib/libretro")))))
- (home-page "https://www.libretro.com/")
- (synopsis "Reference frontend for the libretro API")
- (description
- "Libretro is a simple but powerful development interface that allows for
- the easy creation of emulators, games and multimedia applications that can plug
- straight into any libretro-compatible frontend. RetroArch is the official
- reference frontend for the libretro API, currently used by most as a modular
- multi-system game/emulator system.")
- (license license:gpl3+)))
- (define-public scummvm
- (package
- (name "scummvm")
- (version "2.5.0")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "https://downloads.scummvm.org/frs/scummvm/" version
- "/scummvm-" version ".tar.xz"))
- (sha256
- (base32 "08ynw1cmld41p4bwrw84gb1nv229va70i91qiqsjr3c2jnqy8zml"))))
- (build-system gnu-build-system)
- (arguments
- `(#:tests? #f ;require "git"
- #:configure-flags (list "--enable-release") ;for optimizations
- #:phases
- (modify-phases %standard-phases
- (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)
- (let* ((out (assoc-ref outputs "out"))
- (bash (which "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)))
- (inputs
- `(("alsa-lib" ,alsa-lib)
- ("faad2" ,faad2)
- ("fluidsynth" ,fluidsynth)
- ("freetype" ,freetype)
- ("fribidi" ,fribidi)
- ("glew" ,glew)
- ("giflib" ,giflib)
- ("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)))
- (home-page "https://www.scummvm.org/")
- (synopsis "Engine for several graphical adventure games")
- (description "ScummVM is a program which allows you to run certain
- classic graphical point-and-click adventure games, provided you
- already have their data files. The clever part about this: ScummVM
- just replaces the executables shipped with the games, allowing you to
- play them on systems for which they were never designed!")
- (license license:gpl2+)))
- (define-public libticables2
- (package
- (name "libticables2")
- (version "1.3.5")
- (source (origin
- (method url-fetch)
- (uri "https://www.ticalc.org/pub/unix/tilibs.tar.gz")
- (sha256
- (base32
- "07cfwwlidgx4fx88whnlch6y1342x16h15lkvkkdlp2y26sn2yxg"))))
- (build-system gnu-build-system)
- (arguments
- `(#:configure-flags (list "--enable-libusb10")
- #:phases
- (modify-phases %standard-phases
- (replace 'unpack
- (lambda* (#:key source #:allow-other-keys)
- (invoke "tar" "xvkf" source)
- (invoke "tar" "xvkf"
- (string-append "tilibs2/libticables2-"
- ,version ".tar.bz2"))
- (chdir (string-append "libticables2-" ,version))
- #t)))))
- (native-inputs
- `(("autoconf" ,autoconf)
- ("autogen" ,autogen)
- ("automake" ,automake)
- ("gettext" ,gnu-gettext)
- ("libtool" ,libtool)
- ("pkg-config" ,pkg-config)))
- (inputs
- `(("glib" ,glib)
- ("libusb" ,libusb)))
- (synopsis "Link cable library for TI calculators")
- (description
- "This package contains libticables, a library for operations on
- @acronym{TI, Texas Instruments} calculator link cables.
- This is a part of the TiLP project.")
- (home-page "http://lpg.ticalc.org/prj_tilp/")
- (license license:gpl2+)))
- (define-public libticonv
- (package
- (name "libticonv")
- (version "1.1.5")
- (source (origin
- (method url-fetch)
- (uri "https://www.ticalc.org/pub/unix/tilibs.tar.gz")
- (sha256
- (base32
- "07cfwwlidgx4fx88whnlch6y1342x16h15lkvkkdlp2y26sn2yxg"))))
- (build-system gnu-build-system)
- (arguments
- ;; build fails with out --enable-iconv (...?)
- `(#:configure-flags (list "--enable-iconv")
- #:phases
- (modify-phases %standard-phases
- (replace 'unpack
- (lambda* (#:key source #:allow-other-keys)
- (invoke "tar" "xvkf" source)
- (invoke "tar" "xvkf"
- (string-append "tilibs2/libticonv-"
- ,version ".tar.bz2"))
- (chdir (string-append "libticonv-" ,version))
- #t)))))
- (native-inputs
- `(("autoconf" ,autoconf)
- ("automake" ,automake)
- ("libtool" ,libtool)
- ("pkg-config" ,pkg-config)))
- (inputs
- `(("glib" ,glib)))
- (synopsis "Character conversion library for TI calculators")
- (description
- "This package contains libticonv, a library to support working with
- @acronym{TI, Texas Instruments} calculator charsets.
- This is a part of the TiLP project.")
- (home-page "http://lpg.ticalc.org/prj_tilp/")
- (license license:gpl2+)))
- (define-public libtifiles2
- (package
- (name "libtifiles2")
- (version "1.1.7")
- (source (origin
- (method url-fetch)
- (uri "https://www.ticalc.org/pub/unix/tilibs.tar.gz")
- (sha256
- (base32
- "07cfwwlidgx4fx88whnlch6y1342x16h15lkvkkdlp2y26sn2yxg"))))
- (build-system gnu-build-system)
- (arguments
- `(#:phases
- (modify-phases %standard-phases
- (replace 'unpack
- (lambda* (#:key source #:allow-other-keys)
- (invoke "tar" "xvkf" source)
- (invoke "tar" "xvkf"
- (string-append "tilibs2/libtifiles2-"
- ,version ".tar.bz2"))
- (chdir (string-append "libtifiles2-" ,version))
- #t)))))
- (native-inputs
- `(("autoconf" ,autoconf)
- ("automake" ,automake)
- ("gettext" ,gnu-gettext)
- ("libtool" ,libtool)
- ("pkg-config" ,pkg-config)))
- (inputs
- `(("glib" ,glib)
- ("libarchive" ,libarchive)
- ("libticonv" ,libticonv)))
- (synopsis "File functions library for TI calculators")
- (description
- "This package contains libticonv, a library to support working with
- @acronym{TI, Texas Instruments} calculator files.
- This is a part of the TiLP project.")
- (home-page "http://lpg.ticalc.org/prj_tilp/")
- (license license:gpl2+)))
- (define-public libticalcs2
- (package
- (name "libticalcs2")
- (version "1.1.9")
- (source (origin
- (method url-fetch)
- (uri "https://www.ticalc.org/pub/unix/tilibs.tar.gz")
- (sha256
- (base32
- "07cfwwlidgx4fx88whnlch6y1342x16h15lkvkkdlp2y26sn2yxg"))))
- (build-system gnu-build-system)
- (arguments
- `(#:phases
- (modify-phases %standard-phases
- (replace 'unpack
- (lambda* (#:key source #:allow-other-keys)
- (invoke "tar" "xvkf" source)
- (invoke "tar" "xvkf"
- (string-append "tilibs2/libticalcs2-"
- ,version ".tar.bz2"))
- (chdir (string-append "libticalcs2-" ,version))
- #t)))))
- (native-inputs
- `(("autoconf" ,autoconf)
- ("automake" ,automake)
- ("gettext" ,gnu-gettext)
- ("libtool" ,libtool)
- ("pkg-config" ,pkg-config)))
- (inputs
- `(("glib" ,glib)
- ("libarchive" ,libarchive)
- ("libticables2" ,libticables2)
- ("libticonv" ,libticonv)
- ("libtifiles2" ,libtifiles2)))
- (synopsis "Support library for TI calculators")
- (description
- "This project aims to develop a multi-platform linking program for use
- with all @acronym{TI, Texas Instruments} graphing calculators (TI73 to
- V200PLT).
- This is a part of the TiLP project.")
- (home-page "http://lpg.ticalc.org/prj_tilp/")
- (license license:gpl2+)))
- (define-public mame
- (package
- (name "mame")
- (version "0.236")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/mamedev/mame")
- (commit (apply string-append "mame" (string-split version #\.)))))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0pxvvdirbwakl5cy7lp0zib6z176ckxx8c3mazsd7q1ddxxd3l8x"))
- (modules '((guix build utils)))
- (snippet
- ;; Remove bundled libraries.
- '(begin
- (with-directory-excursion "3rdparty"
- (for-each delete-file-recursively
- '("asio" "expat" "glm" "libflac" "libjpeg" "lua"
- "portaudio" "portmidi" "pugixml" "rapidjson" "SDL2"
- "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
- (delete 'configure)
- (add-after 'build 'build-documentation
- (lambda _ (invoke "make" "-C" "docs" "man" "info")))
- (replace 'install
- ;; Upstream does not provide an installation phase.
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (share (string-append out "/share/mame")))
- ;; Install data.
- (for-each (lambda (dir)
- (copy-recursively dir (string-append share "/" dir)))
- '("artwork" "bgfx" "ctrlr" "hash" "ini" "language"
- "plugins" "samples"))
- (let ((keymaps (string-append share "/keymaps")))
- (for-each (lambda (file) (install-file file keymaps))
- (find-files "keymaps" ".*LINUX\\.map")))
- (let ((fonts (string-append share "/fonts")))
- (install-file "uismall.bdf" fonts))
- (when (file-exists? "mame64")
- (rename-file "mame64" "mame"))
- (install-file "mame" (string-append out "/bin")))))
- (add-after 'install 'install-documentation
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (man (string-append out "/share/man/man1"))
- (info (string-append out "/share/info")))
- (install-file "docs/build/man/MAME.1" man)
- (install-file "docs/build/texinfo/MAME.info" info))))
- (add-after 'install 'install-ini-file
- ;; Generate an ini file so as to set some directories (e.g., roms)
- ;; to a writable location, i.e., "$HOME/.mame/" and "$HOME/mame/".
- ;;
- ;; XXX: We need to insert absolute references to the store. It can
- ;; be an issue if they leak into user's home directory, e.g., with
- ;; "mame -createconfig" and the package is later GC'ed.
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (share (string-append out "/share/mame"))
- (ini (string-append share "/ini")))
- (with-output-to-file (string-append ini "/mame.ini")
- (lambda _
- (format #t
- "inipath $HOME/.mame;~a/ini~@
- homepath $HOME/mame~@
- rompath $HOME/mame/roms~@
- samplepath $HOME/mame/samples;~a/samples~@
- cheatpath $HOME/mame/cheat~@
- artpath $HOME/mame/artwork;~a/artwork~@
- crosshairpath $HOME/mame/crosshair~@
- snapshot_directory $HOME/mame/snapshots~@
- hashpath ~a/hash~@
- fontpath $HOME/mame/fonts;~a/fonts~@
- ctrlrpath $HOME/mame/ctrlr;~a/ctrlr~@
- bgfx_path ~a/bgfx~@
- pluginspath $HOME/mame/plugins;~a/plugins~@
- languagepath ~a/language~@
- cfg_directory $HOME/.mame/cfg~@
- nvram_directory $HOME/.mame/nvram~@
- input_directory $HOME/.mame/inp~@
- state_directory $HOME/.mame/sta~@
- diff_directory $HOME/.mame/diff~@
- comment_directory $HOME/.mame/comments~%"
- share share share share share share share share
- share)))
- (with-output-to-file (string-append ini "/ui.ini")
- (lambda _
- (format #t
- "historypath $HOME/mame/history~@
- categorypath $HOME/mame/folders~@
- cabinets_directory $HOME/mame/cabinets~@
- cpanels_directory $HOME/mame/cpanel~@
- pcbs_directory $HOME/mame/pcb~@
- flyers_directory $HOME/mame/flyers~@
- titles_directory $HOME/mame/titles~@
- ends_directory $HOME/mame/ends~@
- marquees_directory $HOME/mame/marquees~@
- artwork_preview_directory $HOME/mame/artpreview~@
- bosses_directory $HOME/mame/bosses~@
- logos_directory $HOME/mame/logo~@
- scores_directory $HOME/mame/scores~@
- versus_directory $HOME/mame/versus~@
- gameover_directory $HOME/mame/gameover~@
- howto_directory $HOME/mame/howto~@
- select_directory $HOME/mame/select~@
- icons_directory $HOME/mame/icons~@
- covers_directory $HOME/mame/covers~@
- ui_path $HOME/.mame/ui~%"))))))
- (add-after 'install 'install-desktop-file
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (desktop (string-append out "/share/applications"))
- (executable (string-append out "/bin/mame")))
- (mkdir-p desktop)
- (with-output-to-file (string-append desktop "/mame.desktop")
- (lambda _
- (format #t
- "[Desktop Entry]~@
- Name=mame~@
- Comment=Multi-purpose emulation framework~@
- Exec=~a~@
- TryExec=~@*~a~@
- Terminal=false~@
- Type=Application~@
- Categories=Game;Emulator;~@
- Keywords=Game;Emulator;Arcade;~%"
- executable)))))))))
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("sphinx" ,python-sphinx)
- ("sphinxcontrib-svg2pdfconverter" ,python-sphinxcontrib-svg2pdfconverter)
- ("texinfo" ,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)))
- (home-page "https://www.mamedev.org")
- (synopsis "Multi-purpose emulation framework")
- (description "MAME's purpose is to preserve decades of software
- history. As electronic technology continues to rush forward, MAME
- prevents this important @emph{vintage} software from being lost and
- forgotten. This is achieved by documenting the hardware and how it
- functions. The source code to MAME serves as this documentation.")
- ;; The MAME project as a whole is distributed under the terms of GPL2+.
- ;; However, over 90% of the files are under Expat license. Also, artwork,
- ;; keymaps, languages and samples are under CC0.
- (license (list license:gpl2+ license:expat license:cc0))))
- (define-public gnome-arcade
- (package
- (name "gnome-arcade")
- (version "0.218.2")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/strippato/gnome-arcade")
- (commit (string-append "v." version))))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "1qc01a62p65qb6mwjfmxqsd6n3rglsfwrjhsp25nr7q54107n55l"))))
- (build-system cmake-build-system)
- (arguments
- `(#:tests? #f ; No tests.
- #:configure-flags (list
- (string-append "-DMAME_BIN=\""
- (assoc-ref %build-inputs "mame")
- "/bin/mame\"")
- (string-append "-DAPP_RES=\""
- (assoc-ref %outputs "out")
- "/share/gnome-arcade/\""))
- #:phases
- (modify-phases %standard-phases
- (add-before 'build 'fix-paths
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (pk 'cwd (getcwd))
- (substitute* "../source/src/config.c"
- (("/usr/share") (string-append out "/share"))))
- #t))
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (bin (string-append out "/bin"))
- (rom (string-append out "/share/gnome-arcade/data/rom"))
- (tile (string-append out "/share/gnome-arcade/data/tile")))
- (mkdir-p bin)
- (install-file "../gnome-arcade" bin)
- (copy-recursively "../source/res"
- (string-append out "/share/gnome-arcade/res"))
- (mkdir-p rom)
- (install-file "../source/data/rom/ROM.TXT" rom)
- (mkdir-p tile)
- (install-file "../source/data/tile/TILE.TXT" tile))
- #t)))))
- (native-inputs
- `(("pkg-config" ,pkg-config)))
- (inputs
- `(("mame" ,mame)
- ("gtk" ,gtk+)
- ("libevdev" ,libevdev)
- ("libvlc" ,vlc)
- ("libarchive" ,libarchive)))
- (home-page "https://github.com/strippato/gnome-arcade")
- (synopsis "Minimal MAME frontend")
- (description
- "A minimal GTK+ frontend for MAME, the multi-purpose arcade and console
- emulator.")
- (license license:gpl3+)))
- (define-public pcsxr
- ;; No release since 2017.
- (let ((commit "6484236cb0281e8040ff6c8078c87899a3407534"))
- (package
- (name "pcsxr")
- ;; Version is tagged here: https://github.com/frealgagu/PCSX-Reloaded
- (version "1.9.95")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/pcsxr/PCSX-Reloaded")
- (commit commit)))
- (sha256
- (base32
- "138mayp7zi9v4l3lm5f6xxkds619w1fgg769zm8s45c84jbz7dza"))
- (file-name (git-file-name name commit))))
- (build-system cmake-build-system)
- (arguments
- `(#:tests? #f ;no "test" target
- #:configure-flags
- (list "-DSND_BACKEND=pulse"
- "-DENABLE_CCDDA='ON'"
- "-DUSE_LIBARCHIVE='ON'"
- "-DUSE_LIBCDIO='ON'")
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'cd-subdir
- (lambda _ (chdir "pcsxr") #t))
- (add-before 'configure 'fix-cdio-lookup
- (lambda* (#:key inputs #:allow-other-keys)
- (substitute* "cmake/FindCdio.cmake"
- (("/usr/include/cdio")
- (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")
- "/bin/pcsxr")
- ;; For GtkFileChooserDialog.
- `("GSETTINGS_SCHEMA_DIR" =
- (,(string-append (assoc-ref inputs "gtk+")
- "/share/glib-2.0/schemas"))))
- #t)))))
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("intltool" ,intltool)
- ("glib" ,glib "bin")))
- (inputs
- `(("libcdio" ,libcdio)
- ("sdl2" ,sdl2)
- ("gtk+" ,gtk+)
- ("ffmpeg" ,ffmpeg)
- ("libxv" ,libxv)
- ("libarchive" ,libarchive)
- ("pulseaudio" ,pulseaudio)))
- (home-page "https://archive.codeplex.com/?p=pcsxr")
- (synopsis "PlayStation emulator")
- (description
- "A PlayStation emulator based on PCSX-df Project with bugfixes and
- improvements.")
- (license license:gpl2+))))
- (define-public gens-gs
- (package
- (name "gens-gs")
- (version "7")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "https://retrocdn.net/images/6/6d/Gens-gs-r"
- version ".tar.gz"))
- (sha256
- (base32
- "1ha5s6d3y7s9aq9f4zmn9p88109c3mrj36z2w68jhiw5xrxws833"))))
- (build-system glib-or-gtk-build-system)
- (arguments
- `(#:system "i686-linux"
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'fix-CFLAGS
- (lambda* _
- ;; Remove GTK API deprecation flags that cause build errors.
- (substitute* "configure"
- (("GTK_CFLAGS=\"\\$GTK_CFLAGS .*\"") ""))
- #t)))))
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("nasm" ,nasm)))
- (inputs
- `(("sdl" ,sdl)
- ("gtk" ,gtk+-2)))
- (home-page "https://segaretro.org/Gens/GS")
- (synopsis "Emulator for Sega Genesis/Mega Drive systems")
- (description
- "Gens/GS is an emulator for the Mega Drive (also known as Sega Genesis),
- derived from Gens. Project goals include clean source code, combined features
- from various forks of Gens, and improved platform portability.")
- (supported-systems '("i686-linux" "x86_64-linux"))
- (license license:gpl2+)))
- (define-public bsnes
- (package
- (name "bsnes")
- (version "115")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/bsnes-emu/bsnes")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "0j054x38fwai61vj36sc04r3zkzay5acq2cgd9zqv5hs51s36g5b"))))
- (build-system gnu-build-system)
- (arguments
- `(#:make-flags (list "-C" "bsnes"
- ;; Remove march=native
- "local=false"
- (string-append "prefix=" (assoc-ref %outputs "out")))
- #:tests? #f ; No tests.
- #:phases (modify-phases %standard-phases
- (delete 'configure))))
- (native-inputs
- `(("pkg-config" ,pkg-config)))
- (inputs
- `(("alsa-lib" ,alsa-lib)
- ("ao" ,ao)
- ("cairo" ,cairo)
- ("eudev" ,eudev)
- ("gtksourceview-2" ,gtksourceview-2)
- ("libxrandr" ,libxrandr)
- ("libxv" ,libxv)
- ("openal" ,openal)
- ("pulseaudio" ,pulseaudio)
- ("sdl2" ,sdl2)))
- (home-page "https://bsnes.dev/")
- (synopsis "Emulator for the Super Nintendo / Super Famicom systems")
- (description
- "bsnes is a Super Nintendo / Super Famicom emulator that focuses on
- performance, features, and ease of use.")
- (license license:gpl3)))
- ;; python-pwntools requires a -rc release of unicorn
- (define-public unicorn
- (let ((unless-x86
- (lambda (code)
- (if (member (%current-system) '("x86_64-linux" "i686-linux"))
- '()
- code))))
- (package
- (name "unicorn")
- (version "1.0.2-rc4")
- ;; NOTE: unicorn ships a bundled QEMU, but with a lot of custom modifications.
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/unicorn-engine/unicorn")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "17nyccgk7hpc4hab24yn57f1xnmr7kq4px98zbp2bkwcrxny8gwy"))))
- (outputs '("out" "python"))
- ;; The main library is not written in Python, but the build process has
- ;; little in common with any defined build system, so we might as well
- ;; build on top of python-build-system and make use of all
- ;; the Python-specific phases that can be reused.
- (build-system python-build-system)
- (arguments
- `(#:modules ((srfi srfi-26)
- (guix build python-build-system)
- (guix build utils))
- #:phases
- (modify-phases %standard-phases
- (add-before 'build 'build-library
- (lambda* (#:key inputs #:allow-other-keys)
- (invoke "make"
- "-j" (number->string (parallel-job-count))
- "UNICORN_STATIC=no"
- "CC=gcc")))
- (add-after 'build-library 'install-library
- (lambda* (#:key outputs #:allow-other-keys)
- (invoke "make" "install"
- "UNICORN_STATIC=no"
- (string-append
- "PREFIX="
- (assoc-ref outputs "out")))))
- (add-before 'build 'prepare-bindings
- (lambda* (#:key outputs #:allow-other-keys)
- (chdir "bindings/python")
- ;; Set this environment variable so that the Python bindings
- ;; don't build their own copy of the shared object, but use
- ;; a dummy value such that the bindings test suite uses the
- ;; same mechanism for loading the library as any other user.
- (setenv "LIBUNICORN_PATH" "1")
- (substitute* "unicorn/unicorn.py"
- (("_path_list = \\[.*")
- (string-append
- "_path_list = [\""
- (assoc-ref outputs "out")
- ;; eat the rest of the list
- "/lib\"] + 0*[")))
- #t))
- (add-before 'check 'check-library
- (lambda* (#:key outputs #:allow-other-keys)
- (for-each
- (lambda (suite)
- (with-directory-excursion
- (string-append "../../tests/" suite)
- (invoke "make" "test" "CC=gcc"
- ,@(unless-x86
- '("AS=i686-unknown-linux-gnu-as"
- "OBJCOPY=i686-unknown-linux-gnu-objcopy")))))
- '("unit" "regress"))
- #t))
- (add-after 'install 'install-samples
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((python-samples (find-files "." "sample_.*"))
- (c-samples (find-files "../../samples" ".*\\.c"))
- (python-docdir
- (string-append (assoc-ref outputs "python")
- "/share/doc/unicorn/samples"))
- (c-docdir
- (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)
- #t))))))
- (native-inputs
- ;; NOTE: cross-binutils needs to be wrapped with unless-x86, as otherwise
- ;; the linker provided by the package will be used, circumventing the ld-wrapper.
- `(,@(unless-x86
- `(("assembler-for-tests" ,(cross-binutils "i686-unknown-linux-gnu"))))
- ("cmocka" ,cmocka)
- ("hexdump-for-tests" ,util-linux)))
- (home-page "https://www.unicorn-engine.org")
- (synopsis "Unicorn CPU emulator framework")
- (description
- "Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator
- 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 "
- 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"))
- (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
- system.")
- (license license:gpl2+))))
- (define-public exomizer
- (package
- (name "exomizer")
- (version "3.1.1")
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://bitbucket.org/magli143/exomizer.git")
- (commit "6a152b5605648f7a41eadd4b011a93ec92f74dd8")))
- (file-name (string-append name "-" version "-checkout"))
- (sha256
- (base32
- "1ynhkb5p2dypkikipc3krzif264l9rmx1wnjzzgw8n88i4zkymzg"))))
- (build-system gnu-build-system)
- (arguments
- `(#:tests? #f ; No target exists
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'chdir
- (lambda _
- (delete-file-recursively "exodecrs")
- (delete-file-recursively "rawdecrs")
- (chdir "src")
- ;; Those will be regenerated.
- (delete-file "asm.tab.h")
- (delete-file "asm.tab.c")
- (delete-file "lex.yy.c")
- #t))
- (replace 'configure
- (lambda _
- (setenv "CC" ,(cc-for-target))
- #t))
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out-bin (string-append (assoc-ref outputs "out") "/bin")))
- (install-file "exomizer" out-bin)
- (install-file "exobasic" out-bin))
- #t)))))
- (native-inputs
- `(("flex" ,flex)
- ("bison" ,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
- where CPU speed and RAM are limited. It also generate a self-extractor for use
- on a Commodore C64, C128 etc.")
- (home-page "https://bitbucket.org/magli143/exomizer/wiki/Home")
- ;; Some files are LGPL 2.1--but we aren't building from or installing those.
- ;; zlib license with an (non-)advertising clause.
- (license license:zlib)))
- (define-public cc65
- (package
- (name "cc65")
- (version "2.19")
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/cc65/cc65.git")
- (commit (string-append "V" version))))
- (file-name (string-append name "-" version "-checkout"))
- (sha256
- (base32
- "01a15yvs455qp20hri2pbg2wqvcip0d50kb7dibi9427hqk9cnj4"))))
- (build-system gnu-build-system)
- (arguments
- `(#:tests? #f ; No target exists.
- #:make-flags
- (list "BUILD_ID=V2.18 - Git 55528249"
- (string-append "PREFIX=" (assoc-ref %outputs "out")))
- #:phases
- (modify-phases %standard-phases
- (replace 'configure
- (lambda* (#:key source #:allow-other-keys)
- ;; We include $SOURCE/include in C_INCLUDE_PATH. Remove it.
- (setenv "C_INCLUDE_PATH"
- (string-join
- (filter (lambda (name)
- (not (string=? name (string-append source "/include"))))
- (string-split (getenv "C_INCLUDE_PATH") #\:))
- ":"))
- #t)))))
- (synopsis "Development environment for 6502 systems")
- (description "This package provides a development environment for 6502 systems, including macro assembler, C compiler, linker, librarian and several other tools.")
- (home-page "https://cc65.github.io/")
- (license license:zlib)))
|