about summary refs log tree commit diff
path: root/pkgs/applications/emulators/retroarch/mkLibretroCore.nix
diff options
context:
space:
mode:
authorThiago Kenji Okada <thiagokokada@gmail.com>2022-10-28 13:12:12 +0100
committerThiago Kenji Okada <thiagokokada@gmail.com>2022-10-28 16:33:24 +0100
commit64ae43e9e5336eb0cef799ddce08e12fd95ca4cb (patch)
tree28d1e5b83e2e86ef9082e6d0247e6c67a064cabc /pkgs/applications/emulators/retroarch/mkLibretroCore.nix
parent27b6e16af77fa6e7734c8b217d6cca24c39af0f5 (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.nix80
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)