1diff --git a/configure.ac b/configure.ac
2index ba768aea93..621ac166bd 100644
3--- a/configure.ac
4+++ b/configure.ac
5@@ -936,125 +936,192 @@ cat > conftest.c <<EOF
6 #if defined(__ANDROID__)
7 # Android is not a multiarch system.
8 #elif defined(__linux__)
9+# include <features.h>
10+# if defined(__UCLIBC__)
11+# error uclibc not supported
12+# elif defined(__dietlibc__)
13+# error dietlibc not supported
14+# elif defined(__GLIBC__)
15+# define LIBC gnu
16+# define LIBC_X32 gnux32
17+# if defined(__ARM_PCS_VFP)
18+# define LIBC_ARM gnueabihf
19+# else
20+# define LIBC_ARM gnueabi
21+# endif
22+# if defined(__loongarch__)
23+# if defined(__loongarch_soft_float)
24+# define LIBC_LA gnusf
25+# elif defined(__loongarch_single_float)
26+# define LIBC_LA gnuf32
27+# elif defined(__loongarch_double_float)
28+# define LIBC_LA gnu
29+# else
30+# error unknown loongarch floating-point base abi
31+# endif
32+# endif
33+# if defined(_MIPS_SIM)
34+# if defined(__mips_hard_float)
35+# if _MIPS_SIM == _ABIO32
36+# define LIBC_MIPS gnu
37+# elif _MIPS_SIM == _ABIN32
38+# define LIBC_MIPS gnuabin32
39+# elif _MIPS_SIM == _ABI64
40+# define LIBC_MIPS gnuabi64
41+# else
42+# error unknown mips sim value
43+# endif
44+# else
45+# if _MIPS_SIM == _ABIO32
46+# define LIBC_MIPS gnusf
47+# elif _MIPS_SIM == _ABIN32
48+# define LIBC_MIPS gnuabin32sf
49+# elif _MIPS_SIM == _ABI64
50+# define LIBC_MIPS gnuabi64sf
51+# else
52+# error unknown mips sim value
53+# endif
54+# endif
55+# endif
56+# if defined(__SPE__)
57+# define LIBC_PPC gnuspe
58+# else
59+# define LIBC_PPC gnu
60+# endif
61+# else
62+# include <stdarg.h>
63+# ifdef __DEFINED_va_list
64+# define LIBC musl
65+# define LIBC_X32 muslx32
66+# if defined(__ARM_PCS_VFP)
67+# define LIBC_ARM musleabihf
68+# else
69+# define LIBC_ARM musleabi
70+# endif
71+# if defined(__loongarch__)
72+# if defined(__loongarch_soft_float)
73+# define LIBC_LA muslsf
74+# elif defined(__loongarch_single_float)
75+# define LIBC_LA muslf32
76+# elif defined(__loongarch_double_float)
77+# define LIBC_LA musl
78+# else
79+# error unknown loongarch floating-point base abi
80+# endif
81+# endif
82+# if defined(_MIPS_SIM)
83+# if defined(__mips_hard_float)
84+# if _MIPS_SIM == _ABIO32
85+# define LIBC_MIPS musl
86+# elif _MIPS_SIM == _ABIN32
87+# define LIBC_MIPS musln32
88+# elif _MIPS_SIM == _ABI64
89+# define LIBC_MIPS musl
90+# else
91+# error unknown mips sim value
92+# endif
93+# else
94+# if _MIPS_SIM == _ABIO32
95+# define LIBC_MIPS muslsf
96+# elif _MIPS_SIM == _ABIN32
97+# define LIBC_MIPS musln32sf
98+# elif _MIPS_SIM == _ABI64
99+# define LIBC_MIPS muslsf
100+# else
101+# error unknown mips sim value
102+# endif
103+# endif
104+# endif
105+# if defined(_SOFT_FLOAT) || defined(__NO_FPRS__)
106+# define LIBC_PPC muslsf
107+# else
108+# define LIBC_PPC musl
109+# endif
110+# else
111+# error unknown libc
112+# endif
113+# endif
114 # if defined(__x86_64__) && defined(__LP64__)
115- x86_64-linux-gnu
116+ x86_64-linux-LIBC
117 # elif defined(__x86_64__) && defined(__ILP32__)
118- x86_64-linux-gnux32
119+ x86_64-linux-LIBC_X32
120 # elif defined(__i386__)
121- i386-linux-gnu
122+ i386-linux-LIBC
123 # elif defined(__aarch64__) && defined(__AARCH64EL__)
124 # if defined(__ILP32__)
125- aarch64_ilp32-linux-gnu
126+ aarch64_ilp32-linux-LIBC
127 # else
128- aarch64-linux-gnu
129+ aarch64-linux-LIBC
130 # endif
131 # elif defined(__aarch64__) && defined(__AARCH64EB__)
132 # if defined(__ILP32__)
133- aarch64_be_ilp32-linux-gnu
134+ aarch64_be_ilp32-linux-LIBC
135 # else
136- aarch64_be-linux-gnu
137+ aarch64_be-linux-LIBC
138 # endif
139 # elif defined(__alpha__)
140- alpha-linux-gnu
141-# elif defined(__ARM_EABI__) && defined(__ARM_PCS_VFP)
142+ alpha-linux-LIBC
143+# elif defined(__ARM_EABI__)
144 # if defined(__ARMEL__)
145- arm-linux-gnueabihf
146+ arm-linux-LIBC_ARM
147 # else
148- armeb-linux-gnueabihf
149-# endif
150-# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP)
151-# if defined(__ARMEL__)
152- arm-linux-gnueabi
153-# else
154- armeb-linux-gnueabi
155+ armeb-linux-LIBC_ARM
156 # endif
157 # elif defined(__hppa__)
158- hppa-linux-gnu
159+ hppa-linux-LIBC
160 # elif defined(__ia64__)
161- ia64-linux-gnu
162-# elif defined(__loongarch__)
163-# if defined(__loongarch_lp64)
164-# if defined(__loongarch_soft_float)
165- loongarch64-linux-gnusf
166-# elif defined(__loongarch_single_float)
167- loongarch64-linux-gnuf32
168-# elif defined(__loongarch_double_float)
169- loongarch64-linux-gnu
170+ ia64-linux-LIBC
171+# elif defined(__loongarch__) && defined(__loongarch_lp64)
172+ loongarch64-linux-LIBC_LA
173+# elif defined(__m68k__) && !defined(__mcoldfire__)
174+ m68k-linux-LIBC
175+# elif defined(__mips__)
176+# if defined(__mips_isa_rev) && (__mips_isa_rev >=6)
177+# if defined(_MIPSEL) && defined(__mips64)
178+ mipsisa64r6el-linux-LIBC_MIPS
179+# elif defined(_MIPSEL)
180+ mipsisa32r6el-linux-LIBC_MIPS
181+# elif defined(__mips64)
182+ mipsisa64r6-linux-LIBC_MIPS
183 # else
184-# error unknown platform triplet
185+ mipsisa32r6-linux-LIBC_MIPS
186 # endif
187 # else
188-# error unknown platform triplet
189-# endif
190-# elif defined(__m68k__) && !defined(__mcoldfire__)
191- m68k-linux-gnu
192-# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) && defined(_MIPSEL)
193-# if _MIPS_SIM == _ABIO32
194- mipsisa32r6el-linux-gnu
195-# elif _MIPS_SIM == _ABIN32
196- mipsisa64r6el-linux-gnuabin32
197-# elif _MIPS_SIM == _ABI64
198- mipsisa64r6el-linux-gnuabi64
199-# else
200-# error unknown platform triplet
201-# endif
202-# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6)
203-# if _MIPS_SIM == _ABIO32
204- mipsisa32r6-linux-gnu
205-# elif _MIPS_SIM == _ABIN32
206- mipsisa64r6-linux-gnuabin32
207-# elif _MIPS_SIM == _ABI64
208- mipsisa64r6-linux-gnuabi64
209-# else
210-# error unknown platform triplet
211-# endif
212-# elif defined(__mips_hard_float) && defined(_MIPSEL)
213-# if _MIPS_SIM == _ABIO32
214- mipsel-linux-gnu
215-# elif _MIPS_SIM == _ABIN32
216- mips64el-linux-gnuabin32
217-# elif _MIPS_SIM == _ABI64
218- mips64el-linux-gnuabi64
219-# else
220-# error unknown platform triplet
221-# endif
222-# elif defined(__mips_hard_float)
223-# if _MIPS_SIM == _ABIO32
224- mips-linux-gnu
225-# elif _MIPS_SIM == _ABIN32
226- mips64-linux-gnuabin32
227-# elif _MIPS_SIM == _ABI64
228- mips64-linux-gnuabi64
229-# else
230-# error unknown platform triplet
231+# if defined(_MIPSEL) && defined(__mips64)
232+ mips64el-linux-LIBC_MIPS
233+# elif defined(_MIPSEL)
234+ mipsel-linux-LIBC_MIPS
235+# elif defined(__mips64)
236+ mips64-linux-LIBC_MIPS
237+# else
238+ mips-linux-LIBC_MIPS
239+# endif
240 # endif
241 # elif defined(__or1k__)
242- or1k-linux-gnu
243-# elif defined(__powerpc__) && defined(__SPE__)
244- powerpc-linux-gnuspe
245+ or1k-linux-LIBC
246 # elif defined(__powerpc64__)
247 # if defined(__LITTLE_ENDIAN__)
248- powerpc64le-linux-gnu
249+ powerpc64le-linux-LIBC
250 # else
251- powerpc64-linux-gnu
252+ powerpc64-linux-LIBC
253 # endif
254 # elif defined(__powerpc__)
255- powerpc-linux-gnu
256+ powerpc-linux-LIBC_PPC
257 # elif defined(__s390x__)
258- s390x-linux-gnu
259+ s390x-linux-LIBC
260 # elif defined(__s390__)
261- s390-linux-gnu
262+ s390-linux-LIBC
263 # elif defined(__sh__) && defined(__LITTLE_ENDIAN__)
264- sh4-linux-gnu
265+ sh4-linux-LIBC
266 # elif defined(__sparc__) && defined(__arch64__)
267- sparc64-linux-gnu
268+ sparc64-linux-LIBC
269 # elif defined(__sparc__)
270- sparc-linux-gnu
271+ sparc-linux-LIBC
272 # elif defined(__riscv)
273 # if __riscv_xlen == 32
274- riscv32-linux-gnu
275+ riscv32-linux-LIBC
276 # elif __riscv_xlen == 64
277- riscv64-linux-gnu
278+ riscv64-linux-LIBC
279 # else
280 # error unknown platform triplet
281 # endif
282@@ -1102,12 +1169,7 @@ cat > conftest.c <<EOF
283 EOF
284
285 if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
286- PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '`
287- case "$build_os" in
288- linux-musl*)
289- PLATFORM_TRIPLET=`echo "$PLATFORM_TRIPLET" | sed 's/linux-gnu/linux-musl/'`
290- ;;
291- esac
292+ PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | grep -v typedef | tr -d ' '`
293 AC_MSG_RESULT([$PLATFORM_TRIPLET])
294 else
295 AC_MSG_RESULT([none])