diff options
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/applications/emulators/retroarch/cores.nix | 69 | ||||
-rw-r--r-- | pkgs/applications/emulators/retroarch/mkLibretroCore.nix | 6 | ||||
-rwxr-xr-x | pkgs/applications/emulators/retroarch/update_cores.py | 14 |
3 files changed, 55 insertions, 34 deletions
diff --git a/pkgs/applications/emulators/retroarch/cores.nix b/pkgs/applications/emulators/retroarch/cores.nix index a3503a3fe3101..a54d3868a0715 100644 --- a/pkgs/applications/emulators/retroarch/cores.nix +++ b/pkgs/applications/emulators/retroarch/cores.nix @@ -44,25 +44,33 @@ let hashesFile = lib.importJSON ./hashes.json; - getCore = core: (lib.getAttr core hashesFile); + getCore = repo: (lib.getAttr repo hashesFile); - getCoreSrc = core: - (lib.pipe core [ + getCoreSrc = repo: + (lib.pipe repo [ getCore (x: builtins.removeAttrs x [ "date" ]) fetchFromGitHub ]); - getCoreDate = core: (getCore core).date or "unstable-1970-01-01"; + getCoreDate = repo: (getCore repo).date or "unstable-1970-01-01"; 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 - , src ? (getCoreSrc core) - , version ? (getCoreDate core) + , repo ? core + , src ? (getCoreSrc repo) + , version ? (getCoreDate repo) , ... }@args: import ./mkLibretroCore.nix ({ - inherit lib stdenv core src version makeWrapper retroarch zlib; + inherit lib stdenv core repo src version makeWrapper retroarch zlib; } // args); in { @@ -80,7 +88,7 @@ in beetle-gba = mkLibretroCore { core = "mednafen-gba"; - src = getCoreSrc "beetle-gba"; + repo = "beetle-gba"; makefile = "Makefile"; meta = { description = "Port of Mednafen's GameBoy Advance core to libretro"; @@ -90,7 +98,7 @@ in beetle-lynx = mkLibretroCore { core = "mednafen-lynx"; - src = getCoreSrc "beetle-lynx"; + repo = "beetle-lynx"; makefile = "Makefile"; meta = { description = "Port of Mednafen's Lynx core to libretro"; @@ -100,7 +108,7 @@ in beetle-ngp = mkLibretroCore { core = "mednafen-ngp"; - src = getCoreSrc "beetle-ngp"; + repo = "beetle-ngp"; makefile = "Makefile"; meta = { description = "Port of Mednafen's NeoGeo Pocket core to libretro"; @@ -110,7 +118,7 @@ in beetle-pce = mkLibretroCore { core = "mednafen-pce"; - src = getCoreSrc "beetle-pce"; + repo = "beetle-pce"; makefile = "Makefile"; meta = { description = "Port of Mednafen's PC Engine core to libretro"; @@ -120,7 +128,7 @@ in beetle-pce-fast = mkLibretroCore { core = "mednafen-pce-fast"; - src = getCoreSrc "beetle-pce-fast"; + repo = "beetle-pce-fast"; makefile = "Makefile"; meta = { description = "Port of Mednafen's PC Engine fast core to libretro"; @@ -130,7 +138,7 @@ in beetle-pcfx = mkLibretroCore { core = "mednafen-pcfx"; - src = getCoreSrc "beetle-pcfx"; + repo = "beetle-pcfx"; makefile = "Makefile"; meta = { description = "Port of Mednafen's PCFX core to libretro"; @@ -140,7 +148,7 @@ in beetle-psx = mkLibretroCore { core = "mednafen-psx"; - src = getCoreSrc "beetle-psx"; + repo = "beetle-psx"; makefile = "Makefile"; makeFlags = [ "HAVE_HW=0" "HAVE_LIGHTREC=1" ]; meta = { @@ -151,7 +159,7 @@ in beetle-psx-hw = mkLibretroCore { core = "mednafen-psx-hw"; - src = getCoreSrc "beetle-psx"; + repo = "beetle-psx"; extraBuildInputs = [ libGL libGLU ]; makefile = "Makefile"; makeFlags = [ "HAVE_VULKAN=1" "HAVE_OPENGL=1" "HAVE_HW=1" "HAVE_LIGHTREC=1" ]; @@ -163,7 +171,7 @@ in beetle-saturn = mkLibretroCore { core = "mednafen-saturn"; - src = getCoreSrc "beetle-saturn"; + repo = "beetle-saturn"; makefile = "Makefile"; meta = { description = "Port of Mednafen's Saturn core to libretro"; @@ -174,7 +182,7 @@ in beetle-supafaust = mkLibretroCore { core = "mednafen-supafaust"; - src = getCoreSrc "beetle-supafaust"; + repo = "beetle-supafaust"; makefile = "Makefile"; meta = { description = "Port of Mednafen's experimental snes_faust core to libretro"; @@ -184,7 +192,7 @@ in beetle-supergrafx = mkLibretroCore { core = "mednafen-supergrafx"; - src = getCoreSrc "beetle-supergrafx"; + repo = "beetle-supergrafx"; makefile = "Makefile"; meta = { description = "Port of Mednafen's SuperGrafx core to libretro"; @@ -194,7 +202,7 @@ in beetle-vb = mkLibretroCore { core = "mednafen-vb"; - src = getCoreSrc "beetle-vb"; + repo = "beetle-vb"; makefile = "Makefile"; meta = { description = "Port of Mednafen's VirtualBoy core to libretro"; @@ -204,7 +212,7 @@ in beetle-wswan = mkLibretroCore { core = "mednafen-wswan"; - src = getCoreSrc "beetle-wswan"; + repo = "beetle-wswan"; makefile = "Makefile"; meta = { description = "Port of Mednafen's WonderSwan core to libretro"; @@ -240,7 +248,7 @@ in bsnes-hd = mkLibretroCore { core = "bsnes-hd-beta"; - src = getCoreSrc "bsnes-hd"; + repo = "bsnes-hd"; makefile = "GNUmakefile"; makeFlags = let @@ -264,7 +272,7 @@ in bsnes-mercury = mkLibretroCore { core = "bsnes-mercury-accuracy"; - src = getCoreSrc "bsnes-mercury"; + repo = "bsnes-mercury"; makefile = "Makefile"; makeFlags = [ "PROFILE=accuracy" ]; meta = { @@ -275,7 +283,7 @@ in bsnes-mercury-balanced = mkLibretroCore { core = "bsnes-mercury-balanced"; - src = getCoreSrc "bsnes-mercury"; + repo = "bsnes-mercury"; makefile = "Makefile"; makeFlags = [ "PROFILE=balanced" ]; meta = { @@ -286,7 +294,7 @@ in bsnes-mercury-performance = mkLibretroCore { core = "bsnes-mercury-performance"; - src = getCoreSrc "bsnes-mercury"; + repo = "bsnes-mercury"; makefile = "Makefile"; makeFlags = [ "PROFILE=performance" ]; meta = { @@ -385,7 +393,7 @@ in eightyone = mkLibretroCore { core = "81"; - src = getCoreSrc "eightyone"; + repo = "eightyone"; meta = { description = "Port of EightyOne to libretro"; license = lib.licenses.gpl3Only; @@ -660,7 +668,7 @@ in mupen64plus = mkLibretroCore { core = "mupen64plus-next"; - src = getCoreSrc "mupen64plus"; + repo = "mupen64plus"; extraBuildInputs = [ libGLU libGL libpng nasm xorg.libX11 ]; makefile = "Makefile"; makeFlags = [ @@ -711,11 +719,10 @@ in np2kai = mkLibretroCore rec { core = "np2kai"; - src = getCoreSrc core; makeFlags = [ # See https://github.com/AZO234/NP2kai/tags "NP2KAI_VERSION=rev.22" - "NP2KAI_HASH=${src.rev}" + "NP2KAI_HASH=${(getCoreSrc core).rev}" ]; preBuild = "cd sdl"; meta = { @@ -921,7 +928,7 @@ in smsplus-gx = mkLibretroCore { core = "smsplus"; - src = getCoreSrc "smsplus-gx"; + repo = "smsplus-gx"; meta = { description = "SMS Plus GX libretro port"; license = lib.licenses.gpl2Plus; @@ -961,7 +968,7 @@ in snes9x2005-plus = mkLibretroCore { core = "snes9x2005-plus"; - src = getCoreSrc "snes9x2005"; + repo = "snes9x2005"; makefile = "Makefile"; makeFlags = [ "USE_BLARGG_APU=1" ]; meta = { @@ -1063,7 +1070,7 @@ in vba-m = mkLibretroCore { core = "vbam"; - src = getCoreSrc "vba-m"; + repo = "vba-m"; makefile = "Makefile"; preBuild = "cd src/libretro"; meta = { diff --git a/pkgs/applications/emulators/retroarch/mkLibretroCore.nix b/pkgs/applications/emulators/retroarch/mkLibretroCore.nix index 7523288bd28d0..bf933bf701591 100644 --- a/pkgs/applications/emulators/retroarch/mkLibretroCore.nix +++ b/pkgs/applications/emulators/retroarch/mkLibretroCore.nix @@ -1,6 +1,7 @@ { lib , stdenv , core +, repo , makeWrapper , retroarch , zlib @@ -70,7 +71,10 @@ stdenv.mkDerivation ({ enableParallelBuilding = true; - passthru = { inherit core libretroCore; }; + passthru = { + inherit core libretroCore; + updateScript = [ ./update_cores.py repo ]; + }; meta = with lib; { inherit mainProgram; diff --git a/pkgs/applications/emulators/retroarch/update_cores.py b/pkgs/applications/emulators/retroarch/update_cores.py index 38422eb61d641..9a92b6165e86e 100755 --- a/pkgs/applications/emulators/retroarch/update_cores.py +++ b/pkgs/applications/emulators/retroarch/update_cores.py @@ -1,12 +1,11 @@ #!/usr/bin/env nix-shell -#!nix-shell -I nixpkgs=../../../../ -i python3 -p "python3.withPackages (ps: with ps; [ requests ])" -p git -p nix-prefetch-github +#!nix-shell -I nixpkgs=./ -i python3 -p "python3.withPackages (ps: with ps; [ requests ])" -p git -p nix-prefetch-github import json import os import subprocess import sys from concurrent.futures import ThreadPoolExecutor -from datetime import datetime from pathlib import Path import requests @@ -14,6 +13,16 @@ import requests 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. +# To generate the hash file for your new core, you can run `update_cores.py +# <core>`. The script needs to be run from the root of your `nixpkgs` clone. +# 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"}, @@ -136,6 +145,7 @@ def get_rev_date_fetchFromGitHub(repo, owner, rev): date = j.get("commit", {}).get("committer", {}).get("date") if date: + # Date format returned by API: 2023-01-30T06:29:13Z return f"unstable-{date[:10]}" else: return None |