Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bpo-28643: Record profile-opt build progress with stamp files #4223

Merged
merged 3 commits into from
Nov 2, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 28 additions & 9 deletions Makefile.pre.in
Original file line number Diff line number Diff line change
Expand Up @@ -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)"
Expand All @@ -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
Expand Down Expand Up @@ -1621,13 +1637,15 @@ 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 {} ';'
find . -name '*.profclang?' -exec rm -f {} ';'
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) \
Expand All @@ -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]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Record profile-opt build progress with stamp files.