From 72825d3b39fae10cc83ae6f1fa8be0dd303b7d177a33ca1cda1219091771ecca Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Tue, 15 May 2018 00:04:42 +0000 Subject: [PATCH 1/3] Accepting request 606425 from home:elvigia:branches:games - SDL2-endian.patch: bring up patch from SDL1, use optimized byteswap routines from the C library. - build with --disable-3dnow, do not pass -m3dnow to the compiler modern cpus do not support this instructions at all. OBS-URL: https://build.opensuse.org/request/show/606425 OBS-URL: https://build.opensuse.org/package/show/games/SDL2?expand=0&rev=80 --- SDL2-endian.patch | 191 ++++++++++++++++++++++++++++++++++++++++++++++ SDL2.changes | 8 ++ SDL2.spec | 5 +- 3 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 SDL2-endian.patch diff --git a/SDL2-endian.patch b/SDL2-endian.patch new file mode 100644 index 0000000..2004405 --- /dev/null +++ b/SDL2-endian.patch @@ -0,0 +1,191 @@ +Index: SDL2-2.0.8/include/SDL_endian.h +=================================================================== +--- SDL2-2.0.8.orig/include/SDL_endian.h ++++ SDL2-2.0.8/include/SDL_endian.h +@@ -34,29 +34,17 @@ + * \name The two types of endianness + */ + /* @{ */ +-#define SDL_LIL_ENDIAN 1234 +-#define SDL_BIG_ENDIAN 4321 ++#define SDL_LIL_ENDIAN __ORDER_LITTLE_ENDIAN__ ++#define SDL_BIG_ENDIAN __ORDER_BIG_ENDIAN__ + /* @} */ + + #ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ +-#ifdef __linux__ +-#include +-#define SDL_BYTEORDER __BYTE_ORDER +-#else /* __linux__ */ +-#if defined(__hppa__) || \ +- defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ +- (defined(__MIPS__) && defined(__MISPEB__)) || \ +- defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ +- defined(__sparc__) +-#define SDL_BYTEORDER SDL_BIG_ENDIAN +-#else +-#define SDL_BYTEORDER SDL_LIL_ENDIAN +-#endif +-#endif /* __linux__ */ ++#define SDL_BYTEORDER __BYTE_ORDER__ + #endif /* !SDL_BYTEORDER */ + + + #include "begin_code.h" ++#include + /* Set up for C function definitions, even when using C++ */ + #ifdef __cplusplus + extern "C" { +@@ -65,149 +53,23 @@ extern "C" { + /** + * \file SDL_endian.h + */ +-#if defined(__GNUC__) && defined(__i386__) && \ +- !(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */) + SDL_FORCE_INLINE Uint16 + SDL_Swap16(Uint16 x) + { +- __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); +- return x; ++ return bswap_16(x); + } +-#elif defined(__GNUC__) && defined(__x86_64__) +-SDL_FORCE_INLINE Uint16 +-SDL_Swap16(Uint16 x) +-{ +- __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); +- return x; +-} +-#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +-SDL_FORCE_INLINE Uint16 +-SDL_Swap16(Uint16 x) +-{ +- int result; + +- __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); +- return (Uint16)result; +-} +-#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +-SDL_FORCE_INLINE Uint16 +-SDL_Swap16(Uint16 x) +-{ +- __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); +- return x; +-} +-#elif defined(__WATCOMC__) && defined(__386__) +-extern _inline Uint16 SDL_Swap16(Uint16); +-#pragma aux SDL_Swap16 = \ +- "xchg al, ah" \ +- parm [ax] \ +- modify [ax]; +-#else +-SDL_FORCE_INLINE Uint16 +-SDL_Swap16(Uint16 x) +-{ +- return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); +-} +-#endif +- +-#if defined(__GNUC__) && defined(__i386__) + SDL_FORCE_INLINE Uint32 + SDL_Swap32(Uint32 x) + { +- __asm__("bswap %0": "=r"(x):"0"(x)); +- return x; ++ return bswap_32(x); + } +-#elif defined(__GNUC__) && defined(__x86_64__) +-SDL_FORCE_INLINE Uint32 +-SDL_Swap32(Uint32 x) +-{ +- __asm__("bswapl %0": "=r"(x):"0"(x)); +- return x; +-} +-#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +-SDL_FORCE_INLINE Uint32 +-SDL_Swap32(Uint32 x) +-{ +- Uint32 result; +- +- __asm__("rlwimi %0,%2,24,16,23": "=&r"(result):"0"(x >> 24), "r"(x)); +- __asm__("rlwimi %0,%2,8,8,15": "=&r"(result):"0"(result), "r"(x)); +- __asm__("rlwimi %0,%2,24,0,7": "=&r"(result):"0"(result), "r"(x)); +- return result; +-} +-#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +-SDL_FORCE_INLINE Uint32 +-SDL_Swap32(Uint32 x) +-{ +- __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); +- return x; +-} +-#elif defined(__WATCOMC__) && defined(__386__) +-extern _inline Uint32 SDL_Swap32(Uint32); +-#ifndef __SW_3 /* 486+ */ +-#pragma aux SDL_Swap32 = \ +- "bswap eax" \ +- parm [eax] \ +- modify [eax]; +-#else /* 386-only */ +-#pragma aux SDL_Swap32 = \ +- "xchg al, ah" \ +- "ror eax, 16" \ +- "xchg al, ah" \ +- parm [eax] \ +- modify [eax]; +-#endif +-#else +-SDL_FORCE_INLINE Uint32 +-SDL_Swap32(Uint32 x) +-{ +- return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | +- ((x >> 8) & 0x0000FF00) | (x >> 24))); +-} +-#endif + +-#if defined(__GNUC__) && defined(__i386__) +-SDL_FORCE_INLINE Uint64 +-SDL_Swap64(Uint64 x) +-{ +- union +- { +- struct +- { +- Uint32 a, b; +- } s; +- Uint64 u; +- } v; +- v.u = x; +- __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1": "=r"(v.s.a), "=r"(v.s.b):"0"(v.s.a), +- "1"(v.s. +- b)); +- return v.u; +-} +-#elif defined(__GNUC__) && defined(__x86_64__) +-SDL_FORCE_INLINE Uint64 +-SDL_Swap64(Uint64 x) +-{ +- __asm__("bswapq %0": "=r"(x):"0"(x)); +- return x; +-} +-#else + SDL_FORCE_INLINE Uint64 + SDL_Swap64(Uint64 x) + { +- Uint32 hi, lo; +- +- /* Separate into high and low 32-bit values and swap them */ +- lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); +- x >>= 32; +- hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); +- x = SDL_Swap32(lo); +- x <<= 32; +- x |= SDL_Swap32(hi); +- return (x); ++ return bswap_64(x); + } +-#endif +- + + SDL_FORCE_INLINE float + SDL_SwapFloat(float x) diff --git a/SDL2.changes b/SDL2.changes index 65da073..4e856d4 100644 --- a/SDL2.changes +++ b/SDL2.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Fri May 11 11:08:39 UTC 2018 - crrodriguez@opensuse.org + +- SDL2-endian.patch: bring up patch from SDL1, use optimized + byteswap routines from the C library. +- build with --disable-3dnow, do not pass -m3dnow to the compiler + modern cpus do not support this instructions at all. + ------------------------------------------------------------------- Sat Mar 17 10:14:15 UTC 2018 - ytz1995@hotmail.com diff --git a/SDL2.spec b/SDL2.spec index 5573769..7575ab8 100644 --- a/SDL2.spec +++ b/SDL2.spec @@ -31,6 +31,7 @@ Source2: http://libsdl.org/release/%name-%version.tar.gz.sig Source3: %name.keyring Source4: baselibs.conf Patch1: sdl2-symvers.patch +Patch2: SDL2-endian.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: cmake BuildRequires: dos2unix @@ -110,6 +111,7 @@ library. %prep %setup -q %patch -P 1 -p1 +%patch -P 2 -p1 dos2unix WhatsNew.txt dos2unix TODO.txt dos2unix BUGS.txt @@ -129,7 +131,8 @@ dos2unix COPYING.txt --enable-sse2=no \ %endif --enable-sse3=no \ - --disable-rpath + --disable-rpath \ + --disable-3dnow make %{?_smp_mflags} V=1 %install From 33d88b2036448c8e5edfa6d68e086696b2a0b72725810b611807088b2c1b4bc6 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Tue, 15 May 2018 00:05:19 +0000 Subject: [PATCH 2/3] quilt is sometimes confused OBS-URL: https://build.opensuse.org/package/show/games/SDL2?expand=0&rev=81 --- SDL2.spec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SDL2.spec b/SDL2.spec index 7575ab8..a29a0bc 100644 --- a/SDL2.spec +++ b/SDL2.spec @@ -110,8 +110,7 @@ library. %prep %setup -q -%patch -P 1 -p1 -%patch -P 2 -p1 +%patch -P 1 -P 2 -p1 dos2unix WhatsNew.txt dos2unix TODO.txt dos2unix BUGS.txt From 9d09a52361af58b6b299d60319a044a8398321af3fc8e5997652bceaa91f92b2 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Wed, 27 Jun 2018 23:07:22 +0000 Subject: [PATCH 3/3] Accepting request 618834 from home:robert_munteanu:branches:games Add 7babfecee045.patch, fixes launching Firewatch OBS-URL: https://build.opensuse.org/request/show/618834 OBS-URL: https://build.opensuse.org/package/show/games/SDL2?expand=0&rev=82 --- 7babfecee045.patch | 84 ++++++++++++++++++++++++++++++++++++++++++++++ SDL2.changes | 5 +++ SDL2.spec | 3 +- 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 7babfecee045.patch diff --git a/7babfecee045.patch b/7babfecee045.patch new file mode 100644 index 0000000..8228894 --- /dev/null +++ b/7babfecee045.patch @@ -0,0 +1,84 @@ + +# HG changeset patch +# User Ryan C. Gordon +# Date 1526575846 14400 +# Node ID 7babfecee045fac18d95e5936fede534ca54ed24 +# Parent 9e46f3dd75fd2e85e0e3ebb8a77329bc74a16e70 +dynapi: don't let system loader resolve the initializer to the wrong version. + +Fixes problems launching Firewatch on Linux (which statically links SDL but +also dynamically loads a system-wide copy from a plugin shared library) with +a newer SDL build. + +diff -r 9e46f3dd75fd -r 7babfecee045 src/dynapi/SDL_dynapi.c +--- a/src/dynapi/SDL_dynapi.c Fri May 11 09:37:00 2018 +0300 ++++ b/src/dynapi/SDL_dynapi.c Thu May 17 12:50:46 2018 -0400 +@@ -167,15 +167,10 @@ + #error Write me. + #endif + +- +- +-/* Here's the exported entry point that fills in the jump table. */ +-/* Use specific types when an "int" might suffice to keep this sane. */ +-typedef Sint32 (SDLCALL *SDL_DYNAPI_ENTRYFN)(Uint32 apiver, void *table, Uint32 tablesize); +-extern DECLSPEC Sint32 SDLCALL SDL_DYNAPI_entry(Uint32, void *, Uint32); +- +-Sint32 +-SDL_DYNAPI_entry(Uint32 apiver, void *table, Uint32 tablesize) ++/* we make this a static function so we can call the correct one without the ++ system's dynamic linker resolving to the wrong version of this. */ ++static Sint32 ++initialize_jumptable(Uint32 apiver, void *table, Uint32 tablesize) + { + SDL_DYNAPI_jump_table *output_jump_table = (SDL_DYNAPI_jump_table *) table; + +@@ -202,6 +197,18 @@ + } + + ++/* Here's the exported entry point that fills in the jump table. */ ++/* Use specific types when an "int" might suffice to keep this sane. */ ++typedef Sint32 (SDLCALL *SDL_DYNAPI_ENTRYFN)(Uint32 apiver, void *table, Uint32 tablesize); ++extern DECLSPEC Sint32 SDLCALL SDL_DYNAPI_entry(Uint32, void *, Uint32); ++ ++Sint32 ++SDL_DYNAPI_entry(Uint32 apiver, void *table, Uint32 tablesize) ++{ ++ return initialize_jumptable(apiver, table, tablesize); ++} ++ ++ + /* Obviously we can't use SDL_LoadObject() to load SDL. :) */ + /* Also obviously, we never close the loaded library. */ + #if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) +@@ -260,7 +267,7 @@ + SDL_InitDynamicAPILocked(void) + { + const char *libname = SDL_getenv_REAL("SDL_DYNAMIC_API"); +- SDL_DYNAPI_ENTRYFN entry = SDL_DYNAPI_entry; /* funcs from here by default. */ ++ SDL_DYNAPI_ENTRYFN entry = NULL; /* funcs from here by default. */ + + if (libname) { + entry = (SDL_DYNAPI_ENTRYFN) get_sdlapi_entry(libname, "SDL_DYNAPI_entry"); +@@ -268,16 +275,15 @@ + /* !!! FIXME: fail to startup here instead? */ + /* !!! FIXME: definitely warn user. */ + /* Just fill in the function pointers from this library. */ +- entry = SDL_DYNAPI_entry; + } + } + +- if (entry(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table)) < 0) { ++ if (!entry || (entry(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table)) < 0)) { + /* !!! FIXME: fail to startup here instead? */ + /* !!! FIXME: definitely warn user. */ + /* Just fill in the function pointers from this library. */ +- if (entry != SDL_DYNAPI_entry) { +- if (!SDL_DYNAPI_entry(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table))) { ++ if (!entry) { ++ if (!initialize_jumptable(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table))) { + /* !!! FIXME: now we're screwed. Should definitely abort now. */ + } + } + diff --git a/SDL2.changes b/SDL2.changes index 4e856d4..086646b 100644 --- a/SDL2.changes +++ b/SDL2.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Sun Jun 24 22:40:23 UTC 2018 - robert.munteanu@gmail.com + +- Add 7babfecee045.patch, fixes launching Firewatch + ------------------------------------------------------------------- Fri May 11 11:08:39 UTC 2018 - crrodriguez@opensuse.org diff --git a/SDL2.spec b/SDL2.spec index a29a0bc..3b93f50 100644 --- a/SDL2.spec +++ b/SDL2.spec @@ -32,6 +32,7 @@ Source3: %name.keyring Source4: baselibs.conf Patch1: sdl2-symvers.patch Patch2: SDL2-endian.patch +Patch3: 7babfecee045.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: cmake BuildRequires: dos2unix @@ -110,7 +111,7 @@ library. %prep %setup -q -%patch -P 1 -P 2 -p1 +%patch -P 1 -P 2 -p1 -P 3 dos2unix WhatsNew.txt dos2unix TODO.txt dos2unix BUGS.txt