Skip to content
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.