biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / applications / emulators / retroarch / cores.nix
blob18c510b8465b25ed774bc655dad45de0b723ca7f
1 { lib
2 , stdenv
3 , gcc12Stdenv
4 , alsa-lib
5 , boost
6 , bzip2
7 , cmake
8 , curl
9 , fetchFromGitHub
10 , fetchpatch
11 , ffmpeg
12 , fluidsynth
13 , fmt
14 , freetype
15 , gettext
16 , harfbuzz
17 , hexdump
18 , hidapi
19 , icu
20 , libaio
21 , libevdev
22 , libGL
23 , libGLU
24 , libjpeg
25 , liblcf
26 , libpcap
27 , libpng
28 , libsndfile
29 , libvorbis
30 , libxml2
31 , libxmp
32 , libzip
33 , makeWrapper
34 , mpg123
35 , nasm
36 , openssl
37 , opusfile
38 , pcre
39 , pixman
40 , pkg-config
41 , portaudio
42 , python3
43 , retroarch
44 , sfml
45 , snappy
46 , speexdsp
47 , udev
48 , which
49 , xorg
50 , xxd
51 , xz
52 , zlib
55 let
56   hashesFile = lib.importJSON ./hashes.json;
58   getCore = repo: (lib.getAttr repo hashesFile);
60   getCoreSrc = repo:
61     let
62       inherit (getCore repo) src fetcher;
63       fetcherFn = {
64         inherit fetchFromGitHub;
65       }.${fetcher} or (throw "Unknown fetcher: ${fetcher}");
66     in
67     fetcherFn src;
69   getCoreVersion = repo: (getCore repo).version;
71   mkLibretroCore =
72     # Sometimes core name != repo name, so you may need to set them differently
73     # when necessary:
74     # - core: used by the resulting core library name, e.g.:
75     #   `${core}_libretro.so`. Needs to match their respectful core info file
76     #   (see https://github.com/libretro/libretro-core-info/)
77     # - repo: the repository name on GitHub
78     # See `update_cores.py` for instruction on how to add a new core.
79     { core
80     , repo ? core
81     , src ? (getCoreSrc repo)
82     , version ? (getCoreVersion repo)
83     , ...
84     }@args:
85     import ./mkLibretroCore.nix ({
86       inherit lib stdenv core repo src version makeWrapper retroarch zlib;
87     } // args);
90   inherit mkLibretroCore;
92   atari800 = mkLibretroCore {
93     core = "atari800";
94     makefile = "Makefile";
95     makeFlags = [ "GIT_VERSION=" ];
96     meta = {
97       description = "Port of Atari800 to libretro";
98       license = lib.licenses.gpl2Only;
99     };
100   };
102   beetle-gba = mkLibretroCore {
103     core = "mednafen-gba";
104     repo = "beetle-gba";
105     makefile = "Makefile";
106     meta = {
107       description = "Port of Mednafen's GameBoy Advance core to libretro";
108       license = lib.licenses.gpl2Only;
109     };
110   };
112   beetle-lynx = mkLibretroCore {
113     core = "mednafen-lynx";
114     repo = "beetle-lynx";
115     makefile = "Makefile";
116     meta = {
117       description = "Port of Mednafen's Lynx core to libretro";
118       license = lib.licenses.gpl2Only;
119     };
120   };
122   beetle-ngp = mkLibretroCore {
123     core = "mednafen-ngp";
124     repo = "beetle-ngp";
125     makefile = "Makefile";
126     meta = {
127       description = "Port of Mednafen's NeoGeo Pocket core to libretro";
128       license = lib.licenses.gpl2Only;
129     };
130   };
132   beetle-pce = mkLibretroCore {
133     core = "mednafen-pce";
134     repo = "beetle-pce";
135     makefile = "Makefile";
136     meta = {
137       description = "Port of Mednafen's PC Engine core to libretro";
138       license = lib.licenses.gpl2Only;
139     };
140   };
142   beetle-pce-fast = mkLibretroCore {
143     core = "mednafen-pce-fast";
144     repo = "beetle-pce-fast";
145     makefile = "Makefile";
146     meta = {
147       description = "Port of Mednafen's PC Engine fast core to libretro";
148       license = lib.licenses.gpl2Only;
149     };
150   };
152   beetle-pcfx = mkLibretroCore {
153     core = "mednafen-pcfx";
154     repo = "beetle-pcfx";
155     makefile = "Makefile";
156     meta = {
157       description = "Port of Mednafen's PCFX core to libretro";
158       license = lib.licenses.gpl2Only;
159     };
160   };
162   beetle-psx = mkLibretroCore {
163     core = "mednafen-psx";
164     repo = "beetle-psx";
165     makefile = "Makefile";
166     makeFlags = [ "HAVE_HW=0" "HAVE_LIGHTREC=1" ];
167     meta = {
168       description = "Port of Mednafen's PSX Engine core to libretro";
169       license = lib.licenses.gpl2Only;
170     };
171   };
173   beetle-psx-hw = mkLibretroCore {
174     core = "mednafen-psx-hw";
175     repo = "beetle-psx";
176     extraBuildInputs = [ libGL libGLU ];
177     makefile = "Makefile";
178     makeFlags = [ "HAVE_VULKAN=1" "HAVE_OPENGL=1" "HAVE_HW=1" "HAVE_LIGHTREC=1" ];
179     meta = {
180       description = "Port of Mednafen's PSX Engine (with HW accel) core to libretro";
181       license = lib.licenses.gpl2Only;
182     };
183   };
185   beetle-saturn = mkLibretroCore {
186     core = "mednafen-saturn";
187     repo = "beetle-saturn";
188     makefile = "Makefile";
189     meta = {
190       description = "Port of Mednafen's Saturn core to libretro";
191       license = lib.licenses.gpl2Only;
192       platforms = [ "aarch64-linux" "x86_64-linux" ];
193     };
194   };
196   beetle-supafaust = mkLibretroCore {
197     core = "mednafen-supafaust";
198     repo = "beetle-supafaust";
199     makefile = "Makefile";
200     meta = {
201       description = "Port of Mednafen's experimental snes_faust core to libretro";
202       license = lib.licenses.gpl2Plus;
203     };
204   };
206   beetle-supergrafx = mkLibretroCore {
207     core = "mednafen-supergrafx";
208     repo = "beetle-supergrafx";
209     makefile = "Makefile";
210     meta = {
211       description = "Port of Mednafen's SuperGrafx core to libretro";
212       license = lib.licenses.gpl2Only;
213     };
214   };
216   beetle-vb = mkLibretroCore {
217     core = "mednafen-vb";
218     repo = "beetle-vb";
219     makefile = "Makefile";
220     meta = {
221       description = "Port of Mednafen's VirtualBoy core to libretro";
222       license = lib.licenses.gpl2Only;
223     };
224   };
226   beetle-wswan = mkLibretroCore {
227     core = "mednafen-wswan";
228     repo = "beetle-wswan";
229     makefile = "Makefile";
230     meta = {
231       description = "Port of Mednafen's WonderSwan core to libretro";
232       license = lib.licenses.gpl2Only;
233     };
234   };
236   blastem = mkLibretroCore {
237     core = "blastem";
238     meta = {
239       description = "Port of BlastEm to libretro";
240       license = lib.licenses.gpl3Only;
241       platforms = lib.platforms.x86;
242     };
243   };
245   bluemsx = mkLibretroCore {
246     core = "bluemsx";
247     meta = {
248       description = "Port of BlueMSX to libretro";
249       license = lib.licenses.gpl2Only;
250     };
251   };
253   bsnes = mkLibretroCore {
254     core = "bsnes";
255     makefile = "Makefile";
256     meta = {
257       description = "Port of bsnes to libretro";
258       license = lib.licenses.gpl3Only;
259     };
260   };
262   bsnes-hd = mkLibretroCore {
263     core = "bsnes-hd-beta";
264     repo = "bsnes-hd";
265     makefile = "GNUmakefile";
266     makeFlags =
267       let
268         # linux = bsd
269         # https://github.com/DerKoun/bsnes-hd/blob/f0b6cf34e9780d53516977ed2de64137a8bcc3c5/bsnes/GNUmakefile#L37
270         platform = if stdenv.hostPlatform.isDarwin then "macos" else "linux";
271       in
272       [
273         "-C"
274         "bsnes"
275         "target=libretro"
276         "platform=${platform}"
277       ];
278     extraBuildInputs = [ xorg.libX11 xorg.libXext ];
279     postBuild = "cd bsnes/out";
280     meta = {
281       description = "Port of bsnes-hd to libretro";
282       license = lib.licenses.gpl3Only;
283     };
284   };
286   bsnes-mercury = mkLibretroCore {
287     core = "bsnes-mercury-accuracy";
288     repo = "bsnes-mercury";
289     makefile = "Makefile";
290     makeFlags = [ "PROFILE=accuracy" ];
291     meta = {
292       description = "Fork of bsnes with HLE DSP emulation restored (accuracy profile)";
293       license = lib.licenses.gpl3Only;
294     };
295   };
297   bsnes-mercury-balanced = mkLibretroCore {
298     core = "bsnes-mercury-balanced";
299     repo = "bsnes-mercury";
300     makefile = "Makefile";
301     makeFlags = [ "PROFILE=balanced" ];
302     meta = {
303       description = "Fork of bsnes with HLE DSP emulation restored (balanced profile)";
304       license = lib.licenses.gpl3Only;
305     };
306   };
308   bsnes-mercury-performance = mkLibretroCore {
309     core = "bsnes-mercury-performance";
310     repo = "bsnes-mercury";
311     makefile = "Makefile";
312     makeFlags = [ "PROFILE=performance" ];
313     meta = {
314       description = "Fork of bsnes with HLE DSP emulation restored (performance profile)";
315       license = lib.licenses.gpl3Only;
316     };
317   };
319   citra = mkLibretroCore rec {
320     core = "citra";
321     extraBuildInputs = [ libGLU libGL boost ffmpeg nasm ];
322     makefile = "Makefile";
323     makeFlags = [
324       "HAVE_FFMPEG_STATIC=0"
325       # https://github.com/libretro/citra/blob/1a66174355b5ed948de48ef13c0ed508b6d6169f/Makefile#L87-L90
326       "GIT_REV=${(getCoreSrc core).rev}"
327       "GIT_DESC=${lib.substring 0 8 (getCoreSrc core).rev}"
328       "GIT_BRANCH=master"
329       "BUILD_DATE=01/01/1970_00:00"
330     ];
331     # FIXME: build fail with GCC13:
332     # error: 'mic_device_name' has incomplete type
333     stdenv = gcc12Stdenv;
334     meta = {
335       description = "Port of Citra to libretro";
336       license = lib.licenses.gpl2Plus;
337     };
338   };
340   desmume = mkLibretroCore {
341     core = "desmume";
342     preBuild = "cd desmume/src/frontend/libretro";
343     extraBuildInputs = [ libpcap libGLU libGL xorg.libX11 ];
344     makeFlags = lib.optional stdenv.hostPlatform.isAarch32 "platform=armv-unix"
345       ++ lib.optional (!stdenv.hostPlatform.isx86) "DESMUME_JIT=0";
346     meta = {
347       description = "Port of DeSmuME to libretro";
348       license = lib.licenses.gpl2Plus;
349     };
350   };
352   desmume2015 = mkLibretroCore {
353     core = "desmume2015";
354     extraBuildInputs = [ libpcap libGLU libGL xorg.libX11 ];
355     makeFlags = lib.optional stdenv.hostPlatform.isAarch32 "platform=armv-unix"
356       ++ lib.optional (!stdenv.hostPlatform.isx86) "DESMUME_JIT=0";
357     preBuild = "cd desmume";
358     meta = {
359       description = "Port of DeSmuME ~2015 to libretro";
360       license = lib.licenses.gpl2Plus;
361     };
362   };
364   dolphin = mkLibretroCore {
365     core = "dolphin";
366     extraNativeBuildInputs = [ cmake curl pkg-config ];
367     extraBuildInputs = [
368       libGLU
369       libGL
370       pcre
371       sfml
372       gettext
373       hidapi
374       libevdev
375       udev
376     ] ++ (with xorg; [ libSM libX11 libXi libpthreadstubs libxcb xcbutil libXext libXrandr libXinerama libXxf86vm ]);
377     makefile = "Makefile";
378     cmakeFlags = [
379       "-DLIBRETRO=ON"
380       "-DLIBRETRO_STATIC=1"
381       "-DENABLE_QT=OFF"
382       "-DENABLE_LTO=OFF"
383       "-DUSE_UPNP=OFF"
384       "-DUSE_DISCORD_PRESENCE=OFF"
385     ];
386     dontUseCmakeBuildDir = true;
387     meta = {
388       description = "Port of Dolphin to libretro";
389       license = lib.licenses.gpl2Plus;
390     };
391   };
393   dosbox = mkLibretroCore {
394     core = "dosbox";
395     CXXFLAGS = "-std=gnu++11";
396     meta = {
397       description = "Port of DOSBox to libretro";
398       license = lib.licenses.gpl2Only;
399     };
400   };
402   dosbox-pure = mkLibretroCore {
403     core = "dosbox-pure";
404     CXXFLAGS = "-std=gnu++11";
405     hardeningDisable = [ "format" ];
406     makefile = "Makefile";
407     meta = {
408       description = "Port of DOSBox to libretro aiming for simplicity and ease of use";
409       license = lib.licenses.gpl2Only;
410     };
411   };
413   easyrpg = mkLibretroCore {
414     core = "easyrpg";
415     extraNativeBuildInputs = [ cmake pkg-config ];
416     extraBuildInputs = [ fmt freetype harfbuzz liblcf libpng libsndfile libvorbis libxmp mpg123 opusfile pcre pixman speexdsp ];
417     patches = [
418       # The following patch is shared with easyrpg-player.
419       # Update when new versions of liblcf and easyrpg-player are released.
420       # See pkgs/games/easyrpg-player/default.nix for details.
421       (fetchpatch {
422         name = "0001-Fix-building-with-fmtlib-10.patch";
423         url = "https://github.com/EasyRPG/Player/commit/ab6286f6d01bada649ea52d1f0881dde7db7e0cf.patch";
424         hash = "sha256-GdSdVFEG1OJCdf2ZIzTP+hSrz+ddhTMBvOPjvYQHy54=";
425       })
426     ];
427     cmakeFlags = [
428       "-DBUILD_SHARED_LIBS=ON"
429       "-DPLAYER_TARGET_PLATFORM=libretro"
430       "-DCMAKE_INSTALL_DATADIR=${placeholder "out"}/share"
431     ];
432     makefile = "Makefile";
433     meta = {
434       description = "EasyRPG Player libretro port";
435       license = lib.licenses.gpl3Only;
436     };
437   };
439   eightyone = mkLibretroCore {
440     core = "81";
441     repo = "eightyone";
442     meta = {
443       description = "Port of EightyOne to libretro";
444       license = lib.licenses.gpl3Only;
445     };
446   };
448   fbalpha2012 = mkLibretroCore {
449     core = "fbalpha2012";
450     makefile = "makefile.libretro";
451     preBuild = "cd svn-current/trunk";
452     meta = {
453       description = "Port of Final Burn Alpha ~2012 to libretro";
454       # Non-commercial clause
455       license = lib.licenses.unfreeRedistributable;
456     };
457   };
459   fbneo = mkLibretroCore {
460     core = "fbneo";
461     makefile = "Makefile";
462     preBuild = "cd src/burner/libretro";
463     meta = {
464       description = "Port of FBNeo to libretro";
465       # Non-commercial clause
466       license = lib.licenses.unfreeRedistributable;
467     };
468   };
470   fceumm = mkLibretroCore {
471     core = "fceumm";
472     meta = {
473       description = "FCEUmm libretro port";
474       license = lib.licenses.gpl2Only;
475     };
476   };
478   flycast = mkLibretroCore {
479     core = "flycast";
480     extraNativeBuildInputs = [ cmake ];
481     extraBuildInputs = [ libGL libGLU ];
482     cmakeFlags = [ "-DLIBRETRO=ON" ];
483     makefile = "Makefile";
484     meta = {
485       description = "Flycast libretro port";
486       license = lib.licenses.gpl2Only;
487       platforms = [ "aarch64-linux" "x86_64-linux" ];
488     };
489   };
491   fmsx = mkLibretroCore {
492     core = "fmsx";
493     makefile = "Makefile";
494     meta = {
495       description = "FMSX libretro port";
496       # Non-commercial clause
497       license = lib.licenses.unfreeRedistributable;
498     };
499   };
501   freeintv = mkLibretroCore {
502     core = "freeintv";
503     makefile = "Makefile";
504     meta = {
505       description = "FreeIntv libretro port";
506       license = lib.licenses.gpl3Only;
507     };
508   };
510   fuse = mkLibretroCore {
511     core = "fuse";
512     meta = {
513       description = "Port of the Fuse Unix Spectrum Emulator to libretro";
514       license = lib.licenses.gpl3Only;
515     };
516   };
518   gambatte = mkLibretroCore {
519     core = "gambatte";
520     meta = {
521       description = "Gambatte libretro port";
522       license = lib.licenses.gpl2Only;
523     };
524   };
526   genesis-plus-gx = mkLibretroCore {
527     core = "genesis-plus-gx";
528     meta = {
529       description = "Enhanced Genesis Plus libretro port";
530       # Non-commercial clause
531       license = lib.licenses.unfreeRedistributable;
532     };
533   };
535   gpsp = mkLibretroCore {
536     core = "gpsp";
537     makefile = "Makefile";
538     meta = {
539       description = "Port of gpSP to libretro";
540       license = lib.licenses.gpl2Only;
541     };
542   };
544   gw = mkLibretroCore {
545     core = "gw";
546     makefile = "Makefile";
547     meta = {
548       description = "Port of Game and Watch to libretro";
549       license = lib.licenses.zlib;
550     };
551   };
553   handy = mkLibretroCore {
554     core = "handy";
555     makefile = "Makefile";
556     meta = {
557       description = "Port of Handy to libretro";
558       license = lib.licenses.zlib;
559     };
560   };
562   hatari = mkLibretroCore {
563     core = "hatari";
564     extraNativeBuildInputs = [ which ];
565     dontConfigure = true;
566     # zlib is already included in mkLibretroCore as buildInputs
567     makeFlags = [ "EXTERNAL_ZLIB=1" ];
568     meta = {
569       description = "Port of Hatari to libretro";
570       license = lib.licenses.gpl2Only;
571     };
572   };
574   mame = mkLibretroCore {
575     core = "mame";
576     extraNativeBuildInputs = [ python3 ];
577     extraBuildInputs = [ alsa-lib libGLU libGL ];
578     # Setting this is breaking compilation of src/3rdparty/genie for some reason
579     makeFlags = [ "ARCH=" ];
580     meta = {
581       description = "Port of MAME to libretro";
582       license = with lib.licenses; [ bsd3 gpl2Plus ];
583     };
584   };
586   mame2000 = mkLibretroCore {
587     core = "mame2000";
588     makefile = "Makefile";
589     makeFlags = lib.optional (!stdenv.hostPlatform.isx86) "IS_X86=0";
590     meta = {
591       description = "Port of MAME ~2000 to libretro, compatible with MAME 0.37b5 sets";
592       # MAME license, non-commercial clause
593       license = lib.licenses.unfreeRedistributable;
594     };
595   };
597   mame2003 = mkLibretroCore {
598     core = "mame2003";
599     makefile = "Makefile";
600     meta = {
601       description = "Port of MAME ~2003 to libretro, compatible with MAME 0.78 sets";
602       # MAME license, non-commercial clause
603       license = lib.licenses.unfreeRedistributable;
604     };
605   };
607   mame2003-plus = mkLibretroCore {
608     core = "mame2003-plus";
609     makefile = "Makefile";
610     meta = {
611       description = "Port of MAME ~2003+ to libretro, compatible with MAME 0.78 sets";
612       # MAME license, non-commercial clause
613       license = lib.licenses.unfreeRedistributable;
614     };
615   };
617   mame2010 = mkLibretroCore {
618     core = "mame2010";
619     makefile = "Makefile";
620     makeFlags = lib.optionals stdenv.hostPlatform.isAarch64 [ "PTR64=1" "ARM_ENABLED=1" "X86_SH2DRC=0" "FORCE_DRC_C_BACKEND=1" ];
621     meta = {
622       description = "Port of MAME ~2010 to libretro, compatible with MAME 0.139 sets";
623       # MAME license, non-commercial clause
624       license = lib.licenses.unfreeRedistributable;
625     };
626   };
628   mame2015 = mkLibretroCore {
629     core = "mame2015";
630     patches = [ ./patches/mame2015-python311.patch ];
631     makeFlags = [ "PYTHON=python3" ];
632     extraNativeBuildInputs = [ python3 ];
633     extraBuildInputs = [ alsa-lib ];
634     makefile = "Makefile";
635     # Build failures when this is set to a bigger number
636     NIX_BUILD_CORES = 8;
637     meta = {
638       description = "Port of MAME ~2015 to libretro, compatible with MAME 0.160 sets";
639       # MAME license, non-commercial clause
640       license = lib.licenses.unfreeRedistributable;
641     };
642   };
644   mame2016 = mkLibretroCore {
645     core = "mame2016";
646     patches = [ ./patches/mame2016-python311.patch ];
647     extraNativeBuildInputs = [ python3 ];
648     extraBuildInputs = [ alsa-lib ];
649     makeFlags = [ "PYTHON_EXECUTABLE=python3" ];
650     # Build failures when this is set to a bigger number
651     NIX_BUILD_CORES = 8;
652     # Fix build errors in GCC13
653     NIX_CFLAGS_COMPILE = "-Wno-error -fpermissive";
654     meta = {
655       description = "Port of MAME ~2016 to libretro, compatible with MAME 0.174 sets";
656       license = with lib.licenses; [ bsd3 gpl2Plus ];
657     };
658   };
660   melonds = mkLibretroCore {
661     core = "melonds";
662     extraBuildInputs = [ libGL libGLU ];
663     makefile = "Makefile";
664     meta = {
665       description = "Port of MelonDS to libretro";
666       license = lib.licenses.gpl3Only;
667     };
668   };
670   mesen = mkLibretroCore {
671     core = "mesen";
672     makefile = "Makefile";
673     preBuild = "cd Libretro";
674     meta = {
675       description = "Port of Mesen to libretro";
676       license = lib.licenses.gpl3Only;
677     };
678   };
680   mesen-s = mkLibretroCore {
681     core = "mesen-s";
682     makefile = "Makefile";
683     preBuild = "cd Libretro";
684     normalizeCore = false;
685     meta = {
686       description = "Port of Mesen-S to libretro";
687       license = lib.licenses.gpl3Only;
688     };
689   };
691   meteor = mkLibretroCore {
692     core = "meteor";
693     makefile = "Makefile";
694     preBuild = "cd libretro";
695     meta = {
696       description = "Port of Meteor to libretro";
697       license = lib.licenses.gpl3Only;
698     };
699   };
701   mgba = mkLibretroCore {
702     core = "mgba";
703     meta = {
704       description = "Port of mGBA to libretro";
705       license = lib.licenses.mpl20;
706     };
707   };
709   mrboom = mkLibretroCore {
710     core = "mrboom";
711     makefile = "Makefile";
712     meta = {
713       description = "Port of Mr.Boom to libretro";
714       license = lib.licenses.mit;
715     };
716   };
718   mupen64plus = mkLibretroCore {
719     core = "mupen64plus-next";
720     repo = "mupen64plus";
721     extraBuildInputs = [ libGLU libGL libpng nasm xorg.libX11 ];
722     makefile = "Makefile";
723     makeFlags = [
724       "HAVE_PARALLEL_RDP=1"
725       "HAVE_PARALLEL_RSP=1"
726       "HAVE_THR_AL=1"
727       "LLE=1"
728       "WITH_DYNAREC=${stdenv.hostPlatform.parsed.cpu.name}"
729     ];
730     meta = {
731       description = "Libretro port of Mupen64 Plus, GL only";
732       license = lib.licenses.gpl3Only;
733     };
734   };
736   neocd = mkLibretroCore {
737     core = "neocd";
738     makefile = "Makefile";
739     meta = {
740       description = "NeoCD libretro port";
741       license = lib.licenses.lgpl3Only;
742     };
743   };
745   nestopia = mkLibretroCore {
746     core = "nestopia";
747     makefile = "Makefile";
748     preBuild = "cd libretro";
749     meta = {
750       description = "Nestopia libretro port";
751       license = lib.licenses.gpl2Only;
752     };
753   };
755   nxengine = mkLibretroCore {
756     core = "nxengine";
757     makefile = "Makefile";
758     meta = {
759       description = "NXEngine libretro port";
760       license = lib.licenses.gpl3Only;
761     };
762   };
764   np2kai = mkLibretroCore rec {
765     core = "np2kai";
766     makeFlags = [
767       # See https://github.com/AZO234/NP2kai/tags
768       "NP2KAI_VERSION=rev.22"
769       "NP2KAI_HASH=${(getCoreSrc core).rev}"
770     ];
771     preBuild = "cd sdl";
772     meta = {
773       description = "Neko Project II kai libretro port";
774       license = lib.licenses.mit;
775     };
776   };
778   o2em = mkLibretroCore {
779     core = "o2em";
780     makefile = "Makefile";
781     meta = {
782       description = "Port of O2EM to libretro";
783       license = lib.licenses.artistic1;
784     };
785   };
787   opera = mkLibretroCore {
788     core = "opera";
789     makefile = "Makefile";
790     makeFlags = [ "CC_PREFIX=${stdenv.cc.targetPrefix}" ];
791     meta = {
792       description = "Opera is a port of 4DO/libfreedo to libretro";
793       # Non-commercial clause
794       license = lib.licenses.unfreeRedistributable;
795     };
796   };
798   parallel-n64 = mkLibretroCore {
799     core = "parallel-n64";
800     extraBuildInputs = [ libGLU libGL libpng ];
801     makefile = "Makefile";
802     makeFlags = [
803       "HAVE_PARALLEL=1"
804       "HAVE_PARALLEL_RSP=1"
805       "ARCH=${stdenv.hostPlatform.parsed.cpu.name}"
806     ];
807     postPatch = lib.optionalString stdenv.hostPlatform.isAarch64 ''
808       sed -i -e '1 i\CPUFLAGS += -DARM_FIX -DNO_ASM -DARM_ASM -DDONT_WANT_ARM_OPTIMIZATIONS -DARM64' Makefile \
809       && sed -i -e 's,CPUFLAGS  :=,,g' Makefile
810     '';
811     meta = {
812       description = "Parallel Mupen64plus rewrite for libretro";
813       license = lib.licenses.gpl3Only;
814     };
815   };
817   pcsx2 = mkLibretroCore {
818     core = "pcsx2";
819     extraNativeBuildInputs = [
820       cmake
821       gettext
822       pkg-config
823     ];
824     extraBuildInputs = [
825       libaio
826       libGL
827       libGLU
828       libpcap
829       libpng
830       libxml2
831       xz
832       xxd
833     ];
834     makefile = "Makefile";
835     cmakeFlags = [ "-DLIBRETRO=ON" ];
836     # remove ccache
837     postPatch = ''
838       substituteInPlace CMakeLists.txt --replace "ccache" ""
839     '';
840     postBuild = "cd pcsx2";
841     # causes redefinition of _FORTIFY_SOURCE
842     hardeningDisable = [ "fortify3" ];
843     # FIXME: multiple build errors with GCC13.
844     # Unlikely to be fixed until we switch to libretro/pcsx2 that is a more
845     # up-to-date port (but still WIP).
846     stdenv = gcc12Stdenv;
847     meta = {
848       description = "Port of PCSX2 to libretro";
849       license = lib.licenses.gpl3Plus;
850       platforms = lib.platforms.x86;
851     };
852   };
854   pcsx-rearmed = mkLibretroCore {
855     core = "pcsx_rearmed";
856     dontConfigure = true;
857     meta = {
858       description = "Port of PCSX ReARMed with GNU lightning to libretro";
859       license = lib.licenses.gpl2Only;
860     };
861   };
863   picodrive = mkLibretroCore {
864     core = "picodrive";
865     dontConfigure = true;
866     meta = {
867       description = "Fast MegaDrive/MegaCD/32X emulator";
868       # Non-commercial clause
869       license = lib.licenses.unfreeRedistributable;
870     };
871   };
873   play = mkLibretroCore {
874     core = "play";
875     extraBuildInputs = [ boost bzip2 curl openssl icu libGL libGLU xorg.libX11 ];
876     extraNativeBuildInputs = [ cmake ];
877     makefile = "Makefile";
878     cmakeFlags = [ "-DBUILD_PLAY=OFF" "-DBUILD_LIBRETRO_CORE=ON" ];
879     postBuild = "cd Source/ui_libretro";
880     # FIXME: workaround the following GCC 13 error:
881     # error: 'printf' was not declared in this scop
882     CXXFLAGS = "-include cstdio";
883     meta = {
884       description = "Port of Play! to libretro";
885       license = lib.licenses.bsd2;
886     };
887   };
889   ppsspp = mkLibretroCore {
890     core = "ppsspp";
891     extraNativeBuildInputs = [ cmake pkg-config python3 ];
892     extraBuildInputs = [ libGLU libGL libzip snappy xorg.libX11 ];
893     makefile = "Makefile";
894     cmakeFlags = [
895       "-DLIBRETRO=ON"
896       # USE_SYSTEM_FFMPEG=ON causes several glitches during video playback
897       # See: https://github.com/NixOS/nixpkgs/issues/304616
898       "-DUSE_SYSTEM_FFMPEG=OFF"
899       "-DUSE_SYSTEM_SNAPPY=ON"
900       "-DUSE_SYSTEM_LIBZIP=ON"
901       "-DOpenGL_GL_PREFERENCE=GLVND"
902     ];
903     postBuild = "cd lib";
904     meta = {
905       description = "ppsspp libretro port";
906       license = lib.licenses.gpl2Plus;
907     };
908   };
910   prboom = mkLibretroCore {
911     core = "prboom";
912     makefile = "Makefile";
913     meta = {
914       description = "Prboom libretro port";
915       license = lib.licenses.gpl2Only;
916     };
917   };
919   prosystem = mkLibretroCore {
920     core = "prosystem";
921     makefile = "Makefile";
922     meta = {
923       description = "Port of ProSystem to libretro";
924       license = lib.licenses.gpl2Only;
925     };
926   };
928   puae = mkLibretroCore {
929     core = "puae";
930     makefile = "Makefile";
931     meta = {
932       description = "Amiga emulator based on WinUAE";
933       license = lib.licenses.gpl2Only;
934     };
935   };
937   quicknes = mkLibretroCore {
938     core = "quicknes";
939     makefile = "Makefile";
940     meta = {
941       description = "QuickNES libretro port";
942       license = lib.licenses.lgpl21Plus;
943     };
944   };
946   sameboy = mkLibretroCore {
947     core = "sameboy";
948     extraNativeBuildInputs = [ which hexdump ];
949     preBuild = "cd libretro";
950     makefile = "Makefile";
951     meta = {
952       description = "SameBoy libretro port";
953       license = lib.licenses.mit;
954     };
955   };
957   same_cdi = mkLibretroCore {
958     core = "same_cdi";
959     extraNativeBuildInputs = [ python3 ];
960     extraBuildInputs = [ alsa-lib libGLU libGL portaudio xorg.libX11 ];
961     # FIXME: build fail with GCC13:
962     # error: 'uint8_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
963     stdenv = gcc12Stdenv;
964     meta = {
965       description = "SAME_CDI is a libretro core to play CD-i games";
966       license = with lib.licenses; [ bsd3 gpl2Plus ];
967     };
968   };
970   scummvm = mkLibretroCore {
971     core = "scummvm";
972     extraBuildInputs = [ fluidsynth libjpeg libvorbis libGLU libGL ];
973     makefile = "Makefile";
974     preConfigure = "cd backends/platform/libretro/build";
975     meta = {
976       description = "Libretro port of ScummVM";
977       license = lib.licenses.gpl2Only;
978     };
979   };
981   smsplus-gx = mkLibretroCore {
982     core = "smsplus";
983     repo = "smsplus-gx";
984     meta = {
985       description = "SMS Plus GX libretro port";
986       license = lib.licenses.gpl2Plus;
987     };
988   };
990   snes9x = mkLibretroCore {
991     core = "snes9x";
992     makefile = "Makefile";
993     preBuild = "cd libretro";
994     meta = {
995       description = "Port of SNES9x git to libretro";
996       # Non-commercial clause
997       license = lib.licenses.unfreeRedistributable;
998     };
999   };
1001   snes9x2002 = mkLibretroCore {
1002     core = "snes9x2002";
1003     makefile = "Makefile";
1004     meta = {
1005       description = "Optimized port/rewrite of SNES9x 1.39 to Libretro";
1006       # Non-commercial clause
1007       license = lib.licenses.unfreeRedistributable;
1008     };
1009   };
1011   snes9x2005 = mkLibretroCore {
1012     core = "snes9x2005";
1013     makefile = "Makefile";
1014     meta = {
1015       description = "Optimized port/rewrite of SNES9x 1.43 to Libretro";
1016       # Non-commercial clause
1017       license = lib.licenses.unfreeRedistributable;
1018     };
1019   };
1021   snes9x2005-plus = mkLibretroCore {
1022     core = "snes9x2005-plus";
1023     repo = "snes9x2005";
1024     makefile = "Makefile";
1025     makeFlags = [ "USE_BLARGG_APU=1" ];
1026     meta = {
1027       description = "Optimized port/rewrite of SNES9x 1.43 to Libretro, with Blargg's APU";
1028       # Non-commercial clause
1029       license = lib.licenses.unfreeRedistributable;
1030     };
1031   };
1033   snes9x2010 = mkLibretroCore {
1034     core = "snes9x2010";
1035     meta = {
1036       description = "Optimized port/rewrite of SNES9x 1.52+ to Libretro";
1037       # Non-commercial clause
1038       license = lib.licenses.unfreeRedistributable;
1039     };
1040   };
1042   stella = mkLibretroCore {
1043     core = "stella";
1044     makefile = "Makefile";
1045     preBuild = "cd src/os/libretro";
1046     dontConfigure = true;
1047     meta = {
1048       description = "Port of Stella to libretro";
1049       license = lib.licenses.gpl2Only;
1050     };
1051   };
1053   stella2014 = mkLibretroCore {
1054     core = "stella2014";
1055     makefile = "Makefile";
1056     meta = {
1057       description = "Port of Stella ~2014 to libretro";
1058       license = lib.licenses.gpl2Only;
1059     };
1060   };
1062   swanstation = mkLibretroCore {
1063     core = "swanstation";
1064     extraNativeBuildInputs = [ cmake ];
1065     makefile = "Makefile";
1066     cmakeFlags = [
1067       "-DBUILD_LIBRETRO_CORE=ON"
1068     ];
1069     meta = {
1070       description = "Port of SwanStation (a fork of DuckStation) to libretro";
1071       license = lib.licenses.gpl3Only;
1072     };
1073   };
1075   tgbdual = mkLibretroCore {
1076     core = "tgbdual";
1077     makefile = "Makefile";
1078     meta = {
1079       description = "Port of TGBDual to libretro";
1080       license = lib.licenses.gpl2Only;
1081     };
1082   };
1084   thepowdertoy = mkLibretroCore {
1085     core = "thepowdertoy";
1086     extraNativeBuildInputs = [ cmake ];
1087     makefile = "Makefile";
1088     postBuild = "cd src";
1089     meta = {
1090       description = "Port of The Powder Toy to libretro";
1091       license = lib.licenses.gpl3Only;
1092     };
1093   };
1095   tic80 = mkLibretroCore {
1096     core = "tic80";
1097     extraNativeBuildInputs = [ cmake pkg-config ];
1098     makefile = "Makefile";
1099     cmakeFlags = [
1100       "-DBUILD_LIBRETRO=ON"
1101       "-DBUILD_DEMO_CARTS=OFF"
1102       "-DBUILD_PRO=OFF"
1103       "-DBUILD_PLAYER=OFF"
1104       "-DBUILD_SDL=OFF"
1105       "-DBUILD_SOKOL=OFF"
1106     ];
1107     preConfigure = "cd core";
1108     postBuild = "cd lib";
1109     meta = {
1110       description = "Port of TIC-80 to libretro";
1111       license = lib.licenses.mit;
1112     };
1113   };
1115   twenty-fortyeight = mkLibretroCore {
1116     core = "2048";
1117     meta = {
1118       description = "Port of 2048 puzzle game to the libretro API";
1119       license = lib.licenses.unlicense;
1120     };
1121   };
1123   vba-m = mkLibretroCore {
1124     core = "vbam";
1125     repo = "vba-m";
1126     makefile = "Makefile";
1127     preBuild = "cd src/libretro";
1128     meta = {
1129       description = "vanilla VBA-M libretro port";
1130       license = lib.licenses.gpl2Only;
1131     };
1132   };
1134   vba-next = mkLibretroCore {
1135     core = "vba-next";
1136     meta = {
1137       description = "VBA-M libretro port with modifications for speed";
1138       license = lib.licenses.gpl2Only;
1139     };
1140   };
1142   vecx = mkLibretroCore {
1143     core = "vecx";
1144     extraBuildInputs = [ libGL libGLU ];
1145     meta = {
1146       description = "Port of Vecx to libretro";
1147       license = lib.licenses.gpl3Only;
1148     };
1149   };
1151   virtualjaguar = mkLibretroCore {
1152     core = "virtualjaguar";
1153     makefile = "Makefile";
1154     meta = {
1155       description = "Port of VirtualJaguar to libretro";
1156       license = lib.licenses.gpl3Only;
1157     };
1158   };
1160   yabause = mkLibretroCore {
1161     core = "yabause";
1162     makefile = "Makefile";
1163     # Disable SSE for non-x86. DYNAREC doesn't build on aarch64.
1164     makeFlags = lib.optional (!stdenv.hostPlatform.isx86) "HAVE_SSE=0";
1165     preBuild = "cd yabause/src/libretro";
1166     meta = {
1167       description = "Port of Yabause to libretro";
1168       license = lib.licenses.gpl2Only;
1169     };
1170   };