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