diff options
author | Thiago Kenji Okada <thiagokokada@gmail.com> | 2022-10-28 13:12:12 +0100 |
---|---|---|
committer | Thiago Kenji Okada <thiagokokada@gmail.com> | 2022-10-28 16:33:24 +0100 |
commit | 64ae43e9e5336eb0cef799ddce08e12fd95ca4cb (patch) | |
tree | 28d1e5b83e2e86ef9082e6d0247e6c67a064cabc /pkgs/applications/emulators/retroarch/mkLibretroCore.nix | |
parent | 27b6e16af77fa6e7734c8b217d6cca24c39af0f5 (diff) |
libretro: refactor mkLibretroCore function
Separate it on its own separate file, remove some unnecessary parameters and allow more flexibility.
Diffstat (limited to 'pkgs/applications/emulators/retroarch/mkLibretroCore.nix')
-rw-r--r-- | pkgs/applications/emulators/retroarch/mkLibretroCore.nix | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/pkgs/applications/emulators/retroarch/mkLibretroCore.nix b/pkgs/applications/emulators/retroarch/mkLibretroCore.nix new file mode 100644 index 0000000000000..6ab6521270095 --- /dev/null +++ b/pkgs/applications/emulators/retroarch/mkLibretroCore.nix @@ -0,0 +1,80 @@ +{ 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.replaceChars [ "-" ] [ "_" ]) 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"; + 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) |