Skip to content

Commit

Permalink
higan: 106 -> 110
Browse files Browse the repository at this point in the history
  • Loading branch information
AndersonTorres committed Apr 15, 2020
1 parent 7cfd736 commit 1877182
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 78 deletions.
49 changes: 24 additions & 25 deletions pkgs/misc/emulators/higan/0001-change-flags.diff
@@ -1,26 +1,25 @@
diff -Naur higan_v105-source.old/higan/GNUmakefile higan_v105-source.new/higan/GNUmakefile
--- higan_v105-source.old/higan/GNUmakefile 2017-10-07 01:34:22.000000000 -0300
+++ higan_v105-source.new/higan/GNUmakefile 2017-10-17 00:02:40.580957396 -0200
@@ -26,7 +26,7 @@
flags += -fopenmp
link += -fopenmp
ifeq ($(binary),application)
- flags += -march=native
+ flags +=
link += -Wl,-export-dynamic
link += -lX11 -lXext
else ifeq ($(binary),library)
diff -Naur higan_v105-source.old/nall/GNUmakefile higan_v105-source.new/nall/GNUmakefile
--- higan_v105-source.old/nall/GNUmakefile 2017-09-23 18:34:22.000000000 -0300
+++ higan_v105-source.new/nall/GNUmakefile 2017-10-17 00:03:33.568916550 -0200
@@ -40,8 +40,8 @@
objcflags := -x objective-c -std=c11
cppflags := -x c++ -std=c++14
objcppflags := -x objective-c++ -std=c++14
-flags :=
-link :=
+flags := $(CXXFLAGS)
+link := $(LDFLAGS)
diff -Naur higan-110-old/higan/GNUmakefile higan-110-new/higan/GNUmakefile
--- higan-110-old/higan/GNUmakefile 2020-04-15 11:06:00.279935557 -0300
+++ higan-110-new/higan/GNUmakefile 2020-04-15 11:08:32.982417291 -0300
@@ -11,7 +11,7 @@
include $(nall.path)/GNUmakefile

# compiler detection
ifeq ($(compiler),)
ifeq ($(platform),local)
- flags += -march=native
+ flags +=
endif

ifeq ($(platform),windows)
diff -Naur higan-110-old/nall/GNUmakefile higan-110-new/nall/GNUmakefile
--- higan-110-old/nall/GNUmakefile 2020-04-15 11:06:00.396935154 -0300
+++ higan-110-new/nall/GNUmakefile 2020-04-15 11:10:37.738011488 -0300
@@ -127,7 +127,8 @@

# linux settings
ifeq ($(platform),linux)
- options += -ldl
+ flags += $(CXXFLAGS)
+ options += $(LDFLAGS) -ldl
endif

# bsd settings
133 changes: 80 additions & 53 deletions pkgs/misc/emulators/higan/default.nix
@@ -1,108 +1,135 @@
{ stdenv, fetchurl
, p7zip, pkgconfig, libicns
{ stdenv, fetchFromGitHub
, pkgconfig
, libX11, libXv
, udev
, libGLU, libGL, SDL
, Carbon, Cocoa, OpenGL, OpenAL
, libGLU, libGL, SDL2
, libao, openal, libpulseaudio
, alsaLib
, gtk2, gtksourceview
, runtimeShell }:
, runtimeShell
# Darwin dependencies
, libicns, Carbon, Cocoa, OpenGL, OpenAL}:

