libretro.mkLibretroCore: switch to lib.extendMkDerivation

This commit is contained in:
Thiago Kenji Okada
2025-06-11 21:13:01 +01:00
parent 3fa008da69
commit fd306e92f0
2 changed files with 74 additions and 77 deletions
@@ -4,7 +4,7 @@
}:
lib.makeScope newScope (self: {
mkLibretroCore = self.callPackage ./mkLibretroCore.nix;
mkLibretroCore = self.callPackage ./mkLibretroCore.nix { };
atari800 = self.callPackage ./cores/atari800.nix { };
@@ -6,96 +6,93 @@
retroarch-bare,
unstableGitUpdater,
zlib,
# Params
core,
makefile ? "Makefile.libretro",
extraBuildInputs ? [ ],
extraNativeBuildInputs ? [ ],
## Location of resulting RetroArch core on $out
libretroCore ? "/lib/retroarch/cores",
## The core filename is derived 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"
"makeWrapper"
"retroarch-bare"
"unstableGitUpdater"
"zlib"
lib.extendMkDerivation {
constructDrv = stdenv.mkDerivation;
excludeDrvArgNames = [
"core"
"extraBuildInputs"
"extraNativeBuildInputs"
"libretroCore"
"makefile"
"normalizeCore"
"passthru"
"meta"
];
in
stdenv.mkDerivation (
{
pname = "libretro-${core}";
buildInputs = [ zlib ] ++ extraBuildInputs;
nativeBuildInputs = [ makeWrapper ] ++ extraNativeBuildInputs;
extendDrvArgs =
finalAttrs:
{
core,
enableParallelBuilding ? true,
extraBuildInputs ? [ ],
extraNativeBuildInputs ? [ ],
makeFlags ? [ ],
makefile ? "Makefile.libretro",
meta ? { },
passthru ? { },
strictDeps ? true,
## Location of resulting RetroArch core on $out
libretroCore ? "/lib/retroarch/cores",
## The core filename is derived from the core name
## Setting `normalizeCore` to `true` will convert `-` to `_` on the core filename
normalizeCore ? true,
...
}:
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}";
in
{
pname = "libretro-${core}";
inherit makefile;
buildInputs = [ zlib ] ++ extraBuildInputs;
nativeBuildInputs = [ makeWrapper ] ++ extraNativeBuildInputs;
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 [ ]);
inherit enableParallelBuilding makefile strictDeps;
installPhase = ''
runHook preInstall
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
}"
] ++ makeFlags;
install -Dt ${coreDir} ${coreFilename}
makeWrapper ${retroarch-bare}/bin/retroarch $out/bin/${mainProgram} \
--add-flags "-L ${coreDir}/${coreFilename}"
installPhase = ''
runHook preInstall
runHook postInstall
'';
install -Dt ${coreDir} ${coreFilename}
makeWrapper ${retroarch-bare}/bin/retroarch $out/bin/${mainProgram} \
--add-flags "-L ${coreDir}/${coreFilename}"
enableParallelBuilding = true;
runHook postInstall
'';
passthru = {
inherit core libretroCore;
# libretro repos sometimes has a fake tag like "Current", ignore
# it by setting hardcodeZeroVersion
updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
} // (args.passthru or { });
passthru = {
inherit core libretroCore;
# libretro repos sometimes has a fake tag like "Current", ignore
# it by setting hardcodeZeroVersion
updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
} // passthru;
meta = {
inherit mainProgram;
inherit (retroarch-bare.meta) platforms;
homepage = "https://www.libretro.com/";
teams = [ lib.teams.libretro ];
} // (args.meta or { });
}
// extraArgs
)
meta = {
inherit mainProgram;
inherit (retroarch-bare.meta) platforms;
teams = [ lib.teams.libretro ];
} // meta;
};
}