]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-46576: bpo-46524: Disable compiler optimization within test_peg_generator. (...
authorGregory P. Smith <greg@krypto.org>
Wed, 2 Feb 2022 20:15:16 +0000 (12:15 -0800)
committerGitHub <noreply@github.com>
Wed, 2 Feb 2022 20:15:16 +0000 (12:15 -0800)
Disable compiler optimization within test_peg_generator.

This speed up test_peg_generator by always disabling compiler
optimizations by using -O0 or equivalent when the test is building its
own C extensions.

A build not using --with-pydebug in order to speed up test execution
winds up with this test taking a very long time as it would do
repeated compilation of parser C code using the same optimization
flags as CPython was built with.

This speeds the test up 6-8x on gps-raspbian.

Also incorporate's #31017's win32 conditional and flags.

Co-authored-by: Kumar Aditya kumaraditya303
Misc/NEWS.d/next/Tests/2022-01-29-12-37-53.bpo-46576.-prRaV.rst [new file with mode: 0644]
Tools/peg_generator/pegen/build.py

diff --git a/Misc/NEWS.d/next/Tests/2022-01-29-12-37-53.bpo-46576.-prRaV.rst b/Misc/NEWS.d/next/Tests/2022-01-29-12-37-53.bpo-46576.-prRaV.rst
new file mode 100644 (file)
index 0000000..be50fc8
--- /dev/null
@@ -0,0 +1,3 @@
+test_peg_generator now disables compiler optimization when testing
+compilation of its own C extensions to significantly speed up the
+testing on non-debug builds of CPython.
index c69e5c9a5f26a6185feef42458bc42277e522c62..78789b94df2e4ffc90c536fdce19d7a6a49fb836 100644 (file)
@@ -1,6 +1,7 @@
 import itertools
 import pathlib
 import shutil
+import sys
 import sysconfig
 import tempfile
 import tokenize
@@ -32,6 +33,7 @@ def compile_c_extension(
     build_dir: Optional[str] = None,
     verbose: bool = False,
     keep_asserts: bool = True,
+    disable_optimization: bool = True,  # Significant test_peg_generator speedup.
 ) -> str:
     """Compile the generated source for a parser generator into an extension module.
 
@@ -61,6 +63,14 @@ def compile_c_extension(
     extra_link_args = get_extra_flags("LDFLAGS", "PY_LDFLAGS_NODIST")
     if keep_asserts:
         extra_compile_args.append("-UNDEBUG")
+    if disable_optimization:
+        if sys.platform == 'win32':
+            extra_compile_args.append("/Od")
+            extra_link_args.append("/LTCG:OFF")
+        else:
+            extra_compile_args.append("-O0")
+            if sysconfig.get_config_var("GNULD") == "yes":
+                extra_link_args.append("-fno-lto")
     extension = [
         Extension(
             extension_name,