mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			290 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			290 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Detect platform triplet from builtin defines
 | |
|  * cc -E Misc/platform_triplet.c | grep '^PLATFORM_TRIPLET=' | tr -d ' '
 | |
|  */
 | |
| #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__)
 | |
| #  if defined(__x86_64__)
 | |
| PLATFORM_TRIPLET=x86_64-linux-android
 | |
| #  elif defined(__i386__)
 | |
| PLATFORM_TRIPLET=i686-linux-android
 | |
| #  elif defined(__aarch64__)
 | |
| PLATFORM_TRIPLET=aarch64-linux-android
 | |
| #  elif defined(__arm__)
 | |
| PLATFORM_TRIPLET=arm-linux-androideabi
 | |
| #  else
 | |
| #    error unknown Android platform
 | |
| #  endif
 | |
| 
 | |
| #elif defined(__linux__)
 | |
| /*
 | |
|  * BEGIN of Linux block
 | |
|  */
 | |
| // Detect libc (based on config.guess)
 | |
| # include <features.h>
 | |
| # if defined(__UCLIBC__)
 | |
| #  error uclibc not supported
 | |
| # elif defined(__dietlibc__)
 | |
| #  error dietlibc not supported
 | |
| # elif defined(__GLIBC__)
 | |
| #  define LIBC gnu
 | |
| #  define LIBC_X32 gnux32
 | |
| #  if defined(__ARM_PCS_VFP)
 | |
| #   define LIBC_ARM gnueabihf
 | |
| #  else
 | |
| #   define LIBC_ARM gnueabi
 | |
| #  endif
 | |
| #  if defined(__loongarch__)
 | |
| #   if defined(__loongarch_soft_float)
 | |
| #    define LIBC_LA gnusf
 | |
| #   elif defined(__loongarch_single_float)
 | |
| #    define LIBC_LA gnuf32
 | |
| #   elif defined(__loongarch_double_float)
 | |
| #    define LIBC_LA gnu
 | |
| #   else
 | |
| #    error unknown loongarch floating-point base abi
 | |
| #   endif
 | |
| #  endif
 | |
| #  if defined(_MIPS_SIM)
 | |
| #   if defined(__mips_hard_float)
 | |
| #    if _MIPS_SIM == _ABIO32
 | |
| #     define LIBC_MIPS gnu
 | |
| #    elif _MIPS_SIM == _ABIN32
 | |
| #     define LIBC_MIPS gnuabin32
 | |
| #    elif _MIPS_SIM == _ABI64
 | |
| #     define LIBC_MIPS gnuabi64
 | |
| #    else
 | |
| #     error unknown mips sim value
 | |
| #    endif
 | |
| #   else
 | |
| #    if _MIPS_SIM == _ABIO32
 | |
| #     define LIBC_MIPS gnusf
 | |
| #    elif _MIPS_SIM == _ABIN32
 | |
| #     define LIBC_MIPS gnuabin32sf
 | |
| #    elif _MIPS_SIM == _ABI64
 | |
| #     define LIBC_MIPS gnuabi64sf
 | |
| #    else
 | |
| #     error unknown mips sim value
 | |
| #    endif
 | |
| #   endif
 | |
| #  endif
 | |
| #  if defined(__SPE__)
 | |
| #   define LIBC_PPC gnuspe
 | |
| #  else
 | |
| #   define LIBC_PPC gnu
 | |
| #  endif
 | |
| # else
 | |
| // Heuristic to detect musl libc
 | |
| #  include <stdarg.h>
 | |
| #  ifdef __DEFINED_va_list
 | |
| #   define LIBC musl
 | |
| #   define LIBC_X32 muslx32
 | |
| #   if defined(__ARM_PCS_VFP)
 | |
| #    define LIBC_ARM musleabihf
 | |
| #   else
 | |
| #    define LIBC_ARM musleabi
 | |
| #   endif
 | |
| #   if defined(__loongarch__)
 | |
| #    if defined(__loongarch_soft_float)
 | |
| #     define LIBC_LA muslsf
 | |
| #    elif defined(__loongarch_single_float)
 | |
| #     define LIBC_LA muslf32
 | |
| #    elif defined(__loongarch_double_float)
 | |
| #     define LIBC_LA musl
 | |
| #    else
 | |
| #     error unknown loongarch floating-point base abi
 | |
| #    endif
 | |
| #   endif
 | |
| #   if defined(_MIPS_SIM)
 | |
| #    if defined(__mips_hard_float)
 | |
| #     if _MIPS_SIM == _ABIO32
 | |
| #      define LIBC_MIPS musl
 | |
| #     elif _MIPS_SIM == _ABIN32
 | |
| #      define LIBC_MIPS musln32
 | |
| #     elif _MIPS_SIM == _ABI64
 | |
