Jeremie Courreges-Anglas <j...@wxcvbn.org> wrote: > On Tue, Apr 05 2022, Stuart Henderson <s...@spacehopper.org> wrote: > > On 2022/04/05 20:13, Jeremie Courreges-Anglas wrote: > >> > >> (post-7.1) > >> > >> On Mon, Jan 03 2022, Jeremie Courreges-Anglas <j...@wxcvbn.org> wrote: > >> > On Thu, Dec 30 2021, Pascal Stumpf <pas...@stumpf.co> wrote: > >> >> Here's an update for games/irrlamb, which now no longer uses > >> >> devel/bullet. It has an internal copy of Irrlicht, but working around > >> >> this to use the version from ports seems to not create any issues. > >> > > >> > This breaks on !(amd64) for various reasons. > >> > > >> > 1. -msse -mfpmath=sse should only be used on amd64, see Makefile and > >> > patches/patch-CMakeLists_txt below. > >> > > >> > 2. src/ode/odeconfig.h is a pile of ifdef kludges. I added a hack in the > >> > second part of the diff below but I really suggest not using it as is. > >> > Maybe this should only be built on amd64. And arm64. *argh*. > >> > >> Updated diff that builds on sparc64 and riscv64, and probably all our > >> architectures. Since the package seems currently built with SSE i386, > >> either the diff lacks a bump or I could tweak the conditional to keep > >> using SSE on i386. > >> > >> Aren't we supposed to disable SSE on i386? Or is it done on > >> a case-by-case basis? > > > > Case-by-case for ports. Probably makes sense to keep sse for this. There > > are many things which just don't make any sense to run on an i386 that's > > so old it doesn't even have SSE (that is very old..) Especially if it > > means making it worse on slightly newer machines which can run it but > > only barely. > > Thanks for confirming. With this in mind, ok? (post-lock)
i'm feeling a bit guilty to not have noticed the fact that it tries to use SSE unconditionally when I tested the update, sorry! FWIW I agree with the diff, ok op@. It still builds fine on amd64 and i386. I couldn't test it on my i386 (it doesn't like to run over Xvnc apparently.) > Index: Makefile > =================================================================== > RCS file: /home/cvs/ports/games/irrlamb/Makefile,v > retrieving revision 1.16 > diff -u -p -r1.16 Makefile > --- Makefile 24 Mar 2022 07:57:06 -0000 1.16 > +++ Makefile 5 Apr 2022 21:09:56 -0000 > @@ -1,6 +1,3 @@ > -BROKEN-sparc64 = uses sse, but fails an assert even without sse > -ONLY_FOR_ARCHS = amd64 i386 # build configuration forces sse > - > V = 1.0.1 > COMMENT = third person, 3D physics game > DISTNAME = irrlamb-$Vr613-src > @@ -30,6 +27,13 @@ RUN_DEPENDS = devel/desktop-file-utils > WRKDIST = ${WRKDIR}/irrlamb-$Vr613 > > NO_TEST = Yes > + > +.if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" > +SSE_FLAGS = -msse -mfpmath=sse > +.else > +SSE_FLAGS = > +.endif > +SUBST_VARS += SSE_FLAGS > > post-extract: > rm -rf ${WRKSRC}/src/irrlicht > Index: patches/patch-CMakeLists_txt > =================================================================== > RCS file: /home/cvs/ports/games/irrlamb/patches/patch-CMakeLists_txt,v > retrieving revision 1.2 > diff -u -p -r1.2 patch-CMakeLists_txt > --- patches/patch-CMakeLists_txt 11 Mar 2022 19:04:34 -0000 1.2 > +++ patches/patch-CMakeLists_txt 5 Apr 2022 21:09:30 -0000 > @@ -1,7 +1,7 @@ > Index: CMakeLists.txt > --- CMakeLists.txt.orig > +++ CMakeLists.txt > -@@ -29,7 +29,6 @@ if(WIN32) > +@@ -29,11 +29,10 @@ if(WIN32) > elseif(UNIX) > add_definitions(-DPLATFORM=0) > add_definitions(-DLUA_USE_LINUX) > @@ -9,6 +9,11 @@ Index: CMakeLists.txt > endif() > > # compiler flags > +-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-deprecated-declarations > -pedantic -std=gnu++11 -msse -mfpmath=sse") > ++set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-deprecated-declarations > -pedantic -std=gnu++11 ${SSE_FLAGS}") > + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DdNODEBUG -s") > + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DdNODEBUG -s") > + > @@ -72,7 +71,7 @@ find_package(Threads REQUIRED) > > # include paths > Index: patches/patch-src_ode_odeconfig_h > =================================================================== > RCS file: patches/patch-src_ode_odeconfig_h > diff -N patches/patch-src_ode_odeconfig_h > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-src_ode_odeconfig_h 5 Apr 2022 21:09:30 -0000 > @@ -0,0 +1,61 @@ > +$OpenBSD$ > + > +Sync this file with upstream, up to commit 92362ac. > +https://bitbucket.org/odedevs/ode/src/92362ac1e6cf3a12343493f67807780505253e1c/include/ode/odeconfig.h > +Lets this build on riscv64 and friends. > + > +Index: src/ode/odeconfig.h > +--- src/ode/odeconfig.h.orig > ++++ src/ode/odeconfig.h > +@@ -80,8 +80,12 @@ > + #endif // #if !defined(__GNUC__) > + > + > +-/* Well-defined common data types...need to define for 64 bit systems */ > +-#if defined(__aarch64__) > ++/* Well-defined common data types...need to be defined for 64 bit systems */ > ++#if defined(__aarch64__) || defined(__alpha__) || defined(__ppc64__) \ > ++ || defined(__s390__) || defined(__s390x__) || defined(__zarch__) \ > ++ || defined(__mips__) || defined(__powerpc64__) || defined(__riscv) \ > ++ || defined(__loongarch64) \ > ++ || (defined(__sparc__) && defined(__arch64__)) > + #include <stdint.h> > + typedef int64_t dint64; > + typedef uint64_t duint64; > +@@ -97,13 +101,13 @@ > + typedef ptrdiff_t ddiffint; > + typedef size_t dsizeint; > + > +-#elif defined(_M_IA64) || defined(__ia64__) || defined(_M_AMD64) || > defined(__x86_64__) > ++#elif (defined(_M_IA64) || defined(__ia64__) || defined(_M_AMD64) || > defined(__x86_64__)) && !defined(__ILP32__) && !defined(_ILP32) > + #define X86_64_SYSTEM 1 > + #if defined(_MSC_VER) > + typedef __int64 dint64; > + typedef unsigned __int64 duint64; > + #else > +-#if defined(_LP64) > ++#if defined(_LP64) || defined(__LP64__) > + typedef long dint64; > + typedef unsigned long duint64; > + #else > +@@ -210,6 +214,20 @@ typedef unsigned long duint64; > + #define _ode_nextafterf(x, y) nextafterf(x, y) > + #define _ode_nextafter(x, y) nextafter(x, y) > + #endif > ++ > ++ > ++#if defined(_MSC_VER) && _MSC_VER < 1700 // Also mind similar defines in > ccd/vec3.h > ++/* Define fmin, fmax, fminf, fmaxf which are missing from MSVC (up to > VS2008 at least) */ > ++ static __inline double _ode_fmin(double x, double y) { return __min(x, > y); } > ++ static __inline double _ode_fmax(double x, double y) { return __max(x, > y); } > ++ static __inline float _ode_fminf(float x, float y) { return __min(x, y); } > ++ static __inline float _ode_fmaxf(float x, float y) { return __max(x, y); } > ++#else // #if !defined(_MSC_VER) || _MSC_VER >= 1700 > ++ #define _ode_fmin(x, y) fmin(x, y) > ++ #define _ode_fmax(x, y) fmax(x, y) > ++ #define _ode_fminf(x, y) fminf(x, y) > ++ #define _ode_fmaxf(x, y) fmaxf(x, y) > ++#endif // #if !defined(_MSC_VER) || _MSC_VER >= 1700 > + > + > + #endif