From 1ad771d86728ee2ed30e202e9768d8d825f96467 Mon Sep 17 00:00:00 2001 From: Matthias Schoepfer <matthias.schoepfer@ithinx.io> Date: Fri, 31 May 2019 15:34:34 +0200 Subject: [PATCH] bpo-36852: proper detection of mips architecture for soft float When (cross) compiling for softfloat mips, __mips_hard_float will not be defined and detection of OS triplet in configure.ac / configure will fail. This also has to do with the custom detection of the build triplet. Trying to do this in a more autoconf/autotools manner. Upstream-Status: Submitted [https://github.com/python/cpython/pull/13196] Signed-off-by: Matthias Schoepfer <matthias.schoepfer@ithinx.io> %% original patch: 0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch --- configure.ac | 175 +++++++-------------------------------------------- 1 file changed, 21 insertions(+), 154 deletions(-) diff --git a/configure.ac b/configure.ac index ede710e..bc81b0b 100644 --- a/configure.ac +++ b/configure.ac @@ -710,160 +710,27 @@ fi MULTIARCH=$($CC --print-multiarch 2>/dev/null) AC_SUBST(MULTIARCH) -AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) -cat >> conftest.c <<EOF -#undef bfin -#undef cris -#undef fr30 -#undef linux -#undef hppa -#undef hpux -#undef i386 -#undef mips -#undef powerpc -#undef sparc -#undef unix -#if defined(__ANDROID__) - # Android is not a multiarch system. -#elif defined(__linux__) -# if defined(__x86_64__) && defined(__LP64__) - x86_64-linux-gnu -# elif defined(__x86_64__) && defined(__ILP32__) - x86_64-linux-gnux32 -# elif defined(__i386__) - i386-linux-gnu -# elif defined(__aarch64__) && defined(__AARCH64EL__) -# if defined(__ILP32__) - aarch64_ilp32-linux-gnu -# else - aarch64-linux-gnu -# endif -# elif defined(__aarch64__) && defined(__AARCH64EB__) -# if defined(__ILP32__) - aarch64_be_ilp32-linux-gnu -# else - aarch64_be-linux-gnu -# endif -# elif defined(__alpha__) - alpha-linux-gnu -# elif defined(__ARM_EABI__) && defined(__ARM_PCS_VFP) -# if defined(__ARMEL__) - arm-linux-gnueabihf -# else - armeb-linux-gnueabihf -# endif -# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP) -# if defined(__ARMEL__) - arm-linux-gnueabi -# else - armeb-linux-gnueabi -# endif -# elif defined(__hppa__) - hppa-linux-gnu -# elif defined(__ia64__) - ia64-linux-gnu -# elif defined(__m68k__) && !defined(__mcoldfire__) - m68k-linux-gnu -# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) && defined(_MIPSEL) -# if _MIPS_SIM == _ABIO32 - mipsisa32r6el-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mipsisa64r6el-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mipsisa64r6el-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) -# if _MIPS_SIM == _ABIO32 - mipsisa32r6-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mipsisa64r6-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mipsisa64r6-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__mips_hard_float) && defined(_MIPSEL) -# if _MIPS_SIM == _ABIO32 - mipsel-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mips64el-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mips64el-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__mips_hard_float) -# if _MIPS_SIM == _ABIO32 - mips-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mips64-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mips64-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__or1k__) - or1k-linux-gnu -# elif defined(__powerpc__) && defined(__SPE__) - powerpc-linux-gnuspe -# elif defined(__powerpc64__) -# if defined(__LITTLE_ENDIAN__) - powerpc64le-linux-gnu -# else - powerpc64-linux-gnu -# endif -# elif defined(__powerpc__) - powerpc-linux-gnu -# elif defined(__s390x__) - s390x-linux-gnu -# elif defined(__s390__) - s390-linux-gnu -# elif defined(__sh__) && defined(__LITTLE_ENDIAN__) - sh4-linux-gnu -# elif defined(__sparc__) && defined(__arch64__) - sparc64-linux-gnu -# elif defined(__sparc__) - sparc-linux-gnu -# elif defined(__riscv) -# if __riscv_xlen == 32 - riscv32-linux-gnu -# elif __riscv_xlen == 64 - riscv64-linux-gnu -# else -# error unknown platform triplet -# endif -# else -# error unknown platform triplet -# endif -#elif defined(__FreeBSD_kernel__) -# if defined(__LP64__) - x86_64-kfreebsd-gnu -# elif defined(__i386__) - i386-kfreebsd-gnu -# else -# error unknown platform triplet -# endif -#elif defined(__gnu_hurd__) - i386-gnu -#elif defined(__APPLE__) - darwin -#elif defined(__VXWORKS__) - vxworks -#else -# error unknown platform triplet -#endif - -EOF - -if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then - PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` - AC_MSG_RESULT([$PLATFORM_TRIPLET]) -else - AC_MSG_RESULT([none]) -fi -rm -f conftest.c conftest.out +AC_CANONICAL_TARGET +## Not using $target to filter out vendor +## Need to handle macos, vxworks and hurd special (?) :-/ +case ${target_os} in + darwin*) + PLATFORM_TRIPLET=darwin + ;; + hurd*) + PLATFORM_TRIPLET=i386-gnu + ;; + vxworks*) + PLATFORM_TRIPLET=vxworks + ;; + *) + if test "${target_cpu}" != "i686"; then + PLATFORM_TRIPLET=${target_cpu}-${target_os} + else + PLATFORM_TRIPLET=i386-${target_os} + fi + ;; +esac if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then -- 2.24.1