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


Reply via email to