aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/misc/emulators/higan/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/misc/emulators/higan/default.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/misc/emulators/higan/default.nix135
1 files changed, 135 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/misc/emulators/higan/default.nix b/infra/libkookie/nixpkgs/pkgs/misc/emulators/higan/default.nix
new file mode 100644
index 000000000000..e735bdb38eed
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/misc/emulators/higan/default.nix
@@ -0,0 +1,135 @@
+{ stdenv, fetchFromGitHub
+, pkgconfig
+, libX11, libXv
+, udev
+, libGLU, libGL, SDL2
+, libao, openal, libpulseaudio
+, alsaLib
+, gtk2, gtksourceview
+, runtimeShell
+# Darwin dependencies
+, libicns, Carbon, Cocoa, OpenGL, OpenAL}:
+
+let
+ inherit (stdenv.lib) optionals;
+in
+stdenv.mkDerivation rec {
+
+ pname = "higan";
+ version = "110";
+
+ src = fetchFromGitHub {
+ owner = "higan-emu";
+ repo = "higan";
+ rev = "v${version}";
+ sha256 = "11rvm53c3p2f6zk8xbyv2j51xp8zmqnch7zravhj3fk590qrjrr2";
+ };
+
+ patches = [ ./0001-change-flags.diff ];
+ postPatch = ''
+ sed '1i#include <cmath>' -i higan/fc/ppu/ppu.cpp
+
+ 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 = [ pkgconfig ]
+ ++ optionals stdenv.isDarwin [ libicns ];
+
+ buildInputs = [ SDL2 libao ]
+ ++ optionals stdenv.isLinux [ alsaLib udev libpulseaudio openal
+ gtk2 gtksourceview libX11 libXv
+ libGLU libGL ]
+ ++ optionals stdenv.isDarwin [ Carbon Cocoa OpenGL OpenAL ];
+
+ buildPhase = ''
+ make compiler=c++ -C higan openmp=true target=higan
+ make compiler=c++ -C genius openmp=true
+ make compiler=c++ -C icarus openmp=true
+ '';
+
+ 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"/
+ '' 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
+ '') + ''
+ 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/
+ '';
+
+ fixupPhase = let
+ dest = if stdenv.isDarwin
+ then "\\$HOME/Library/Application Support/higan"
+ else "\\$HOME/higan";
+ in ''
+ # 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
+ #!${runtimeShell}
+
+ cp --recursive --update $out/share/higan/System/ "${dest}"/
+
+ EOF
+
+ chmod +x $out/bin/higan-init.sh
+ '';
+
+ meta = with stdenv.lib; {
+ 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
+ '';
+ homepage = "https://byuu.org/higan/";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ AndersonTorres ];
+ platforms = platforms.unix;
+ };
+}
+# TODO: Qt and GTK3+ support