| #      define LIBC_MIPS musl
 | |
| #     else
 | |
| #      error unknown mips sim value
 | |
| #     endif
 | |
| #    else
 | |
| #     if _MIPS_SIM == _ABIO32
 | |
| #      define LIBC_MIPS muslsf
 | |
| #     elif _MIPS_SIM == _ABIN32
 | |
| #      define LIBC_MIPS musln32sf
 | |
| #     elif _MIPS_SIM == _ABI64
 | |
| #      define LIBC_MIPS muslsf
 | |
| #     else
 | |
| #      error unknown mips sim value
 | |
| #     endif
 | |
| #    endif
 | |
| #   endif
 | |
| #   if defined(_SOFT_FLOAT) || defined(__NO_FPRS__)
 | |
| #    define LIBC_PPC muslsf
 | |
| #   else
 | |
| #    define LIBC_PPC musl
 | |
| #   endif
 | |
| #  else
 | |
| #   error unknown libc
 | |
| #  endif
 | |
| # endif
 | |
| 
 | |
| # if defined(__x86_64__) && defined(__LP64__)
 | |
| PLATFORM_TRIPLET=x86_64-linux-LIBC
 | |
| # elif defined(__x86_64__) && defined(__ILP32__)
 | |
| PLATFORM_TRIPLET=x86_64-linux-LIBC_X32
 | |
| # elif defined(__i386__)
 | |
| PLATFORM_TRIPLET=i386-linux-LIBC
 | |
| # elif defined(__aarch64__) && defined(__AARCH64EL__)
 | |
| #  if defined(__ILP32__)
 | |
| PLATFORM_TRIPLET=aarch64_ilp32-linux-LIBC
 | |
| #  else
 | |
| PLATFORM_TRIPLET=aarch64-linux-LIBC
 | |
| #  endif
 | |
| # elif defined(__aarch64__) && defined(__AARCH64EB__)
 | |
| #  if defined(__ILP32__)
 | |
| PLATFORM_TRIPLET=aarch64_be_ilp32-linux-LIBC
 | |
| #  else
 | |
| PLATFORM_TRIPLET=aarch64_be-linux-LIBC
 | |
| #  endif
 | |
| # elif defined(__alpha__)
 | |
| PLATFORM_TRIPLET=alpha-linux-LIBC
 | |
| # elif defined(__ARM_EABI__)
 | |
| #  if defined(__ARMEL__)
 | |
| PLATFORM_TRIPLET=arm-linux-LIBC_ARM
 | |
| #  else
 | |
| PLATFORM_TRIPLET=armeb-linux-LIBC_ARM
 | |
| #  endif
 | |
| # elif defined(__hppa__)
 | |
| PLATFORM_TRIPLET=hppa-linux-LIBC
 | |
| # elif defined(__ia64__)
 | |
| PLATFORM_TRIPLET=ia64-linux-LIBC
 | |
| # elif defined(__loongarch__) && defined(__loongarch_lp64)
 | |
| PLATFORM_TRIPLET=loongarch64-linux-LIBC_LA
 | |
| # elif defined(__m68k__) && !defined(__mcoldfire__)
 | |
| PLATFORM_TRIPLET=m68k-linux-LIBC
 | |
| # elif defined(__mips__)
 | |
| #  if defined(__mips_isa_rev) && (__mips_isa_rev >=6)
 | |
| #   if defined(_MIPSEL) && defined(__mips64)
 | |
| PLATFORM_TRIPLET=mipsisa64r6el-linux-LIBC_MIPS
 | |
| #   elif defined(_MIPSEL)
 | |
| PLATFORM_TRIPLET=mipsisa32r6el-linux-LIBC_MIPS
 | |
| #   elif defined(__mips64)
 | |
| PLATFORM_TRIPLET=mipsisa64r6-linux-LIBC_MIPS
 | |
| #   else
 | |
| PLATFORM_TRIPLET=mipsisa32r6-linux-LIBC_MIPS
 | |
| #   endif
 | |
| #  else
 | |
| #   if defined(_MIPSEL) && defined(__mips64)
 | |
| PLATFORM_TRIPLET=mips64el-linux-LIBC_MIPS
 | |
| #   elif defined(_MIPSEL)
 | |
| PLATFORM_TRIPLET=mipsel-linux-LIBC_MIPS
 | |
| #   elif defined(__mips64)
 | |
| PLATFORM_TRIPLET=mips64-linux-LIBC_MIPS
 | |
| #   else
 | |
| PLATFORM_TRIPLET=mips-linux-LIBC_MIPS
 | |
| #   endif
 | |
| #  endif
 | |
| # elif defined(__or1k__)
 | |
| PLATFORM_TRIPLET=or1k-linux-LIBC
 | |
