biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / applications / emulators / retroarch / mkLibretroCore.nix
blobbf933bf701591256f298775f2ebcb6dee628cacd
1 { lib
2 , stdenv
3 , core
4 , repo
5 , makeWrapper
6 , retroarch
7 , zlib
8 , makefile ? "Makefile.libretro"
9 , extraBuildInputs ? [ ]
10 , extraNativeBuildInputs ? [ ]
11   # Location of resulting RetroArch core on $out
12 , libretroCore ? "/lib/retroarch/cores"
13   # The core filename is derivated from the core name
14   # Setting `normalizeCore` to `true` will convert `-` to `_` on the core filename
15 , normalizeCore ? true
16 , ...
17 }@args:
19 let
20   d2u = if normalizeCore then (lib.replaceStrings [ "-" ] [ "_" ]) else (x: x);
21   coreDir = placeholder "out" + libretroCore;
22   coreFilename = "${d2u core}_libretro${stdenv.hostPlatform.extensions.sharedLibrary}";
23   mainProgram = "retroarch-${core}";
24   extraArgs = builtins.removeAttrs args [
25     "lib"
26     "stdenv"
27     "core"
28     "makeWrapper"
29     "retroarch"
30     "zlib"
31     "makefile"
32     "extraBuildInputs"
33     "extraNativeBuildInputs"
34     "libretroCore"
35     "normalizeCore"
36     "makeFlags"
37     "meta"
38   ];
40 stdenv.mkDerivation ({
41   pname = "libretro-${core}";
43   buildInputs = [ zlib ] ++ extraBuildInputs;
44   nativeBuildInputs = [ makeWrapper ] ++ extraNativeBuildInputs;
46   inherit makefile;
48   makeFlags = [
49     "platform=${{
50       linux = "unix";
51       darwin = "osx";
52       windows = "win";
53     }.${stdenv.hostPlatform.parsed.kernel.name} or stdenv.hostPlatform.parsed.kernel.name}"
54     "ARCH=${{
55       armv7l = "arm";
56       armv6l = "arm";
57       aarch64 = "arm64";
58       i686 = "x86";
59     }.${stdenv.hostPlatform.parsed.cpu.name} or stdenv.hostPlatform.parsed.cpu.name}"
60   ] ++ (args.makeFlags or [ ]);
62   installPhase = ''
63     runHook preInstall
65     install -Dt ${coreDir} ${coreFilename}
66     makeWrapper ${retroarch}/bin/retroarch $out/bin/${mainProgram} \
67       --add-flags "-L ${coreDir}/${coreFilename}"
69     runHook postInstall
70   '';
72   enableParallelBuilding = true;
74   passthru = {
75     inherit core libretroCore;
76     updateScript = [ ./update_cores.py repo ];
77   };
79   meta = with lib; {
80     inherit mainProgram;
81     inherit (retroarch.meta) platforms;
82     homepage = "https://www.libretro.com/";
83     maintainers = with maintainers; teams.libretro.members ++ [ hrdinka ];
84   } // (args.meta or { });
85 } // extraArgs)