On Mon, Feb 06, 2023 at 08:04:13PM +0100, Stephen Kitt wrote: > > I’m afraid there isn’t much I can do about that, other than ask upstream to > add MIPS support. > > Given the RC severity of this bug, I’ll consider the main point of the bug to > be the latter part: > > > The RC severity is based on looking at a related question: > > How did intelrdfpmath compile on new platforms like powerpc/arm/s390x > > that never had any explicit support in intelrdfpmath? > > > > intelrdfpmath (2.0u2-2) unstable; urgency=medium > > * Assume unknown architectures are “EFI2”. > > > > LIBRARY/float128/architecture.h: > > #if defined(ct) || defined(efi2) > > # undef _M_AMD64 > > # define _M_AMD64 > > #endif > > > > This builds, but the (used) definition > > # define ENDIANESS little_endian > > isn't correct on s390x, and neither is > > # define BITS_PER_LONG 64 > > on 32bit arm. > > Ah, I knew that would bite me some day... > > I’m updating intelrdfpmath to apply the architecture definitions used in > libmongocrypt (see > <https://github.com/mongodb/libmongocrypt/blob/master/cmake/IntelDFP.cmake>): > armel/armhf are assumed to behave like i386 (I haven’t checked whether that > makes sense), arm64/ppc64el/riscv64 are assumed to behave like amd64, and > s390x is supported explicitly. > > If you want to track the unsupported architectures, please open a new bug. As > far as I can tell, even if libmongocrypt were built in Debian using its > embedded copy of intelrdfpmath, it would fail on the same architectures. > So, based on the fact that upstream treats x86 and x86_64 as having the same data model, I came up with the attached patch. It allows the build to succeed on both mips64el and mipsel. I am preparing to test (using the libmongocrypt tests as a proxy) and I will report back with the results of those tests.
Regards, -Roberto -- Roberto C. Sánchez
Index: intelrdfpmath-2.0u2/LIBRARY/float128/dpml_private.h =================================================================== --- intelrdfpmath-2.0u2.orig/LIBRARY/float128/dpml_private.h +++ intelrdfpmath-2.0u2/LIBRARY/float128/dpml_private.h @@ -212,7 +212,12 @@ versions until we need them. ] */ #elif (ARCHITECTURE == mips) -# include "mips_macros.h" +/* + * This header doesn't exist and the attempted inclusion causes a FTBFS. + * Don't try to include it, but also leave this branch here so that the + * absence of it doesn't result in raising the error below. + include "mips_macros.h" +*/ #elif (ARCHITECTURE == hp_pa) Index: intelrdfpmath-2.0u2/LIBRARY/float128/architecture.h =================================================================== --- intelrdfpmath-2.0u2.orig/LIBRARY/float128/architecture.h +++ intelrdfpmath-2.0u2/LIBRARY/float128/architecture.h @@ -144,17 +144,23 @@ # define INT_8 signed char # define INT_16 signed short # define INT_32 signed int -# undef INT_64 +# define INT_64 long long # undef INT_128 # define U_INT_8 unsigned char # define U_INT_16 unsigned short # define U_INT_32 unsigned int -# undef U_INT_64 +# define U_INT_64 unsigned long long # undef U_INT_128 -# define WORD INT_32 -# define U_WORD U_INT_32 -# define BITS_PER_WORD 32 +# if 0 +# define WORD INT_32 +# define U_WORD U_INT_32 +# define BITS_PER_WORD 32 +# else +# define WORD INT_64 +# define U_WORD U_INT_64 +# define BITS_PER_WORD 64 +# endif # define HALF_WORD INT_16 # define U_HALF_WORD U_INT_16 Index: intelrdfpmath-2.0u2/LIBRARY/float128/dpml_exception.h =================================================================== --- intelrdfpmath-2.0u2.orig/LIBRARY/float128/dpml_exception.h +++ intelrdfpmath-2.0u2/LIBRARY/float128/dpml_exception.h @@ -325,7 +325,7 @@ typedef struct { # define PROCESS_DENORMS 1 # define DPML_EXCEPTION_HANDLER DPML_EXCEPTION_NAME # define EXCEPTION_ARGUMENTS( error_code ) error_code -# define PLATFORM_SPECIFIC_HEADER_FILE "mips_exception.c" +//# define PLATFORM_SPECIFIC_HEADER_FILE "mips_exception.c" # elif ARCHITECTURE == hp_pa # define PROCESS_DENORMS 1