mirror of https://github.com/python/cpython
gh-93491: Add support tier detection to configure (GH-93492)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Co-authored-by: Steve Dower <steve.dower@microsoft.com> Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
parent
a87c9b538f
commit
3124d9a5aa
|
@ -0,0 +1 @@
|
|||
``configure`` now detects and reports :pep:`11` support tiers.
|
|
@ -113,20 +113,30 @@ WIN32 is still required for the locale module.
|
|||
#define MS_WIN64
|
||||
#endif
|
||||
|
||||
/* set the COMPILER */
|
||||
/* set the COMPILER and support tier
|
||||
*
|
||||
* win_amd64 MSVC (x86_64-pc-windows-msvc): 1
|
||||
* win32 MSVC (i686-pc-windows-msvc): 1
|
||||
* win_arm64 MSVC (aarch64-pc-windows-msvc): 3
|
||||
* other archs and ICC: 0
|
||||
*/
|
||||
#ifdef MS_WIN64
|
||||
#if defined(_M_X64) || defined(_M_AMD64)
|
||||
#if defined(__INTEL_COMPILER)
|
||||
#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 64 bit (amd64) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]")
|
||||
#define PY_SUPPORT_TIER 0
|
||||
#else
|
||||
#define COMPILER _Py_PASTE_VERSION("64 bit (AMD64)")
|
||||
#define PY_SUPPORT_TIER 1
|
||||
#endif /* __INTEL_COMPILER */
|
||||
#define PYD_PLATFORM_TAG "win_amd64"
|
||||
#elif defined(_M_ARM64)
|
||||
#define COMPILER _Py_PASTE_VERSION("64 bit (ARM64)")
|
||||
#define PY_SUPPORT_TIER 3
|
||||
#define PYD_PLATFORM_TAG "win_arm64"
|
||||
#else
|
||||
#define COMPILER _Py_PASTE_VERSION("64 bit (Unknown)")
|
||||
#define PY_SUPPORT_TIER 0
|
||||
#endif
|
||||
#endif /* MS_WIN64 */
|
||||
|
||||
|
@ -173,15 +183,19 @@ typedef _W64 int Py_ssize_t;
|
|||
#if defined(_M_IX86)
|
||||
#if defined(__INTEL_COMPILER)
|
||||
#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 32 bit (Intel) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]")
|
||||
#define PY_SUPPORT_TIER 0
|
||||
#else
|
||||
#define COMPILER _Py_PASTE_VERSION("32 bit (Intel)")
|
||||
#define PY_SUPPORT_TIER 1
|
||||
#endif /* __INTEL_COMPILER */
|
||||
#define PYD_PLATFORM_TAG "win32"
|
||||
#elif defined(_M_ARM)
|
||||
#define COMPILER _Py_PASTE_VERSION("32 bit (ARM)")
|
||||
#define PYD_PLATFORM_TAG "win_arm32"
|
||||
#define PY_SUPPORT_TIER 0
|
||||
#else
|
||||
#define COMPILER _Py_PASTE_VERSION("32 bit (Unknown)")
|
||||
#define PY_SUPPORT_TIER 0
|
||||
#endif
|
||||
#endif /* MS_WIN32 && !MS_WIN64 */
|
||||
|
||||
|
|
|
@ -5213,6 +5213,39 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
|
|||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CC compiler name" >&5
|
||||
$as_echo_n "checking for CC compiler name... " >&6; }
|
||||
if ${ac_cv_cc_name+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
|
||||
cat > conftest.c <<EOF
|
||||
#if defined(__INTEL_COMPILER) || defined(__ICC)
|
||||
icc
|
||||
#elif defined(__ibmxl__) || defined(__xlc__) || defined(__xlC__)
|
||||
xlc
|
||||
#elif defined(_MSC_VER)
|
||||
msvc
|
||||
#elif defined(__clang__)
|
||||
clang
|
||||
#elif defined(__GNUC__)
|
||||
gcc
|
||||
#else
|
||||
# error unknown compiler
|
||||
#endif
|
||||
EOF
|
||||
|
||||
if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
|
||||
ac_cv_cc_name=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '`
|
||||
else
|
||||
ac_cv_cc_name="unknown"
|
||||
fi
|
||||
rm -f conftest.c conftest.out
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cc_name" >&5
|
||||
$as_echo "$ac_cv_cc_name" >&6; }
|
||||
|
||||
# checks for UNIX variants that set C preprocessor variables
|
||||
# may set _GNU_SOURCE, __EXTENSIONS__, _POSIX_PTHREAD_SEMANTICS,
|
||||
# _POSIX_SOURCE, _POSIX_1_SOURCE, and more
|
||||
|
@ -6172,6 +6205,66 @@ if test x$MULTIARCH != x; then
|
|||
fi
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PEP 11 support tier" >&5
|
||||
$as_echo_n "checking for PEP 11 support tier... " >&6; }
|
||||
case $host/$ac_cv_cc_name in #(
|
||||
x86_64-*-linux-gnu/gcc) :
|
||||
PY_SUPPORT_TIER=1 ;; #(
|
||||
x86_64-apple-darwin*/clang) :
|
||||
PY_SUPPORT_TIER=1 ;; #(
|
||||
i686-pc-windows-msvc/msvc) :
|
||||
PY_SUPPORT_TIER=1 ;; #(
|
||||
x86_64-pc-windows-msvc/msvc) :
|
||||
PY_SUPPORT_TIER=1 ;; #(
|
||||
|
||||
aarch64-apple-darwin*/clang) :
|
||||
PY_SUPPORT_TIER=2 ;; #(
|
||||
aarch64-*-linux-gnu/gcc) :
|
||||
PY_SUPPORT_TIER=2 ;; #(
|
||||
aarch64-*-linux-gnu/clang) :
|
||||
PY_SUPPORT_TIER=2 ;; #(
|
||||
powerpc64le-*-linux-gnu/gcc) :
|
||||
PY_SUPPORT_TIER=2 ;; #(
|
||||
x86_64-*-linux-gnu/clang) :
|
||||
PY_SUPPORT_TIER=2 ;; #(
|
||||
|
||||
aarch64-pc-windows-msvc/msvc) :
|
||||
PY_SUPPORT_TIER=3 ;; #(
|
||||
armv7l-*-linux-gnueabihf/gcc) :
|
||||
PY_SUPPORT_TIER=3 ;; #(
|
||||
powerpc64le-*-linux-gnu/clang) :
|
||||
PY_SUPPORT_TIER=3 ;; #(
|
||||
s390x-*-linux-gnu/gcc) :
|
||||
PY_SUPPORT_TIER=3 ;; #(
|
||||
x86_64-*-freebsd/clang) :
|
||||
PY_SUPPORT_TIER=3 ;; #(
|
||||
*) :
|
||||
PY_SUPPORT_TIER=0
|
||||
;;
|
||||
esac
|
||||
|
||||
case $PY_SUPPORT_TIER in #(
|
||||
1) :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $host/$ac_cv_cc_name has tier 1 (supported)" >&5
|
||||
$as_echo "$host/$ac_cv_cc_name has tier 1 (supported)" >&6; } ;; #(
|
||||
2) :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $host/$ac_cv_cc_name has tier 2 (supported)" >&5
|
||||
$as_echo "$host/$ac_cv_cc_name has tier 2 (supported)" >&6; } ;; #(
|
||||
3) :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $host/$ac_cv_cc_name has tier 3 (partially supported)" >&5
|
||||
$as_echo "$host/$ac_cv_cc_name has tier 3 (partially supported)" >&6; } ;; #(
|
||||
*) :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $host/$ac_cv_cc_name is not supported" >&5
|
||||
$as_echo "$as_me: WARNING: $host/$ac_cv_cc_name is not supported" >&2;}
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define PY_SUPPORT_TIER $PY_SUPPORT_TIER
|
||||
_ACEOF
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wl,--no-as-needed" >&5
|
||||
$as_echo_n "checking for -Wl,--no-as-needed... " >&6; }
|
||||
if ${ac_cv_wl_no_as_needed+:} false; then :
|
||||
|
@ -26296,3 +26389,16 @@ If you want a release build with all stable optimizations active (PGO, etc),
|
|||
please run ./configure --enable-optimizations
|
||||
" >&6;}
|
||||
fi
|
||||
|
||||
if test "x$PY_SUPPORT_TIER" = x0; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
|
||||
|
||||
Platform \"$host\" with compiler \"$ac_cv_cc_name\" is not supported by the
|
||||
CPython core team, see https://peps.python.org/pep-0011/ for more information.
|
||||
" >&5
|
||||
$as_echo "$as_me: WARNING:
|
||||
|
||||
Platform \"$host\" with compiler \"$ac_cv_cc_name\" is not supported by the
|
||||
CPython core team, see https://peps.python.org/pep-0011/ for more information.
|
||||
" >&2;}
|
||||
fi
|
||||
|
|
71
configure.ac
71
configure.ac
|
@ -770,6 +770,35 @@ AC_PROG_GREP
|
|||
AC_PROG_SED
|
||||
AC_PROG_EGREP
|
||||
|
||||
dnl detect compiler name
|
||||
dnl check for xlc before clang, newer xlc's can use clang as frontend.
|
||||
dnl check for GCC last, other compilers set __GNUC__, too.
|
||||
dnl msvc is listed for completeness.
|
||||
AC_CACHE_CHECK([for CC compiler name], [ac_cv_cc_name], [
|
||||
cat > conftest.c <<EOF
|
||||
#if defined(__INTEL_COMPILER) || defined(__ICC)
|
||||
icc
|
||||
#elif defined(__ibmxl__) || defined(__xlc__) || defined(__xlC__)
|
||||
xlc
|
||||
#elif defined(_MSC_VER)
|
||||
msvc
|
||||
#elif defined(__clang__)
|
||||
clang
|
||||
#elif defined(__GNUC__)
|
||||
gcc
|
||||
#else
|
||||
# error unknown compiler
|
||||
#endif
|
||||
EOF
|
||||
|
||||
if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
|
||||
ac_cv_cc_name=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '`
|
||||
else
|
||||
ac_cv_cc_name="unknown"
|
||||
fi
|
||||
rm -f conftest.c conftest.out
|
||||
])
|
||||
|
||||
# checks for UNIX variants that set C preprocessor variables
|
||||
# may set _GNU_SOURCE, __EXTENSIONS__, _POSIX_PTHREAD_SEMANTICS,
|
||||
# _POSIX_SOURCE, _POSIX_1_SOURCE, and more
|
||||
|
@ -1031,6 +1060,42 @@ if test x$MULTIARCH != x; then
|
|||
fi
|
||||
AC_SUBST(MULTIARCH_CPPFLAGS)
|
||||
|
||||
dnl Support tiers according to https://peps.python.org/pep-0011/
|
||||
dnl
|
||||
dnl NOTE: Windows support tiers are defined in PC/pyconfig.h.
|
||||
dnl
|
||||
AC_MSG_CHECKING([for PEP 11 support tier])
|
||||
AS_CASE([$host/$ac_cv_cc_name],
|
||||
[x86_64-*-linux-gnu/gcc], [PY_SUPPORT_TIER=1], dnl Linux on AMD64, any vendor, glibc, gcc
|
||||
[x86_64-apple-darwin*/clang], [PY_SUPPORT_TIER=1], dnl macOS on Intel, any version
|
||||
[i686-pc-windows-msvc/msvc], [PY_SUPPORT_TIER=1], dnl 32bit Windows on Intel, MSVC
|
||||
[x86_64-pc-windows-msvc/msvc], [PY_SUPPORT_TIER=1], dnl 64bit Windows on AMD64, MSVC
|
||||
|
||||
[aarch64-apple-darwin*/clang], [PY_SUPPORT_TIER=2], dnl macOS on M1, any version
|
||||
[aarch64-*-linux-gnu/gcc], [PY_SUPPORT_TIER=2], dnl Linux ARM64, glibc, gcc+clang
|
||||
[aarch64-*-linux-gnu/clang], [PY_SUPPORT_TIER=2],
|
||||
[powerpc64le-*-linux-gnu/gcc], [PY_SUPPORT_TIER=2], dnl Linux on PPC64 little endian, glibc, gcc
|
||||
[x86_64-*-linux-gnu/clang], [PY_SUPPORT_TIER=2], dnl Linux on AMD64, any vendor, glibc, clang
|
||||
|
||||
[aarch64-pc-windows-msvc/msvc], [PY_SUPPORT_TIER=3], dnl Windows ARM64, MSVC
|
||||
[armv7l-*-linux-gnueabihf/gcc], [PY_SUPPORT_TIER=3], dnl ARMv7 LE with hardware floats, any vendor, glibc, gcc
|
||||
[powerpc64le-*-linux-gnu/clang], [PY_SUPPORT_TIER=3], dnl Linux on PPC64 little endian, glibc, clang
|
||||
[s390x-*-linux-gnu/gcc], [PY_SUPPORT_TIER=3], dnl Linux on 64bit s390x (big endian), glibc, gcc
|
||||
dnl [wasm32-unknown-emscripten/clang], [PY_SUPPORT_TIER=3], dnl WebAssembly Emscripten
|
||||
dnl [wasm32-unknown-wasi/clang], [PY_SUPPORT_TIER=3], dnl WebAssembly System Interface
|
||||
[x86_64-*-freebsd/clang], [PY_SUPPORT_TIER=3], dnl FreeBSD on AMD64
|
||||
[PY_SUPPORT_TIER=0]
|
||||
)
|
||||
|
||||
AS_CASE([$PY_SUPPORT_TIER],
|
||||
[1], [AC_MSG_RESULT([$host/$ac_cv_cc_name has tier 1 (supported)])],
|
||||
[2], [AC_MSG_RESULT([$host/$ac_cv_cc_name has tier 2 (supported)])],
|
||||
[3], [AC_MSG_RESULT([$host/$ac_cv_cc_name has tier 3 (partially supported)])],
|
||||
[AC_MSG_WARN([$host/$ac_cv_cc_name is not supported])]
|
||||
)
|
||||
|
||||
AC_DEFINE_UNQUOTED([PY_SUPPORT_TIER], [$PY_SUPPORT_TIER], [PEP 11 Support tier (1, 2, 3 or 0 for unsupported)])
|
||||
|
||||
AC_CACHE_CHECK([for -Wl,--no-as-needed], [ac_cv_wl_no_as_needed], [
|
||||
save_LDFLAGS="$LDFLAGS"
|
||||
AS_VAR_APPEND([LDFLAGS], [-Wl,--no-as-needed])
|
||||
|
@ -6878,3 +6943,9 @@ If you want a release build with all stable optimizations active (PGO, etc),
|
|||
please run ./configure --enable-optimizations
|
||||
])
|
||||
fi
|
||||
|
||||
AS_VAR_IF([PY_SUPPORT_TIER], [0], [AC_MSG_WARN([
|
||||
|
||||
Platform "$host" with compiler "$ac_cv_cc_name" is not supported by the
|
||||
CPython core team, see https://peps.python.org/pep-0011/ for more information.
|
||||
])])
|
||||
|
|
|
@ -1515,6 +1515,9 @@
|
|||
/* Cipher suite string for PY_SSL_DEFAULT_CIPHERS=0 */
|
||||
#undef PY_SSL_DEFAULT_CIPHER_STRING
|
||||
|
||||
/* PEP 11 Support tier (1, 2, 3 or 0 for unsupported) */
|
||||
#undef PY_SUPPORT_TIER
|
||||
|
||||
/* Define if you want to build an interpreter with many run-time checks. */
|
||||
#undef Py_DEBUG
|
||||
|
||||
|
|
Loading…
Reference in New Issue