From f7abe5b903ce5cd403f46f2111b374a40ae1a8e8 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Sep 2024 19:10:22 +0200 Subject: [PATCH 1/5] gh-124613, regrtest: Detect JIT build in build info --- Lib/test/libregrtest/utils.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index 7dcaf085a7ca91..0b04fff0a54829 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -300,7 +300,7 @@ def get_build_info(): 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 '' + cflags += ' ' + (sysconfig.get_config_var('PY_CFLAGS_NODIST') or '') ldflags_nodist = sysconfig.get_config_var('PY_LDFLAGS_NODIST') or '' build = [] @@ -313,16 +313,35 @@ def get_build_info(): # --with-pydebug build.append('debug') - if '-DNDEBUG' in (cflags + cflags_nodist): + if '-DNDEBUG' in cflags: 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): + elif '-DNDEBUG' not in cflags: build.append('with_assert') + # --enable-experimental-jit + tier2 = re.search('-D_Py_TIER2=([0-9]+)', cflags) + if tier2: + tier2 = int(tier2.group(1)) + if tier2 == 1: + jit = 'JIT' # =yes + elif tier2 == 2: + jit = 'JIT=yes-off' + elif tier2 == 4: + jit = 'JIT=interpreter' + elif tier2 == 6: # Secret option + jit = 'JIT=interpreter-off' + elif '-D_Py_JIT' in cflags: + jit = 'JIT' + else: + jit = None + if jit: + build.append(jit) + # --enable-framework=name framework = sysconfig.get_config_var('PYTHONFRAMEWORK') if framework: From 7f630ccf955f9768d761d3d03763c67a6392fda7 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Sep 2024 19:31:08 +0200 Subject: [PATCH 2/5] Read also PYTHON_JIT env var --- Lib/test/libregrtest/utils.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index 0b04fff0a54829..16dde954e0c400 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -327,14 +327,28 @@ def get_build_info(): tier2 = re.search('-D_Py_TIER2=([0-9]+)', cflags) if tier2: tier2 = int(tier2.group(1)) + + if not sys.flags.ignore_environment: + PYTHON_JIT = os.environ.get('PYTHON_JIT', '') + if PYTHON_JIT: + PYTHON_JIT = (PYTHON_JIT != '0') + else: + PYTHON_JIT = None + if tier2 == 1: jit = 'JIT' # =yes - elif tier2 == 2: - jit = 'JIT=yes-off' + elif tier2 == 3: + if PYTHON_JIT: + jit = 'JIT=on' + else: + jit = 'JIT=off' elif tier2 == 4: jit = 'JIT=interpreter' elif tier2 == 6: # Secret option - jit = 'JIT=interpreter-off' + if PYTHON_JIT: + jit = 'JIT=interpreter-on' + else: + jit = 'JIT=interpreter-off' elif '-D_Py_JIT' in cflags: jit = 'JIT' else: From 7fedd5df4575eb071a8dc270deaf95ac02901458 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Sep 2024 19:32:52 +0200 Subject: [PATCH 3/5] Document tier2 values --- Lib/test/libregrtest/utils.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index 16dde954e0c400..f66fad1350dfcf 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -335,16 +335,16 @@ def get_build_info(): else: PYTHON_JIT = None - if tier2 == 1: - jit = 'JIT' # =yes - elif tier2 == 3: + if tier2 == 1: # =yes + jit = 'JIT' + elif tier2 == 3: # =yes-off if PYTHON_JIT: jit = 'JIT=on' else: jit = 'JIT=off' - elif tier2 == 4: + elif tier2 == 4: # =interpreter jit = 'JIT=interpreter' - elif tier2 == 6: # Secret option + elif tier2 == 6: # =interpreter-off (Secret option!) if PYTHON_JIT: jit = 'JIT=interpreter-on' else: From ac2a8aa6ba42e3c569a67d348c5d0317fb02eadb Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Sep 2024 19:38:10 +0200 Subject: [PATCH 4/5] JIT and interpreter can be turned off as well --- Lib/test/libregrtest/utils.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index f66fad1350dfcf..a401d2419835a7 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -329,26 +329,32 @@ def get_build_info(): tier2 = int(tier2.group(1)) if not sys.flags.ignore_environment: - PYTHON_JIT = os.environ.get('PYTHON_JIT', '') + PYTHON_JIT = os.environ.get('PYTHON_JIT', None) if PYTHON_JIT: PYTHON_JIT = (PYTHON_JIT != '0') else: PYTHON_JIT = None if tier2 == 1: # =yes - jit = 'JIT' + if PYTHON_JIT == False: + jit = 'JIT=off' + else: + jit = 'JIT' elif tier2 == 3: # =yes-off if PYTHON_JIT: - jit = 'JIT=on' + jit = 'JIT' else: jit = 'JIT=off' elif tier2 == 4: # =interpreter - jit = 'JIT=interpreter' + if PYTHON_JIT == False: + jit = 'JIT-interpreter=off' + else: + jit = 'JIT-interpreter' elif tier2 == 6: # =interpreter-off (Secret option!) if PYTHON_JIT: - jit = 'JIT=interpreter-on' + jit = 'JIT-interpreter' else: - jit = 'JIT=interpreter-off' + jit = 'JIT-interpreter=off' elif '-D_Py_JIT' in cflags: jit = 'JIT' else: From 4f774777ff22ce3e5cd5c058d02d09feb7af527c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Sep 2024 20:01:44 +0200 Subject: [PATCH 5/5] regrtest: log PYTHON_GIL in build_info --- Lib/test/libregrtest/utils.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index a401d2419835a7..d6be4ad049d14a 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -307,7 +307,17 @@ def get_build_info(): # --disable-gil if sysconfig.get_config_var('Py_GIL_DISABLED'): - build.append("free_threading") + if not sys.flags.ignore_environment: + PYTHON_GIL = os.environ.get('PYTHON_GIL', None) + if PYTHON_GIL: + PYTHON_GIL = (PYTHON_GIL == '1') + else: + PYTHON_GIL = None + + free_threading = "free_threading" + if PYTHON_GIL is not None: + free_threading = f"{free_threading} GIL={int(PYTHON_GIL)}" + build.append(free_threading) if hasattr(sys, 'gettotalrefcount'): # --with-pydebug