diff options
-rw-r--r-- | Makefile.pre.in | 37 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Build/2017-11-01-14-16-27.bpo-28643.9iPKJy.rst | 1 |
2 files changed, 29 insertions, 9 deletions
diff --git a/Makefile.pre.in b/Makefile.pre.in index 6dacb87..e5d65bd 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -442,25 +442,37 @@ DTRACE_DEPS = \ all: @DEF_MAKE_ALL_RULE@ build_all: $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks Programs/_testembed python-config -# Compile a binary with profile guided optimization. -profile-opt: +# Profile generation build must start from a clean tree. +profile-clean-stamp: + $(MAKE) clean profile-removal + touch $@ + +# Compile with profile generation enabled. +profile-gen-stamp: profile-clean-stamp @if [ $(LLVM_PROF_ERR) = yes ]; then \ echo "Error: Cannot perform PGO build because llvm-profdata was not found in PATH" ;\ echo "Please add it to PATH and run ./configure again" ;\ exit 1;\ fi @echo "Building with support for profile generation:" - $(MAKE) clean - $(MAKE) profile-removal $(MAKE) build_all_generate_profile - $(MAKE) profile-removal + touch $@ + +# Run task with profile generation build to create profile information. +profile-run-stamp: @echo "Running code to generate profile data (this can take a while):" + # First, we need to create a clean build with profile generation + # enabled. + $(MAKE) profile-gen-stamp + # Next, run the profile task to generate the profile information. $(MAKE) run_profile_task $(MAKE) build_all_merge_profile - @echo "Rebuilding with profile guided optimizations:" + # Remove profile generation binary since we are done with it. $(MAKE) clean - $(MAKE) build_all_use_profile - $(MAKE) profile-removal + # This is an expensive target to build and it does not have proper + # makefile dependancy information. So, we create a "stamp" file + # to record its completion and avoid re-running it. + touch $@ build_all_generate_profile: $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_GEN_FLAG)" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG)" LIBS="$(LIBS)" @@ -472,7 +484,11 @@ run_profile_task: build_all_merge_profile: $(LLVM_PROF_MERGER) -build_all_use_profile: +# Compile Python binary with profile guided optimization. +# To force re-running of the profile task, remove the profile-run-stamp file. +profile-opt: profile-run-stamp + @echo "Rebuilding with profile guided optimizations:" + -rm -f profile-clean-stamp $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_USE_FLAG)" LDFLAGS="$(LDFLAGS)" # Compile and run with gcov @@ -1621,6 +1637,7 @@ clean: pycremoval -rm -f Programs/_testembed Programs/_freeze_importlib -find build -type f -a ! -name '*.gc??' -exec rm -f {} ';' -rm -f Include/pydtrace_probes.h + -rm -f profile-gen-stamp profile-removal: find . -name '*.gc??' -exec rm -f {} ';' @@ -1628,6 +1645,7 @@ profile-removal: find . -name '*.dyn' -exec rm -f {} ';' rm -f $(COVERAGE_INFO) rm -rf $(COVERAGE_REPORT) + rm -f profile-run-stamp clobber: clean profile-removal -rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \ @@ -1636,6 +1654,7 @@ clobber: clean profile-removal -rm -rf build platform -rm -rf $(PYTHONFRAMEWORKDIR) -rm -f python-config.py python-config + -rm -f profile-gen-stamp profile-clean-stamp # Make things extra clean, before making a distribution: # remove all generated files, even Makefile[.pre] diff --git a/Misc/NEWS.d/next/Build/2017-11-01-14-16-27.bpo-28643.9iPKJy.rst b/Misc/NEWS.d/next/Build/2017-11-01-14-16-27.bpo-28643.9iPKJy.rst new file mode 100644 index 0000000..87f6d58 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2017-11-01-14-16-27.bpo-28643.9iPKJy.rst @@ -0,0 +1 @@ +Record profile-opt build progress with stamp files. |