libretro: add passthru.updateScript to all cores

This commit is contained in:
Thiago Kenji Okada 2024-02-04 14:38:04 +00:00
parent 476cfd71f4
commit d698a6d702
3 changed files with 55 additions and 34 deletions

View file

@ -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 = {

View file

@ -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;

View file

@ -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