with stdenv.lib;
let
inherit (stdenv.lib) optionals;
in
stdenv.mkDerivation rec {

pname = "higan";
version = "106";
sourceName = "higan_v${version}-source";
version = "110";

src = fetchurl {
urls = [ "https://download.byuu.org/${sourceName}.7z" ];
sha256 = "063dzp9wrdnbvagraxi31xg0154y2gf67rrd0mnc8h104cgzjr35";
curlOpts = "--user-agent 'Mozilla/5.0'"; # the good old user-agent trick...
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-tomoko/GNUmakefile; do
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 = [ p7zip pkgconfig ]
++ optional stdenv.isDarwin [ libicns ];
nativeBuildInputs = [ pkgconfig ]
++ optionals stdenv.isDarwin [ libicns ];

buildInputs =
[ SDL libao ]
++ optionals stdenv.isLinux [ openal libpulseaudio udev libX11 libXv libGLU libGL gtk2 gtksourceview ]
++ optionals stdenv.isDarwin [ Carbon Cocoa OpenGL OpenAL ]
;

unpackPhase = ''
7z x $src
sourceRoot=${sourceName}
'';
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 icarus
make compiler=c++ -C higan
make compiler=c++ -C higan openmp=true target=higan
make compiler=c++ -C genius openmp=true
make compiler=c++ -C icarus openmp=true
'';

# Now the cheats file will be distributed separately
installPhase = (if !stdenv.isDarwin then ''
mkdir -p "$out"/bin "$out"/share/applications "$out"/share/pixmaps
install -m 755 icarus/out/icarus "$out"/bin/
install -m 755 higan/out/higan "$out"/bin/
install -m 644 higan/data/higan.desktop "$out"/share/applications/
install -m 644 higan/data/higan.png "$out"/share/pixmaps/higan-icon.png
install -m 644 higan/resource/logo/higan.png "$out"/share/pixmaps/higan-logo.png
'' else ''
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
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' \
higan/systems/* "$out"/share/higan/
icarus/Database icarus/Firmware $out/share/icarus/
'';

fixupPhase = let
dest = if !stdenv.isDarwin then "\\$HOME/.local/share/higan" else "\\$HOME/Library/Application Support/higan";
dest = if stdenv.isDarwin
then "\\$HOME/Library/Application Support/higan"
else "\\$HOME/higan";

This comment has been minimized.

Copy link
@kinnala

kinnala Jan 29, 2021

Contributor

This path is wrong, should be $HOME/.local/share/higan.

This comment has been minimized.

Copy link
@AndersonTorres

AndersonTorres Jan 29, 2021

Author Member

Are you sure? It is a strange path...

This comment has been minimized.

Copy link
@kinnala

kinnala Jan 29, 2021

Contributor

I'm unable to make it work otherwise. I'm still testing it, but by doing cp ~/higan ~/.local/share seems to fix my issues. By what I've been able to gather, ~/.local/share/higan should contain the blueprints of the different emulators and then higan executable copies those blueprints to ~/higan when a new system is created in the GUI.

This comment has been minimized.

Copy link
@kinnala

kinnala Jan 29, 2021

Contributor

I'm gathering some evidence to support this. First, higan release v110 Makefile seems to copy stuff to $(prefix)/share/$(name):
https://github.com/higan-emu/higan/blob/483c5781fc7e853d6ae9f179303cca16af09134f/higan/target-higan/GNUmakefile#L53

Second, $(name) is defined above in the same Makefile as name := higan:
https://github.com/higan-emu/higan/blob/483c5781fc7e853d6ae9f179303cca16af09134f/higan/target-higan/GNUmakefile#L1

I think $(prefix) is defined here as $(HOME)/.local:
https://github.com/higan-emu/higan/blob/483c5781fc7e853d6ae9f179303cca16af09134f/nall/GNUmakefile#L241

This file is included by the Makefile in /higan/ folder:
https://github.com/higan-emu/higan/blob/483c5781fc7e853d6ae9f179303cca16af09134f/higan/GNUmakefile#L11

This comment has been minimized.

Copy link
@kinnala

kinnala Jan 29, 2021

Contributor

What made you change it from ~/.local/share/higan to ~/higan?

This comment has been minimized.

This comment has been minimized.

Copy link
@AndersonTorres

AndersonTorres Jan 29, 2021

Author Member

I don't remember perfectly. Maybe it was because the previous versions used that directory and I never changed it.

Higan is pretty strange to install indeed.

in ''
# A dirty workaround, suggested by @cpages:
# we create a first-run script to populate
# the local $HOME with all the auxiliary
# stuff needed by higan at runtime
# $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/*.sys "${dest}"/
cp --recursive --update $out/share/higan/System/ "${dest}"/
EOF
chmod +x $out/bin/higan-init.sh
'';

meta = {
description = "An open-source, cycle-accurate Nintendo multi-system emulator";
meta = with stdenv.lib; {
description = "An open-source, cycle-accurate multi-system emulator";
longDescription = ''
higan (formerly bsnes) is a multi-system game console emulator.
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:
- Nintendo's Famicom, Super Famicom (with subsystems:
Super Game Boy, BS-X Satellaview, Sufami Turbo);
Game Boy, Game Boy Color, Game Boy Advance;
- Sega's Master System, Game Gear, Mega Drive;
- NEC's PC Engine, SuperGrafx;
- Bandai's WonderSwan, WonderSwan Color.
- 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/emulation/higan/";
homepage = "https://byuu.org/higan/";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ AndersonTorres ];
platforms = with platforms; unix;
platforms = platforms.unix;
};
}
# TODO: Qt and GTK3+ support

0 comments on commit 1877182

Please sign in to comment.