diff --git a/srcpkgs/higan/patches/higan-paths.patch b/srcpkgs/higan/patches/higan-paths.patch new file mode 100644 index 00000000000..85b019cd209 --- /dev/null +++ b/srcpkgs/higan/patches/higan-paths.patch @@ -0,0 +1,42 @@ +From c0495ce121ab0c3eeffdf08614e18bd4f0c455f2 Mon Sep 17 00:00:00 2001 +From: Maxime Gauduin +Date: Wed, 18 Mar 2020 12:19:31 +0100 +Subject: [PATCH] use more sensible paths + +--- + higan/target-higan/higan.cpp | 5 ++--- + icarus/icarus.cpp | 3 +-- + 2 files changed, 3 insertions(+), 5 deletions(-) + +diff --git higan/target-higan/higan.cpp higan/target-higan/higan.cpp +index 1ce9b991..7d1ae122 100644 +--- higan/target-higan/higan.cpp ++++ higan/target-higan/higan.cpp +@@ -43,11 +43,10 @@ auto nall::main(Arguments arguments) -> void { + Path::data = document["data"].text(); + } + if(!directory::exists(Path::templates)) { +- Path::templates = {Path::userData(), "higan/"}; +- directory::create(Path::templates); ++ Path::templates = {Path::sharedData(), "higan/Templates/"}; + } + if(!directory::exists(Path::data)) { +- Path::data = {Path::user(), "higan/"}; ++ Path::data = {Path::userData(), "higan/Systems/"}; + directory::create(Path::data); + } + file::write({Path::settings, "paths.bml"}, string{ +diff --git a/icarus/icarus.cpp b/icarus/icarus.cpp +index 95435f38..a46744e5 100644 +--- icarus/icarus.cpp ++++ icarus/icarus.cpp +@@ -8,8 +8,7 @@ auto locate(string name) -> string { + string location = {Path::program(), name}; + if(inode::exists(location)) return location; + +- directory::create({Path::userData(), "icarus/"}); +- return {Path::userData(), "icarus/", name}; ++ return {Path::sharedData(), "icarus/", name}; + } + + auto operator+=(string& lhs, const string& rhs) -> string& { diff --git a/srcpkgs/higan/patches/makefile-fixes.patch b/srcpkgs/higan/patches/makefile-fixes.patch index 5784899c92d..d79da4fcebe 100644 --- a/srcpkgs/higan/patches/makefile-fixes.patch +++ b/srcpkgs/higan/patches/makefile-fixes.patch @@ -1,24 +1,11 @@ -Description: Makefile fixes - * Remove -march=native build flag. - - This will cause gcc to use all instruction subsets - available on the build machine, meaning that the program - will not work on computers where they are not available. - - Also the flag is not supported on many architectures - (armhf, s390, s390x, powerpc, ia64, ...). - * Linking with dl is also required on kfreebsd. -Author: Tobias Hansen - - ---- higan/GNUmakefile -+++ higan/GNUmakefile -@@ -26,9 +26,8 @@ - flags += -fopenmp - link += -fopenmp - ifeq ($(binary),application) -- flags += -march=native - link += -Wl,-export-dynamic -- link += -lX11 -lXext -+ link += -lX11 -lXext -ldl - else ifeq ($(binary),library) - flags += -fPIC - link += -shared +--- higan/GNUmakefile 2019-12-21 21:44:28.000000000 +0100 ++++ - 2019-12-27 20:24:30.207313870 +0100 +@@ -18,7 +18,7 @@ + else ifeq ($(platform),macos) + else ifneq ($(filter $(platform),linux bsd),) + options += -Wl,-export-dynamic +- options += -lX11 -lXext ++ options += -lX11 -lXext -ldl + else + $(error "unsupported platform") + endif diff --git a/srcpkgs/higan/patches/ppc64-libco-elfv2.patch b/srcpkgs/higan/patches/ppc64-libco-elfv2.patch deleted file mode 100644 index 087193a12c7..00000000000 --- a/srcpkgs/higan/patches/ppc64-libco-elfv2.patch +++ /dev/null @@ -1,323 +0,0 @@ -From ddf550c1438d60b893a4fc1da333e021ac0e3658 Mon Sep 17 00:00:00 2001 -From: Shawn Anastasio -Date: Tue, 23 Jul 2019 15:59:03 -0500 -Subject: [PATCH] Implement ppc64 ELFv2 support in libco - -The existing ppc implementation in libco only supports -the ELFv1 ABI on PowerPC 64 and therefore can't be used on -Little Endian systems and Big Endian systems running ELFv2 -distros. - -This commit introduces a new implementation of the libco -API for ppc64 elfv2. It has been tested with bsnes and higan. -The original ppc implementation is maintained for non-ELFv2 -targets. ---- - libco/libco.c | 4 +- - libco/ppc64v2.c | 284 ++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 287 insertions(+), 1 deletion(-) - create mode 100644 libco/ppc64v2.c - -diff --git a/libco/libco.c b/libco/libco.c -index de11fbe9..f5ee5d0a 100755 ---- libco/libco.c -+++ libco/libco.c -@@ -9,6 +9,8 @@ - #include "amd64.c" - #elif defined(__arm__) - #include "arm.c" -+ #elif defined(__powerpc64__) && defined(_CALL_ELF) && (_CALL_ELF == 2) -+ #include "ppc64v2.c" - #elif defined(_ARCH_PPC) - #include "ppc.c" - #elif defined(_WIN32) -diff --git a/libco/ppc64v2.c b/libco/ppc64v2.c -new file mode 100644 -index 00000000..8f733de2 ---- /dev/null -+++ libco/ppc64v2.c -@@ -0,0 +1,284 @@ -+/** -+ * libco implementation for ppc64 elfv2. -+ * -+ * Written by Shawn Anastasio. -+ * Licensed under the ISC license. -+ */ -+ -+#define LIBCO_C -+#include "libco.h" -+#include "settings.h" -+ -+#include -+#include -+#include -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+struct ppc64_context { -+ // GPRs -+ uint64_t gprs[32]; -+ uint64_t lr; -+ uint64_t ccr; -+ -+ // FPRs -+ uint64_t fprs[32]; -+ -+#ifdef __ALTIVEC__ -+ // Altivec (VMX) -+ uint64_t vmx[24 /* 12 non-volatile * 2 */]; -+ uint32_t vrsave; -+#endif -+}; -+ -+static thread_local struct ppc64_context *context_running = 0; -+ -+#define MAX(x, y) ((x) > (y) ? (x) : (y)) -+#define ALIGN(ptr, x) ( (void *)( (uintptr_t)(ptr) & ~((x)-1) ) ) -+ -+#define MIN_STACK 0x10000lu -+#define MIN_STACK_FRAME 0x20lu -+#define STACK_ALIGN 0x10lu -+ -+void swap_context(struct ppc64_context *read, struct ppc64_context *write); -+__asm__( -+ ".text\n" -+ ".align 4\n" -+ ".type swap_context @function\n" -+ "swap_context:\n" -+ ".cfi_startproc\n" -+ -+ // Dump non-volatile and special GPRs -+ "std 1, 8(4)\n" -+ "std 2, 16(4)\n" -+ "std 12, 96(4)\n" -+ "std 13, 104(4)\n" -+ "std 14, 112(4)\n" -+ "std 15, 120(4)\n" -+ "std 16, 128(4)\n" -+ "std 17, 136(4)\n" -+ "std 18, 144(4)\n" -+ "std 19, 152(4)\n" -+ "std 20, 160(4)\n" -+ "std 21, 168(4)\n" -+ "std 22, 176(4)\n" -+ "std 23, 184(4)\n" -+ "std 24, 192(4)\n" -+ "std 25, 200(4)\n" -+ "std 26, 208(4)\n" -+ "std 27, 216(4)\n" -+ "std 28, 224(4)\n" -+ "std 29, 232(4)\n" -+ "std 30, 240(4)\n" -+ "std 31, 248(4)\n" -+ -+ // LR -+ "mflr 5\n" -+ "std 5, 256(4)\n" -+ -+ // CCR -+ "mfcr 5\n" -+ "std 5, 264(4)\n" -+ -+ // Dump non-volatile FPRs -+ "stfd 14, 384(4)\n" -+ "stfd 15, 392(4)\n" -+ "stfd 16, 400(4)\n" -+ "stfd 17, 408(4)\n" -+ "stfd 18, 416(4)\n" -+ "stfd 19, 424(4)\n" -+ "stfd 20, 432(4)\n" -+ "stfd 21, 440(4)\n" -+ "stfd 22, 448(4)\n" -+ "stfd 23, 456(4)\n" -+ "stfd 24, 464(4)\n" -+ "stfd 25, 472(4)\n" -+ "stfd 26, 480(4)\n" -+ "stfd 27, 488(4)\n" -+ "stfd 28, 496(4)\n" -+ "stfd 29, 504(4)\n" -+ "stfd 30, 512(4)\n" -+ "stfd 31, 520(4)\n" -+ -+#ifdef __ALTIVEC__ -+ // Dump non-volatile VMX registers -+ "li 5, 528\n" -+ "stvxl 20, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 21, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 22, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 23, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 24, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 25, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 26, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 27, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 28, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 29, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 30, 4, 5\n" -+ "addi 5, 5, 16\n" -+ "stvxl 31, 4, 5\n" -+ "addi 5, 5, 16\n" -+ -+ // VRSAVE -+ "mfvrsave 5\n" -+ "stw 5, 736(4)\n" -+#endif -+ -+ // Restore GPRs -+ "ld 1, 8(3)\n" -+ "ld 2, 16(3)\n" -+ "ld 12, 96(3)\n" -+ "ld 13, 104(3)\n" -+ "ld 14, 112(3)\n" -+ "ld 15, 120(3)\n" -+ "ld 16, 128(3)\n" -+ "ld 17, 136(3)\n" -+ "ld 18, 144(3)\n" -+ "ld 19, 152(3)\n" -+ "ld 20, 160(3)\n" -+ "ld 21, 168(3)\n" -+ "ld 22, 176(3)\n" -+ "ld 23, 184(3)\n" -+ "ld 24, 192(3)\n" -+ "ld 25, 200(3)\n" -+ "ld 26, 208(3)\n" -+ "ld 27, 216(3)\n" -+ "ld 28, 224(3)\n" -+ "ld 29, 232(3)\n" -+ "ld 30, 240(3)\n" -+ "ld 31, 248(3)\n" -+ -+ // Restore LR -+ "ld 5, 256(3)\n" -+ "mtlr 5\n" -+ -+ // Restore CCR -+ "ld 5, 264(3)\n" -+ "mtcr 5\n" -+ -+ // Restore FPRs -+ "lfd 14, 384(3)\n" -+ "lfd 15, 392(3)\n" -+ "lfd 16, 400(3)\n" -+ "lfd 17, 408(3)\n" -+ "lfd 18, 416(3)\n" -+ "lfd 19, 424(3)\n" -+ "lfd 20, 432(3)\n" -+ "lfd 21, 440(3)\n" -+ "lfd 22, 448(3)\n" -+ "lfd 23, 456(3)\n" -+ "lfd 24, 464(3)\n" -+ "lfd 25, 472(3)\n" -+ "lfd 26, 480(3)\n" -+ "lfd 27, 488(3)\n" -+ "lfd 28, 496(3)\n" -+ "lfd 29, 504(3)\n" -+ "lfd 30, 512(3)\n" -+ "lfd 31, 520(3)\n" -+ -+#ifdef __ALTIVEC__ -+ // Restore VMX -+ "li 5, 528\n" -+ "lvxl 20, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 21, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 22, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 23, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 24, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 25, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 26, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 27, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 28, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 29, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 30, 3, 5\n" -+ "addi 5, 5, 16\n" -+ "lvxl 31, 3, 5\n" -+ "addi 5, 5, 16\n" -+ -+ // VRSAVE -+ "lwz 5, 720(3)\n" -+ "mtvrsave 5\n" -+#endif -+ -+ // Context restored, branch to LR -+ "blr\n" -+ -+ ".cfi_endproc\n" -+ ".size swap_context, .-swap_context\n" -+); -+ -+cothread_t co_active() { -+ if (!context_running) -+ context_running = (struct ppc64_context *) -+ malloc(MIN_STACK + sizeof(struct ppc64_context)); -+ return (cothread_t)context_running; -+} -+ -+cothread_t co_derive(void *memory, unsigned int size, void (*coentry)(void)) { -+ uint8_t *sp; -+ struct ppc64_context *context = (struct ppc64_context *)memory; -+ -+ // Save current context into new context to initialize it -+ swap_context(context, context); -+ -+ // Align stack -+ sp = (uint8_t *)memory + size - STACK_ALIGN; -+ sp = (uint8_t *)ALIGN(sp, STACK_ALIGN); -+ -+ // Write 0 for initial backchain -+ *(uint64_t *)sp = 0; -+ -+ // Create new frame with backchain -+ sp -= MIN_STACK_FRAME; -+ *(uint64_t *)sp = (uint64_t)(sp + MIN_STACK_FRAME); -+ -+ // Update context with new stack (r1) and entrypoint (LR, r12) -+ context->lr = (uint64_t)coentry; -+ context->gprs[12] = (uint64_t)coentry; -+ context->gprs[1] = (uint64_t)sp; -+ -+ return (cothread_t)memory; -+} -+ -+cothread_t co_create(unsigned int size, void (*coentry)(void)) { -+ size_t total = MAX(size, MIN_STACK) + sizeof(struct ppc64_context); -+ void *memory = malloc(total); -+ if (!memory) -+ return (cothread_t)0; -+ -+ return co_derive(memory, total, coentry); -+} -+ -+void co_delete(cothread_t t) { -+ free(t); -+} -+ -+void co_switch(cothread_t t) { -+ struct ppc64_context *old = context_running; -+ context_running = (struct ppc64_context *)t; -+ swap_context((struct ppc64_context *)t, old); -+} -+ -+#ifdef __cplusplus -+} -+#endif diff --git a/srcpkgs/higan/patches/use_sharedpath.patch b/srcpkgs/higan/patches/use_sharedpath.patch deleted file mode 100644 index 599fe3d5ff8..00000000000 --- a/srcpkgs/higan/patches/use_sharedpath.patch +++ /dev/null @@ -1,16 +0,0 @@ -Description: Use sharedpath() when locating files - To find files that are in /usr/share/higan. -Author: Tobias Hansen - ---- higan/target-tomoko/tomoko.cpp -+++ higan/target-tomoko/tomoko.cpp -@@ -11,6 +11,9 @@ - location = {Path::config(), "higan/", name}; - if(inode::exists(location)) return location; - -+ location = {Path::shared(), "higan/", name}; -+ if(inode::exists(location)) return location; -+ - directory::create({Path::local(), "higan/"}); - return {Path::local(), "higan/", name}; - } diff --git a/srcpkgs/higan/template b/srcpkgs/higan/template index 0835499f205..c2461afa11b 100644 --- a/srcpkgs/higan/template +++ b/srcpkgs/higan/template @@ -1,65 +1,34 @@ # Template file for 'higan' pkgname=higan -version=106 +version=110 revision=1 wrksrc="higan_v${version}-source" build_wrksrc=higan build_style=gnu-makefile -make_build_args='compiler=${CXX}' -make_install_args="prefix=${DESTDIR}/usr" -hostmakedepends="p7zip pkg-config SDL-devel" +make_build_args='compiler=${CXX} platform=linux' +make_install_args='compiler=${CXX} platform=linux prefix=${DESTDIR}/usr' +hostmakedepends="unzip pkg-config" makedepends="gtk+-devel gtksourceview2-devel libgomp-devel - $(vopt_if sdl SDL-devel) - $(vopt_if opengl MesaLib-devel) $(vopt_if xv libXv-devel) - $(vopt_if ao libao-devel) $(vopt_if alsa alsa-lib-devel) - $(vopt_if openal libopenal-devel) $(vopt_if pulseaudio pulseaudio-devel)" + SDL2-devel MesaLib-devel libXv-devel libao-devel + alsa-lib-devel libopenal-devel pulseaudio-devel" short_desc="Multi-system emulator (SNES/Game Boy/Mega Drive/PC Engine/WonderSwan)" maintainer="John " -license="GPL-3" +license="GPL-3.0-or-later, ISC" homepage="https://byuu.org/emulation/higan/" -distfiles="https://download.byuu.org/higan_v${version}-source.7z" -checksum=f769f2faf2bf091eefa083a8d1849933bf0c9b98ef49813e50c50b35c49379e6 +distfiles="https://byuu.org/download/higan/higan_v${version}-source.zip" +checksum=1b70d85454aaae557fd5ba5aaed9add8cb8c939f2b7a07a6d3734f971bb07ab7 -build_options="icarus pulseaudio alsa oss openal ao sdl xv opengl udev" -build_options_default="icarus pulseaudio alsa oss openal ao sdl xv opengl udev" -desc_option_ao="Enable support for cross-platform audio" -desc_option_icarus="Enable the icarus binary" -desc_option_openal="Enable support for 3D audio" -desc_option_oss="Enable support for OSS" -desc_option_udev="Enable support for udev" -desc_option_xv="Enable support for Xv" - -disable_module() { - echo Disabling: "$1" - sed -i \ - -e "s|$1\b||" \ - "${wrksrc}"/higan/target-tomoko/GNUmakefile -} - -do_configure() { - $(vopt_if pulseaudio '' 'disable_module audio.pulseaudio') - $(vopt_if pulseaudio '' 'disable_module audio.pulseaudiosimple') - $(vopt_if alsa '' 'disable_module audio.alsa') - $(vopt_if oss '' 'disable_module audio.oss') - $(vopt_if openal '' 'disable_module audio.openal') - $(vopt_if ao '' 'disable_module audio.ao') - - $(vopt_if sdl '' 'disable_module video.sdl') - $(vopt_if xv '' 'disable_module video.xvideo') - $(vopt_if opengl '' 'disable_module video.glx') - - $(vopt_if sdl '' 'disable_module input.sdl') - $(vopt_if udev '' 'disable_module input.udev') -} +build_options="icarus" +build_options_default="icarus" if [ "$build_option_icarus" ];then post_build() { cd $wrksrc/icarus - make ${makejobs} ${make_build_args} + make ${makejobs} compiler=${CXX} platform=linux } post_install() { cd $wrksrc/icarus - make STRIP=true ${make_install_args} install + make STRIP=true compiler=${CXX} platform=linux prefix=${DESTDIR}/usr install } fi diff --git a/srcpkgs/higan/update b/srcpkgs/higan/update deleted file mode 100644 index 54fd342d420..00000000000 --- a/srcpkgs/higan/update +++ /dev/null @@ -1,3 +0,0 @@ -site=https://gitlab.com/higan/higan/tags -pattern='href="/\Qhigan/higan\E/tags/[^\d\.]*\K[\d\.]*' -ignore=107