From d8c5c5e001a00ca80e9be849be72bdde58f4daf8 Mon Sep 17 00:00:00 2001 From: Thiago Kenji Okada Date: Wed, 20 Nov 2024 15:28:23 +0000 Subject: [PATCH] libretro.cores: clean-up, remove update_cores.py script --- maintainers/team-list.nix | 1 + .../emulators/retroarch/cores.nix | 234 ++--- .../emulators/retroarch/cores/beetle-gba.nix | 4 - .../emulators/retroarch/hashes.json | 903 ------------------ .../emulators/retroarch/mkLibretroCore.nix | 129 +-- .../emulators/retroarch/update_cores.py | 233 ----- 6 files changed, 151 insertions(+), 1353 deletions(-) delete mode 100644 pkgs/applications/emulators/retroarch/hashes.json delete mode 100755 pkgs/applications/emulators/retroarch/update_cores.py diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index 613d6be6753a..c27a307a8261 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -576,6 +576,7 @@ with lib.maintainers; members = [ aanderse edwtjo + hrdinka thiagokokada ]; scope = "Maintain Libretro, RetroArch and related packages."; diff --git a/pkgs/applications/emulators/retroarch/cores.nix b/pkgs/applications/emulators/retroarch/cores.nix index ebfc283d2360..61097042e33f 100644 --- a/pkgs/applications/emulators/retroarch/cores.nix +++ b/pkgs/applications/emulators/retroarch/cores.nix @@ -1,89 +1,11 @@ -{ lib -, newScope -, stdenv -, gcc12Stdenv -, alsa-lib -, boost -, bzip2 -, cmake -, curl -, fetchFromGitHub -, fetchpatch -, ffmpeg_6 -, fluidsynth -, fmt -, freetype -, gettext -, harfbuzz -, hexdump -, hidapi -, icu -, libaio -, libevdev -, libGL -, libGLU -, libjpeg -, liblcf -, libpcap -, libpng -, libsndfile -, libvorbis -, libxml2 -, libxmp -, libzip -, mpg123 -, nasm -, openssl -, opusfile -, pcre -, pixman -, pkg-config -, portaudio -, python3 -, sfml -, snappy -, speexdsp -, udev -, which -, xorg -, xxd -, xz +{ + lib, + newScope, + fetchFromGitHub, }: -let - hashesFile = lib.importJSON ./hashes.json; - - getCore = repo: (lib.getAttr repo hashesFile); - - getCoreSrc = repo: - let - inherit (getCore repo) src fetcher; - fetcherFn = { - inherit fetchFromGitHub; - }.${fetcher} or (throw "Unknown fetcher: ${fetcher}"); - in - fetcherFn src; - - getCoreVersion = repo: (getCore repo).version; -in -lib.makeScope newScope (self: rec { - mkLibretroCore = - # Sometimes core name != repo name, so you may need to set them differently - # when necessary: - # - core: used by the resulting core library name, e.g.: - # `${core}_libretro.so`. Needs to match their respectful core info file - # (see https://github.com/libretro/libretro-core-info/) - # - repo: the repository name on GitHub - # See `update_cores.py` for instruction on how to add a new core. - { core - , repo ? core - , src ? (getCoreSrc repo) - , version ? (getCoreVersion repo) - , ... - }@args: - self.callPackage ./mkLibretroCore.nix ({ - inherit core repo src version; - } // args); +lib.makeScope newScope (self: { + mkLibretroCore = self.callPackage ./mkLibretroCore.nix; atari800 = self.callPackage ./cores/atari800.nix { }; @@ -127,148 +49,148 @@ lib.makeScope newScope (self: rec { bsnes-mercury-performance = self.bsnes-mercury.override { withProfile = "performance"; }; - citra = self.callPackage ./cores/citra.nix { }; + citra = self.callPackage ./cores/citra.nix { }; - desmume = self.callPackage ./cores/desmume.nix { }; + desmume = self.callPackage ./cores/desmume.nix { }; - desmume2015 = self.callPackage ./cores/desmume2015.nix { }; + desmume2015 = self.callPackage ./cores/desmume2015.nix { }; - dolphin = self.callPackage ./cores/dolphin.nix { }; + dolphin = self.callPackage ./cores/dolphin.nix { }; - dosbox = self.callPackage ./cores/dosbox.nix { }; + dosbox = self.callPackage ./cores/dosbox.nix { }; - dosbox-pure = self.callPackage ./cores/dosbox-pure.nix { }; + dosbox-pure = self.callPackage ./cores/dosbox-pure.nix { }; - easyrpg = self.callPackage ./cores/easyrpg.nix { }; + easyrpg = self.callPackage ./cores/easyrpg.nix { }; - eightyone = self.callPackage ./cores/eightyone.nix { }; + eightyone = self.callPackage ./cores/eightyone.nix { }; - fbalpha2012 = self.callPackage ./cores/fbalpha2012.nix { }; + fbalpha2012 = self.callPackage ./cores/fbalpha2012.nix { }; - fbneo = self.callPackage ./cores/fbneo.nix { }; + fbneo = self.callPackage ./cores/fbneo.nix { }; - fceumm = self.callPackage ./cores/fceumm.nix { }; + fceumm = self.callPackage ./cores/fceumm.nix { }; - flycast = self.callPackage ./cores/flycast.nix { }; + flycast = self.callPackage ./cores/flycast.nix { }; - fmsx = self.callPackage ./cores/fmsx.nix { }; + fmsx = self.callPackage ./cores/fmsx.nix { }; - freeintv = self.callPackage ./cores/freeintv.nix { }; + freeintv = self.callPackage ./cores/freeintv.nix { }; - fuse = self.callPackage ./cores/fuse.nix { }; + fuse = self.callPackage ./cores/fuse.nix { }; - gambatte = self.callPackage ./cores/gambatte.nix { }; + gambatte = self.callPackage ./cores/gambatte.nix { }; - genesis-plus-gx = self.callPackage ./cores/genesis-plus-gx.nix { }; + genesis-plus-gx = self.callPackage ./cores/genesis-plus-gx.nix { }; - gpsp = self.callPackage ./cores/gpsp.nix { }; + gpsp = self.callPackage ./cores/gpsp.nix { }; - gw = self.callPackage ./cores/gw.nix { }; + gw = self.callPackage ./cores/gw.nix { }; - handy = self.callPackage ./cores/handy.nix { }; + handy = self.callPackage ./cores/handy.nix { }; - hatari = self.callPackage ./cores/hatari.nix { }; + hatari = self.callPackage ./cores/hatari.nix { }; - mame = self.callPackage ./cores/mame.nix { }; + mame = self.callPackage ./cores/mame.nix { }; - mame2000 = self.callPackage ./cores/mame2000.nix { }; + mame2000 = self.callPackage ./cores/mame2000.nix { }; - mame2003 = self.callPackage ./cores/mame2003.nix { }; + mame2003 = self.callPackage ./cores/mame2003.nix { }; - mame2003-plus = self.callPackage ./cores/mame2003-plus.nix { }; + mame2003-plus = self.callPackage ./cores/mame2003-plus.nix { }; - mame2010 = self.callPackage ./cores/mame2010.nix { }; + mame2010 = self.callPackage ./cores/mame2010.nix { }; - mame2015 = self.callPackage ./cores/mame2015.nix { }; + mame2015 = self.callPackage ./cores/mame2015.nix { }; - mame2016 = self.callPackage ./cores/mame2016.nix { }; + mame2016 = self.callPackage ./cores/mame2016.nix { }; - melonds = self.callPackage ./cores/melonds.nix { }; + melonds = self.callPackage ./cores/melonds.nix { }; - mesen = self.callPackage ./cores/mesen.nix { }; + mesen = self.callPackage ./cores/mesen.nix { }; - mesen-s = self.callPackage ./cores/mesen-s.nix { }; + mesen-s = self.callPackage ./cores/mesen-s.nix { }; - meteor = self.callPackage ./cores/meteor.nix { }; + meteor = self.callPackage ./cores/meteor.nix { }; - mgba = self.callPackage ./cores/mgba.nix { }; + mgba = self.callPackage ./cores/mgba.nix { }; - mrboom = self.callPackage ./cores/mrboom.nix { }; + mrboom = self.callPackage ./cores/mrboom.nix { }; - mupen64plus = self.callPackage ./cores/mupen64plus.nix { }; + mupen64plus = self.callPackage ./cores/mupen64plus.nix { }; - neocd = self.callPackage ./cores/neocd.nix { }; + neocd = self.callPackage ./cores/neocd.nix { }; - nestopia = self.callPackage ./cores/nestopia.nix { }; + nestopia = self.callPackage ./cores/nestopia.nix { }; - np2kai = self.callPackage ./cores/np2kai.nix { }; + np2kai = self.callPackage ./cores/np2kai.nix { }; - nxengine = self.callPackage ./cores/nxengine.nix { }; + nxengine = self.callPackage ./cores/nxengine.nix { }; - o2em = self.callPackage ./cores/o2em.nix { }; + o2em = self.callPackage ./cores/o2em.nix { }; - opera = self.callPackage ./cores/opera.nix { }; + opera = self.callPackage ./cores/opera.nix { }; - parallel-n64 = self.callPackage ./cores/parallel-n64.nix { }; + parallel-n64 = self.callPackage ./cores/parallel-n64.nix { }; - pcsx2 = self.callPackage ./cores/pcsx2.nix { }; + pcsx2 = self.callPackage ./cores/pcsx2.nix { }; - pcsx-rearmed = self.callPackage ./cores/pcsx-rearmed.nix { }; - pcsx_rearmed = lib.lowPrio(self.pcsx-rearmed); # added 2024-11-20 + pcsx-rearmed = self.callPackage ./cores/pcsx-rearmed.nix { }; + pcsx_rearmed = lib.lowPrio (self.pcsx-rearmed); # added 2024-11-20 - picodrive = self.callPackage ./cores/picodrive.nix { }; + picodrive = self.callPackage ./cores/picodrive.nix { }; - play = self.callPackage ./cores/play.nix { }; + play = self.callPackage ./cores/play.nix { }; - ppsspp = self.callPackage ./cores/ppsspp.nix { }; + ppsspp = self.callPackage ./cores/ppsspp.nix { }; - prboom = self.callPackage ./cores/prboom.nix { }; + prboom = self.callPackage ./cores/prboom.nix { }; - prosystem = self.callPackage ./cores/prosystem.nix { }; + prosystem = self.callPackage ./cores/prosystem.nix { }; - puae = self.callPackage ./cores/puae.nix { }; + puae = self.callPackage ./cores/puae.nix { }; - quicknes = self.callPackage ./cores/quicknes.nix { }; + quicknes = self.callPackage ./cores/quicknes.nix { }; - same_cdi = self.callPackage ./cores/same_cdi.nix { }; # the name is not a typo + same_cdi = self.callPackage ./cores/same_cdi.nix { }; # the name is not a typo - sameboy = self.callPackage ./cores/sameboy.nix { }; + sameboy = self.callPackage ./cores/sameboy.nix { }; - scummvm = self.callPackage ./cores/scummvm.nix { }; + scummvm = self.callPackage ./cores/scummvm.nix { }; - smsplus-gx = self.callPackage ./cores/smsplus-gx.nix { }; + smsplus-gx = self.callPackage ./cores/smsplus-gx.nix { }; - snes9x = self.callPackage ./cores/snes9x.nix { }; + snes9x = self.callPackage ./cores/snes9x.nix { }; - snes9x2002 = self.callPackage ./cores/snes9x2002.nix { }; + snes9x2002 = self.callPackage ./cores/snes9x2002.nix { }; - snes9x2005 = self.callPackage ./cores/snes9x2005.nix { }; + snes9x2005 = self.callPackage ./cores/snes9x2005.nix { }; snes9x2005-plus = self.snes9x2005.override { withBlarggAPU = true; }; - snes9x2010 = self.callPackage ./cores/snes9x2010.nix { }; + snes9x2010 = self.callPackage ./cores/snes9x2010.nix { }; - stella = self.callPackage ./cores/stella.nix { }; + stella = self.callPackage ./cores/stella.nix { }; - stella2014 = self.callPackage ./cores/stella2014.nix { }; + stella2014 = self.callPackage ./cores/stella2014.nix { }; - swanstation = self.callPackage ./cores/swanstation.nix { }; + swanstation = self.callPackage ./cores/swanstation.nix { }; - tgbdual = self.callPackage ./cores/tgbdual.nix { }; + tgbdual = self.callPackage ./cores/tgbdual.nix { }; - thepowdertoy = self.callPackage ./cores/thepowdertoy.nix { }; + thepowdertoy = self.callPackage ./cores/thepowdertoy.nix { }; - tic80 = self.callPackage ./cores/tic80.nix { }; + tic80 = self.callPackage ./cores/tic80.nix { }; - twenty-fortyeight = self.callPackage ./cores/twenty-fortyeight.nix { }; + twenty-fortyeight = self.callPackage ./cores/twenty-fortyeight.nix { }; - vba-m = self.callPackage ./cores/vba-m.nix { }; + vba-m = self.callPackage ./cores/vba-m.nix { }; - vba-next = self.callPackage ./cores/vba-next.nix { }; + vba-next = self.callPackage ./cores/vba-next.nix { }; - vecx = self.callPackage ./cores/vecx.nix { }; + vecx = self.callPackage ./cores/vecx.nix { }; - virtualjaguar = self.callPackage ./cores/virtualjaguar.nix { }; + virtualjaguar = self.callPackage ./cores/virtualjaguar.nix { }; - yabause = self.callPackage ./cores/yabause.nix { }; + yabause = self.callPackage ./cores/yabause.nix { }; }) diff --git a/pkgs/applications/emulators/retroarch/cores/beetle-gba.nix b/pkgs/applications/emulators/retroarch/cores/beetle-gba.nix index 22ce05982d23..ba6f74a5a6a0 100644 --- a/pkgs/applications/emulators/retroarch/cores/beetle-gba.nix +++ b/pkgs/applications/emulators/retroarch/cores/beetle-gba.nix @@ -1,7 +1,6 @@ { lib, fetchFromGitHub, - unstableGitUpdater, mkLibretroCore, }: mkLibretroCore { @@ -17,9 +16,6 @@ mkLibretroCore { makefile = "Makefile"; - # TODO: move this to mkLibretroCore - passthru.updateScript = unstableGitUpdater { }; - meta = { description = "Port of Mednafen's GameBoy Advance core to libretro"; homepage = "https://github.com/libretro/beetle-gba-libretro"; diff --git a/pkgs/applications/emulators/retroarch/hashes.json b/pkgs/applications/emulators/retroarch/hashes.json deleted file mode 100644 index 85ad2aa9e010..000000000000 --- a/pkgs/applications/emulators/retroarch/hashes.json +++ /dev/null @@ -1,903 +0,0 @@ -{ - "!comment": "Generated with update_cores.py script, do not edit!", - "2048": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "libretro-2048", - "rev": "5474ed1ab880b3296c9860d0943d7de1970c79dd", - "hash": "sha256-i6bbxsLpSicDDGYKAxTMCMioHHfvBzVokun3PNYgDsc=" - }, - "version": "unstable-2024-06-28" - }, - "atari800": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "libretro-atari800", - "rev": "6a18cb23cc4a7cecabd9b16143d2d7332ae8d44b", - "hash": "sha256-+cZXHtaXnpU/zCwiDtjkyNMFGDahiHzqV2FoTCRnUWE=" - }, - "version": "unstable-2024-10-31" - }, - "beetle-gba": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-gba-libretro", - "rev": "6cee80685f735ea6c2373db2622a1f1ee9f39d39", - "hash": "sha256-a3XgExXVCUFw3GLCUkEl6now2L8qVdNOaXvrDMcT1ZE=" - }, - "version": "unstable-2024-10-21" - }, - "beetle-lynx": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-lynx-libretro", - "rev": "7fead71b49e0f08be5c4d4224fea73c6174763bf", - "hash": "sha256-fYBx/bjbhRXoVIGnEg4/oMVm705ivL1os+FfVQLRSyI=" - }, - "version": "unstable-2024-10-21" - }, - "beetle-ngp": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-ngp-libretro", - "rev": "139fe34c8dfc5585d6ee1793a7902bca79d544de", - "hash": "sha256-ruWnCgMxfpPHTWQ7vgNUczmGRzNKKhoZTNlUcNgm4T8=" - }, - "version": "unstable-2024-10-21" - }, - "beetle-pce": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-pce-libretro", - "rev": "af28fb0385d00e0292c4703b3aa7e72762b564d2", - "hash": "sha256-W+74RTIidSUdviihLy926OvlSdqMECvOLEEiWMtB50w=" - }, - "version": "unstable-2024-11-15" - }, - "beetle-pce-fast": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-pce-fast-libretro", - "rev": "931586f0512663f625a6e981d3047a6620281ab5", - "hash": "sha256-9Nne4upiQNSAlTZsyXcLNIwN8MMKUO1ycahowYW1sWg=" - }, - "version": "unstable-2024-11-15" - }, - "beetle-pcfx": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-pcfx-libretro", - "rev": "dd04cef9355286488a1d78ff18c4c848a1575540", - "hash": "sha256-oFBuriCbJWjgPH9RRAM/XUvkW0gKXnvs7lmBpJpWewo=" - }, - "version": "unstable-2024-10-21" - }, - "beetle-psx": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-psx-libretro", - "rev": "1068cb8dbd6f312664ecf5901625cab4a6533204", - "hash": "sha256-ioAnpz6OkHWPaYE0uTEvnHV+vGzq02bQ4oUP8jW6/YA=" - }, - "version": "unstable-2024-11-15" - }, - "beetle-saturn": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-saturn-libretro", - "rev": "0a78a9a5ab0088ba19f21e028dda9f4b4d7c9e48", - "hash": "sha256-WNQhtaYBg7JqPdxcD0cLRjr2pSda6Xmx/WWYzyu5u9c=" - }, - "version": "unstable-2024-10-21" - }, - "beetle-supafaust": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "supafaust", - "rev": "e25f66765938d33f9ad5850e8d6cd597e55b7299", - "hash": "sha256-ZgOXHhEHt54J2B1q6uA8v6uOK53g7idJlgoC4guTGow=" - }, - "version": "unstable-2024-10-01" - }, - "beetle-supergrafx": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-supergrafx-libretro", - "rev": "a776133c34ae8da5daf7d9ccb43e3e292e2b07b0", - "hash": "sha256-FemWW4EPQCwhrS7YEytf6fEeimdTTfzaDdyRNDIBQyk=" - }, - "version": "unstable-2024-11-15" - }, - "beetle-vb": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-vb-libretro", - "rev": "8f837ebc077afdd6652efb2827fd8308a07113ca", - "hash": "sha256-eAnBubNhj78G4r8OHVqwFXGOSA9wEYI6ZwNyiwDW8W8=" - }, - "version": "unstable-2024-10-21" - }, - "beetle-wswan": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "beetle-wswan-libretro", - "rev": "2aeb47d3a58bf0360c686f842d9bb5bd201306fe", - "hash": "sha256-LrF9p5tPtUamVLC41bJxcYDKvHmhVfwMieyIAdHaGmU=" - }, - "version": "unstable-2024-10-21" - }, - "blastem": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "blastem", - "rev": "277e4a62668597d4f59cadda1cbafb844f981d45", - "hash": "sha256-EHvKElPw8V5Z6LnMaQXBCdM4niLIlF3aBm8dRbeYXHs=" - }, - "version": "unstable-2022-07-26" - }, - "bluemsx": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "bluemsx-libretro", - "rev": "01ce142ccb85c302420cb962d1b6e6a68a6ce076", - "hash": "sha256-h3Zpv+h6CbM1pdSOXsjN0pFUjXLn5T/R5W55VZXpMVM=" - }, - "version": "unstable-2024-10-22" - }, - "bsnes": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "bsnes-libretro", - "rev": "20c55eb6333a11395ba637df8583066483e58cb2", - "hash": "sha256-IP00xtxS3wwnQSmYltrX8GEHZX/65xnx2EsmQlE1VZM=" - }, - "version": "unstable-2024-09-06" - }, - "bsnes-hd": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "DerKoun", - "repo": "bsnes-hd", - "rev": "0bb7b8645e22ea2476cabd58f32e987b14686601", - "hash": "sha256-YzWSZMn6v5hWIHnp6KmmpevCsf35Vi2BCcmFMnrFPH0=" - }, - "version": "unstable-2024-10-21" - }, - "bsnes-mercury": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "bsnes-mercury", - "rev": "0f35d044bf2f2b879018a0500e676447e93a1db1", - "hash": "sha256-skVREKYITZn+gKKSZmwuBCWrG0jb/pifwIgat8VyQ8U=" - }, - "version": "unstable-2024-10-21" - }, - "citra": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "citra", - "rev": "2d67658e85de4767c0eefeb2829d710401c5c802", - "hash": "sha256-u2XwAudFgI7j/k6Bq5fk874aI6KpZawlBoIs2+M+eZY=", - "fetchSubmodules": true - }, - "version": "unstable-2024-01-24" - }, - "desmume": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "desmume", - "rev": "7f05a8d447b00acd9e0798aee97b4f72eb505ef9", - "hash": "sha256-BttWMunVbfPOTGx+DV+3QyOwW+55tgXKVIn99DZhbBI=" - }, - "version": "unstable-2024-10-21" - }, - "desmume2015": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "desmume2015", - "rev": "af397ff3d1f208c27f3922cc8f2b8e08884ba893", - "hash": "sha256-kEb+og4g7rJvCinBZKcb42geZO6W8ynGsTG9yqYgI+U=" - }, - "version": "unstable-2022-04-05" - }, - "dolphin": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "dolphin", - "rev": "89a4df725d4eb24537728f7d655cddb1add25c18", - "hash": "sha256-f9O3//EuoCSPQC7GWmf0EzAEpjoKof30kIDBCDw0dbs=" - }, - "version": "unstable-2024-04-19" - }, - "dosbox": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "dosbox-libretro", - "rev": "b7b24262c282c0caef2368c87323ff8c381b3102", - "hash": "sha256-PG2eElenlEpu0U/NIh53p0uLqewnEdaq6Aoak5E1P3I=" - }, - "version": "unstable-2022-07-18" - }, - "dosbox-pure": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "schellingb", - "repo": "dosbox-pure", - "rev": "39dd77adff71cd2ae17d80a0e48fad8583ade8e4", - "hash": "sha256-ZC3JX4BG+FUR/lcEUupISz1s8Q0AdqkO4XVIPi1L5vg=" - }, - "version": "unstable-2024-11-16" - }, - "easyrpg": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "EasyRPG", - "repo": "Player", - "rev": "f8e41f43b619413f95847536412b56f85307d378", - "hash": "sha256-nvWM4czTv/GxY9raomBEn7dmKBeLtSA9nvjMJxc3Q8s=", - "fetchSubmodules": true - }, - "version": "unstable-2023-04-29" - }, - "eightyone": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "81-libretro", - "rev": "ffc99f27f092addc9ddd34dd0e3a3d4d1c053cbf", - "hash": "sha256-3AIXk3LJHZHWIojMeo2BJHWYDHQ17WVbkwjFhXM14ZE=" - }, - "version": "unstable-2024-10-21" - }, - "fbalpha2012": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "fbalpha2012", - "rev": "77167cea72e808384c136c8c163a6b4975ce7a84", - "hash": "sha256-giEV09dT/e82bmDlRkxpkW04JcsEZc/enIPecqYtg3c=" - }, - "version": "unstable-2024-10-21" - }, - "fbneo": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "fbneo", - "rev": "d72f49f4a45dbfc5a855956d1a75ce2d0601c1c5", - "hash": "sha256-+T+HQo6IfY8+oE/mOg54Vn9NhasGYNCLXksFdSDT/xE=" - }, - "version": "unstable-2024-10-03" - }, - "fceumm": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "libretro-fceumm", - "rev": "9f53af4e332476ba99d0c056668fbb35cfb527c3", - "hash": "sha256-sTzjIuEBTKt2rZfSadQa1pDLFclLL/vwjgkTMK1ZzPQ=" - }, - "version": "unstable-2024-10-16" - }, - "flycast": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "flyinghead", - "repo": "flycast", - "rev": "d618abc3205fe185b26afe58eb5472b800ae0b42", - "hash": "sha256-hlYu1RXfzDHJh5nqBQkcwjrLtFV5AIxdBw5PZn0SUNg=", - "fetchSubmodules": true - }, - "version": "unstable-2024-11-17" - }, - "fmsx": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "fmsx-libretro", - "rev": "9eb5f25df5397212a3e3088ca1a64db0740bbe5f", - "hash": "sha256-Pac1tQvPxYETU+fYU17moBHGfjNtzZiOsOms1uFQAmE=" - }, - "version": "unstable-2024-10-21" - }, - "freeintv": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "freeintv", - "rev": "beab9af119fc117833d2d866d8d4ea0857ec0236", - "hash": "sha256-+3hF7OZ2OD8K3OsvzJ3+Nn3DwC7PfD+Mr3Ku2/W/fDQ=" - }, - "version": "unstable-2024-10-21" - }, - "fuse": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "fuse-libretro", - "rev": "99df66eac096400d4d6d8fae2215192b6f03277e", - "hash": "sha256-o8FbDxke2JCUlmDZEHxMBY4f/WyHm1J76R43w+LVJfM=" - }, - "version": "unstable-2024-11-18" - }, - "gambatte": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "gambatte-libretro", - "rev": "3eeb65e9bcf4b2a7ca24c5cebdfa7e342177ef0f", - "hash": "sha256-tNGMR6GIyXen9+Ktg3IvYTcPidc+5Z8TpBQu1YgmqlY=" - }, - "version": "unstable-2024-10-04" - }, - "genesis-plus-gx": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "Genesis-Plus-GX", - "rev": "7de0f0b6cde9bda1235b448aa607044b3f80ab3c", - "hash": "sha256-W06vSrGKbXMcXIouW9/fD93sBfwREqIL8HvB3kan0tM=" - }, - "version": "unstable-2024-09-18" - }, - "gpsp": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "gpsp", - "rev": "36061caf8cc5e15c3c92fb772b6b8560c7c59ec7", - "hash": "sha256-o36OUdgm7p+rAMN6R2e2Lqi4oBLTyxziw7Lr20ERBg0=" - }, - "version": "unstable-2024-10-21" - }, - "gw": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "gw-libretro", - "rev": "435e5cfd4bf6aea03a84259e9b8dba3daf3ff5bd", - "hash": "sha256-csaOqrZMSk9xZUlGAKgypV38q9XE7K6hLLdBC10g9Ao=" - }, - "version": "unstable-2024-10-21" - }, - "handy": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "libretro-handy", - "rev": "4e9e072796e5552a9d57f6ab83b3f85f27b17fb6", - "hash": "sha256-ThzFEqLCX2JC06n6GZgkGzX5sFY5CxFDjkeekXRmbXY=" - }, - "version": "unstable-2024-10-21" - }, - "hatari": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "hatari", - "rev": "7008194d3f951a157997f67a820578f56f7feee0", - "hash": "sha256-ZPzwUBaxs2ivE9n9cb5XB5mhixY9b6qIlq7OiVSLbqg=" - }, - "version": "unstable-2024-10-21" - }, - "mame": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mame", - "rev": "a67797ad2f7516906ed7acef87569c6f35ca8739", - "hash": "sha256-MF6MWQftHBYL1Uv3ZYKFqCH24nd1+M73rhUzkdftMzk=", - "fetchSubmodules": true - }, - "version": "unstable-2024-11-01" - }, - "mame2000": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mame2000-libretro", - "rev": "2ec60f6e1078cf9ba173e80432cc28fd4eea200f", - "hash": "sha256-AYZj7bvO9oc7wmEBbj6DPRzpQFHl8diIcunSSpD4Vok=" - }, - "version": "unstable-2024-07-01" - }, - "mame2003": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mame2003-libretro", - "rev": "6d543115531fc96422b73c989a628600cacbea50", - "hash": "sha256-jFzFQVB0uiSRa82sq1fiMEXyzzDJqRANNgq5hj/ZAl4=" - }, - "version": "unstable-2024-11-10" - }, - "mame2003-plus": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mame2003-plus-libretro", - "rev": "b00ea1c9574126d75ae7b80c3b41e1186421fc1d", - "hash": "sha256-Zq4P5UsZh3p9/zasfTC+pzWiLAo7T2qAgZw4bJ4ADdM=" - }, - "version": "unstable-2024-11-19" - }, - "mame2010": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mame2010-libretro", - "rev": "c5b413b71e0a290c57fc351562cd47ba75bac105", - "hash": "sha256-p+uEhxjr/07YJxInhW7oJDr8KurD36JxnSfJo17FOxM=" - }, - "version": "unstable-2024-10-23" - }, - "mame2015": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mame2015-libretro", - "rev": "316cd06349f2b34b4719f04f7c0d07569a74c764", - "hash": "sha256-CBN04Jf26SIk8mKWlui5spQGokBvgFUCvFiC8NoBGw0=" - }, - "version": "unstable-2023-11-01" - }, - "mame2016": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mame2016-libretro", - "rev": "01058613a0109424c4e7211e49ed83ac950d3993", - "hash": "sha256-IsM7f/zlzvomVOYlinJVqZllUhDfy4NNTeTPtNmdVak=" - }, - "version": "unstable-2022-04-06" - }, - "melonds": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "melonds", - "rev": "7a3c11ff970cd36ca806961fae6db94b30dd5401", - "hash": "sha256-YGkRdth7qdATcZpJkBd5MGOJFG1AbeJhAnyir+ssZYA=" - }, - "version": "unstable-2024-10-21" - }, - "mesen": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mesen", - "rev": "791c5e8153ee6e29691d45b5df2cf1151ff416f9", - "hash": "sha256-PEEGJsyT+D/JwBxH2H9OY2MwaGt1i+1kmDZUT6zROic=" - }, - "version": "unstable-2024-10-21" - }, - "mesen-s": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mesen-s", - "rev": "d4fca31a6004041d99b02199688f84c009c55967", - "hash": "sha256-mGGTLBRJCsNJg57LWSFndIv/LLzEmVRnv6gNbllkV/Y=" - }, - "version": "unstable-2024-10-21" - }, - "meteor": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "meteor-libretro", - "rev": "e533d300d0561564451bde55a2b73119c768453c", - "hash": "sha256-zMkgzUz2rk0SD5ojY4AqaDlNM4k4QxuUxVBRBcn6TqQ=" - }, - "version": "unstable-2020-12-28" - }, - "mgba": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mgba", - "rev": "747362c02d2e71ee7c363e8dcb240925be8af906", - "hash": "sha256-dBhdS6C1H02iwdYDVvJmkPWob81vpmQJdHUHJFAq2vo=" - }, - "version": "unstable-2024-11-12" - }, - "mrboom": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "Javanaise", - "repo": "mrboom-libretro", - "rev": "22765ce7176d236d846f504318a51c448d2b469b", - "hash": "sha256-hzdc4PM/EARNEtpeATo4VohXtkeBra6rCz3tdIgBfVw=", - "fetchSubmodules": true - }, - "version": "unstable-2024-07-01" - }, - "mupen64plus": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "mupen64plus-libretro-nx", - "rev": "4249e39b2c200e5f0895385f76d99928785f2bea", - "hash": "sha256-nII/PMYo2xLznmAcKs6jDWGRS1DC3tiDeT6KJKRnaCI=" - }, - "version": "unstable-2024-10-29" - }, - "neocd": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "neocd_libretro", - "rev": "5eca2c8fd567b5261251c65ecafa8cf5b179d1d2", - "hash": "sha256-72tmPCb7AXsamaQsMAPiYpgDR8DER2GTz4hcbN8wy7g=" - }, - "version": "unstable-2024-10-21" - }, - "nestopia": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "nestopia", - "rev": "b932740e8abbe2cda80d06b083fdd8115af1c5d5", - "hash": "sha256-lIWk3V93vTKZM/jvfLkA06c7DDSEQtLmqRzJUi0TK/4=" - }, - "version": "unstable-2024-10-17" - }, - "np2kai": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "AZO234", - "repo": "NP2kai", - "rev": "4b109eaac4f79b04065ff5025319fce51537e04d", - "hash": "sha256-tRFvK8d5Y/umy/b1BKN85ZSaDWyK95hII4RVng7A5uU=", - "fetchSubmodules": true - }, - "version": "unstable-2024-11-03" - }, - "nxengine": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "nxengine-libretro", - "rev": "9adc032a5f6aa913d71d22042bb72cb11cf0f4a2", - "hash": "sha256-8XjZp18lQU3xFNDjIuNsSHn7Mhba8Lze/IeRsy8/U1U=" - }, - "version": "unstable-2024-10-21" - }, - "o2em": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "libretro-o2em", - "rev": "c8f458d035392963823fbb50db0cec0033d9315f", - "hash": "sha256-riqMXm+3BG4Gz0wrmVFxtVhuMRtZHZqCViAupp/Q42U=" - }, - "version": "unstable-2024-06-28" - }, - "opera": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "opera-libretro", - "rev": "67a29e60a4d194b675c9272b21b61eaa022f3ba3", - "hash": "sha256-8896EWNbzVyr3MS1jtWD3pLur7ZvAhhJmrwkW3ayzkU=" - }, - "version": "unstable-2024-10-17" - }, - "parallel-n64": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "parallel-n64", - "rev": "e372c5e327dcd649e9d840ffc3d88480b6866eda", - "hash": "sha256-q4octB5XDdl4PtLYVZfBgydVBNaOwzu9dPBY+Y68lVo=" - }, - "version": "unstable-2024-10-21" - }, - "pcsx2": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "lrps2", - "rev": "f3c8743d6a42fe429f703b476fecfdb5655a98a9", - "hash": "sha256-0piCNWX7QbZ58KyTlWp4h1qLxXpi1z6ML8sBHMTvCY4=" - }, - "version": "unstable-2023-01-30" - }, - "pcsx_rearmed": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "pcsx_rearmed", - "rev": "e3d7ea45c75f2752e351d5c5b54cf7e79e66d26e", - "hash": "sha256-dJqomyUHYQ+vpyu7/w2S/NidgYbHiGBWjebFQAXjzI0=" - }, - "version": "unstable-2024-11-17" - }, - "picodrive": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "picodrive", - "rev": "0daf92b57fba1fdbc124651573e88373eef28aa5", - "hash": "sha256-rvgcGNpHhjHpg5q6qiu08lBn+Zjx87E5/Q98gPoffhE=", - "fetchSubmodules": true - }, - "version": "unstable-2024-10-19" - }, - "play": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "jpd002", - "repo": "Play-", - "rev": "c3cba5418b4e5618befd9c2790498cf3cf88372a", - "hash": "sha256-xO2Pgl1E0JFEsthTmG+Ka+NqOTWG/JeeAIa6wBWXJyc=", - "fetchSubmodules": true - }, - "version": "unstable-2024-11-14" - }, - "ppsspp": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "hrydgard", - "repo": "ppsspp", - "rev": "2402eea4b16908ad59079bcf3fab06ba63531a3c", - "hash": "sha256-bpeiZdcXkGWLFZOsxTGuVmo4xAiUb9v5Wf6pWkt5JV0=", - "fetchSubmodules": true - }, - "version": "unstable-2024-11-15" - }, - "prboom": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "libretro-prboom", - "rev": "d25ccfb9739069824d8fff99e3ae78a58a09df01", - "hash": "sha256-IaMreS2MSkFdZ3Jff2FOZBvKIIa4KIkp41LIg3PLl44=" - }, - "version": "unstable-2024-10-21" - }, - "prosystem": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "prosystem-libretro", - "rev": "acae250da8d98b8b9707cd499e2a0bf6d8500652", - "hash": "sha256-AGF3K3meZEEsnzHmMTCsFXBGNvWVELH8a8qET07kP0o=" - }, - "version": "unstable-2024-10-21" - }, - "puae": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "libretro-uae", - "rev": "c60e42ef9ad474518d4be859b7c1da2c0c7e1d6f", - "hash": "sha256-WCkz7BUgYaI+yRhPmNuOKGJC/GxV+n2aeJVn8vhx0Ng=" - }, - "version": "unstable-2024-10-19" - }, - "quicknes": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "QuickNES_Core", - "rev": "dbf19f73e3eb9701d1c7f5898f57c097e05c9fbd", - "hash": "sha256-oFQUMp1imc8JCsQYCy1BtIUmTC+u0VcoYHpWzUpKNb4=" - }, - "version": "unstable-2024-10-21" - }, - "same_cdi": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "same_cdi", - "rev": "54cf493c2dee4c46666059c452f8aaaa0bd7c8e0", - "hash": "sha256-/+4coMzj/o82Q04Z65DQiPaykK6N56W6PRQLtyJOd8E=" - }, - "version": "unstable-2023-02-28" - }, - "sameboy": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "sameboy", - "rev": "51433012a871a44555492273fd22f29867d12655", - "hash": "sha256-vPT2uRGbXmJ62yig/yk485/TxEEKHJeWdNrM2c0IjKw=" - }, - "version": "unstable-2024-06-28" - }, - "scummvm": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro-mirrors", - "repo": "scummvm", - "rev": "2fb2e4c551c9c1510c56f6e890ee0300b7b3fca3", - "hash": "sha256-wrlFqu+ONbYH4xMFDByOgySobGrkhVc7kYWI4JzA4ew=" - }, - "version": "unstable-2022-04-06" - }, - "smsplus-gx": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "smsplus-gx", - "rev": "c642bbd0680b5959180a420036108893d0aec961", - "hash": "sha256-SHBrwzLyVZ4Tp/kVCnr4xj2B3pmdg+JUmZUM7hYao64=" - }, - "version": "unstable-2024-10-21" - }, - "snes9x": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "snes9xgit", - "repo": "snes9x", - "rev": "fd05ca7df5259a2cd0aa9204f331e0b05126c376", - "hash": "sha256-o/Rb1XQ7QoI0hKROMFZ9igyH8NN3bMryvyU4oNUqtRA=" - }, - "version": "unstable-2024-10-28" - }, - "snes9x2002": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "snes9x2002", - "rev": "a0709ec7dcd6de2fbebb43106bd757b649e3b7cf", - "hash": "sha256-rrMPhXIsQ48fVvjgZgC3xeqm9k9kwe43oZNzs2d/h1Q=" - }, - "version": "unstable-2024-10-21" - }, - "snes9x2005": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "snes9x2005", - "rev": "74d871db9b4dba6dbe6c5ecebc88cbf255be5349", - "hash": "sha256-YlRMjSEo9sdLVRzWGSJlnBeqg6wUhZi8l3ffzUaKQIQ=" - }, - "version": "unstable-2024-10-21" - }, - "snes9x2010": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "snes9x2010", - "rev": "f9ae8fd28b13070a945a829ccf41cbf90a21d0f7", - "hash": "sha256-nsExAYnzDenPvXzeN60jGykRTrCGMi/mRPV+vgS8ZtE=" - }, - "version": "unstable-2024-11-18" - }, - "stella": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "stella-emu", - "repo": "stella", - "rev": "0e2ce2771c7d0c9b2dd5c06e3a4746738d3c9e47", - "hash": "sha256-axt5wvH7WENh1ALPYc+f5XpCv2xPm5jYx26zMhLEt3E=" - }, - "version": "unstable-2024-11-17" - }, - "stella2014": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "stella2014-libretro", - "rev": "3cc89f0d316d6c924a5e3f4011d17421df58e615", - "hash": "sha256-2gnFWau7F45SdzoqDUlqYXfXVE1EUPozHZv7BhyRRIA=" - }, - "version": "unstable-2024-10-21" - }, - "swanstation": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "swanstation", - "rev": "37cd87e14ca09ac1b558e5b2c7db4ad256865bbb", - "hash": "sha256-dNIxlTPoY4S6VMtTN22ti3DE4aU/8XN/XhAo3DMNR/E=" - }, - "version": "unstable-2024-07-24" - }, - "tgbdual": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "tgbdual-libretro", - "rev": "8d305769eebd67266c284558f9d3a30498894d3d", - "hash": "sha256-3mlnTgp43qC3yifpr6pvtC4vslddcf6mephKA183vEk=" - }, - "version": "unstable-2024-10-21" - }, - "thepowdertoy": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "ThePowderToy", - "rev": "5d9c749780063b87bd62ddb025dee4241f196f26", - "hash": "sha256-BYeQ2WZgyvjDH5+akrVP5TlLq6Go3NKXB7zeR9oaaJ8=" - }, - "version": "unstable-2024-10-01" - }, - "tic80": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "tic-80", - "rev": "6412f72d0f4725c153ce3d245729b829e713542e", - "hash": "sha256-RFp8sTSRwD+cgW3EYk3nBeY+zVKgZVQI5mjtfe2a64Q=", - "fetchSubmodules": true - }, - "version": "unstable-2024-05-13" - }, - "vba-m": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "vbam-libretro", - "rev": "379dd97301458a51fb69dd93ba21b64f81e01ef2", - "hash": "sha256-UbXSHdKfa91MpcYityo+aILbI0DfkLqZh8YfGcRx/BI=" - }, - "version": "unstable-2024-10-21" - }, - "vba-next": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "vba-next", - "rev": "2c726f25da75a5600ef5791ce904befe06c4dddd", - "hash": "sha256-Elb6cOm2oO+3fNUaTXLN4kyhftoJ/oWXD571mXApybs=" - }, - "version": "unstable-2024-06-28" - }, - "vecx": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "libretro-vecx", - "rev": "0e48a8903bd9cc359da3f7db783f83e22722c0cf", - "hash": "sha256-lB8NSaxDbN2qljhI0M/HFDuN0D/wMhFUQXhfSdGHsHU=" - }, - "version": "unstable-2024-06-28" - }, - "virtualjaguar": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "virtualjaguar-libretro", - "rev": "48096c1f6f8b98cfff048a5cb4e6a86686631072", - "hash": "sha256-DLBQQARHqupGGQS8YznDSSMuxQliyt5apGA4Ku2jlYo=" - }, - "version": "unstable-2024-10-21" - }, - "yabause": { - "fetcher": "fetchFromGitHub", - "src": { - "owner": "libretro", - "repo": "yabause", - "rev": "c35712c5ed33e18d77097f2059a036e19d1d66f2", - "hash": "sha256-4/gxWNPkGKBf4ti7ZF4GXgng6ZPyM9prrvK0S5tZ6V8=" - }, - "version": "unstable-2024-10-21" - } -} diff --git a/pkgs/applications/emulators/retroarch/mkLibretroCore.nix b/pkgs/applications/emulators/retroarch/mkLibretroCore.nix index 86f05d6895e3..42124cb23609 100644 --- a/pkgs/applications/emulators/retroarch/mkLibretroCore.nix +++ b/pkgs/applications/emulators/retroarch/mkLibretroCore.nix @@ -1,19 +1,22 @@ -{ lib -, stdenv -, core -, repo ? null # TODO: remove -, makeWrapper -, retroarchBare -, zlib -, makefile ? "Makefile.libretro" -, extraBuildInputs ? [ ] -, extraNativeBuildInputs ? [ ] - # Location of resulting RetroArch core on $out -, libretroCore ? "/lib/retroarch/cores" - # The core filename is derivated from the core name - # Setting `normalizeCore` to `true` will convert `-` to `_` on the core filename -, normalizeCore ? true -, ... +{ + # Deps + lib, + stdenv, + makeWrapper, + retroarchBare, + unstableGitUpdater, + zlib, + # Params + core, + makefile ? "Makefile.libretro", + extraBuildInputs ? [ ], + extraNativeBuildInputs ? [ ], + ## Location of resulting RetroArch core on $out + libretroCore ? "/lib/retroarch/cores", + ## The core filename is derivated from the core name + ## Setting `normalizeCore` to `true` will convert `-` to `_` on the core filename + normalizeCore ? true, + ... }@args: let @@ -24,62 +27,74 @@ let extraArgs = builtins.removeAttrs args [ "lib" "stdenv" - "core" "makeWrapper" - "retroarch" + "retroarchBare" + "unstableGitUpdater" "zlib" + + "core" "makefile" "extraBuildInputs" "extraNativeBuildInputs" "libretroCore" "normalizeCore" - "makeFlags" - "meta" ]; in -stdenv.mkDerivation ({ - pname = "libretro-${core}"; +stdenv.mkDerivation ( + { + pname = "libretro-${core}"; - buildInputs = [ zlib ] ++ extraBuildInputs; - nativeBuildInputs = [ makeWrapper ] ++ extraNativeBuildInputs; + buildInputs = [ zlib ] ++ extraBuildInputs; + nativeBuildInputs = [ makeWrapper ] ++ extraNativeBuildInputs; - inherit makefile; + inherit makefile; - makeFlags = [ - "platform=${{ - linux = "unix"; - darwin = "osx"; - windows = "win"; - }.${stdenv.hostPlatform.parsed.kernel.name} or stdenv.hostPlatform.parsed.kernel.name}" - "ARCH=${{ - armv7l = "arm"; - armv6l = "arm"; - aarch64 = "arm64"; - i686 = "x86"; - }.${stdenv.hostPlatform.parsed.cpu.name} or stdenv.hostPlatform.parsed.cpu.name}" - ] ++ (args.makeFlags or [ ]); + makeFlags = [ + "platform=${ + { + linux = "unix"; + darwin = "osx"; + windows = "win"; + } + .${stdenv.hostPlatform.parsed.kernel.name} or stdenv.hostPlatform.parsed.kernel.name + }" + "ARCH=${ + { + armv7l = "arm"; + armv6l = "arm"; + aarch64 = "arm64"; + i686 = "x86"; + } + .${stdenv.hostPlatform.parsed.cpu.name} or stdenv.hostPlatform.parsed.cpu.name + }" + ] ++ (args.makeFlags or [ ]); - installPhase = '' - runHook preInstall + installPhase = '' + runHook preInstall - install -Dt ${coreDir} ${coreFilename} - makeWrapper ${retroarchBare}/bin/retroarch $out/bin/${mainProgram} \ - --add-flags "-L ${coreDir}/${coreFilename}" + install -Dt ${coreDir} ${coreFilename} + makeWrapper ${retroarchBare}/bin/retroarch $out/bin/${mainProgram} \ + --add-flags "-L ${coreDir}/${coreFilename}" - runHook postInstall - ''; + runHook postInstall + ''; - enableParallelBuilding = true; + enableParallelBuilding = true; - passthru = { - inherit core libretroCore; - updateScript = lib.mkIf (repo != null) [ ./update_cores.py repo ]; - } // (args.passthru or { }); + passthru = { + inherit core libretroCore; + updateScript = unstableGitUpdater { }; + } // (args.passthru or { }); - meta = with lib; { - inherit mainProgram; - inherit (retroarchBare.meta) platforms; - homepage = "https://www.libretro.com/"; - maintainers = with maintainers; teams.libretro.members ++ [ hrdinka ]; - } // (args.meta or { }); -} // extraArgs) + meta = + with lib; + { + inherit mainProgram; + inherit (retroarchBare.meta) platforms; + homepage = "https://www.libretro.com/"; + maintainers = with maintainers; teams.libretro.members; + } + // (args.meta or { }); + } + // extraArgs +) diff --git a/pkgs/applications/emulators/retroarch/update_cores.py b/pkgs/applications/emulators/retroarch/update_cores.py deleted file mode 100755 index 4e15315ce726..000000000000 --- a/pkgs/applications/emulators/retroarch/update_cores.py +++ /dev/null @@ -1,233 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -I nixpkgs=./ -i python3 -p "python3.withPackages (ps: with ps; [ ])" -p git -p nix-prefetch-github -p nix-prefetch-git -p nix-prefetch-scripts - -import json -import os -import subprocess -import sys -from concurrent.futures import ThreadPoolExecutor -from pathlib import Path - -SCRIPT_PATH = Path(__file__).absolute().parent -HASHES_PATH = SCRIPT_PATH / "hashes.json" -GET_REPO_THREADS = int(os.environ.get("GET_REPO_THREADS", 8)) -# To add a new core, add it to the dictionary below. You need to set at least -# `repo`, that is the repository name if the owner of the repository is -# `libretro` itself, otherwise also set `owner`. -# You may set `deep_clone`, `fetch_submodules` or `leave_dot_git` options to -# `True` and they're similar to `fetchgit` options. Also if for some reason you -# need to pin a specific revision, set `rev` to a commit. -# There is also a `fetcher` option that for now only supports `fetchFromGitHub` -# (see `get_repo_hash()`), but it may be extended in the future if there is a -# need to support fetchers from other source hubs. -# To generate the hash file for your new core, you can run -# `/pkgs/applications/emulators/retroarch/update_cores.py `. Do -# not forget to add your core to `cores.nix` file with the proper overrides so -# the core can be build. -CORES = { - "2048": {"repo": "libretro-2048"}, - "atari800": {"repo": "libretro-atari800"}, - "beetle-gba": {"repo": "beetle-gba-libretro"}, - "beetle-lynx": {"repo": "beetle-lynx-libretro"}, - "beetle-ngp": {"repo": "beetle-ngp-libretro"}, - "beetle-pce": {"repo": "beetle-pce-libretro"}, - "beetle-pce-fast": {"repo": "beetle-pce-fast-libretro"}, - "beetle-pcfx": {"repo": "beetle-pcfx-libretro"}, - "beetle-psx": {"repo": "beetle-psx-libretro"}, - "beetle-saturn": {"repo": "beetle-saturn-libretro"}, - "beetle-supafaust": {"repo": "supafaust"}, - "beetle-supergrafx": {"repo": "beetle-supergrafx-libretro"}, - "beetle-vb": {"repo": "beetle-vb-libretro"}, - "beetle-wswan": {"repo": "beetle-wswan-libretro"}, - "blastem": {"repo": "blastem"}, - "bluemsx": {"repo": "bluemsx-libretro"}, - "bsnes": {"repo": "bsnes-libretro"}, - "bsnes-hd": {"repo": "bsnes-hd", "owner": "DerKoun"}, - "bsnes-mercury": {"repo": "bsnes-mercury"}, - "citra": {"repo": "citra", "fetch_submodules": True}, - "desmume": {"repo": "desmume"}, - "desmume2015": {"repo": "desmume2015"}, - "dolphin": {"repo": "dolphin"}, - "dosbox": {"repo": "dosbox-libretro"}, - "dosbox-pure": {"repo": "dosbox-pure", "owner": "schellingb"}, - # The EasyRPG core is pinned to 0.8 since it depends on version 0.8 of liblcf, which - # was released in April 2023. - # Update the version when a compatible liblcf is available. - # See pkgs/games/easyrpg-player/default.nix for details. - "easyrpg": {"repo": "Player", "owner": "EasyRPG", "fetch_submodules": True, "rev": "0.8"}, - "eightyone": {"repo": "81-libretro"}, - "fbalpha2012": {"repo": "fbalpha2012"}, - "fbneo": {"repo": "fbneo"}, - "fceumm": {"repo": "libretro-fceumm"}, - "flycast": {"repo": "flycast", "owner": "flyinghead", "fetch_submodules": True}, - "fmsx": {"repo": "fmsx-libretro"}, - "freeintv": {"repo": "freeintv"}, - "fuse": {"repo": "fuse-libretro"}, - "gambatte": {"repo": "gambatte-libretro"}, - "genesis-plus-gx": {"repo": "Genesis-Plus-GX"}, - "gpsp": {"repo": "gpsp"}, - "gw": {"repo": "gw-libretro"}, - "handy": {"repo": "libretro-handy"}, - "hatari": {"repo": "hatari"}, - # Setting fetch_submodules=True since libretro/mame constantly gives - # different hashes for its tarballs, see: - # - https://github.com/NixOS/nixpkgs/issues/259488#issuecomment-1751768379 - # - https://github.com/NixOS/nixpkgs/pull/303494 - "mame": {"repo": "mame", "fetch_submodules": True}, - "mame2000": {"repo": "mame2000-libretro"}, - "mame2003": {"repo": "mame2003-libretro"}, - "mame2003-plus": {"repo": "mame2003-plus-libretro"}, - "mame2010": {"repo": "mame2010-libretro"}, - "mame2015": {"repo": "mame2015-libretro"}, - "mame2016": {"repo": "mame2016-libretro"}, - "melonds": {"repo": "melonds"}, - "mesen": {"repo": "mesen"}, - "mesen-s": {"repo": "mesen-s"}, - "meteor": {"repo": "meteor-libretro"}, - "mrboom": {"repo": "mrboom-libretro", "owner": "Javanaise", "fetch_submodules": True}, - "mgba": {"repo": "mgba"}, - "mupen64plus": {"repo": "mupen64plus-libretro-nx"}, - "neocd": {"repo": "neocd_libretro"}, - "nestopia": {"repo": "nestopia"}, - "nxengine": {"repo": "nxengine-libretro"}, - "np2kai": {"repo": "NP2kai", "owner": "AZO234", "fetch_submodules": True}, - "o2em": {"repo": "libretro-o2em"}, - "opera": {"repo": "opera-libretro"}, - "parallel-n64": {"repo": "parallel-n64"}, - # libretro/lrps2 is a hard-fork of pcsx2 with simplified code to target - # only libretro, while libretro/pcsx2 is supposedly closer to upstream but - # it is a WIP. - # TODO: switch to libretro/pcsx2 when upstream switches to it. - "pcsx2": {"repo": "lrps2"}, - "pcsx_rearmed": {"repo": "pcsx_rearmed"}, - "picodrive": {"repo": "picodrive", "fetch_submodules": True}, - "play": {"repo": "Play-", "owner": "jpd002", "fetch_submodules": True}, - "ppsspp": {"repo": "ppsspp", "owner": "hrydgard", "fetch_submodules": True}, - "prboom": {"repo": "libretro-prboom"}, - "prosystem": {"repo": "prosystem-libretro"}, - "puae": {"repo": "libretro-uae"}, - "quicknes": {"repo": "QuickNES_Core"}, - "sameboy": {"repo": "sameboy"}, - "same_cdi": {"repo": "same_cdi"}, - # This is the old source code before they upstreamed the source code, - # so now the libretro related code lives in the scummvm/scummvm repository. - # However this broke the old way we were doing builds, so for now point - # to a mirror with the old source code until this issue is fixed. - # TODO: switch to libretro/scummvm since this is more up-to-date - "scummvm": {"repo": "scummvm", "owner": "libretro-mirrors"}, - "smsplus-gx": {"repo": "smsplus-gx"}, - "snes9x": {"repo": "snes9x", "owner": "snes9xgit"}, - "snes9x2002": {"repo": "snes9x2002"}, - "snes9x2005": {"repo": "snes9x2005"}, - "snes9x2010": {"repo": "snes9x2010"}, - "stella": {"repo": "stella", "owner": "stella-emu"}, - "stella2014": {"repo": "stella2014-libretro"}, - "swanstation": {"repo": "swanstation"}, - "tgbdual": {"repo": "tgbdual-libretro"}, - "thepowdertoy": {"repo": "ThePowderToy"}, - "tic80": {"repo": "tic-80", "fetch_submodules": True}, - "vba-m": {"repo": "vbam-libretro"}, - "vba-next": {"repo": "vba-next"}, - "vecx": {"repo": "libretro-vecx"}, - "virtualjaguar": {"repo": "virtualjaguar-libretro"}, - "yabause": {"repo": "yabause"}, -} - - -def info(*msg): - print(*msg, file=sys.stderr) - - -def get_repo_hash_fetchFromGitHub( - repo, - owner="libretro", - deep_clone=False, - fetch_submodules=False, - leave_dot_git=False, - rev=None, -): - extra_args = [] - if deep_clone: - extra_args.append("--deep-clone") - else: - extra_args.append("--no-deep-clone") - if fetch_submodules: - extra_args.append("--fetch-submodules") - else: - extra_args.append("--no-fetch-submodules") - if leave_dot_git: - extra_args.append("--leave-dot-git") - else: - extra_args.append("--no-leave-dot-git") - if rev: - extra_args.append("--rev") - extra_args.append(rev) - try: - result = subprocess.run( - ["nix-prefetch-github", owner, repo, "--meta", *extra_args], - check=True, - capture_output=True, - text=True, - ) - except subprocess.CalledProcessError as ex: - info(f"Error while updating {owner}/{repo}:", ex.stderr) - raise ex - - j = json.loads(result.stdout) - return { - "fetcher": "fetchFromGitHub", - # Remove False values - "src": {k: v for k, v in j["src"].items() if v}, - "version": f"unstable-{j['meta']['commitDate']}", - } - - -def get_repo_hash(fetcher="fetchFromGitHub", **kwargs): - if fetcher == "fetchFromGitHub": - return get_repo_hash_fetchFromGitHub(**kwargs) - else: - raise ValueError(f"Unsupported fetcher: {fetcher}") - - -def get_repo_hashes(cores={}): - def get_repo_hash_from_core_def(core_def): - core, repo = core_def - info(f"Getting repo hash for '{core}'...") - result = core, get_repo_hash(**repo) - info(f"Got repo hash for '{core}'!") - return result - - with open(HASHES_PATH) as f: - repo_hashes = json.loads(f.read()) - - info(f"Running with {GET_REPO_THREADS} threads!") - with ThreadPoolExecutor(max_workers=GET_REPO_THREADS) as executor: - new_repo_hashes = executor.map(get_repo_hash_from_core_def, cores.items()) - - for core, repo in new_repo_hashes: - repo_hashes[core] = repo - - return repo_hashes - - -def main(): - # If you don't want to update all cores, pass the name of the cores you - # want to update on the command line. E.g.: - # $ ./update.py citra snes9x - if len(sys.argv) > 1: - cores_to_update = sys.argv[1:] - else: - cores_to_update = CORES.keys() - - cores = {core: repo for core, repo in CORES.items() if core in cores_to_update} - repo_hashes = get_repo_hashes(cores) - repo_hashes["!comment"] = "Generated with update_cores.py script, do not edit!" - info(f"Generating '{HASHES_PATH}'...") - with open(HASHES_PATH, "w") as f: - f.write(json.dumps(dict(sorted(repo_hashes.items())), indent=4)) - f.write("\n") - info("Finished!") - - -if __name__ == "__main__": - main()