| # elif defined(__powerpc64__)
 | |
| #  if defined(__LITTLE_ENDIAN__)
 | |
| PLATFORM_TRIPLET=powerpc64le-linux-LIBC
 | |
| #  else
 | |
| PLATFORM_TRIPLET=powerpc64-linux-LIBC
 | |
| #  endif
 | |
| # elif defined(__powerpc__)
 | |
| PLATFORM_TRIPLET=powerpc-linux-LIBC_PPC
 | |
| # elif defined(__s390x__)
 | |
| PLATFORM_TRIPLET=s390x-linux-LIBC
 | |
| # elif defined(__s390__)
 | |
| PLATFORM_TRIPLET=s390-linux-LIBC
 | |
| # elif defined(__sh__) && defined(__LITTLE_ENDIAN__)
 | |
| PLATFORM_TRIPLET=sh4-linux-LIBC
 | |
| # elif defined(__sparc__) && defined(__arch64__)
 | |
| PLATFORM_TRIPLET=sparc64-linux-LIBC
 | |
| # elif defined(__sparc__)
 | |
| PLATFORM_TRIPLET=sparc-linux-LIBC
 | |
| # elif defined(__riscv)
 | |
| #  if __riscv_xlen == 32
 | |
| PLATFORM_TRIPLET=riscv32-linux-LIBC
 | |
| #  elif __riscv_xlen == 64
 | |
| PLATFORM_TRIPLET=riscv64-linux-LIBC
 | |
| #  else
 | |
| #   error unknown platform triplet
 | |
| #  endif
 | |
| # else
 | |
| #   error unknown platform triplet
 | |
| # endif
 | |
| /*
 | |
|  * END of Linux block
 | |
|  */
 | |
| #elif defined(__FreeBSD_kernel__)
 | |
| # if defined(__LP64__)
 | |
| PLATFORM_TRIPLET=x86_64-kfreebsd-gnu
 | |
| # elif defined(__i386__)
 | |
| PLATFORM_TRIPLET=i386-kfreebsd-gnu
 | |
| # else
 | |
| #   error unknown platform triplet
 | |
| # endif
 | |
| #elif defined(__gnu_hurd__)
 | |
| # if defined(__x86_64__) && defined(__LP64__)
 | |
| PLATFORM_TRIPLET=x86_64-gnu
 | |
| # elif defined(__i386__)
 | |
| PLATFORM_TRIPLET=i386-gnu
 | |
| # else
 | |
| #   error unknown platform triplet
 | |
| # endif
 | |
| #elif defined(__APPLE__)
 | |
| #  include "TargetConditionals.h"
 | |
| // Older macOS SDKs do not define TARGET_OS_*
 | |
| #  if defined(TARGET_OS_IOS) && TARGET_OS_IOS
 | |
| #    if defined(TARGET_OS_SIMULATOR) && TARGET_OS_SIMULATOR
 | |
| #      if __x86_64__
 | |
| PLATFORM_TRIPLET=x86_64-iphonesimulator
 | |
| #      else
 | |
| PLATFORM_TRIPLET=arm64-iphonesimulator
 | |
| #      endif
 | |
| #    else
 | |
| PLATFORM_TRIPLET=arm64-iphoneos
 | |
| #    endif
 | |
| // Older macOS SDKs do not define TARGET_OS_OSX
 | |
| #  elif !defined(TARGET_OS_OSX) || TARGET_OS_OSX
 | |
| PLATFORM_TRIPLET=darwin
 | |
| #  else
 | |
| #    error unknown Apple platform
 | |
| #  endif
 | |
| #elif defined(__VXWORKS__)
 | |
| PLATFORM_TRIPLET=vxworks
 | |
| #elif defined(__wasm32__)
 | |
| #  if defined(__EMSCRIPTEN__)
 | |
| PLATFORM_TRIPLET=wasm32-emscripten
 | |
| #  elif defined(__wasi__)
 | |
| #    if defined(_REENTRANT)
 | |
| PLATFORM_TRIPLET=wasm32-wasi-threads
 | |
| #    else
 | |
| PLATFORM_TRIPLET=wasm32-wasi
 | |
| #    endif
 | |
| #  else
 | |
| #    error unknown wasm32 platform
 | |
| #  endif
 | |
| #elif defined(__wasm64__)
 | |
| #  if defined(__EMSCRIPTEN__)
 | |
| PLATFORM_TRIPLET=wasm64-emscripten
 | |
| #  elif defined(__wasi__)
 | |
| PLATFORM_TRIPLET=wasm64-wasi
 | |
| #  else
 | |
| #    error unknown wasm64 platform
 | |
| #  endif
 | |
| #else
 | |
| # error unknown platform triplet
 | |
| #endif
 | 
