diff options
Diffstat (limited to 'pkgs/misc/emulators/higan/default.nix')
-rw-r--r-- | pkgs/misc/emulators/higan/default.nix | 213 |
1 files changed, 117 insertions, 96 deletions
diff --git a/pkgs/misc/emulators/higan/default.nix b/pkgs/misc/emulators/higan/default.nix index 8e10b7bb315..558cb53c3d5 100644 --- a/pkgs/misc/emulators/higan/default.nix +++ b/pkgs/misc/emulators/higan/default.nix @@ -1,135 +1,156 @@ -{ lib, stdenv, fetchFromGitHub -, pkg-config -, libX11, libXv -, udev -, libGLU, libGL, SDL2 -, libao, openal, libpulseaudio +{ lib +, stdenv +, fetchFromGitHub +, SDL2 , alsa-lib -, gtk2, gtksourceview +, gtk3 +, gtksourceview3 +, libGL +, libGLU +, libX11 +, libXv +, libao +, libpulseaudio +, openal +, pkg-config , runtimeShell +, udev # Darwin dependencies -, libicns, Carbon, Cocoa, OpenGL, OpenAL}: +, libicns +, Carbon +, Cocoa +, OpenAL +, OpenGL +}: -let - inherit (lib) optionals; -in stdenv.mkDerivation rec { - pname = "higan"; - version = "110"; + version = "115+unstable=2021-08-18"; src = fetchFromGitHub { owner = "higan-emu"; repo = "higan"; - rev = "v${version}"; - sha256 = "11rvm53c3p2f6zk8xbyv2j51xp8zmqnch7zravhj3fk590qrjrr2"; + rev = "9bf1b3314b2bcc73cbc11d344b369c31562aff10"; + hash = "sha256-HZItJ97x20OjFKv2OVbMja7g+c1ZXcgcaC/XDe3vMZM="; }; - patches = [ ./0001-change-flags.diff ]; - postPatch = '' - sed '1i#include <cmath>' -i higan/fc/ppu/ppu.cpp + nativeBuildInputs = [ + pkg-config + ] ++ lib.optionals stdenv.isDarwin [ + libicns + ]; + + buildInputs = [ + SDL2 + libao + ] ++ lib.optionals stdenv.isLinux [ + alsa-lib + gtk3 + gtksourceview3 + libGL + libGLU + libX11 + libXv + libpulseaudio + openal + udev + ] ++ lib.optionals stdenv.isDarwin [ + Carbon + Cocoa + OpenAL + OpenGL + ]; + + patches = [ + # Includes cmath header + ./001-include-cmath.patch + # Uses png2icns instead of sips + ./002-sips-to-png2icns.patch + ]; + + dontConfigure = true; + + enableParallelBuilding = true; - for file in icarus/GNUmakefile higan/target-higan/GNUmakefile; do - substituteInPlace "$file" \ - --replace 'sips -s format icns data/$(name).png --out out/$(name).app/Contents/Resources/$(name).icns' \ - 'png2icns out/$(name).app/Contents/Resources/$(name).icns data/$(name).png' - done - ''; - - nativeBuildInputs = [ pkg-config ] - ++ optionals stdenv.isDarwin [ libicns ]; + buildPhase = '' + runHook preBuild - buildInputs = [ SDL2 libao ] - ++ optionals stdenv.isLinux [ alsa-lib udev libpulseaudio openal - gtk2 gtksourceview libX11 libXv - libGLU libGL ] - ++ optionals stdenv.isDarwin [ Carbon Cocoa OpenGL OpenAL ]; + make -j $NIX_BUILD_CORES compiler=${stdenv.cc.targetPrefix}c++ \ + platform=linux openmp=true hiro=gtk3 build=accuracy local=false \ + cores="cv fc gb gba md ms msx ngp pce sfc sg ws" -C higan-ui + make -j $NIX_BUILD_CORES compiler=${stdenv.cc.targetPrefix}c++ \ + platform=linux openmp=true hiro=gtk3 -C icarus - buildPhase = '' - make compiler=c++ -C higan openmp=true target=higan - make compiler=c++ -C genius openmp=true - make compiler=c++ -C icarus openmp=true + runHook postBuild ''; - installPhase = (if stdenv.isDarwin then '' - mkdir "$out" - mv higan/out/higan.app "$out"/ - mv icarus/out/icarus.app "$out"/ - mv genius/out/genius.app "$out"/ + installPhase = '' + runHook preInstall + + '' + (if stdenv.isDarwin then '' + mkdir ${placeholder "out"} + mv higan/out/higan.app ${placeholder "out"}/ + mv icarus/out/icarus.app ${placeholder "out"}/ '' else '' - install -dm 755 "$out"/bin "$out"/share/applications "$out"/share/pixmaps - - install -m 755 higan/out/higan -t "$out"/bin/ - install -m 644 higan/target-higan/resource/higan.desktop \ - -t $out/share/applications/ - install -m 644 higan/target-higan/resource/higan.svg \ - $out/share/pixmaps/higan-icon.svg - install -m 644 higan/target-higan/resource/higan.png \ - $out/share/pixmaps/higan-icon.png - - install -m 755 icarus/out/icarus -t "$out"/bin/ - install -m 644 icarus/data/icarus.desktop -t $out/share/applications/ - install -m 644 icarus/data/icarus.svg $out/share/pixmaps/icarus-icon.svg - install -m 644 icarus/data/icarus.png $out/share/pixmaps/icarus-icon.png - - install -m 755 genius/out/genius -t "$out"/bin/ - install -m 644 genius/data/genius.desktop -t $out/share/applications/ - install -m 644 genius/data/genius.svg $out/share/pixmaps/genius-icon.svg - install -m 644 genius/data/genius.png $out/share/pixmaps/genius-icon.png + install -d ${placeholder "out"}/bin + install higan-ui/out/higan -t ${placeholder "out"}/bin/ + install icarus/out/icarus -t ${placeholder "out"}/bin/ + + install -d ${placeholder "out"}/share/applications + install higan-ui/resource/higan.desktop -t ${placeholder "out"}/share/applications/ + install icarus/resource/icarus.desktop -t ${placeholder "out"}/share/applications/ + + install -d ${placeholder "out"}/share/pixmaps + install higan/higan/resource/higan.svg ${placeholder "out"}/share/pixmaps/higan-icon.svg + install higan/higan/resource/logo.png ${placeholder "out"}/share/pixmaps/higan-icon.png + install icarus/resource/icarus.svg ${placeholder "out"}/share/pixmaps/icarus-icon.svg + install icarus/resource/icarus.png ${placeholder "out"}/share/pixmaps/icarus-icon.png '') + '' - mkdir -p "$out"/share/higan "$out"/share/icarus - cp --recursive --no-dereference --preserve='links' --no-preserve='ownership' \ - higan/System/ "$out"/share/higan/ - cp --recursive --no-dereference --preserve='links' --no-preserve='ownership' \ - icarus/Database icarus/Firmware $out/share/icarus/ - ''; + install -d ${placeholder "out"}/share/higan + cp -rd extras/ higan/System/ ${placeholder "out"}/share/higan/ - fixupPhase = let - dest = if stdenv.isDarwin - then "\\$HOME/Library/Application Support/higan" - else "\\$HOME/higan"; - in '' + install -d ${placeholder "out"}/share/icarus + cp -rd icarus/Database icarus/Firmware ${placeholder "out"}/share/icarus/ + '' + ( # A dirty workaround, suggested by @cpages: # we create a first-run script to populate # $HOME with all the stuff needed at runtime - - mkdir -p "$out"/bin - cat <<EOF > $out/bin/higan-init.sh + let + dest = if stdenv.isDarwin + then "\\$HOME/Library/Application Support/higan" + else "\\$HOME/higan"; + in '' + mkdir -p ${placeholder "out"}/bin + cat <<EOF > ${placeholder "out"}/bin/higan-init.sh #!${runtimeShell} - cp --recursive --update $out/share/higan/System/ "${dest}"/ + cp --recursive --update ${placeholder "out"}/share/higan/System/ "${dest}"/ EOF - chmod +x $out/bin/higan-init.sh + chmod +x ${placeholder "out"}/bin/higan-init.sh + '') + '' + + runHook postInstall ''; meta = with lib; { + homepage = "https://github.com/higan-emu/higan"; description = "An open-source, cycle-accurate multi-system emulator"; longDescription = '' - higan is a multi-system game console emulator. The purpose of higan is to - serve as hardware documentation in source code form: it is meant to be as - accurate and complete as possible, with code that is easy to read and - understand. - - It currently supports the following systems: - - Famicom + Famicom Disk System - - Super Famicom + Super Game Boy - - Game Boy + Game Boy Color - - Game Boy Advance + Game Boy Player - - SG-1000 + SC-3000 - - Master System + Game Gear - - Mega Drive + Mega CD - - PC Engine + SuperGrafx - - MSX + MSX2 - - ColecoVision - - Neo Geo Pocket + Neo Geo Pocket Color - - WonderSwan + WonderSwan Color + SwanCrystal + Pocket Challenge V2 + higan is a multi-system emulator, originally developed by Near, with an + uncompromising focus on accuracy and code readability. + + It currently emulates the following systems: Famicom, Famicom Disk System, + Super Famicom, Super Game Boy, Game Boy, Game Boy Color, Game Boy Advance, + Game Boy Player, SG-1000, SC-3000, Master System, Game Gear, Mega Drive, + Mega CD, PC Engine, SuperGrafx, MSX, MSX2, ColecoVision, Neo Geo Pocket, + Neo Geo Pocket Color, WonderSwan, WonderSwan Color, SwanCrystal, Pocket + Challenge V2. ''; - homepage = "https://byuu.org/higan/"; license = licenses.gpl3Plus; maintainers = with maintainers; [ AndersonTorres ]; platforms = platforms.unix; }; } -# TODO: Qt and GTK3+ support +# TODO: select between Qt, GTK2 and GTK3 |