81 lines
2 KiB
Nix
81 lines
2 KiB
Nix
{ lib
|
|
, stdenv
|
|
, core
|
|
, makeWrapper
|
|
, retroarch
|
|
, 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
|
|
, ...
|
|
}@args:
|
|
|
|
let
|
|
d2u = if normalizeCore then (lib.replaceStrings [ "-" ] [ "_" ]) else (x: x);
|
|
coreDir = placeholder "out" + libretroCore;
|
|
coreFilename = "${d2u core}_libretro${stdenv.hostPlatform.extensions.sharedLibrary}";
|
|
mainProgram = "retroarch-${core}";
|
|
extraArgs = builtins.removeAttrs args [
|
|
"lib"
|
|
"stdenv"
|
|
"core"
|
|
"makeWrapper"
|
|
"retroarch"
|
|
"zlib"
|
|
"makefile"
|
|
"extraBuildInputs"
|
|
"extraNativeBuildInputs"
|
|
"libretroCore"
|
|
"normalizeCore"
|
|
"makeFlags"
|
|
"meta"
|
|
];
|
|
in
|
|
stdenv.mkDerivation ({
|
|
pname = "libretro-${core}";
|
|
|
|
buildInputs = [ zlib ] ++ extraBuildInputs;
|
|
nativeBuildInputs = [ makeWrapper ] ++ extraNativeBuildInputs;
|
|
|
|
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 [ ]);
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
install -Dt ${coreDir} ${coreFilename}
|
|
makeWrapper ${retroarch}/bin/retroarch $out/bin/${mainProgram} \
|
|
--add-flags "-L ${coreDir}/${coreFilename} $@"
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
passthru = { inherit core libretroCore; };
|
|
|
|
meta = with lib; {
|
|
inherit mainProgram;
|
|
inherit (retroarch.meta) platforms;
|
|
homepage = "https://www.libretro.com/";
|
|
maintainers = with maintainers; teams.libretro.members ++ [ hrdinka ];
|
|
} // (args.meta or { });
|
|
} // extraArgs)
|