• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Detect platform triplet from builtin defines
2  * cc -E Misc/platform_triplet.c | grep '^PLATFORM_TRIPLET=' | tr -d ' '
3  */
4 #undef bfin
5 #undef cris
6 #undef fr30
7 #undef linux
8 #undef hppa
9 #undef hpux
10 #undef i386
11 #undef mips
12 #undef powerpc
13 #undef sparc
14 #undef unix
15 
16 #if defined(__ANDROID__)
17 #  if defined(__x86_64__)
18 PLATFORM_TRIPLET=x86_64-linux-android
19 #  elif defined(__i386__)
20 PLATFORM_TRIPLET=i686-linux-android
21 #  elif defined(__aarch64__)
22 PLATFORM_TRIPLET=aarch64-linux-android
23 #  elif defined(__arm__)
24 PLATFORM_TRIPLET=arm-linux-androideabi
25 #  else
26 #    error unknown Android platform
27 #  endif
28 
29 #elif defined(__linux__)
30 /*
31  * BEGIN of Linux block
32  */
33 // Detect libc (based on config.guess)
34 # include <features.h>
35 # if defined(__UCLIBC__)
36 #  error uclibc not supported
37 # elif defined(__dietlibc__)
38 #  error dietlibc not supported
39 # elif defined(__GLIBC__)
40 #  define LIBC gnu
41 #  define LIBC_X32 gnux32
42 #  if defined(__ARM_PCS_VFP)
43 #   define LIBC_ARM gnueabihf
44 #  else
45 #   define LIBC_ARM gnueabi
46 #  endif
47 #  if defined(__loongarch__)
48 #   if defined(__loongarch_soft_float)
49 #    define LIBC_LA gnusf
50 #   elif defined(__loongarch_single_float)
51 #    define LIBC_LA gnuf32
52 #   elif defined(__loongarch_double_float)
53 #    define LIBC_LA gnu
54 #   else
55 #    error unknown loongarch floating-point base abi
56 #   endif
57 #  endif
58 #  if defined(_MIPS_SIM)
59 #   if defined(__mips_hard_float)
60 #    if _MIPS_SIM == _ABIO32
61 #     define LIBC_MIPS gnu
62 #    elif _MIPS_SIM == _ABIN32
63 #     define LIBC_MIPS gnuabin32
64 #    elif _MIPS_SIM == _ABI64
65 #     define LIBC_MIPS gnuabi64
66 #    else
67 #     error unknown mips sim value
68 #    endif
69 #   else
70 #    if _MIPS_SIM == _ABIO32
71 #     define LIBC_MIPS gnusf
72 #    elif _MIPS_SIM == _ABIN32
73 #     define LIBC_MIPS gnuabin32sf
74 #    elif _MIPS_SIM == _ABI64
75 #     define LIBC_MIPS gnuabi64sf
76 #    else
77 #     error unknown mips sim value
78 #    endif
79 #   endif
80 #  endif
81 #  if defined(__SPE__)
82 #   define LIBC_PPC gnuspe
83 #  else
84 #   define LIBC_PPC gnu
85 #  endif
86 # else
87 // Heuristic to detect musl libc
88 #  include <stdarg.h>
89 #  ifdef __DEFINED_va_list
90 #   define LIBC musl
91 #   define LIBC_X32 muslx32
92 #   if defined(__ARM_PCS_VFP)
93 #    define LIBC_ARM musleabihf
94 #   else
95 #    define LIBC_ARM musleabi
96 #   endif
97 #   if defined(__loongarch__)
98 #    if defined(__loongarch_soft_float)
99 #     define LIBC_LA muslsf
100 #    elif defined(__loongarch_single_float)
101 #     define LIBC_LA muslf32
102 #    elif defined(__loongarch_double_float)
103 #     define LIBC_LA musl
104 #    else
105 #     error unknown loongarch floating-point base abi
106 #    endif
107 #   endif
108 #   if defined(_MIPS_SIM)
109 #    if defined(__mips_hard_float)
110 #     if _MIPS_SIM == _ABIO32
111 #      define LIBC_MIPS musl
112 #     elif _MIPS_SIM == _ABIN32
113 #      define LIBC_MIPS musln32
114 #     elif _MIPS_SIM == _ABI64
115 #      define LIBC_MIPS musl
116 #     else
117 #      error unknown mips sim value
118 #     endif
119 #    else
120 #     if _MIPS_SIM == _ABIO32
121 #      define LIBC_MIPS muslsf
122 #     elif _MIPS_SIM == _ABIN32
123 #      define LIBC_MIPS musln32sf
124 #     elif _MIPS_SIM == _ABI64
125 #      define LIBC_MIPS muslsf
126 #     else
127 #      error unknown mips sim value
128 #     endif
129 #    endif
130 #   endif
131 #   if defined(_SOFT_FLOAT) || defined(__NO_FPRS__)
132 #    define LIBC_PPC muslsf
133 #   else
134 #    define LIBC_PPC musl
135 #   endif
136 #  else
137 #   error unknown libc
138 #  endif
139 # endif
140 
141 # if defined(__x86_64__) && defined(__LP64__)
142 PLATFORM_TRIPLET=x86_64-linux-LIBC
143 # elif defined(__x86_64__) && defined(__ILP32__)
144 PLATFORM_TRIPLET=x86_64-linux-LIBC_X32
145 # elif defined(__i386__)
146 PLATFORM_TRIPLET=i386-linux-LIBC
147 # elif defined(__aarch64__) && defined(__AARCH64EL__)
148 #  if defined(__ILP32__)
149 PLATFORM_TRIPLET=aarch64_ilp32-linux-LIBC
150 #  else
151 PLATFORM_TRIPLET=aarch64-linux-LIBC
152 #  endif
153 # elif defined(__aarch64__) && defined(__AARCH64EB__)
154 #  if defined(__ILP32__)
155 PLATFORM_TRIPLET=aarch64_be_ilp32-linux-LIBC
156 #  else
157 PLATFORM_TRIPLET=aarch64_be-linux-LIBC
158 #  endif
159 # elif defined(__alpha__)
160 PLATFORM_TRIPLET=alpha-linux-LIBC
161 # elif defined(__ARM_EABI__)
162 #  if defined(__ARMEL__)
163 PLATFORM_TRIPLET=arm-linux-LIBC_ARM
164 #  else
165 PLATFORM_TRIPLET=armeb-linux-LIBC_ARM
166 #  endif
167 # elif defined(__hppa__)
168 PLATFORM_TRIPLET=hppa-linux-LIBC
169 # elif defined(__ia64__)
170 PLATFORM_TRIPLET=ia64-linux-LIBC
171 # elif defined(__loongarch__) && defined(__loongarch_lp64)
172 PLATFORM_TRIPLET=loongarch64-linux-LIBC_LA
173 # elif defined(__m68k__) && !defined(__mcoldfire__)
174 PLATFORM_TRIPLET=m68k-linux-LIBC
175 # elif defined(__mips__)
176 #  if defined(__mips_isa_rev) && (__mips_isa_rev >=6)
177 #   if defined(_MIPSEL) && defined(__mips64)
178 PLATFORM_TRIPLET=mipsisa64r6el-linux-LIBC_MIPS
179 #   elif defined(_MIPSEL)
180 PLATFORM_TRIPLET=mipsisa32r6el-linux-LIBC_MIPS
181 #   elif defined(__mips64)
182 PLATFORM_TRIPLET=mipsisa64r6-linux-LIBC_MIPS
183 #   else
184 PLATFORM_TRIPLET=mipsisa32r6-linux-LIBC_MIPS
185 #   endif
186 #  else
187 #   if defined(_MIPSEL) && defined(__mips64)
188 PLATFORM_TRIPLET=mips64el-linux-LIBC_MIPS
189 #   elif defined(_MIPSEL)
190 PLATFORM_TRIPLET=mipsel-linux-LIBC_MIPS
191 #   elif defined(__mips64)
192 PLATFORM_TRIPLET=mips64-linux-LIBC_MIPS
193 #   else
194 PLATFORM_TRIPLET=mips-linux-LIBC_MIPS
195 #   endif
196 #  endif
197 # elif defined(__or1k__)
198 PLATFORM_TRIPLET=or1k-linux-LIBC
199 # elif defined(__powerpc64__)
200 #  if defined(__LITTLE_ENDIAN__)
201 PLATFORM_TRIPLET=powerpc64le-linux-LIBC
202 #  else
203 PLATFORM_TRIPLET=powerpc64-linux-LIBC
204 #  endif
205 # elif defined(__powerpc__)
206 PLATFORM_TRIPLET=powerpc-linux-LIBC_PPC
207 # elif defined(__s390x__)
208 PLATFORM_TRIPLET=s390x-linux-LIBC
209 # elif defined(__s390__)
210 PLATFORM_TRIPLET=s390-linux-LIBC
211 # elif defined(__sh__) && defined(__LITTLE_ENDIAN__)
212 PLATFORM_TRIPLET=sh4-linux-LIBC
213 # elif defined(__sparc__) && defined(__arch64__)
214 PLATFORM_TRIPLET=sparc64-linux-LIBC
215 # elif defined(__sparc__)
216 PLATFORM_TRIPLET=sparc-linux-LIBC
217 # elif defined(__riscv)
218 #  if __riscv_xlen == 32
219 PLATFORM_TRIPLET=riscv32-linux-LIBC
220 #  elif __riscv_xlen == 64
221 PLATFORM_TRIPLET=riscv64-linux-LIBC
222 #  else
223 #   error unknown platform triplet
224 #  endif
225 # else
226 #   error unknown platform triplet
227 # endif
228 /*
229  * END of Linux block
230  */
231 #elif defined(__FreeBSD_kernel__)
232 # if defined(__LP64__)
233 PLATFORM_TRIPLET=x86_64-kfreebsd-gnu
234 # elif defined(__i386__)
235 PLATFORM_TRIPLET=i386-kfreebsd-gnu
236 # else
237 #   error unknown platform triplet
238 # endif
239 #elif defined(__gnu_hurd__)
240 # if defined(__x86_64__) && defined(__LP64__)
241 PLATFORM_TRIPLET=x86_64-gnu
242 # elif defined(__i386__)
243 PLATFORM_TRIPLET=i386-gnu
244 # else
245 #   error unknown platform triplet
246 # endif
247 #elif defined(__APPLE__)
248 #  include "TargetConditionals.h"
249 // Older macOS SDKs do not define TARGET_OS_*
250 #  if defined(TARGET_OS_IOS) && TARGET_OS_IOS
251 #    if defined(TARGET_OS_SIMULATOR) && TARGET_OS_SIMULATOR
252 #      if __x86_64__
253 PLATFORM_TRIPLET=x86_64-iphonesimulator
254 #      else
255 PLATFORM_TRIPLET=arm64-iphonesimulator
256 #      endif
257 #    else
258 PLATFORM_TRIPLET=arm64-iphoneos
259 #    endif
260 // Older macOS SDKs do not define TARGET_OS_OSX
261 #  elif !defined(TARGET_OS_OSX) || TARGET_OS_OSX
262 PLATFORM_TRIPLET=darwin
263 #  else
264 #    error unknown Apple platform
265 #  endif
266 #elif defined(__VXWORKS__)
267 PLATFORM_TRIPLET=vxworks
268 #elif defined(__wasm32__)
269 #  if defined(__EMSCRIPTEN__)
270 PLATFORM_TRIPLET=wasm32-emscripten
271 #  elif defined(__wasi__)
272 #    if defined(_REENTRANT)
273 PLATFORM_TRIPLET=wasm32-wasi-threads
274 #    else
275 PLATFORM_TRIPLET=wasm32-wasi
276 #    endif
277 #  else
278 #    error unknown wasm32 platform
279 #  endif
280 #elif defined(__wasm64__)
281 #  if defined(__EMSCRIPTEN__)
282 PLATFORM_TRIPLET=wasm64-emscripten
283 #  elif defined(__wasi__)
284 PLATFORM_TRIPLET=wasm64-wasi
285 #  else
286 #    error unknown wasm64 platform
287 #  endif
288 #else
289 # error unknown platform triplet
290 #endif
291