2021-11-19 01:19:53 +00:00
|
|
|
{ lib
|
|
|
|
, stdenv
|
2022-10-01 11:24:46 +00:00
|
|
|
, nixosTests
|
2021-11-19 01:19:53 +00:00
|
|
|
, enableNvidiaCgToolkit ? false
|
2022-01-21 21:26:24 +00:00
|
|
|
, withGamemode ? stdenv.isLinux
|
2021-11-19 01:19:53 +00:00
|
|
|
, withVulkan ? stdenv.isLinux
|
2022-10-18 16:54:52 +00:00
|
|
|
, withWayland ? stdenv.isLinux
|
2021-11-19 01:19:53 +00:00
|
|
|
, alsa-lib
|
|
|
|
, AppKit
|
2022-08-06 11:04:55 +00:00
|
|
|
, dbus
|
2021-11-19 01:19:53 +00:00
|
|
|
, fetchFromGitHub
|
2022-02-05 21:28:01 +00:00
|
|
|
, ffmpeg_4
|
2022-10-28 11:45:00 +00:00
|
|
|
, flac
|
2021-11-19 01:19:53 +00:00
|
|
|
, Foundation
|
|
|
|
, freetype
|
2022-01-21 21:26:24 +00:00
|
|
|
, gamemode
|
2021-11-19 01:19:53 +00:00
|
|
|
, libdrm
|
|
|
|
, libGL
|
|
|
|
, libGLU
|
|
|
|
, libobjc
|
|
|
|
, libpulseaudio
|
|
|
|
, libv4l
|
|
|
|
, libX11
|
|
|
|
, libXdmcp
|
|
|
|
, libXext
|
2020-03-11 02:54:31 +00:00
|
|
|
, libxkbcommon
|
2021-11-19 01:19:53 +00:00
|
|
|
, libxml2
|
|
|
|
, libXxf86vm
|
|
|
|
, makeWrapper
|
2022-10-28 11:45:00 +00:00
|
|
|
, mbedtls
|
2021-11-19 01:19:53 +00:00
|
|
|
, mesa
|
|
|
|
, nvidia_cg_toolkit
|
|
|
|
, pkg-config
|
|
|
|
, python3
|
|
|
|
, SDL2
|
|
|
|
, udev
|
|
|
|
, vulkan-loader
|
|
|
|
, wayland
|
2022-10-28 11:45:00 +00:00
|
|
|
, zlib
|
2016-05-27 00:24:26 +00:00
|
|
|
}:
|
|
|
|
|
2021-11-19 01:19:53 +00:00
|
|
|
let
|
2022-10-18 16:54:52 +00:00
|
|
|
version = "1.12.0";
|
2022-01-21 21:26:24 +00:00
|
|
|
libretroCoreInfo = fetchFromGitHub {
|
2021-11-19 01:19:53 +00:00
|
|
|
owner = "libretro";
|
2021-11-22 03:27:10 +00:00
|
|
|
repo = "libretro-core-info";
|
2022-10-28 11:41:07 +00:00
|
|
|
hash = "sha256-ByATDM0V40UJxigqVLyTWkHY5tiCC2dvZebksl8GsUI=";
|
|
|
|
rev = "v${version}";
|
2021-11-19 01:19:53 +00:00
|
|
|
};
|
2022-10-18 16:54:52 +00:00
|
|
|
runtimeLibs =
|
|
|
|
lib.optional withVulkan vulkan-loader ++
|
|
|
|
lib.optional withGamemode (lib.getLib gamemode);
|
2021-11-19 01:19:53 +00:00
|
|
|
in
|
2020-03-22 03:36:54 +00:00
|
|
|
stdenv.mkDerivation rec {
|
2019-08-15 12:41:18 +00:00
|
|
|
pname = "retroarch-bare";
|
2021-12-06 13:49:07 +00:00
|
|
|
inherit version;
|
2013-06-26 11:25:09 +00:00
|
|
|
|
2016-05-27 00:24:26 +00:00
|
|
|
src = fetchFromGitHub {
|
|
|
|
owner = "libretro";
|
|
|
|
repo = "RetroArch";
|
2022-10-28 11:41:07 +00:00
|
|
|
hash = "sha256-doLWNA8aTAllxx3zABtvZaegBQEPIi8276zbytPSdBU=";
|
2016-05-27 00:24:26 +00:00
|
|
|
rev = "v${version}";
|
2013-06-26 11:25:09 +00:00
|
|
|
};
|
|
|
|
|
2021-11-19 01:19:53 +00:00
|
|
|
patches = [
|
2022-10-18 16:54:52 +00:00
|
|
|
./use-fixed-paths.patch
|
2021-11-19 01:19:53 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
postPatch = ''
|
2021-11-20 19:08:36 +00:00
|
|
|
substituteInPlace "frontend/drivers/platform_unix.c" \
|
2022-10-18 16:54:52 +00:00
|
|
|
--subst-var-by libretro_directory "$out/lib" \
|
|
|
|
--subst-var-by libretro_info_path "$out/share/libretro/info" \
|
|
|
|
--subst-var-by out "$out"
|
2021-11-20 19:08:36 +00:00
|
|
|
substituteInPlace "frontend/drivers/platform_darwin.m" \
|
2022-10-18 16:54:52 +00:00
|
|
|
--subst-var-by libretro_directory "$out/lib" \
|
|
|
|
--subst-var-by libretro_info_path "$out/share/libretro/info"
|
2021-11-19 01:19:53 +00:00
|
|
|
'';
|
|
|
|
|
2021-11-20 13:41:46 +00:00
|
|
|
nativeBuildInputs = [ pkg-config ] ++
|
2022-10-18 16:54:52 +00:00
|
|
|
lib.optional withWayland wayland ++
|
2022-01-21 21:26:24 +00:00
|
|
|
lib.optional (runtimeLibs != [ ]) makeWrapper;
|
2013-06-26 11:25:09 +00:00
|
|
|
|
2022-10-18 16:54:52 +00:00
|
|
|
buildInputs = [
|
|
|
|
ffmpeg_4
|
2022-10-28 11:45:00 +00:00
|
|
|
flac
|
2022-10-18 16:54:52 +00:00
|
|
|
freetype
|
|
|
|
libGL
|
|
|
|
libGLU
|
|
|
|
libxml2
|
2022-10-28 11:45:00 +00:00
|
|
|
mbedtls
|
2022-10-18 16:54:52 +00:00
|
|
|
python3
|
|
|
|
SDL2
|
2022-10-28 11:45:00 +00:00
|
|
|
zlib
|
2022-10-18 16:54:52 +00:00
|
|
|
] ++
|
|
|
|
lib.optional enableNvidiaCgToolkit nvidia_cg_toolkit ++
|
|
|
|
lib.optional withVulkan vulkan-loader ++
|
|
|
|
lib.optional withWayland wayland ++
|
|
|
|
lib.optionals stdenv.isDarwin [ libobjc AppKit Foundation ] ++
|
|
|
|
lib.optionals stdenv.isLinux [
|
|
|
|
alsa-lib
|
|
|
|
dbus
|
|
|
|
libX11
|
|
|
|
libXdmcp
|
|
|
|
libXext
|
|
|
|
libXxf86vm
|
|
|
|
libdrm
|
|
|
|
libpulseaudio
|
|
|
|
libv4l
|
|
|
|
libxkbcommon
|
|
|
|
mesa
|
|
|
|
udev
|
|
|
|
];
|
2020-03-11 02:54:31 +00:00
|
|
|
|
2018-03-03 02:09:35 +00:00
|
|
|
enableParallelBuilding = true;
|
2016-03-13 23:56:12 +00:00
|
|
|
|
2022-10-18 16:54:52 +00:00
|
|
|
configureFlags = [
|
|
|
|
"--disable-update_cores"
|
2022-10-28 11:45:00 +00:00
|
|
|
"--disable-builtinmbedtls"
|
|
|
|
"--disable-builtinzlib"
|
|
|
|
"--disable-builtinflac"
|
2022-10-18 16:54:52 +00:00
|
|
|
] ++
|
|
|
|
lib.optionals stdenv.isLinux [
|
|
|
|
"--enable-dbus"
|
|
|
|
"--enable-egl"
|
|
|
|
"--enable-kms"
|
|
|
|
];
|
2019-11-12 09:31:53 +00:00
|
|
|
|
2022-01-21 21:26:24 +00:00
|
|
|
postInstall = ''
|
2021-11-19 01:19:53 +00:00
|
|
|
# TODO: ideally each core should have its own core information
|
2022-10-18 16:54:52 +00:00
|
|
|
mkdir -p $out/share/libretro/info
|
2022-01-21 21:26:24 +00:00
|
|
|
cp -r ${libretroCoreInfo}/* $out/share/libretro/info
|
2022-10-18 16:54:52 +00:00
|
|
|
'' +
|
|
|
|
lib.optionalString (runtimeLibs != [ ]) ''
|
2022-01-21 21:26:24 +00:00
|
|
|
wrapProgram $out/bin/retroarch \
|
|
|
|
--prefix LD_LIBRARY_PATH ':' ${lib.makeLibraryPath runtimeLibs}
|
2022-10-18 16:54:52 +00:00
|
|
|
'' +
|
|
|
|
lib.optionalString stdenv.isDarwin ''
|
2022-03-05 01:00:30 +00:00
|
|
|
# https://github.com/libretro/RetroArch/blob/master/retroarch-apple-packaging.sh
|
|
|
|
app=$out/Applications/RetroArch.app
|
|
|
|
mkdir -p $app/Contents/MacOS
|
|
|
|
cp -r pkg/apple/OSX/* $app/Contents
|
|
|
|
cp $out/bin/retroarch $app/Contents/MacOS
|
|
|
|
# FIXME: using Info_Metal.plist results in input not working
|
|
|
|
# mv $app/Contents/Info_Metal.plist $app/Contents/Info.plist
|
|
|
|
|
|
|
|
substituteInPlace $app/Contents/Info.plist \
|
|
|
|
--replace '${"\${EXECUTABLE_NAME}"}' 'RetroArch' \
|
|
|
|
--replace '$(PRODUCT_BUNDLE_IDENTIFIER)' 'com.libretro.RetroArch' \
|
|
|
|
--replace '${"\${PRODUCT_NAME}"}' 'RetroArch' \
|
|
|
|
--replace '${"\${MACOSX_DEPLOYMENT_TARGET}"}' '10.13'
|
|
|
|
|
|
|
|
cp media/retroarch.icns $app/Contents/Resources/
|
2016-03-13 23:56:12 +00:00
|
|
|
'';
|
|
|
|
|
2018-03-03 02:09:35 +00:00
|
|
|
preFixup = "rm $out/bin/retroarch-cg2glsl";
|
Replaced retroarchBare with retroarchBareMaster, also added a few new libretro cores
retroarchBare was too old for any practical use at this point, so it was removed in favor
of fetching releases from git. RetroArch often recommends checkout out the latest git master
if you are on a desktop platform, so we are conforming with their recommendation. I plan on
bumping the git of retroarch and each core every month, and I plan on adding more libretro
cores in the future.
The libretro cores that were added are nestopia, quicknes, snes9x, and vba-m
planned next are : bsnes-accuracy, bsnes-balanced, bsnes-performance, a few libretro mame ports
Closes #4448
2014-10-10 03:11:54 +00:00
|
|
|
|
2022-03-05 01:00:30 +00:00
|
|
|
# Workaround for the following error affecting newer versions of Clang:
|
|
|
|
# ./config.def.h:xxx:x: error: 'TARGET_OS_TV' is not defined, evaluates to 0 [-Werror,-Wundef-prefix=TARGET_OS_]
|
2022-10-09 13:44:40 +00:00
|
|
|
NIX_CFLAGS_COMPILE = lib.optionals stdenv.cc.isClang [ "-Wno-undef-prefix" ];
|
2022-03-05 01:00:30 +00:00
|
|
|
|
2022-10-01 11:24:46 +00:00
|
|
|
passthru.tests = nixosTests.retroarch;
|
|
|
|
|
2022-01-21 21:26:24 +00:00
|
|
|
meta = with lib; {
|
2020-04-01 01:11:51 +00:00
|
|
|
homepage = "https://libretro.com";
|
Replaced retroarchBare with retroarchBareMaster, also added a few new libretro cores
retroarchBare was too old for any practical use at this point, so it was removed in favor
of fetching releases from git. RetroArch often recommends checkout out the latest git master
if you are on a desktop platform, so we are conforming with their recommendation. I plan on
bumping the git of retroarch and each core every month, and I plan on adding more libretro
cores in the future.
The libretro cores that were added are nestopia, quicknes, snes9x, and vba-m
planned next are : bsnes-accuracy, bsnes-balanced, bsnes-performance, a few libretro mame ports
Closes #4448
2014-10-10 03:11:54 +00:00
|
|
|
description = "Multi-platform emulator frontend for libretro cores";
|
2021-11-17 15:09:43 +00:00
|
|
|
license = licenses.gpl3Plus;
|
2021-11-28 17:50:21 +00:00
|
|
|
platforms = platforms.unix;
|
2022-01-22 14:01:48 +00:00
|
|
|
changelog = "https://github.com/libretro/RetroArch/blob/v${version}/CHANGES.md";
|
2022-10-01 13:27:20 +00:00
|
|
|
maintainers = with maintainers; teams.libretro.members ++ [ matthewbauer kolbycrouch ];
|
2022-10-28 12:12:12 +00:00
|
|
|
mainProgram = "retroarch";
|
2022-10-09 13:44:40 +00:00
|
|
|
# FIXME: error while building in macOS:
|
|
|
|
# "Undefined symbols for architecture <arch>"
|
|
|
|
broken = stdenv.isDarwin;
|
2013-06-26 11:25:09 +00:00
|
|
|
};
|
|
|
|
}
|