1*4882a593SmuzhiyunFrom bb409432f03dd8256865292e382ad16613737829 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Matthias Schoepfer <matthias.schoepfer@ithinx.io>
3*4882a593SmuzhiyunDate: Fri, 31 May 2019 15:34:34 +0200
4*4882a593SmuzhiyunSubject: [PATCH] bpo-36852: proper detection of mips architecture for soft
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun float
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunWhen (cross) compiling for softfloat mips, __mips_hard_float will not be
9*4882a593Smuzhiyundefined and detection of OS triplet in configure.ac / configure will fail.
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunThis also has to do with the custom detection of the build triplet. Trying
12*4882a593Smuzhiyunto do this in a more autoconf/autotools manner.
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunUpstream-Status: Submitted [https://github.com/python/cpython/pull/13196]
15*4882a593SmuzhiyunSigned-off-by: Matthias Schoepfer <matthias.schoepfer@ithinx.io>
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun---
18*4882a593Smuzhiyun configure.ac | 175 +++++++--------------------------------------------
19*4882a593Smuzhiyun 1 file changed, 21 insertions(+), 154 deletions(-)
20*4882a593Smuzhiyun
21*4882a593Smuzhiyundiff --git a/configure.ac b/configure.ac
22*4882a593Smuzhiyunindex 4230ef2..ee08b1b 100644
23*4882a593Smuzhiyun--- a/configure.ac
24*4882a593Smuzhiyun+++ b/configure.ac
25*4882a593Smuzhiyun@@ -718,160 +718,27 @@ then
26*4882a593Smuzhiyun fi
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun-AC_MSG_CHECKING([for the platform triplet based on compiler characteristics])
30*4882a593Smuzhiyun-cat >> conftest.c <<EOF
31*4882a593Smuzhiyun-#undef bfin
32*4882a593Smuzhiyun-#undef cris
33*4882a593Smuzhiyun-#undef fr30
34*4882a593Smuzhiyun-#undef linux
35*4882a593Smuzhiyun-#undef hppa
36*4882a593Smuzhiyun-#undef hpux
37*4882a593Smuzhiyun-#undef i386
38*4882a593Smuzhiyun-#undef mips
39*4882a593Smuzhiyun-#undef powerpc
40*4882a593Smuzhiyun-#undef sparc
41*4882a593Smuzhiyun-#undef unix
42*4882a593Smuzhiyun-#if defined(__ANDROID__)
43*4882a593Smuzhiyun-    # Android is not a multiarch system.
44*4882a593Smuzhiyun-#elif defined(__linux__)
45*4882a593Smuzhiyun-# if defined(__x86_64__) && defined(__LP64__)
46*4882a593Smuzhiyun-        x86_64-linux-gnu
47*4882a593Smuzhiyun-# elif defined(__x86_64__) && defined(__ILP32__)
48*4882a593Smuzhiyun-        x86_64-linux-gnux32
49*4882a593Smuzhiyun-# elif defined(__i386__)
50*4882a593Smuzhiyun-        i386-linux-gnu
51*4882a593Smuzhiyun-# elif defined(__aarch64__) && defined(__AARCH64EL__)
52*4882a593Smuzhiyun-#  if defined(__ILP32__)
53*4882a593Smuzhiyun-        aarch64_ilp32-linux-gnu
54*4882a593Smuzhiyun-#  else
55*4882a593Smuzhiyun-        aarch64-linux-gnu
56*4882a593Smuzhiyun-#  endif
57*4882a593Smuzhiyun-# elif defined(__aarch64__) && defined(__AARCH64EB__)
58*4882a593Smuzhiyun-#  if defined(__ILP32__)
59*4882a593Smuzhiyun-        aarch64_be_ilp32-linux-gnu
60*4882a593Smuzhiyun-#  else
61*4882a593Smuzhiyun-        aarch64_be-linux-gnu
62*4882a593Smuzhiyun-#  endif
63*4882a593Smuzhiyun-# elif defined(__alpha__)
64*4882a593Smuzhiyun-        alpha-linux-gnu
65*4882a593Smuzhiyun-# elif defined(__ARM_EABI__) && defined(__ARM_PCS_VFP)
66*4882a593Smuzhiyun-#  if defined(__ARMEL__)
67*4882a593Smuzhiyun-        arm-linux-gnueabihf
68*4882a593Smuzhiyun-#  else
69*4882a593Smuzhiyun-        armeb-linux-gnueabihf
70*4882a593Smuzhiyun-#  endif
71*4882a593Smuzhiyun-# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP)
72*4882a593Smuzhiyun-#  if defined(__ARMEL__)
73*4882a593Smuzhiyun-        arm-linux-gnueabi
74*4882a593Smuzhiyun-#  else
75*4882a593Smuzhiyun-        armeb-linux-gnueabi
76*4882a593Smuzhiyun-#  endif
77*4882a593Smuzhiyun-# elif defined(__hppa__)
78*4882a593Smuzhiyun-        hppa-linux-gnu
79*4882a593Smuzhiyun-# elif defined(__ia64__)
80*4882a593Smuzhiyun-        ia64-linux-gnu
81*4882a593Smuzhiyun-# elif defined(__m68k__) && !defined(__mcoldfire__)
82*4882a593Smuzhiyun-        m68k-linux-gnu
83*4882a593Smuzhiyun-# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) && defined(_MIPSEL)
84*4882a593Smuzhiyun-#  if _MIPS_SIM == _ABIO32
85*4882a593Smuzhiyun-        mipsisa32r6el-linux-gnu
86*4882a593Smuzhiyun-#  elif _MIPS_SIM == _ABIN32
87*4882a593Smuzhiyun-        mipsisa64r6el-linux-gnuabin32
88*4882a593Smuzhiyun-#  elif _MIPS_SIM == _ABI64
89*4882a593Smuzhiyun-        mipsisa64r6el-linux-gnuabi64
90*4882a593Smuzhiyun-#  else
91*4882a593Smuzhiyun-#   error unknown platform triplet
92*4882a593Smuzhiyun-#  endif
93*4882a593Smuzhiyun-# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6)
94*4882a593Smuzhiyun-#  if _MIPS_SIM == _ABIO32
95*4882a593Smuzhiyun-        mipsisa32r6-linux-gnu
96*4882a593Smuzhiyun-#  elif _MIPS_SIM == _ABIN32
97*4882a593Smuzhiyun-        mipsisa64r6-linux-gnuabin32
98*4882a593Smuzhiyun-#  elif _MIPS_SIM == _ABI64
99*4882a593Smuzhiyun-        mipsisa64r6-linux-gnuabi64
100*4882a593Smuzhiyun-#  else
101*4882a593Smuzhiyun-#   error unknown platform triplet
102*4882a593Smuzhiyun-#  endif
103*4882a593Smuzhiyun-# elif defined(__mips_hard_float) && defined(_MIPSEL)
104*4882a593Smuzhiyun-#  if _MIPS_SIM == _ABIO32
105*4882a593Smuzhiyun-        mipsel-linux-gnu
106*4882a593Smuzhiyun-#  elif _MIPS_SIM == _ABIN32
107*4882a593Smuzhiyun-        mips64el-linux-gnuabin32
108*4882a593Smuzhiyun-#  elif _MIPS_SIM == _ABI64
109*4882a593Smuzhiyun-        mips64el-linux-gnuabi64
110*4882a593Smuzhiyun-#  else
111*4882a593Smuzhiyun-#   error unknown platform triplet
112*4882a593Smuzhiyun-#  endif
113*4882a593Smuzhiyun-# elif defined(__mips_hard_float)
114*4882a593Smuzhiyun-#  if _MIPS_SIM == _ABIO32
115*4882a593Smuzhiyun-        mips-linux-gnu
116*4882a593Smuzhiyun-#  elif _MIPS_SIM == _ABIN32
117*4882a593Smuzhiyun-        mips64-linux-gnuabin32
118*4882a593Smuzhiyun-#  elif _MIPS_SIM == _ABI64
119*4882a593Smuzhiyun-        mips64-linux-gnuabi64
120*4882a593Smuzhiyun-#  else
121*4882a593Smuzhiyun-#   error unknown platform triplet
122*4882a593Smuzhiyun-#  endif
123*4882a593Smuzhiyun-# elif defined(__or1k__)
124*4882a593Smuzhiyun-        or1k-linux-gnu
125*4882a593Smuzhiyun-# elif defined(__powerpc__) && defined(__SPE__)
126*4882a593Smuzhiyun-        powerpc-linux-gnuspe
127*4882a593Smuzhiyun-# elif defined(__powerpc64__)
128*4882a593Smuzhiyun-#  if defined(__LITTLE_ENDIAN__)
129*4882a593Smuzhiyun-        powerpc64le-linux-gnu
130*4882a593Smuzhiyun-#  else
131*4882a593Smuzhiyun-        powerpc64-linux-gnu
132*4882a593Smuzhiyun-#  endif
133*4882a593Smuzhiyun-# elif defined(__powerpc__)
134*4882a593Smuzhiyun-        powerpc-linux-gnu
135*4882a593Smuzhiyun-# elif defined(__s390x__)
136*4882a593Smuzhiyun-        s390x-linux-gnu
137*4882a593Smuzhiyun-# elif defined(__s390__)
138*4882a593Smuzhiyun-        s390-linux-gnu
139*4882a593Smuzhiyun-# elif defined(__sh__) && defined(__LITTLE_ENDIAN__)
140*4882a593Smuzhiyun-        sh4-linux-gnu
141*4882a593Smuzhiyun-# elif defined(__sparc__) && defined(__arch64__)
142*4882a593Smuzhiyun-        sparc64-linux-gnu
143*4882a593Smuzhiyun-# elif defined(__sparc__)
144*4882a593Smuzhiyun-        sparc-linux-gnu
145*4882a593Smuzhiyun-# elif defined(__riscv)
146*4882a593Smuzhiyun-#  if __riscv_xlen == 32
147*4882a593Smuzhiyun-        riscv32-linux-gnu
148*4882a593Smuzhiyun-#  elif __riscv_xlen == 64
149*4882a593Smuzhiyun-        riscv64-linux-gnu
150*4882a593Smuzhiyun-#  else
151*4882a593Smuzhiyun-#   error unknown platform triplet
152*4882a593Smuzhiyun-#  endif
153*4882a593Smuzhiyun-# else
154*4882a593Smuzhiyun-#   error unknown platform triplet
155*4882a593Smuzhiyun-# endif
156*4882a593Smuzhiyun-#elif defined(__FreeBSD_kernel__)
157*4882a593Smuzhiyun-# if defined(__LP64__)
158*4882a593Smuzhiyun-        x86_64-kfreebsd-gnu
159*4882a593Smuzhiyun-# elif defined(__i386__)
160*4882a593Smuzhiyun-        i386-kfreebsd-gnu
161*4882a593Smuzhiyun-# else
162*4882a593Smuzhiyun-#   error unknown platform triplet
163*4882a593Smuzhiyun-# endif
164*4882a593Smuzhiyun-#elif defined(__gnu_hurd__)
165*4882a593Smuzhiyun-        i386-gnu
166*4882a593Smuzhiyun-#elif defined(__APPLE__)
167*4882a593Smuzhiyun-        darwin
168*4882a593Smuzhiyun-#elif defined(__VXWORKS__)
169*4882a593Smuzhiyun-        vxworks
170*4882a593Smuzhiyun-#else
171*4882a593Smuzhiyun-# error unknown platform triplet
172*4882a593Smuzhiyun-#endif
173*4882a593Smuzhiyun-
174*4882a593Smuzhiyun-EOF
175*4882a593Smuzhiyun-
176*4882a593Smuzhiyun-if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
177*4882a593Smuzhiyun-  PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' 	'`
178*4882a593Smuzhiyun-  AC_MSG_RESULT([$PLATFORM_TRIPLET])
179*4882a593Smuzhiyun-else
180*4882a593Smuzhiyun-  AC_MSG_RESULT([none])
181*4882a593Smuzhiyun-fi
182*4882a593Smuzhiyun-rm -f conftest.c conftest.out
183*4882a593Smuzhiyun+AC_CANONICAL_TARGET
184*4882a593Smuzhiyun+## Not using $target to filter out vendor
185*4882a593Smuzhiyun+## Need to handle macos, vxworks and hurd special (?) :-/
186*4882a593Smuzhiyun+case ${target_os} in
187*4882a593Smuzhiyun+     darwin*)
188*4882a593Smuzhiyun+     	PLATFORM_TRIPLET=darwin
189*4882a593Smuzhiyun+	;;
190*4882a593Smuzhiyun+     hurd*)
191*4882a593Smuzhiyun+     	PLATFORM_TRIPLET=i386-gnu
192*4882a593Smuzhiyun+	;;
193*4882a593Smuzhiyun+     vxworks*)
194*4882a593Smuzhiyun+     	PLATFORM_TRIPLET=vxworks
195*4882a593Smuzhiyun+	;;
196*4882a593Smuzhiyun+     *)
197*4882a593Smuzhiyun+        if test "${target_cpu}" != "i686"; then
198*4882a593Smuzhiyun+		PLATFORM_TRIPLET=${target_cpu}-${target_os}
199*4882a593Smuzhiyun+	else
200*4882a593Smuzhiyun+		PLATFORM_TRIPLET=i386-${target_os}
201*4882a593Smuzhiyun+	fi
202*4882a593Smuzhiyun+	;;
203*4882a593Smuzhiyun+esac
204*4882a593Smuzhiyun
205*4882a593Smuzhiyun AC_MSG_CHECKING([for multiarch])
206*4882a593Smuzhiyun AS_CASE([$ac_sys_system],
207