summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjc_gargma <jc_gargma@iserlohn-fortress.net>2019-09-26 09:16:23 -0700
committerjc_gargma <jc_gargma@iserlohn-fortress.net>2019-09-26 09:16:23 -0700
commit7984b5a23962eaa5e031acda01ab278ae81dbc9d (patch)
treeee9d911f2773731f8d351fa18a83119e93e2dac6
downloaddesmume-7984b5a23962eaa5e031acda01ab278ae81dbc9d.tar.xz
Intial commit
-rw-r--r--PKGBUILD59
-rw-r--r--gcc6_fixes.patch59
-rw-r--r--gcc7_fixes.patch18
3 files changed, 136 insertions, 0 deletions
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 0000000..430c84f
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,59 @@
+# Maintainer: jc_gargma <jc_gargma@iserlohn-fortress.net>
+# Maintainer (Arch): schuay <jakob.gruber@gmail.com>
+# Contributor (Arch): Jonathan Conder <jonno dot conder at gmail dot com>
+# Contributor (Arch): Brad Fanella <bradfanella@archlinux.us>
+# Contributor (Arch): Arkham <arkham at archlinux dot us>
+# Contributor (Arch): Nathan Jones <nathanj@insightbb.com>
+# Contributor (Arch): Javier "Phrodo_00" Aravena <phrodo.00 at gmail dot com>
+# Contributor (Arch): angvp <angvp at archlinux dot us>
+# Contributor (Arch): Allan <mcrae_allan at hotmail dot com>
+# Contributor (Arch): w0rm <w0rmtux at gmail dot com>
+# Contributor (Arch): vEX <vex at niechift dot com>
+# Contributor (Arch): Asher256 <achrafcherti at gmail dot com>
+
+# # I maintain this because:
+# Arch version lacks additional optimization and hardening flags
+
+pkgname=desmume
+pkgver=0.9.11
+pkgrel=6.2
+pkgdesc="Nintendo DS emulator"
+arch=('x86_64')
+url="https://desmume.org/"
+license=('GPL')
+depends=('desktop-file-utils' 'libpcap' 'soundtouch' 'alsa-lib' 'glu' 'sdl' 'gtk2' 'zziplib')
+makedepends=('intltool' 'mesa' 'clang')
+source=("https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz"
+ gcc6_fixes.patch
+ gcc7_fixes.patch)
+sha256sums=('3ab34ba6cc009566245025c1dd94bf449b6a1b416d24387cb42e183c78e38896'
+ 'dfb25d204253ca1dad2218e54760c81872c1df0b70c12067591a6578159b9aef'
+ 'b8f419f5286c1ee08f824250cabc7f4984a572f55db8182070b0bf3235134d1f')
+
+prepare() {
+ cd "$srcdir/$pkgname-$pkgver"
+
+ # Fix build
+ patch -Np1 -i ../gcc6_fixes.patch
+ patch -Np1 -i ../gcc7_fixes.patch
+
+
+ # See https://bugs.archlinux.org/task/35086 and
+ # https://sourceforge.net/tracker/?func=detail&aid=3612768&group_id=164579&atid=832291
+ sed -i 's/@GETTEXT_PACKAGE@/desmume/' po/Makefile.in.in
+}
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+ export CFLAGS="$CFLAGS -O3 -fstack-protector-all -flto=4 -fPIE"
+ export CXXFLAGS="$CXXFLAGS -O3 -fstack-protector-all -flto=4 -fPIE"
+ export LDFLAGS="$LDFLAGS,-pie"
+ ./configure --prefix=/usr --enable-wifi --enable-openal
+ make
+}
+
+package() {
+ cd "$srcdir/$pkgname-$pkgver"
+
+ make DESTDIR="$pkgdir/" install
+}
diff --git a/gcc6_fixes.patch b/gcc6_fixes.patch
new file mode 100644
index 0000000..6eb9576
--- /dev/null
+++ b/gcc6_fixes.patch
@@ -0,0 +1,59 @@
+From: zeromus
+Origin: upstream, https://sourceforge.net/p/desmume/code/5514, https://sourceforge.net/p/desmume/code/5517, https://sourceforge.net/p/desmume/code/5430
+Subject: fix GCC6 issues
+Bug: https://sourceforge.net/p/desmume/bugs/1570/
+Bug-Debian: http://bugs.debian.org/811691
+
+Index: desmume/src/MMU_timing.h
+===================================================================
+--- desmume/src/MMU_timing.h (revision 5513)
++++ desmume/src/MMU_timing.h (revision 5517)
+@@ -155,8 +155,8 @@
+ enum { ASSOCIATIVITY = 1 << ASSOCIATIVESHIFT };
+ enum { BLOCKSIZE = 1 << BLOCKSIZESHIFT };
+ enum { TAGSHIFT = SIZESHIFT - ASSOCIATIVESHIFT };
+- enum { TAGMASK = (u32)(~0 << TAGSHIFT) };
+- enum { BLOCKMASK = ((u32)~0 >> (32 - TAGSHIFT)) & (u32)(~0 << BLOCKSIZESHIFT) };
++ enum { TAGMASK = (u32)(~0U << TAGSHIFT) };
++ enum { BLOCKMASK = ((u32)~0U >> (32 - TAGSHIFT)) & (u32)(~0U << BLOCKSIZESHIFT) };
+ enum { WORDSIZE = sizeof(u32) };
+ enum { WORDSPERBLOCK = (1 << BLOCKSIZESHIFT) / WORDSIZE };
+ enum { DATAPERWORD = WORDSIZE * ASSOCIATIVITY };
+Index: desmume/src/ctrlssdl.cpp
+===================================================================
+--- desmume/src/ctrlssdl.cpp (revision 5513)
++++ desmume/src/ctrlssdl.cpp (revision 5517)
+@@ -200,7 +200,7 @@
+ break;
+ case SDL_JOYAXISMOTION:
+ /* Dead zone of 50% */
+- if( (abs(event.jaxis.value) >> 14) != 0 )
++ if( ((u32)abs(event.jaxis.value) >> 14) != 0 )
+ {
+ key = ((event.jaxis.which & 15) << 12) | JOY_AXIS << 8 | ((event.jaxis.axis & 127) << 1);
+ if (event.jaxis.value > 0) {
+@@ -370,7 +370,7 @@
+ Note: button constants have a 1bit offset. */
+ case SDL_JOYAXISMOTION:
+ key_code = ((event->jaxis.which & 15) << 12) | JOY_AXIS << 8 | ((event->jaxis.axis & 127) << 1);
+- if( (abs(event->jaxis.value) >> 14) != 0 )
++ if( ((u32)abs(event->jaxis.value) >> 14) != 0 )
+ {
+ if (event->jaxis.value > 0)
+ key_code |= 1;
+Index: desmume/src/wifi.cpp
+===================================================================
+--- desmume/src/wifi.cpp (revision 5429)
++++ desmume/src/wifi.cpp (revision 5430)
+@@ -320,9 +320,9 @@
+
+ #if (WIFI_LOGGING_LEVEL >= 1)
+ #if WIFI_LOG_USE_LOGC
+- #define WIFI_LOG(level, ...) if(level <= WIFI_LOGGING_LEVEL) LOGC(8, "WIFI: "__VA_ARGS__);
++ #define WIFI_LOG(level, ...) if(level <= WIFI_LOGGING_LEVEL) LOGC(8, "WIFI: " __VA_ARGS__);
+ #else
+- #define WIFI_LOG(level, ...) if(level <= WIFI_LOGGING_LEVEL) printf("WIFI: "__VA_ARGS__);
++ #define WIFI_LOG(level, ...) if(level <= WIFI_LOGGING_LEVEL) printf("WIFI: " __VA_ARGS__);
+ #endif
+ #else
+ #define WIFI_LOG(level, ...) {}
diff --git a/gcc7_fixes.patch b/gcc7_fixes.patch
new file mode 100644
index 0000000..a4934ff
--- /dev/null
+++ b/gcc7_fixes.patch
@@ -0,0 +1,18 @@
+From e1f7039f1b06add4fb75b2f8774000b8f05574af Mon Sep 17 00:00:00 2001
+From: rogerman <rogerman@users.sf.net>
+Date: Mon, 17 Aug 2015 21:15:04 +0000
+Subject: Fix bug with libfat string handling.
+
+diff --git a/src/utils/libfat/directory.cpp b/src/utils/libfat/directory.cpp
+index 765d7ae5..b6d7f01f 100644
+--- a/src/utils/libfat/directory.cpp
++++ b/src/utils/libfat/directory.cpp
+@@ -139,7 +139,7 @@ static size_t _FAT_directory_mbstoucs2 (ucs2_t* dst, const char* src, size_t len
+ int bytes;
+ size_t count = 0;
+
+- while (count < len-1 && src != '\0') {
++ while (count < len-1 && *src != '\0') {
+ bytes = mbrtowc (&tempChar, src, MB_CUR_MAX, &ps);
+ if (bytes > 0) {
+ *dst = (ucs2_t)tempChar;