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:
Christian Heimes 2022-06-10 15:25:33 +02:00 committed by GitHub
parent a87c9b538f
commit 3124d9a5aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 196 additions and 1 deletions

View file

@ -0,0 +1 @@
``configure`` now detects and reports :pep:`11` support tiers.

View file

@ -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 */

106
configure generated vendored
View file

@ -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

View file

@ -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.
])])

View file

@ -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