From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Thu, 3 Feb 2022 04:32:54 +0000 (-0800) Subject: [3.9] [3.10] bpo-46576: bpo-46524: Disable compiler optimization within test_peg_gene... X-Git-Tag: v3.9.11~99 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e8258608c28c65680253d0ca6167430e34c2fd87;p=thirdparty%2FPython%2Fcpython.git [3.9] [3.10] bpo-46576: bpo-46524: Disable compiler optimization within test_peg_generator. (GH-31015) (GH-31089) (GH-31093) 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 GH-31017's win32 conditional and flags. Co-authored-by: Kumar Aditya kumaraditya303. (cherry picked from commit 164a017e13ee96bd1ea1ae79f5ac9e25fe83994e) Co-authored-by: Gregory P. Smith (cherry picked from commit f5ebec4d3e1199ec38b88920cfde8e460e5120dd) Co-authored-by: Gregory P. Smith Automerge-Triggered-By: GH:gpshead --- 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 index 000000000000..be50fc8cbe0a --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2022-01-29-12-37-53.bpo-46576.-prRaV.rst @@ -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. diff --git a/Tools/peg_generator/pegen/build.py b/Tools/peg_generator/pegen/build.py index 931ffc787523..109fb9ecc7ad 100644 --- a/Tools/peg_generator/pegen/build.py +++ b/Tools/peg_generator/pegen/build.py @@ -1,6 +1,7 @@ import pathlib import shutil import tokenize +import sys import sysconfig import tempfile import itertools @@ -33,6 +34,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. @@ -59,6 +61,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,