diff --git a/Misc/platform_triplet.c b/Misc/platform_triplet.c new file mode 100644 index 00000000000000..27a6d5ad85b8aa --- /dev/null +++ b/Misc/platform_triplet.c @@ -0,0 +1,197 @@ +/* Detect platform triplet from builtin defines + * cc -E Misc/platform_triplet.c | grep -v '^#' | grep -v '^ *$' | grep -v '^typedef' | 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__) + # Android is not a multiarch system. +#elif defined(__linux__) +/* + * BEGIN of Linux block + */ +// detect libc (glibc, musl) +# include +# if defined(__UCLIBC__) +# error "uclibc is not supported" +# elif defined(__dietlibc__) +# error "dietlibc is not supported" +# elif defined(__GLIBC__) +# define LIBC gnu +# define LIBC_X32 gnux32 +# define LIBC_ARM_EABIHF gnueabihf +# define LIBC_ARM_EABI gnueabi +# define LIBC_PPC_SPE gnuspe +# if defined(_MIPS_SIM) +# if _MIPS_SIM == _ABIO32 + define LIBC_MIPS_SIM gnu +# elif _MIPS_SIM == _ABIN32 + define LIBC_MIPS_SIM gnuabin32 +# elif _MIPS_SIM == _ABI64 + define LIBC_MIPS_SIM gnuabi64 +# endif +# endif /* defined(_MIPS_SIM) */ +# else +/* heuristic to detect musl libc (based on config.guess). + * Adds "typedef __builtin_va_list va_list;" to output. + */ +# include +# ifdef __DEFINED_va_list +# define LIBC musl +// # define LIBC_X32 +# define LIBC_ARM_EABIHF musleabihf +# define LIBC_ARM_EABI musleabi +//# define LIBC_PPC_SPE +# define LIBC_MIPS_SIM musl +# else +# error "unknown libc" +# endif +#endif + +# if defined(__x86_64__) && defined(__LP64__) + x86_64-linux-LIBC +# elif defined(__x86_64__) && defined(__ILP32__) && defined(LIBC_X32) + x86_64-linux-LIBC_X32 +# elif defined(__i386__) + i386-linux-LIBC +# elif defined(__aarch64__) && defined(__AARCH64EL__) +# if defined(__ILP32__) + aarch64_ilp32-linux-LIBC +# else + aarch64-linux-LIBC +# endif +# elif defined(__aarch64__) && defined(__AARCH64EB__) +# if defined(__ILP32__) + aarch64_be_ilp32-linux-LIBC +# else + aarch64_be-linux-LIBC +# endif +# elif defined(__alpha__) + alpha-linux-LIBC +# elif defined(__ARM_EABI__) && defined(__ARM_PCS_VFP) && defined(LIBC_ARM_EABIHF) +# if defined(__ARMEL__) + arm-linux-LIBC_ARM_EABIHF +# else + armeb-linux-LIBC_ARM_EABIHF +# endif +# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP) && defined(LIBC_ARM_EABI) +# if defined(__ARMEL__) + arm-linux-LIBC_ARM_EABI +# else + armeb-linux-LIBC_ARM_EABI +# endif +# elif defined(__hppa__) + hppa-linux-LIBC +# elif defined(__ia64__) + ia64-linux-LIBC +# elif defined(__m68k__) && !defined(__mcoldfire__) + m68k-linux-LIBC +# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) && defined(_MIPSEL) && defined(LIBC_MIPS_SIM) +# if _MIPS_SIM == _ABIO32 + mipsisa32r6el-linux-LIBC_MIPS_SIM +# elif (_MIPS_SIM == _ABIN32) || (_MIPS_SIM == _ABI64) + mipsisa64r6el-linux-LIBC_MIPS_SIM +# else +# error unknown platform triplet +# endif +# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) && defined(LIBC_MIPS_SIM) +# if _MIPS_SIM == _ABIO32 + mipsisa32r6-linux-LIBC_MIPS_SIM +# elif (_MIPS_SIM == _ABIN32) || (_MIPS_SIM == _ABI64) + mipsisa64r6-linux-LIBC_MIPS_SIM +# else +# error unknown platform triplet +# endif +# elif defined(__mips_hard_float) && defined(_MIPSEL) && defined(LIBC_MIPS_SIM) +# if _MIPS_SIM == _ABIO32 + mipsel-linux-LIBC_MIPS_SIM +# elif (_MIPS_SIM == _ABIN32) || (_MIPS_SIM == _ABI64) + mips64el-linux-LIBC_MIPS_SIM +# else +# error unknown platform triplet +# endif +# elif defined(__mips_hard_float) && defined(LIBC_MIPS_SIM) +# if _MIPS_SIM == _ABIO32 + mips-linux-LIBC_MIPS_SIM +# elif (_MIPS_SIM == _ABIN32) || (_MIPS_SIM == _ABI64) + mips64-linux-LIBC_MIPS_SIM +# else +# error unknown platform triplet +# endif +# elif defined(__or1k__) + or1k-linux-LIBC +# elif defined(__powerpc__) && defined(__SPE__) && defined(LIBC_PPC_SPE) + powerpc-linux-LIBC_PPC_SPE +# elif defined(__powerpc64__) +# if defined(__LITTLE_ENDIAN__) + powerpc64le-linux-LIBC +# else + powerpc64-linux-LIBC +# endif +# elif defined(__powerpc__) + powerpc-linux-LIBC +# elif defined(__s390x__) + s390x-linux-LIBC +# elif defined(__s390__) + s390-linux-LIBC +# elif defined(__sh__) && defined(__LITTLE_ENDIAN__) + sh4-linux-LIBC +# elif defined(__sparc__) && defined(__arch64__) + sparc64-linux-LIBC +# elif defined(__sparc__) + sparc-linux-LIBC +# elif defined(__riscv) +# if __riscv_xlen == 32 + riscv32-linux-LIBC +# elif __riscv_xlen == 64 + 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__) + x86_64-kfreebsd-gnu +# elif defined(__i386__) + i386-kfreebsd-gnu +# else +# error unknown platform triplet +# endif +#elif defined(__gnu_hurd__) + i386-gnu +#elif defined(__APPLE__) + darwin +#elif defined(__VXWORKS__) + vxworks +#elif defined(__EMSCRIPTEN__) +# if defined(__wasm32__) + wasm32-emscripten +# elif defined(__wasm64__) + wasm64-emscripten +# else +# error unknown Emscripten platform +# endif +#elif defined(__wasi__) +# if defined(__wasm32__) + wasm32-wasi +# elif defined(__wasm64__) + wasm64-wasi +# else +# error unknown WASI platform +# endif +#else +# error unknown platform triplet +#endif diff --git a/configure b/configure index 82b55a3745d575..2ebbe17b66694c 100755 --- a/configure +++ b/configure @@ -6082,175 +6082,9 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } -cat > conftest.c <=6) && defined(_MIPSEL) -# if _MIPS_SIM == _ABIO32 - mipsisa32r6el-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mipsisa64r6el-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mipsisa64r6el-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) -# if _MIPS_SIM == _ABIO32 - mipsisa32r6-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mipsisa64r6-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mipsisa64r6-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__mips_hard_float) && defined(_MIPSEL) -# if _MIPS_SIM == _ABIO32 - mipsel-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mips64el-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mips64el-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__mips_hard_float) -# if _MIPS_SIM == _ABIO32 - mips-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mips64-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mips64-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__or1k__) - or1k-linux-gnu -# elif defined(__powerpc__) && defined(__SPE__) - powerpc-linux-gnuspe -# elif defined(__powerpc64__) -# if defined(__LITTLE_ENDIAN__) - powerpc64le-linux-gnu -# else - powerpc64-linux-gnu -# endif -# elif defined(__powerpc__) - powerpc-linux-gnu -# elif defined(__s390x__) - s390x-linux-gnu -# elif defined(__s390__) - s390-linux-gnu -# elif defined(__sh__) && defined(__LITTLE_ENDIAN__) - sh4-linux-gnu -# elif defined(__sparc__) && defined(__arch64__) - sparc64-linux-gnu -# elif defined(__sparc__) - sparc-linux-gnu -# elif defined(__riscv) -# if __riscv_xlen == 32 - riscv32-linux-gnu -# elif __riscv_xlen == 64 - riscv64-linux-gnu -# else -# error unknown platform triplet -# endif -# else -# error unknown platform triplet -# endif -#elif defined(__FreeBSD_kernel__) -# if defined(__LP64__) - x86_64-kfreebsd-gnu -# elif defined(__i386__) - i386-kfreebsd-gnu -# else -# error unknown platform triplet -# endif -#elif defined(__gnu_hurd__) - i386-gnu -#elif defined(__APPLE__) - darwin -#elif defined(__VXWORKS__) - vxworks -#elif defined(__wasm32__) -# if defined(__EMSCRIPTEN__) - wasm32-emscripten -# elif defined(__wasi__) - wasm32-wasi -# else -# error unknown wasm32 platform -# endif -#elif defined(__wasm64__) -# if defined(__EMSCRIPTEN__) - wasm64-emscripten -# elif defined(__wasi__) - wasm64-wasi -# else -# error unknown wasm64 platform -# endif -#else -# error unknown platform triplet -#endif - -EOF -if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then - PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` - case "$build_os" in - linux-musl*) - PLATFORM_TRIPLET=`echo "$PLATFORM_TRIPLET" | sed 's/linux-gnu/linux-musl/'` - ;; - esac +if $CPP $CPPFLAGS $srcdir/Misc/platform_triplet.c >conftest.out 2>/dev/null; then + PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | grep -v '^typedef' | tr -d ' '` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PLATFORM_TRIPLET" >&5 $as_echo "$PLATFORM_TRIPLET" >&6; } else @@ -6266,6 +6100,8 @@ case $ac_sys_system in #( MULTIARCH="" ;; #( FreeBSD*) : MULTIARCH="" ;; #( + Emscripten) : + MULTIARCH="" ;; #( *) : MULTIARCH=$($CC --print-multiarch 2>/dev/null) ;; diff --git a/configure.ac b/configure.ac index 85d9e8011835ed..7cb0fb37001bb5 100644 --- a/configure.ac +++ b/configure.ac @@ -909,175 +909,9 @@ fi AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) -cat > conftest.c <=6) && defined(_MIPSEL) -# if _MIPS_SIM == _ABIO32 - mipsisa32r6el-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mipsisa64r6el-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mipsisa64r6el-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) -# if _MIPS_SIM == _ABIO32 - mipsisa32r6-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mipsisa64r6-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mipsisa64r6-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__mips_hard_float) && defined(_MIPSEL) -# if _MIPS_SIM == _ABIO32 - mipsel-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mips64el-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mips64el-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__mips_hard_float) -# if _MIPS_SIM == _ABIO32 - mips-linux-gnu -# elif _MIPS_SIM == _ABIN32 - mips64-linux-gnuabin32 -# elif _MIPS_SIM == _ABI64 - mips64-linux-gnuabi64 -# else -# error unknown platform triplet -# endif -# elif defined(__or1k__) - or1k-linux-gnu -# elif defined(__powerpc__) && defined(__SPE__) - powerpc-linux-gnuspe -# elif defined(__powerpc64__) -# if defined(__LITTLE_ENDIAN__) - powerpc64le-linux-gnu -# else - powerpc64-linux-gnu -# endif -# elif defined(__powerpc__) - powerpc-linux-gnu -# elif defined(__s390x__) - s390x-linux-gnu -# elif defined(__s390__) - s390-linux-gnu -# elif defined(__sh__) && defined(__LITTLE_ENDIAN__) - sh4-linux-gnu -# elif defined(__sparc__) && defined(__arch64__) - sparc64-linux-gnu -# elif defined(__sparc__) - sparc-linux-gnu -# elif defined(__riscv) -# if __riscv_xlen == 32 - riscv32-linux-gnu -# elif __riscv_xlen == 64 - riscv64-linux-gnu -# else -# error unknown platform triplet -# endif -# else -# error unknown platform triplet -# endif -#elif defined(__FreeBSD_kernel__) -# if defined(__LP64__) - x86_64-kfreebsd-gnu -# elif defined(__i386__) - i386-kfreebsd-gnu -# else -# error unknown platform triplet -# endif -#elif defined(__gnu_hurd__) - i386-gnu -#elif defined(__APPLE__) - darwin -#elif defined(__VXWORKS__) - vxworks -#elif defined(__wasm32__) -# if defined(__EMSCRIPTEN__) - wasm32-emscripten -# elif defined(__wasi__) - wasm32-wasi -# else -# error unknown wasm32 platform -# endif -#elif defined(__wasm64__) -# if defined(__EMSCRIPTEN__) - wasm64-emscripten -# elif defined(__wasi__) - wasm64-wasi -# else -# error unknown wasm64 platform -# endif -#else -# error unknown platform triplet -#endif - -EOF -if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then - PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` - case "$build_os" in - linux-musl*) - PLATFORM_TRIPLET=`echo "$PLATFORM_TRIPLET" | sed 's/linux-gnu/linux-musl/'` - ;; - esac +if $CPP $CPPFLAGS $srcdir/Misc/platform_triplet.c >conftest.out 2>/dev/null; then + PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | grep -v '^typedef' | tr -d ' '` AC_MSG_RESULT([$PLATFORM_TRIPLET]) else AC_MSG_RESULT([none]) @@ -1088,6 +922,7 @@ AC_MSG_CHECKING([for multiarch]) AS_CASE([$ac_sys_system], [Darwin*], [MULTIARCH=""], [FreeBSD*], [MULTIARCH=""], + [Emscripten], [MULTIARCH=""], [MULTIARCH=$($CC --print-multiarch 2>/dev/null)] ) AC_SUBST([MULTIARCH])