uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead

https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948
this can do it nicely.

Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
Anton Arapov 2021-04-03 12:58:10 +02:00 committed by Alan Daniels
commit 56de2bcd43
30691 changed files with 3076956 additions and 0 deletions

View file

@ -0,0 +1,892 @@
{ lib
, stdenv
, alsa-lib
, boost
, bzip2
, cmake
, curl
, fetchFromGitHub
, ffmpeg
, fluidsynth
, gcc10Stdenv
, gettext
, hexdump
, hidapi
, icu
, libaio
, libevdev
, libGL
, libGLU
, libjpeg
, libpcap
, libpng
, libvorbis
, libxml2
, libzip
, makeWrapper
, nasm
, openssl
, pcre
, pkg-config
, portaudio
, python3
, retroarch
, SDL
, sfml
, snappy
, udev
, which
, xorg
, xxd
, xz
, zlib
}:
let
hashesFile = builtins.fromJSON (builtins.readFile ./hashes.json);
getCoreSrc = core:
fetchFromGitHub (builtins.getAttr core hashesFile);
mkLibRetroCore =
{ core
, description
# Check https://github.com/libretro/libretro-core-info for license information
, license
, stdenvOverride ? stdenv
, src ? (getCoreSrc core)
, broken ? false
, version ? "unstable-2022-04-21"
, platforms ? retroarch.meta.platforms
# The resulting core file is based on core name
# Setting `normalizeCore` to `true` will convert `-` to `_` on the core filename
, normalizeCore ? true
, ...
}@args:
stdenvOverride.mkDerivation (
let
inherit (stdenvOverride) hostPlatform;
d2u = if normalizeCore then (lib.replaceChars [ "-" ] [ "_" ]) else (x: x);
in
(rec {
pname = "libretro-${core}";
inherit version src;
buildInputs = [ zlib ] ++ args.extraBuildInputs or [ ];
nativeBuildInputs = [ makeWrapper ] ++ args.extraNativeBuildInputs or [ ];
makefile = "Makefile.libretro";
makeFlags = [
"platform=${{
linux = "unix";
darwin = "osx";
windows = "win";
}.${hostPlatform.parsed.kernel.name} or hostPlatform.parsed.kernel.name}"
"ARCH=${{
armv7l = "arm";
armv6l = "arm";
i686 = "x86";
}.${hostPlatform.parsed.cpu.name} or hostPlatform.parsed.cpu.name}"
] ++ (args.makeFlags or [ ]);
coreDir = "${placeholder "out"}/lib/retroarch/cores";
installPhase = ''
runHook preInstall
mkdir -p $out/bin
mkdir -p $coreDir
mv ${d2u args.core}_libretro${hostPlatform.extensions.sharedLibrary} $coreDir
makeWrapper ${retroarch}/bin/retroarch $out/bin/retroarch-${core} \
--add-flags "-L $coreDir/${d2u core}_libretro${hostPlatform.extensions.sharedLibrary} $@"
runHook postInstall
'';
enableParallelBuilding = true;
passthru = {
inherit core;
libretroCore = "/lib/retroarch/cores";
};
meta = with lib; {
inherit broken description license platforms;
homepage = "https://www.libretro.com/";
maintainers = with maintainers; [ edwtjo hrdinka MP2E thiagokokada ];
};
}) // builtins.removeAttrs args [ "core" "src" "description" "license" "makeFlags" ]
);
in
{
inherit mkLibRetroCore;
atari800 = mkLibRetroCore {
core = "atari800";
description = "Port of Atari800 to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
makeFlags = [ "GIT_VERSION=" ];
};
beetle-gba = mkLibRetroCore {
core = "mednafen-gba";
src = getCoreSrc "beetle-gba";
description = "Port of Mednafen's GameBoy Advance core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
beetle-lynx = mkLibRetroCore {
core = "mednafen-lynx";
src = getCoreSrc "beetle-lynx";
description = "Port of Mednafen's Lynx core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
beetle-ngp = mkLibRetroCore {
core = "mednafen-ngp";
src = getCoreSrc "beetle-ngp";
description = "Port of Mednafen's NeoGeo Pocket core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
beetle-pce-fast = mkLibRetroCore {
core = "mednafen-pce-fast";
src = getCoreSrc "beetle-pce-fast";
description = "Port of Mednafen's PC Engine core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
beetle-pcfx = mkLibRetroCore {
core = "mednafen-pcfx";
src = getCoreSrc "beetle-pcfx";
description = "Port of Mednafen's PCFX core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
beetle-psx = mkLibRetroCore {
core = "mednafen-psx";
src = getCoreSrc "beetle-psx";
description = "Port of Mednafen's PSX Engine core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
makeFlags = [ "HAVE_HW=0" "HAVE_LIGHTREC=1" ];
};
beetle-psx-hw = mkLibRetroCore {
core = "mednafen-psx-hw";
src = getCoreSrc "beetle-psx";
description = "Port of Mednafen's PSX Engine (with HW accel) core to libretro";
license = lib.licenses.gpl2Only;
extraBuildInputs = [ libGL libGLU ];
makefile = "Makefile";
makeFlags = [ "HAVE_VULKAN=1" "HAVE_OPENGL=1" "HAVE_HW=1" "HAVE_LIGHTREC=1" ];
};
beetle-saturn = mkLibRetroCore {
core = "mednafen-saturn";
src = getCoreSrc "beetle-saturn";
description = "Port of Mednafen's Saturn core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
platforms = [ "x86_64-linux" "aarch64-linux" ];
};
beetle-snes = mkLibRetroCore {
core = "mednafen-snes";
src = getCoreSrc "beetle-snes";
description = "Port of Mednafen's SNES core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
beetle-supergrafx = mkLibRetroCore {
core = "mednafen-supergrafx";
src = getCoreSrc "beetle-supergrafx";
description = "Port of Mednafen's SuperGrafx core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
beetle-vb = mkLibRetroCore {
core = "mednafen-vb";
src = getCoreSrc "beetle-vb";
description = "Port of Mednafen's VirtualBoy core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
beetle-wswan = mkLibRetroCore {
core = "mednafen-wswan";
src = getCoreSrc "beetle-wswan";
description = "Port of Mednafen's WonderSwan core to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
blastem = mkLibRetroCore {
core = "blastem";
description = "Port of BlastEm to libretro";
license = lib.licenses.gpl3Only;
};
bluemsx = mkLibRetroCore {
core = "bluemsx";
description = "Port of BlueMSX to libretro";
license = lib.licenses.gpl2Only;
};
bsnes = mkLibRetroCore {
core = "bsnes";
description = "Port of bsnes to libretro";
license = lib.licenses.gpl3Only;
makefile = "Makefile";
};
bsnes-hd =
let
# linux = bsd
# https://github.com/DerKoun/bsnes-hd/blob/f0b6cf34e9780d53516977ed2de64137a8bcc3c5/bsnes/GNUmakefile#L37
platform = if stdenv.isDarwin then "macos" else "linux";
in
mkLibRetroCore {
core = "bsnes-hd-beta";
src = getCoreSrc "bsnes-hd";
description = "Port of bsnes-hd to libretro";
license = lib.licenses.gpl3Only;
makefile = "GNUmakefile";
makeFlags = [
"-C"
"bsnes"
"target=libretro"
"platform=${platform}"
];
extraBuildInputs = [ xorg.libX11 xorg.libXext ];
postBuild = "cd bsnes/out";
};
bsnes-mercury = mkLibRetroCore {
core = "bsnes-mercury-accuracy";
src = getCoreSrc "bsnes-mercury";
description = "Fork of bsnes with HLE DSP emulation restored";
license = lib.licenses.gpl3Only;
makefile = "Makefile";
makeFlags = [ "PROFILE=accuracy" ];
};
bsnes-mercury-balanced = mkLibRetroCore {
core = "bsnes-mercury-balanced";
src = getCoreSrc "bsnes-mercury";
description = "Fork of bsnes with HLE DSP emulation restored";
license = lib.licenses.gpl3Only;
makefile = "Makefile";
makeFlags = [ "PROFILE=balanced" ];
};
bsnes-mercury-performance = mkLibRetroCore {
core = "bsnes-mercury-performance";
src = getCoreSrc "bsnes-mercury";
description = "Fork of bsnes with HLE DSP emulation restored";
license = lib.licenses.gpl3Only;
makefile = "Makefile";
makeFlags = [ "PROFILE=performance" ];
};
citra = mkLibRetroCore {
core = "citra";
description = "Port of Citra to libretro";
stdenvOverride = gcc10Stdenv;
license = lib.licenses.gpl2Plus;
extraBuildInputs = [ libGLU libGL boost ffmpeg nasm ];
makefile = "Makefile";
makeFlags = [ "HAVE_FFMPEG_STATIC=0" ];
};
desmume = mkLibRetroCore {
core = "desmume";
description = "libretro wrapper for desmume NDS emulator";
license = lib.licenses.gpl2Plus;
extraBuildInputs = [ libpcap libGLU libGL xorg.libX11 ];
preBuild = "cd desmume/src/frontend/libretro";
makeFlags = lib.optional stdenv.hostPlatform.isAarch32 "platform=armv-unix"
++ lib.optional (!stdenv.hostPlatform.isx86) "DESMUME_JIT=0";
};
desmume2015 = mkLibRetroCore {
core = "desmume2015";
description = "libretro wrapper for desmume NDS emulator from 2015";
license = lib.licenses.gpl2Plus;
extraBuildInputs = [ libpcap libGLU libGL xorg.libX11 ];
makeFlags = lib.optional stdenv.hostPlatform.isAarch32 "platform=armv-unix"
++ lib.optional (!stdenv.hostPlatform.isx86) "DESMUME_JIT=0";
preBuild = "cd desmume";
};
dolphin = mkLibRetroCore {
core = "dolphin";
description = "Port of Dolphin to libretro";
license = lib.licenses.gpl2Plus;
extraNativeBuildInputs = [ cmake curl pkg-config ];
extraBuildInputs = [
libGLU
libGL
pcre
sfml
gettext
hidapi
libevdev
udev
] ++ (with xorg; [ libSM libX11 libXi libpthreadstubs libxcb xcbutil libXext libXrandr libXinerama libXxf86vm ]);
makefile = "Makefile";
cmakeFlags = [
"-DLIBRETRO=ON"
"-DLIBRETRO_STATIC=1"
"-DENABLE_QT=OFF"
"-DENABLE_LTO=OFF"
"-DUSE_UPNP=OFF"
"-DUSE_DISCORD_PRESENCE=OFF"
];
dontUseCmakeBuildDir = true;
};
dosbox = mkLibRetroCore {
core = "dosbox";
description = "Port of DOSBox to libretro";
license = lib.licenses.gpl2Only;
stdenvOverride = gcc10Stdenv;
};
eightyone = mkLibRetroCore {
core = "81";
src = getCoreSrc "eightyone";
description = "Port of EightyOne to libretro";
license = lib.licenses.gpl3Only;
};
fbalpha2012 = mkLibRetroCore {
core = "fbalpha2012";
description = "Port of Final Burn Alpha ~2012 to libretro";
license = "Non-commercial";
makefile = "makefile.libretro";
preBuild = "cd svn-current/trunk";
};
fbneo = mkLibRetroCore {
core = "fbneo";
description = "Port of FBNeo to libretro";
license = "Non-commercial";
makefile = "Makefile";
preBuild = "cd src/burner/libretro";
};
fceumm = mkLibRetroCore {
core = "fceumm";
description = "FCEUmm libretro port";
license = lib.licenses.gpl2Only;
};
flycast = mkLibRetroCore {
core = "flycast";
description = "Flycast libretro port";
license = lib.licenses.gpl2Only;
extraBuildInputs = [ libGL libGLU ];
makefile = "Makefile";
makeFlags = lib.optional stdenv.hostPlatform.isAarch64 [ "platform=arm64" ];
platforms = [ "aarch64-linux" "x86_64-linux" ];
};
fmsx = mkLibRetroCore {
core = "fmsx";
description = "FMSX libretro port";
license = "Non-commercial";
makefile = "Makefile";
};
freeintv = mkLibRetroCore {
core = "freeintv";
description = "FreeIntv libretro port";
license = lib.licenses.gpl3Only;
makefile = "Makefile";
};
gambatte = mkLibRetroCore {
core = "gambatte";
description = "Gambatte libretro port";
license = lib.licenses.gpl2Only;
};
genesis-plus-gx = mkLibRetroCore {
core = "genesis-plus-gx";
description = "Enhanced Genesis Plus libretro port";
license = "Non-commercial";
};
gpsp = mkLibRetroCore {
core = "gpsp";
description = "Port of gpSP to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
gw = mkLibRetroCore {
core = "gw";
description = "Port of Game and Watch to libretro";
license = lib.licenses.zlib;
makefile = "Makefile";
};
handy = mkLibRetroCore {
core = "handy";
description = "Port of Handy to libretro";
license = lib.licenses.zlib;
makefile = "Makefile";
};
hatari = mkLibRetroCore {
core = "hatari";
description = "Port of Hatari to libretro";
license = lib.licenses.gpl2Only;
extraBuildInputs = [ SDL zlib ];
extraNativeBuildInputs = [ which ];
dontConfigure = true;
makeFlags = [ "EXTERNAL_ZLIB=1" ];
};
mame = mkLibRetroCore {
core = "mame";
description = "Port of MAME to libretro";
license = with lib.licenses; [ bsd3 gpl2Plus ];
extraBuildInputs = [ alsa-lib libGLU libGL portaudio python3 xorg.libX11 ];
};
mame2000 = mkLibRetroCore {
core = "mame2000";
description = "Port of MAME ~2000 to libretro";
license = "MAME";
makefile = "Makefile";
makeFlags = lib.optional (!stdenv.hostPlatform.isx86) "IS_X86=0";
enableParallelBuilding = false;
};
mame2003 = mkLibRetroCore {
core = "mame2003";
description = "Port of MAME ~2003 to libretro";
license = "MAME";
makefile = "Makefile";
enableParallelBuilding = false;
};
mame2003-plus = mkLibRetroCore {
core = "mame2003-plus";
description = "Port of MAME ~2003+ to libretro";
license = "MAME";
makefile = "Makefile";
enableParallelBuilding = false;
};
mame2010 = mkLibRetroCore {
core = "mame2010";
description = "Port of MAME ~2010 to libretro";
license = "MAME";
makefile = "Makefile";
makeFlags = lib.optionals stdenv.hostPlatform.isAarch64 [ "PTR64=1" "ARM_ENABLED=1" "X86_SH2DRC=0" "FORCE_DRC_C_BACKEND=1" ];
enableParallelBuilding = false;
};
mame2015 = mkLibRetroCore {
core = "mame2015";
description = "Port of MAME ~2015 to libretro";
license = "MAME";
makeFlags = [ "PYTHON=python3" ];
extraNativeBuildInputs = [ python3 ];
extraBuildInputs = [ alsa-lib ];
makefile = "Makefile";
enableParallelBuilding = false;
};
mame2016 = mkLibRetroCore {
core = "mame2016";
description = "Port of MAME ~2016 to libretro";
license = with lib.licenses; [ bsd3 gpl2Plus ];
extraNativeBuildInputs = [ python3 ];
extraBuildInputs = [ alsa-lib ];
makeFlags = [ "PYTHON_EXECUTABLE=python3" ];
postPatch = ''
# Prevent the failure during the parallel building of:
# make -C 3rdparty/genie/build/gmake.linux -f genie.make obj/Release/src/host/lua-5.3.0/src/lgc.o
mkdir -p 3rdparty/genie/build/gmake.linux/obj/Release/src/host/lua-5.3.0/src
'';
enableParallelBuilding = false;
};
melonds = mkLibRetroCore {
core = "melonds";
description = "Port of MelonDS to libretro";
license = lib.licenses.gpl3Only;
extraBuildInputs = [ libGL libGLU ];
makefile = "Makefile";
};
mesen = mkLibRetroCore {
core = "mesen";
description = "Port of Mesen to libretro";
license = lib.licenses.gpl3Only;
makefile = "Makefile";
preBuild = "cd Libretro";
};
mesen-s = mkLibRetroCore {
core = "mesen-s";
description = "Port of Mesen-S to libretro";
license = lib.licenses.gpl3Only;
makefile = "Makefile";
preBuild = "cd Libretro";
normalizeCore = false;
};
meteor = mkLibRetroCore {
core = "meteor";
description = "Port of Meteor to libretro";
license = lib.licenses.gpl3Only;
makefile = "Makefile";
preBuild = "cd libretro";
};
mgba = mkLibRetroCore {
core = "mgba";
description = "Port of mGBA to libretro";
license = lib.licenses.mpl20;
};
mupen64plus = mkLibRetroCore {
core = "mupen64plus-next";
src = getCoreSrc "mupen64plus";
description = "Libretro port of Mupen64 Plus, GL only";
license = lib.licenses.gpl3Only;
extraBuildInputs = [ libGLU libGL libpng nasm xorg.libX11 ];
makefile = "Makefile";
};
neocd = mkLibRetroCore {
core = "neocd";
description = "NeoCD libretro port";
license = lib.licenses.lgpl3Only;
makefile = "Makefile";
};
nestopia = mkLibRetroCore {
core = "nestopia";
description = "Nestopia libretro port";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
preBuild = "cd libretro";
};
np2kai = mkLibRetroCore rec {
core = "np2kai";
src = getCoreSrc core;
description = "Neko Project II kai libretro port";
license = lib.licenses.mit;
makeFlags = [
# See https://github.com/AZO234/NP2kai/tags
"NP2KAI_VERSION=rev.22"
"NP2KAI_HASH=${src.rev}"
];
preBuild = "cd sdl";
};
o2em = mkLibRetroCore {
core = "o2em";
description = "Port of O2EM to libretro";
license = lib.licenses.artistic1;
makefile = "Makefile";
};
opera = mkLibRetroCore {
core = "opera";
description = "Opera is a port of 4DO/libfreedo to libretro";
license = "Non-commercial";
makefile = "Makefile";
makeFlags = [ "CC_PREFIX=${stdenv.cc.targetPrefix}" ];
};
parallel-n64 = mkLibRetroCore {
core = "parallel-n64";
description = "Parallel Mupen64plus rewrite for libretro.";
license = lib.licenses.gpl3Only;
extraBuildInputs = [ libGLU libGL libpng ];
makefile = "Makefile";
postPatch = lib.optionalString stdenv.hostPlatform.isAarch64 ''
sed -i -e '1 i\CPUFLAGS += -DARM_FIX -DNO_ASM -DARM_ASM -DDONT_WANT_ARM_OPTIMIZATIONS -DARM64' Makefile \
&& sed -i -e 's,CPUFLAGS :=,,g' Makefile
'';
};
pcsx2 = mkLibRetroCore {
core = "pcsx2";
description = "Port of PCSX2 to libretro";
license = lib.licenses.gpl3Plus;
extraNativeBuildInputs = [
cmake
gettext
pkg-config
];
extraBuildInputs = [
libaio
libGL
libGLU
libpcap
libpng
libxml2
xz
xxd
];
makefile = "Makefile";
cmakeFlags = [
"-DLIBRETRO=ON"
];
postPatch = ''
# remove ccache
substituteInPlace CMakeLists.txt --replace "ccache" ""
'';
postBuild = "cd /build/source/build/pcsx2";
platforms = lib.platforms.x86;
};
pcsx_rearmed = mkLibRetroCore {
core = "pcsx_rearmed";
description = "Port of PCSX ReARMed with GNU lightning to libretro";
license = lib.licenses.gpl2Only;
dontConfigure = true;
};
picodrive = mkLibRetroCore {
core = "picodrive";
description = "Fast MegaDrive/MegaCD/32X emulator";
license = "MAME";
extraBuildInputs = [ libpng SDL ];
SDL_CONFIG = "${lib.getDev SDL}/bin/sdl-config";
dontAddPrefix = true;
configurePlatforms = [ ];
makeFlags = lib.optional stdenv.hostPlatform.isAarch64 [ "platform=aarch64" ];
};
play = mkLibRetroCore {
core = "play";
description = "Port of Play! to libretro";
license = lib.licenses.bsd2;
extraBuildInputs = [ boost bzip2 curl openssl icu libGL libGLU xorg.libX11 ];
extraNativeBuildInputs = [ cmake ];
makefile = "Makefile";
cmakeFlags = [ "-DBUILD_PLAY=OFF" "-DBUILD_LIBRETRO_CORE=ON" ];
postBuild = "cd Source/ui_libretro";
};
ppsspp = mkLibRetroCore {
core = "ppsspp";
description = "ppsspp libretro port";
license = lib.licenses.gpl2Plus;
extraNativeBuildInputs = [ cmake pkg-config python3 ];
extraBuildInputs = [ libGLU libGL libzip ffmpeg snappy xorg.libX11 ];
makefile = "Makefile";
cmakeFlags = [
"-DLIBRETRO=ON"
"-DUSE_SYSTEM_FFMPEG=ON"
"-DUSE_SYSTEM_SNAPPY=ON"
"-DUSE_SYSTEM_LIBZIP=ON"
"-DOpenGL_GL_PREFERENCE=GLVND"
];
postBuild = "cd lib";
};
prboom = mkLibRetroCore {
core = "prboom";
description = "Prboom libretro port";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
prosystem = mkLibRetroCore {
core = "prosystem";
description = "Port of ProSystem to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
quicknes = mkLibRetroCore {
core = "quicknes";
description = "QuickNES libretro port";
license = lib.licenses.lgpl21Plus;
makefile = "Makefile";
};
sameboy = mkLibRetroCore {
core = "sameboy";
description = "SameBoy libretro port";
license = lib.licenses.mit;
extraNativeBuildInputs = [ which hexdump ];
preBuild = "cd libretro";
makefile = "Makefile";
};
scummvm = mkLibRetroCore {
core = "scummvm";
description = "Libretro port of ScummVM";
license = lib.licenses.gpl2Only;
extraBuildInputs = [ fluidsynth libjpeg libvorbis libGLU libGL SDL ];
makefile = "Makefile";
preConfigure = "cd backends/platform/libretro/build";
};
smsplus-gx = mkLibRetroCore {
core = "smsplus";
src = getCoreSrc "smsplus-gx";
description = "SMS Plus GX libretro port";
license = lib.licenses.gpl2Plus;
};
snes9x = mkLibRetroCore {
core = "snes9x";
description = "Port of SNES9x git to libretro";
license = "Non-commercial";
makefile = "Makefile";
preBuild = "cd libretro";
};
snes9x2002 = mkLibRetroCore {
core = "snes9x2002";
description = "Optimized port/rewrite of SNES9x 1.39 to Libretro";
license = "Non-commercial";
makefile = "Makefile";
};
snes9x2005 = mkLibRetroCore {
core = "snes9x2005";
description = "Optimized port/rewrite of SNES9x 1.43 to Libretro";
license = "Non-commercial";
makefile = "Makefile";
};
snes9x2005-plus = mkLibRetroCore {
core = "snes9x2005-plus";
src = getCoreSrc "snes9x2005";
description = "Optimized port/rewrite of SNES9x 1.43 to Libretro, with Blargg's APU";
license = "Non-commercial";
makefile = "Makefile";
makeFlags = [ "USE_BLARGG_APU=1" ];
};
snes9x2010 = mkLibRetroCore {
core = "snes9x2010";
description = "Optimized port/rewrite of SNES9x 1.52+ to Libretro";
license = "Non-commercial";
};
stella = mkLibRetroCore {
core = "stella";
description = "Port of Stella to libretro";
license = lib.licenses.gpl2Only;
extraBuildInputs = [ libpng pkg-config SDL ];
makefile = "Makefile";
preBuild = "cd src/libretro";
dontConfigure = true;
};
stella2014 = mkLibRetroCore {
core = "stella2014";
description = "Port of Stella to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
swanstation = mkLibRetroCore {
core = "swanstation";
description = "Port of SwanStation (a fork of DuckStation) to libretro";
license = lib.licenses.gpl3Only;
extraNativeBuildInputs = [ cmake ];
makefile = "Makefile";
cmakeFlags = [
"-DBUILD_LIBRETRO_CORE=ON"
];
};
tgbdual = mkLibRetroCore {
core = "tgbdual";
description = "Port of TGBDual to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
};
thepowdertoy = mkLibRetroCore {
core = "thepowdertoy";
description = "Port of The Powder Toy to libretro";
license = lib.licenses.gpl3Only;
extraNativeBuildInputs = [ cmake ];
makefile = "Makefile";
postBuild = "cd src";
};
tic80 = mkLibRetroCore {
core = "tic80";
description = "Port of TIC-80 to libretro";
license = lib.licenses.mit;
extraNativeBuildInputs = [ cmake pkg-config libGL libGLU ];
makefile = "Makefile";
cmakeFlags = [
"-DBUILD_LIBRETRO=ON"
"-DBUILD_DEMO_CARTS=OFF"
"-DBUILD_PRO=OFF"
"-DBUILD_PLAYER=OFF"
"-DBUILD_SDL=OFF"
"-DBUILD_SOKOL=OFF"
];
preConfigure = "cd core";
postBuild = "cd lib";
};
vba-m = mkLibRetroCore {
core = "vbam";
src = getCoreSrc "vba-m";
description = "vanilla VBA-M libretro port";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
preBuild = "cd src/libretro";
};
vba-next = mkLibRetroCore {
core = "vba-next";
description = "VBA-M libretro port with modifications for speed";
license = lib.licenses.gpl2Only;
};
vecx = mkLibRetroCore {
core = "vecx";
description = "Port of Vecx to libretro";
license = lib.licenses.gpl3Only;
extraBuildInputs = [ libGL libGLU ];
};
virtualjaguar = mkLibRetroCore {
core = "virtualjaguar";
description = "Port of VirtualJaguar to libretro";
license = lib.licenses.gpl3Only;
makefile = "Makefile";
};
yabause = mkLibRetroCore {
core = "yabause";
description = "Port of Yabause to libretro";
license = lib.licenses.gpl2Only;
makefile = "Makefile";
# Disable SSE for non-x86. DYNAREC doesn't build on aarch64.
makeFlags = lib.optional (!stdenv.hostPlatform.isx86) "HAVE_SSE=0";
preBuild = "cd yabause/src/libretro";
};
}

View file

@ -0,0 +1,139 @@
{ lib
, stdenv
, enableNvidiaCgToolkit ? false
, withGamemode ? stdenv.isLinux
, withVulkan ? stdenv.isLinux
, alsa-lib
, AppKit
, fetchFromGitHub
, ffmpeg_4
, Foundation
, freetype
, gamemode
, libdrm
, libGL
, libGLU
, libobjc
, libpulseaudio
, libv4l
, libX11
, libXdmcp
, libXext
, libxkbcommon
, libxml2
, libXxf86vm
, makeWrapper
, mesa
, nvidia_cg_toolkit
, pkg-config
, python3
, SDL2
, udev
, vulkan-loader
, wayland
, which
}:
let
version = "1.10.3";
libretroCoreInfo = fetchFromGitHub {
owner = "libretro";
repo = "libretro-core-info";
sha256 = "sha256-wIIMEWrria8bZe/rcoJwDA9aCMWwbkDQFyEU80TZXFQ=";
rev = "v${version}";
};
runtimeLibs = lib.optional withVulkan vulkan-loader
++ lib.optional withGamemode gamemode.lib;
in
stdenv.mkDerivation rec {
pname = "retroarch-bare";
inherit version;
src = fetchFromGitHub {
owner = "libretro";
repo = "RetroArch";
sha256 = "sha256-nAv1yv0laqlOmB8UUkK5wSYy/ySqXloEErm+yV30bbA=";
rev = "v${version}";
};
patches = [
./disable-menu_show_core_updater.patch
./use-fixed-paths-on-libretro_info_path.patch
];
postPatch = ''
substituteInPlace "frontend/drivers/platform_unix.c" \
--replace "@libretro_directory@" "$out/lib" \
--replace "@libretro_info_path@" "$out/share/libretro/info"
substituteInPlace "frontend/drivers/platform_darwin.m" \
--replace "@libretro_directory@" "$out/lib" \
--replace "@libretro_info_path@" "$out/share/libretro/info"
'';
nativeBuildInputs = [ pkg-config ] ++
lib.optional stdenv.isLinux wayland ++
lib.optional (runtimeLibs != [ ]) makeWrapper;
buildInputs = [ ffmpeg_4 freetype libxml2 libGLU libGL python3 SDL2 which ] ++
lib.optional enableNvidiaCgToolkit nvidia_cg_toolkit ++
lib.optional withVulkan vulkan-loader ++
lib.optionals stdenv.isDarwin [ libobjc AppKit Foundation ] ++
lib.optionals stdenv.isLinux [
alsa-lib
libX11
libXdmcp
libXext
libXxf86vm
libdrm
libpulseaudio
libv4l
libxkbcommon
mesa
udev
wayland
];
enableParallelBuilding = true;
configureFlags = lib.optionals stdenv.isLinux [ "--enable-kms" "--enable-egl" ];
postInstall = ''
mkdir -p $out/share/libretro/info
# TODO: ideally each core should have its own core information
cp -r ${libretroCoreInfo}/* $out/share/libretro/info
'' + lib.optionalString (runtimeLibs != [ ]) ''
wrapProgram $out/bin/retroarch \
--prefix LD_LIBRARY_PATH ':' ${lib.makeLibraryPath runtimeLibs}
'' + lib.optionalString stdenv.isDarwin ''
# https://github.com/libretro/RetroArch/blob/master/retroarch-apple-packaging.sh
app=$out/Applications/RetroArch.app
mkdir -p $app/Contents/MacOS
cp -r pkg/apple/OSX/* $app/Contents
cp $out/bin/retroarch $app/Contents/MacOS
# FIXME: using Info_Metal.plist results in input not working
# mv $app/Contents/Info_Metal.plist $app/Contents/Info.plist
substituteInPlace $app/Contents/Info.plist \
--replace '${"\${EXECUTABLE_NAME}"}' 'RetroArch' \
--replace '$(PRODUCT_BUNDLE_IDENTIFIER)' 'com.libretro.RetroArch' \
--replace '${"\${PRODUCT_NAME}"}' 'RetroArch' \
--replace '${"\${MACOSX_DEPLOYMENT_TARGET}"}' '10.13'
cp media/retroarch.icns $app/Contents/Resources/
'';
preFixup = "rm $out/bin/retroarch-cg2glsl";
# Workaround for the following error affecting newer versions of Clang:
# ./config.def.h:xxx:x: error: 'TARGET_OS_TV' is not defined, evaluates to 0 [-Werror,-Wundef-prefix=TARGET_OS_]
NIX_CFLAGS_COMPILE = lib.optional stdenv.cc.isClang [ "-Wno-undef-prefix" ];
meta = with lib; {
homepage = "https://libretro.com";
description = "Multi-platform emulator frontend for libretro cores";
license = licenses.gpl3Plus;
platforms = platforms.unix;
changelog = "https://github.com/libretro/RetroArch/blob/v${version}/CHANGES.md";
maintainers = with maintainers; [ MP2E edwtjo matthewbauer kolbycrouch thiagokokada ];
};
}

View file

@ -0,0 +1,25 @@
From 546b343294209abbb193883ab76b679b7f99c6d3 Mon Sep 17 00:00:00 2001
From: Thiago Kenji Okada <thiagokokada@gmail.com>
Date: Sat, 20 Nov 2021 16:03:50 -0300
Subject: [PATCH] Disable "menu_show_core_updater"
---
retroarch.cfg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/retroarch.cfg b/retroarch.cfg
index cdcb199c9f..ab72f3920f 100644
--- a/retroarch.cfg
+++ b/retroarch.cfg
@@ -681,7 +681,7 @@
# menu_show_online_updater = true
# If disabled, will hide the ability to update cores (and core info files) inside the menu.
-# menu_show_core_updater = true
+menu_show_core_updater = false
# If disabled, the libretro core will keep running in the background when we
# are in the menu.
--
2.31.1

View file

@ -0,0 +1,26 @@
diff --git a/retroarch.cfg b/retroarch.cfg
index cdcb199c9f..08b9b1cf10 100644
--- a/retroarch.cfg
+++ b/retroarch.cfg
@@ -681,7 +681,7 @@
# menu_show_online_updater = true
# If disabled, will hide the ability to update cores (and core info files) inside the menu.
-# menu_show_core_updater = true
+menu_show_core_updater = false
# If disabled, the libretro core will keep running in the background when we
# are in the menu.
@@ -823,10 +823,10 @@
# rgui_browser_directory =
# Core directory for libretro core implementations.
-# libretro_directory =
+libretro_directory = @libretro_directory@
# Core info directory for libretro core information.
-# libretro_info_path =
+libretro_info_path = @libretro_info_path@
# Path to content database directory.
# content_database_path =

View file

@ -0,0 +1,28 @@
diff --git a/configuration.c b/configuration.c
index e6a3841324..afb1d6e2ce 100644
--- a/configuration.c
+++ b/configuration.c
@@ -1456,7 +1456,7 @@ static struct config_path_setting *populate_settings_path(
SETTING_PATH("core_options_path",
settings->paths.path_core_options, false, NULL, true);
SETTING_PATH("libretro_info_path",
- settings->paths.path_libretro_info, false, NULL, true);
+ settings->paths.path_libretro_info, false, NULL, false);
SETTING_PATH("content_database_path",
settings->paths.path_content_database, false, NULL, true);
SETTING_PATH("cheat_database_path",
diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c
index 722e1c595c..e7313ee038 100644
--- a/frontend/drivers/platform_unix.c
+++ b/frontend/drivers/platform_unix.c
@@ -1825,8 +1825,8 @@ static void frontend_unix_get_env(int *argc,
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
"core_info", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
#else
- fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
- "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
+ fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], "@libretro_info_path@",
+ "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
#endif
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG], base_path,
"autoconfig", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG]));

View file

@ -0,0 +1,488 @@
{
"atari800": {
"owner": "libretro",
"repo": "libretro-atari800",
"rev": "beab30e7ea10b7ed14d0514064f47d16f76cd995",
"sha256": "r9MsnasNhhYdFyr2VHJXkTXssB5U00JW6wN/+i+SNUk="
},
"beetle-gba": {
"owner": "libretro",
"repo": "beetle-gba-libretro",
"rev": "38182572571a48cb58057cde64b915237c4e2d58",
"sha256": "4xnXWswozlcXBNI1lbGSNW/gAdIeLLO9Bf1SxOFLhSo="
},
"beetle-lynx": {
"owner": "libretro",
"repo": "beetle-lynx-libretro",
"rev": "de0d520d679cb92767876d4e98da908b1ea6a2d6",
"sha256": "BszU5bnlHBOwQSZOM9P4WIP863rS5RluNWvGBFxqzYs="
},
"beetle-ngp": {
"owner": "libretro",
"repo": "beetle-ngp-libretro",
"rev": "facf8e1f5440c5d289258ee3c483710f3bf916fb",
"sha256": "vDKDt7MvCB9XQYP291cwcEPDxfNIVgNSWtBYz9PVgcw="
},
"beetle-pce-fast": {
"owner": "libretro",
"repo": "beetle-pce-fast-libretro",
"rev": "e8801687f232a6f8828b3ff5dadbc9fe1b0076fc",
"sha256": "YM+URLnMqsdmk/5yqCg8U4mPpgtmj5qne2CrbTpTeN8="
},
"beetle-pcfx": {
"owner": "libretro",
"repo": "beetle-pcfx-libretro",
"rev": "bfc0954e14b261a04dcf8dbe0df8798f16ae3f3c",
"sha256": "XzCb1lZFYgsg+3eQ1OqyycNxCgLtZFA30rno3ytdnoM="
},
"beetle-psx": {
"owner": "libretro",
"repo": "beetle-psx-libretro",
"rev": "5a24d54d30dd00d817d267cf92fd5b3f4640928f",
"sha256": "uG1BhElNW75PnfM+rEYfbl97iwRT89hnl84yvlgx6fg="
},
"beetle-saturn": {
"owner": "libretro",
"repo": "beetle-saturn-libretro",
"rev": "dd18f9c477106263b3b7b050f4970d331ff7b23a",
"sha256": "RN5dmORtNOjIklSz/n11lz37bZ4IcPD7cyRcBGS4Oi8="
},
"beetle-snes": {
"owner": "libretro",
"repo": "beetle-bsnes-libretro",
"rev": "d770563fc3c4bd9abb522952cefb4aa923ba0b91",
"sha256": "zHPtfgp9hc8Q4gXJ5VgfJLWLeYjCsQhkfU1T5RM7AL0="
},
"beetle-supergrafx": {
"owner": "libretro",
"repo": "beetle-supergrafx-libretro",
"rev": "59991a98c232b1a8350a9d67ac554c5b22771d3c",
"sha256": "zv3dAPWrj6hkNaFQ5vUKm5Orcrb2XO48WSkAFiAVUO0="
},
"beetle-vb": {
"owner": "libretro",
"repo": "beetle-vb-libretro",
"rev": "246555f8ed7e0b9e5748b2ee2ed6743187c61393",
"sha256": "96lQlDqx2bvFeovqGGkemxqS2zlHw92O6YeTEGlgf34="
},
"beetle-wswan": {
"owner": "libretro",
"repo": "beetle-wswan-libretro",
"rev": "d1fb3f399a2bc16b9ad0f2e8c8ba9f7051cd26bd",
"sha256": "p9mJv7zBFjNh1sh5iAjBZzxP6k8ydUNDXLQIjHl9doQ="
},
"blastem": {
"owner": "libretro",
"repo": "blastem",
"rev": "0786858437ed71996f43b7af0fbe627eb88152fc",
"sha256": "uEP5hSgLAle1cLv/EM7D11TJMAggu7pqWxfrUt3rhEg="
},
"bluemsx": {
"owner": "libretro",
"repo": "bluemsx-libretro",
"rev": "92d0c41b4973854114c7b2d06ab727a266d404c5",
"sha256": "dL4k+zG8L4KK4lwf9eXPVGk/u5xQn2htIEpoKyj9kQI="
},
"bsnes": {
"owner": "libretro",
"repo": "bsnes-libretro",
"rev": "26c583e1c5d09253b6c61e2b9d418e8758eef632",
"sha256": "Qa0ScFHcEgBUoWouNoW4JINZ2aHjNATndxhcwKw476Q="
},
"bsnes-hd": {
"owner": "DerKoun",
"repo": "bsnes-hd",
"rev": "65f24e56c37f46bb752190024bd4058e64ad77d1",
"sha256": "1dk2i71NOLeTTOZjVll8wrkr5dIH5bGSGUeeHqWjZHE="
},
"bsnes-mercury": {
"owner": "libretro",
"repo": "bsnes-mercury",
"rev": "4ba6d8d88e57d3193d95e1bcf39e8d31121f76d4",
"sha256": "w2MVslgRlxW4SMzgcXP4gXr9A8B07N7LNrB1LXzk1Zk="
},
"citra": {
"owner": "libretro",
"repo": "citra",
"rev": "44e01f99016008eff18bc7a28234d1098382358d",
"sha256": "vIrUStv+VM8pYeznnWSVBRfSA71/B7VIY7B/syymGzE=",
"fetchSubmodules": true
},
"desmume": {
"owner": "libretro",
"repo": "desmume",
"rev": "5d0ae2be2c9fb6362af528b3722e81323318eb9f",
"sha256": "4bJ6fLZ+fV7SnZ71YT3JFcXFOgmskNUCmCHwc2QNl0A="
},
"desmume2015": {
"owner": "libretro",
"repo": "desmume2015",
"rev": "af397ff3d1f208c27f3922cc8f2b8e08884ba893",
"sha256": "kEb+og4g7rJvCinBZKcb42geZO6W8ynGsTG9yqYgI+U="
},
"dolphin": {
"owner": "libretro",
"repo": "dolphin",
"rev": "6a0b6ee8a4d5363e669f5faf43abc8f17e4278a8",
"sha256": "TeeHnttGmCeOTDTK/gJM+RpusjDDndapZAa3T+oLiq0="
},
"dosbox": {
"owner": "libretro",
"repo": "dosbox-libretro",
"rev": "74cd17ed0ff810ff78cb8c1f1e45513bfe8a0f32",
"sha256": "0PIloW7j/87asDJ8IDw4r3r4muxNF+RbvkIRPLZQvRc="
},
"eightyone": {
"owner": "libretro",
"repo": "81-libretro",
"rev": "2e34567a320cba27b9162b1776db4de3cdb7cf03",
"sha256": "vjrHRLzc9Fy0MwV9d+LlcJTGJfVsRauEig8R+erBtfw="
},
"fbalpha2012": {
"owner": "libretro",
"repo": "fbalpha2012",
"rev": "7f8860543a81ba79c0e1ce1aa219af44568c628a",
"sha256": "r1lH+CR+nVRCPkVo0XwLi35/ven/FEkNhWUTA6cUVxc="
},
"fbneo": {
"owner": "libretro",
"repo": "fbneo",
"rev": "e4625a196b9232ba93a156e3a5164aa11193f20a",
"sha256": "/5JmwuLWWBQWXnqCMjKzOC2XG6wo5a6xgQOYX1P1zcw="
},
"fceumm": {
"owner": "libretro",
"repo": "libretro-fceumm",
"rev": "b3c35b6515b2b6a789c589f976a4a323ebebe3eb",
"sha256": "zwFQGQyO0Vj/IBM1k8JB3D/jB3OwDuGdSHLavr8Fxgw="
},
"flycast": {
"owner": "libretro",
"repo": "flycast",
"rev": "4c293f306bc16a265c2d768af5d0cea138426054",
"sha256": "9IxpRBY1zifhOebLJSDMA/wiOfcZj+KOiPrgmjiFxvo="
},
"fmsx": {
"owner": "libretro",
"repo": "fmsx-libretro",
"rev": "11fa9f3c08cde567394c41320ca76798c2c64670",
"sha256": "1u5c5oDIjjXEquh6UBv2H1F/Ln7h44DTF1ohDG0Qnww="
},
"freeintv": {
"owner": "libretro",
"repo": "freeintv",
"rev": "295dd3c9e4b2d4f652f6a6a904afbe90a8187068",
"sha256": "tz0X6AfD7IL3Y50vjgSO5r6sDhu++6Gj8Rp7de5OqMk="
},
"gambatte": {
"owner": "libretro",
"repo": "gambatte-libretro",
"rev": "15536214cdce31894d374b2ffa2494543057082b",
"sha256": "cTSoK6rezRajnuWPt7WkYn3SWL0sTu7h5X3Ig1KukDA="
},
"genesis-plus-gx": {
"owner": "libretro",
"repo": "Genesis-Plus-GX",
"rev": "7520ac8aae7b08262c0472e724e6ef0bfe41d285",
"sha256": "wKcO/dulgZKgXTuHdcQvfSrfxSI5UA0az6qMLtP4K6g="
},
"gpsp": {
"owner": "libretro",
"repo": "gpsp",
"rev": "f0f0b31f9ab95946965b75fed8d31e19290f3d43",
"sha256": "aiegBSpQDyXzVkyWuUpI66QvA1tqS8PQ8+75U89K10A="
},
"gw": {
"owner": "libretro",
"repo": "gw-libretro",
"rev": "d08a08154ce8ed8e9de80582c108f157e4c6b226",
"sha256": "PWd/r4BBmhiNqJdV6OaXHr4XCdR1GyVipq3zvyBcqEs="
},
"handy": {
"owner": "libretro",
"repo": "libretro-handy",
"rev": "517bb2d02909271836604c01c8f09a79ad605297",
"sha256": "Igf/OvmnCzoWjCZBoep7T0pXsoBKq3NJpXlYhE7nr3s="
},
"hatari": {
"owner": "libretro",
"repo": "hatari",
"rev": "e5e36a5262cfeadc3d1c7b411b7a70719c4f293c",
"sha256": "T4I3NVEMBKr5HLs60x48VNRl2TMnhqvaF+LTtYQ7qdU="
},
"mame": {
"owner": "libretro",
"repo": "mame",
"rev": "b7dd999590717638ceade2e24d16d63147aa12ad",
"sha256": "QgENNjykhO+WSxAb//J+R7QP3/rZnxqv7sarO4eBYuc="
},
"mame2000": {
"owner": "libretro",
"repo": "mame2000-libretro",
"rev": "dd9d6612c29bf5b29bc2f94cab2d43fe3dcd69ee",
"sha256": "X0fP0bNBk2hqXVdRspylLIjZO563aMXkyX4qgx/3Vr8="
},
"mame2003": {
"owner": "libretro",
"repo": "mame2003-libretro",
"rev": "3eb27d5f161522cf873c0642f14b8e2267b3820f",
"sha256": "TQ4FwboKeEP58hOL2hYs4OYes2o0wSKFSp4CqZV5r6I="
},
"mame2003-plus": {
"owner": "libretro",
"repo": "mame2003-plus-libretro",
"rev": "e5ee29ecb8182952f861f22516e5791625fe2671",
"sha256": "YunfAITR/Etm8lvEab/HigZoBz+ayJQ7ezjItWI/HvE="
},
"mame2010": {
"owner": "libretro",
"repo": "mame2010-libretro",
"rev": "932e6f2c4f13b67b29ab33428a4037dee9a236a8",
"sha256": "HSZRSnc+0300UE9fPcUOMrXABlxHhTewkFPTqQ4Srxs="
},
"mame2015": {
"owner": "libretro",
"repo": "mame2015-libretro",
"rev": "e6a7aa4d53726e61498f68d6b8e2c092a2169fa2",
"sha256": "IgiLxYYuUIn3YE+kQCXzgshES2VNpUHn0Qjsorw0w/s="
},
"mame2016": {
"owner": "libretro",
"repo": "mame2016-libretro",
"rev": "01058613a0109424c4e7211e49ed83ac950d3993",
"sha256": "IsM7f/zlzvomVOYlinJVqZllUhDfy4NNTeTPtNmdVak="
},
"melonds": {
"owner": "libretro",
"repo": "melonds",
"rev": "e93ec3e462d3dfc1556781510a3cee113f02abb2",
"sha256": "NDrsqX17OKw1/PIZSrWAxhVl+Qk/xG7lCnr6Ts+7YJ4="
},
"mesen": {
"owner": "libretro",
"repo": "mesen",
"rev": "bb9ea02eba28682986044a6f49329ec533aa26ba",
"sha256": "G2NQDpByvI9RFEwrRiKXcMnPtVtqpvEoZgk7/fk5qCU="
},
"mesen-s": {
"owner": "libretro",
"repo": "mesen-s",
"rev": "b0b53409eecb696fb13f411ffde72e8f576feb09",
"sha256": "lDHyeIsVsI5+ZK8EJI50alrFuu0uJmxscda5bR1UmQQ="
},
"meteor": {
"owner": "libretro",
"repo": "meteor-libretro",
"rev": "e533d300d0561564451bde55a2b73119c768453c",
"sha256": "zMkgzUz2rk0SD5ojY4AqaDlNM4k4QxuUxVBRBcn6TqQ="
},
"mgba": {
"owner": "libretro",
"repo": "mgba",
"rev": "5d48e0744059ebf38a4e937b256ffd5df4e0d103",
"sha256": "OYw2nlldFx5B7WX0E8Gbgfp1j4h65ZxyKDS9tneHXQg="
},
"mupen64plus": {
"owner": "libretro",
"repo": "mupen64plus-libretro-nx",
"rev": "6e9dcd2cd9d23d3e79eaf2349bf7e9f25ad45bf1",
"sha256": "rs/VL2K6aS8Rl01IyxUiWipzLEzg+7+fbXxI0qN5X/I="
},
"neocd": {
"owner": "libretro",
"repo": "neocd_libretro",
"rev": "327aeceecdf71c8a0c0af3d6dc53686c94fe44ad",
"sha256": "cY0P+0EQ0b9df+YT2EMvrxjp5L+DwIg31rEJqchU+hc="
},
"nestopia": {
"owner": "libretro",
"repo": "nestopia",
"rev": "a9e197f2583ef4f36e9e77d930a677e63a2c2f62",
"sha256": "QqmWSk8Ejf7QMJk0cVBgpnyqcK6oLjCnnXMXInuWfYc="
},
"np2kai": {
"owner": "AZO234",
"repo": "NP2kai",
"rev": "2b09ea6a589cdcae27bca27160b3f82638fbb45d",
"sha256": "M3kGA1TU3xui6of9XgUspI+Zf+hjYP1d2mgKwxsy3IQ=",
"fetchSubmodules": true
},
"o2em": {
"owner": "libretro",
"repo": "libretro-o2em",
"rev": "641f06d67d192a0677ec861fcb731d3ce8da0f87",
"sha256": "s3FreOziXeGhUyQdSoOywZldD21m3+OXK0EJ2Z8rXiY="
},
"opera": {
"owner": "libretro",
"repo": "opera-libretro",
"rev": "3849c969c64b82e622a7655b327fa94bc5a4c7cc",
"sha256": "McSrvjrYTemqAAnfHELf9qXC6n6Dg4kNsUDA7e2DvkE="
},
"parallel-n64": {
"owner": "libretro",
"repo": "parallel-n64",
"rev": "b804ab1a199d6ff1f8fef4aa7dfcf663990e430b",
"sha256": "zAet6hYa/79CBbvwZNTNs/ayWuHHlwg+0Y4BAUFddBc="
},
"pcsx2": {
"owner": "libretro",
"repo": "pcsx2",
"rev": "0251730a21d7238856d79aa25e2942b48edb38f6",
"sha256": "a/lWLBCww4QwxdO7Sbvmfq0XF9FnP4xzF51ljsWk46I="
},
"pcsx_rearmed": {
"owner": "libretro",
"repo": "pcsx_rearmed",
"rev": "e24732050e902bd5402b2b7da7c391d2ca8fa799",
"sha256": "tPz5E3QO6FucjYOzdjbY2FHLPz1Fmms10tdt7rZIW8U="
},
"picodrive": {
"owner": "libretro",
"repo": "picodrive",
"rev": "7ff457f2f833570013f2a7e2608ac40632e0735d",
"sha256": "xEG5swvvWFhvosC1XpFaZphESNaf4AtX+6UE02B57j8=",
"fetchSubmodules": true
},
"play": {
"owner": "jpd002",
"repo": "Play-",
"rev": "39eb5c2eb6da65dc76b1c4d1319175a68120a77a",
"sha256": "EF3p0lvHjKGt4pxtTAkDM+uHsnW72lN+Ki8BaZIk/BQ=",
"fetchSubmodules": true
},
"ppsspp": {
"owner": "hrydgard",
"repo": "ppsspp",
"rev": "83b8211abf7fb705835eb1ccf8feae04816ae96c",
"sha256": "8K4bz/GUnE8GrlAVFULMXLC+i3ZYvR28EpehEg6up4s=",
"fetchSubmodules": true
},
"prboom": {
"owner": "libretro",
"repo": "libretro-prboom",
"rev": "b22a6b19fd976a14374db9083baea9c91b079106",
"sha256": "NmEWRTHaZjV2Y6Wrc3WOamXCnOawKc2ja1KBDxokRiY="
},
"prosystem": {
"owner": "libretro",
"repo": "prosystem-libretro",
"rev": "fbf62c3dacaac694f7ec26cf9be10a51b27271e7",
"sha256": "Opb6CUeT/bnaTg4MJo7DNsVyaPa73PLbIor25HHWzZ0="
},
"quicknes": {
"owner": "libretro",
"repo": "QuickNES_Core",
"rev": "e6f08c165af45fc2d2f26c80ba0cfc33e26f9cfe",
"sha256": "JQtlqN3mvIwKy6iN9opHPHnh0E7AIn9JVitIfXklI/I="
},
"sameboy": {
"owner": "libretro",
"repo": "sameboy",
"rev": "b154b7d3d885a3cf31203f0b8f50d3b37c8b742b",
"sha256": "tavGHiNpRiPkibi66orMf93cnCqQCD8XhSl/36nl/9M="
},
"scummvm": {
"owner": "libretro",
"repo": "scummvm",
"rev": "2fb2e4c551c9c1510c56f6e890ee0300b7b3fca3",
"sha256": "wrlFqu+ONbYH4xMFDByOgySobGrkhVc7kYWI4JzA4ew="
},
"smsplus-gx": {
"owner": "libretro",
"repo": "smsplus-gx",
"rev": "9de9847dc8ba458e9522d5ae8b87bf71ad437257",
"sha256": "XzqQ/3XH5L79UQep+DZ+mDHnUJKZQXzjNCZNZw2mGvY="
},
"snes9x": {
"owner": "snes9xgit",
"repo": "snes9x",
"rev": "3c729a9763263bc3a69f48370e43ae05e672970a",
"sha256": "01M6Wvbu1omMwh3Xg4RGh028jirGs7mLpxwKJgMRQxA="
},
"snes9x2002": {
"owner": "libretro",
"repo": "snes9x2002",
"rev": "c4397de75a5f11403d154abd935e39fe969bca94",
"sha256": "yL4SIRR1Er+7Iq3YPfoe5ES47nvyA3UmGK+upLzKiFA="
},
"snes9x2005": {
"owner": "libretro",
"repo": "snes9x2005",
"rev": "23f759bc4bf2e39733296f7749e446418e3cd0f3",
"sha256": "/bZrMp7NHgdYvA3Tw1ZoWXRg7VxmatRUX5cCJsU3NCY="
},
"snes9x2010": {
"owner": "libretro",
"repo": "snes9x2010",
"rev": "c98224bc74aa0bbf355d128b22e4a2a4e94215b0",
"sha256": "mf5msdwdcRRfFWHwmWLS/qKd7gNlLwexGEB6wB6TfhE="
},
"stella": {
"owner": "stella-emu",
"repo": "stella",
"rev": "efb2a9f299cad241e12d811580f28d75b6c3438d",
"sha256": "QYwDTd8EZUMXJiuSJtoW8XQXgl+Wx0lPkNLOwzM5bzA="
},
"stella2014": {
"owner": "libretro",
"repo": "stella2014-libretro",
"rev": "1351a4fe2ca6b1f3a66c7db0df2ec268ab002d41",
"sha256": "/sVDOfP5CE8k808lhmH3tT47oZ1ka3pgDG5LglfPmHc="
},
"swanstation": {
"owner": "libretro",
"repo": "swanstation",
"rev": "0e53a5ac09a30d73d78b628f7e4954ebe5615801",
"sha256": "vOu99fsm2oeSi96tWR+vV5suZSYCyXJVgOdvjnKbNhg="
},
"tgbdual": {
"owner": "libretro",
"repo": "tgbdual-libretro",
"rev": "1e0c4f931d8c5e859e6d3255d67247d7a2987434",
"sha256": "0wHv9DpKuzJ/q5vERqCo4GBLre2ggClBIWSjGnMLQq8="
},
"thepowdertoy": {
"owner": "libretro",
"repo": "ThePowderToy",
"rev": "ac620c0a89a18774c3ad176a8a1bc596df23ff57",
"sha256": "C/X1DbmnucRddemEYml2zN3qr5yoXY3b+nvqfpboS0M="
},
"tic80": {
"owner": "libretro",
"repo": "tic-80",
"rev": "e9f62f85a154796c6baaee8a9f6fd0cfdd447019",
"sha256": "JTAoIqxqpaLjsQiIpJ4wQsREI5/rTxVxDywoL3oLI4Q=",
"fetchSubmodules": true
},
"vba-m": {
"owner": "libretro",
"repo": "vbam-libretro",
"rev": "254f6effebe882b7d3d29d9e417c6aeeabc08026",
"sha256": "vJWjdqJ913NLGL4G15sRPqO/wp9xPsuhUMLUuAbDRKk="
},
"vba-next": {
"owner": "libretro",
"repo": "vba-next",
"rev": "4191e09e2b0fcf175a15348c1fa8a12bbc6320dd",
"sha256": "IG2oH4F17tlSv1cXYZobggb37tFNE53JOHzan/X0+ws="
},
"vecx": {
"owner": "libretro",
"repo": "libretro-vecx",
"rev": "141af284202c86ed0d4ce9030c76954a144287cf",
"sha256": "p5vMuG2vr3BTJOQWNcTPb89MlkVrRvJNTIJSU8r9zfU="
},
"virtualjaguar": {
"owner": "libretro",
"repo": "virtualjaguar-libretro",
"rev": "263c979be4ca757c43fb525bd6f0887998e57041",
"sha256": "6Q6Y0IFUWS9ZPhnAK3EUo4hMGPdBn8eNEYCK/zLgAKU="
},
"yabause": {
"owner": "libretro",
"repo": "yabause",
"rev": "17dfcd8de4700341d972993501d3a043925675ce",
"sha256": "xwW7Oe3Cy3yC0xC5acLW6OGUIG+dKd1mwiXK5ZAumdo="
}
}

View file

@ -0,0 +1,36 @@
{ stdenv, pkgs, lib, runtimeShell, cores ? [ ] }:
let
script = exec: ''
#!${runtimeShell}
nohup sh -c "pkill -SIGTSTP kodi" &
# https://forum.kodi.tv/showthread.php?tid=185074&pid=1622750#pid1622750
nohup sh -c "sleep 10 && ${exec} '$@' -f;pkill -SIGCONT kodi"
'';
scriptSh = exec: pkgs.writeScript ("kodi-"+exec.name) (script exec.path);
execs = map (core: rec { name = core.core; path = core+"/bin/retroarch-"+name;}) cores;
in
stdenv.mkDerivation {
pname = "kodi-retroarch-advanced-launchers";
version = "0.2";
dontBuild = true;
buildCommand = ''
mkdir -p $out/bin
${lib.concatMapStrings (exec: "ln -s ${scriptSh exec} $out/bin/kodi-${exec.name};") execs}
'';
meta = {
description = "Kodi retroarch advanced launchers";
longDescription = ''
These retroarch launchers are intended to be used with
advanced (emulation) launcher for Kodi since device input is
otherwise caught by both Kodi and the retroarch process.
'';
license = lib.licenses.gpl3;
};
}

View file

@ -0,0 +1,173 @@
#!/usr/bin/env nix-shell
#!nix-shell -I nixpkgs=../../../../ -i python3 -p "python3.withPackages (ps: with ps; [ requests nix-prefetch-github ])" -p "git"
import json
import sys
import subprocess
from pathlib import Path
SCRIPT_PATH = Path(__file__).absolute().parent
HASHES_PATH = SCRIPT_PATH / "hashes.json"
CORES = {
"atari800": {"repo": "libretro-atari800"},
"beetle-gba": {"repo": "beetle-gba-libretro"},
"beetle-lynx": {"repo": "beetle-lynx-libretro"},
"beetle-ngp": {"repo": "beetle-ngp-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-snes": {"repo": "beetle-bsnes-libretro"},
"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"},
"eightyone": {"repo": "81-libretro"},
"fbalpha2012": {"repo": "fbalpha2012"},
"fbneo": {"repo": "fbneo"},
"fceumm": {"repo": "libretro-fceumm"},
"flycast": {"repo": "flycast"},
"fmsx": {"repo": "fmsx-libretro"},
"freeintv": {"repo": "freeintv"},
"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"},
"mame": {"repo": "mame"},
"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"},
"mgba": {"repo": "mgba"},
"mupen64plus": {"repo": "mupen64plus-libretro-nx"},
"neocd": {"repo": "neocd_libretro"},
"nestopia": {"repo": "nestopia"},
"np2kai": {"repo": "NP2kai", "owner": "AZO234", "fetch_submodules": True},
"o2em": {"repo": "libretro-o2em"},
"opera": {"repo": "opera-libretro"},
"parallel-n64": {"repo": "parallel-n64"},
"pcsx2": {"repo": "pcsx2"},
"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"},
"quicknes": {"repo": "QuickNES_Core"},
"sameboy": {"repo": "sameboy"},
"scummvm": {"repo": "scummvm"},
"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)
result = subprocess.run(
["nix-prefetch-github", owner, repo, *extra_args],
check=True,
capture_output=True,
text=True,
)
j = json.loads(result.stdout)
# Remove False values
return {k: v for k, v in j.items() if v}
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_to_update=[]):
with open(HASHES_PATH) as f:
repo_hashes = json.loads(f.read())
for core, repo in CORES.items():
if core in cores_to_update:
info(f"Getting repo hash for '{core}'...")
repo_hashes[core] = get_repo_hash(**repo)
else:
info(f"Skipping '{core}'...")
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()
repo_hashes = get_repo_hashes(cores_to_update)
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()

View file

@ -0,0 +1,84 @@
From 7bf021529ff15ca2580b15b3c0bfdc137d5beffe Mon Sep 17 00:00:00 2001
From: Thiago Kenji Okada <thiagokokada@gmail.com>
Date: Wed, 9 Mar 2022 18:24:15 +0000
Subject: [PATCH] Use fixed paths on "libretro_info_path"
This patch sets "libretro_info_path" to `handle = false`, so instead of
using the values from `retroarch.cfg`, it will always use the default.
Also, it patches the default "libretro_info_path" to the
`@libretro_info_path` string, so we can substitute it with the full path
to it during build.
---
configuration.c | 2 +-
frontend/drivers/platform_darwin.m | 9 ++-------
frontend/drivers/platform_unix.c | 12 ++++--------
3 files changed, 7 insertions(+), 16 deletions(-)
diff --git a/configuration.c b/configuration.c
index 7e346ff6e9..c4b2100203 100644
--- a/configuration.c
+++ b/configuration.c
@@ -1466,7 +1466,7 @@ static struct config_path_setting *populate_settings_path(
SETTING_PATH("core_options_path",
settings->paths.path_core_options, false, NULL, true);
SETTING_PATH("libretro_info_path",
- settings->paths.path_libretro_info, false, NULL, true);
+ settings->paths.path_libretro_info, false, NULL, false);
SETTING_PATH("content_database_path",
settings->paths.path_content_database, false, NULL, true);
SETTING_PATH("cheat_database_path",
diff --git a/frontend/drivers/platform_darwin.m b/frontend/drivers/platform_darwin.m
index 6c5fdca400..552dcb7e2b 100644
--- a/frontend/drivers/platform_darwin.m
+++ b/frontend/drivers/platform_darwin.m
@@ -388,14 +388,9 @@ static void frontend_darwin_get_env(int *argc, char *argv[],
home_dir_buf, "shaders_glsl",
sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER]));
#endif
-#ifdef HAVE_UPDATE_CORES
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE],
- home_dir_buf, "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
-#else
- fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE],
- bundle_path_buf, "modules", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
-#endif
- fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], home_dir_buf, "info", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
+ "@libretro_directory@", "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
+ fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], "@libretro_info_path@", "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_OVERLAY], home_dir_buf, "overlays", sizeof(g_defaults.dirs[DEFAULT_DIR_OVERLAY]));
#ifdef HAVE_VIDEO_LAYOUT
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT], home_dir_buf, "layouts", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT]));
diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c
index b3b5dad173..7f1561e523 100644
--- a/frontend/drivers/platform_unix.c
+++ b/frontend/drivers/platform_unix.c
@@ -1820,12 +1820,8 @@ static void frontend_unix_get_env(int *argc,
strcpy_literal(base_path, "retroarch");
#endif
- if (!string_is_empty(libretro_directory))
- strlcpy(g_defaults.dirs[DEFAULT_DIR_CORE], libretro_directory,
- sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
- else
- fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], base_path,
- "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
+ fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], "@libretro_directory@",
+ "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
#if defined(DINGUX)
/* On platforms that require manual core installation/
* removal, placing core info files in the same directory
@@ -1834,8 +1830,8 @@ static void frontend_unix_get_env(int *argc,
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
"core_info", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
#else
- fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
- "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
+ fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], "@libretro_info_path@",
+ "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
#endif
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG], base_path,
"autoconfig", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG]));
--
2.32.0

View file

@ -0,0 +1,41 @@
{ stdenv, lib, makeWrapper, retroarch, cores ? [ ] }:
stdenv.mkDerivation {
pname = "retroarch";
version = lib.getVersion retroarch;
nativeBuildInputs = [ makeWrapper ];
buildCommand = ''
mkdir -p $out/lib
for coreDir in $cores; do
ln -s $coreDir/* $out/lib/.
done
ln -s -t $out ${retroarch}/share
if [ -d ${retroarch}/Applications ]; then
ln -s -t $out ${retroarch}/Applications
fi
makeWrapper ${retroarch}/bin/retroarch $out/bin/retroarch \
--suffix-each LD_LIBRARY_PATH ':' "$cores" \
--add-flags "-L $out/lib/" \
'';
cores = map (x: x + x.libretroCore) cores;
preferLocalBuild = true;
meta = with retroarch.meta; {
inherit changelog description homepage license maintainers platforms;
longDescription = ''
RetroArch is the reference frontend for the libretro API.
The following cores are included:
${lib.concatStringsSep "\n" (map (x: " - ${x.name}") cores)}
'';
# FIXME: exits with error on macOS:
# No Info.plist file in application bundle or no NSPrincipalClass in the Info.plist file, exiting
broken = stdenv.isDarwin;
};
}