mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-100086: Add build info to test.libregrtest (#100093)
The Python test runner (libregrtest) now logs Python build information like "debug" vs "release" build, or LTO and PGO optimizations.
This commit is contained in:
parent
91a8e002c2
commit
3c89202247
3 changed files with 91 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
|||
import math
|
||||
import os.path
|
||||
import sys
|
||||
import sysconfig
|
||||
import textwrap
|
||||
from test import support
|
||||
|
||||
|
@ -208,3 +209,87 @@ def clear_caches():
|
|||
pass
|
||||
else:
|
||||
fractions._hash_algorithm.cache_clear()
|
||||
|
||||
|
||||
def get_build_info():
|
||||
# Get most important configure and build options as a list of strings.
|
||||
# Example: ['debug', 'ASAN+MSAN'] or ['release', 'LTO+PGO'].
|
||||
|
||||
config_args = sysconfig.get_config_var('CONFIG_ARGS') or ''
|
||||
cflags = sysconfig.get_config_var('PY_CFLAGS') or ''
|
||||
cflags_nodist = sysconfig.get_config_var('PY_CFLAGS_NODIST') or ''
|
||||
ldflags_nodist = sysconfig.get_config_var('PY_LDFLAGS_NODIST') or ''
|
||||
|
||||
build = []
|
||||
if hasattr(sys, 'gettotalrefcount'):
|
||||
# --with-pydebug
|
||||
build.append('debug')
|
||||
|
||||
if '-DNDEBUG' in (cflags + cflags_nodist):
|
||||
build.append('without_assert')
|
||||
else:
|
||||
build.append('release')
|
||||
|
||||
if '--with-assertions' in config_args:
|
||||
build.append('with_assert')
|
||||
elif '-DNDEBUG' not in (cflags + cflags_nodist):
|
||||
build.append('with_assert')
|
||||
|
||||
# --enable-framework=name
|
||||
framework = sysconfig.get_config_var('PYTHONFRAMEWORK')
|
||||
if framework:
|
||||
build.append(f'framework={framework}')
|
||||
|
||||
# --enable-shared
|
||||
shared = int(sysconfig.get_config_var('PY_ENABLE_SHARED') or '0')
|
||||
if shared:
|
||||
build.append('shared')
|
||||
|
||||
# --with-lto
|
||||
optimizations = []
|
||||
if '-flto=thin' in ldflags_nodist:
|
||||
optimizations.append('ThinLTO')
|
||||
elif '-flto' in ldflags_nodist:
|
||||
optimizations.append('LTO')
|
||||
|
||||
# --enable-optimizations
|
||||
pgo_options = (
|
||||
# GCC
|
||||
'-fprofile-use',
|
||||
# clang: -fprofile-instr-use=code.profclangd
|
||||
'-fprofile-instr-use',
|
||||
# ICC
|
||||
"-prof-use",
|
||||
)
|
||||
if any(option in cflags_nodist for option in pgo_options):
|
||||
optimizations.append('PGO')
|
||||
if optimizations:
|
||||
build.append('+'.join(optimizations))
|
||||
|
||||
# --with-address-sanitizer
|
||||
sanitizers = []
|
||||
if support.check_sanitizer(address=True):
|
||||
sanitizers.append("ASAN")
|
||||
# --with-memory-sanitizer
|
||||
if support.check_sanitizer(memory=True):
|
||||
sanitizers.append("MSAN")
|
||||
# --with-undefined-behavior-sanitizer
|
||||
if support.check_sanitizer(ub=True):
|
||||
sanitizers.append("UBSAN")
|
||||
if sanitizers:
|
||||
build.append('+'.join(sanitizers))
|
||||
|
||||
# --with-trace-refs
|
||||
if hasattr(sys, 'getobjects'):
|
||||
build.append("TraceRefs")
|
||||
# --enable-pystats
|
||||
if hasattr(sys, '_stats_on'):
|
||||
build.append("pystats")
|
||||
# --with-valgrind
|
||||
if sysconfig.get_config_var('WITH_VALGRIND'):
|
||||
build.append("valgrind")
|
||||
# --with-dtrace
|
||||
if sysconfig.get_config_var('WITH_DTRACE'):
|
||||
build.append("dtrace")
|
||||
|
||||
return build
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue