summaryrefslogtreecommitdiffstats
path: root/Makefile.pre.in
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2008-04-13 00:03:25 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2008-04-13 00:03:25 (GMT)
commitb2693e007b4f0f85b24ec0ebefd75df73dbbd2be (patch)
treecce74c0ce73cf8b8139c797f9218f655206c13d7 /Makefile.pre.in
parente9746890388178bb1e4cdad3c0586bf1862c3727 (diff)
downloadcpython-b2693e007b4f0f85b24ec0ebefd75df73dbbd2be.zip
cpython-b2693e007b4f0f85b24ec0ebefd75df73dbbd2be.tar.gz
cpython-b2693e007b4f0f85b24ec0ebefd75df73dbbd2be.tar.bz2
Adds a profile-opt target for easy compilation of a python binary using
gcc's profile guided optimization.
Diffstat (limited to 'Makefile.pre.in')
-rw-r--r--Makefile.pre.in30
1 files changed, 29 insertions, 1 deletions
diff --git a/Makefile.pre.in b/Makefile.pre.in
index bb70301..02cc59c 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -176,6 +176,10 @@ UNICODE_OBJS= @UNICODE_OBJS@
PYTHON= python$(EXE)
BUILDPYTHON= python$(BUILDEXE)
+# The task to run while instrument when building the profile-opt target
+PROFILE_TASK= Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck
+#PROFILE_TASK= Lib/test/regrtest.py
+
# === Definitions added by makesetup ===
@@ -349,6 +353,27 @@ LIBRARY_OBJS= \
all: build_all
build_all: $(BUILDPYTHON) oldsharedmods sharedmods
+# Compile a binary with gcc profile guided optimization.
+profile-opt:
+ @echo "Building with support for profile generation:"
+ $(MAKE) clean
+ $(MAKE) build_all_generate_profile
+ @echo "Running benchmark to generate profile data:"
+ $(MAKE) profile-removal
+ $(MAKE) run_profile_task
+ @echo "Rebuilding with profile guided optimizations:"
+ $(MAKE) clean
+ $(MAKE) build_all_use_profile
+
+build_all_generate_profile:
+ $(MAKE) all CFLAGS="$(CFLAGS) -fprofile-generate" LIBS="$(LIBS) -lgcov"
+
+run_profile_task:
+ ./$(BUILDPYTHON) $(PROFILE_TASK)
+
+build_all_use_profile:
+ $(MAKE) all CFLAGS="$(CFLAGS) -fprofile-use"
+
# Build the interpreter
$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY)
$(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \
@@ -1099,7 +1124,10 @@ clean: pycremoval
find $(srcdir)/build -name 'fficonfig.h' -exec rm -f {} ';' || true
find $(srcdir)/build -name 'fficonfig.py' -exec rm -f {} ';' || true
-clobber: clean
+profile-removal:
+ find . -name '*.gc??' -exec rm -f {} ';'
+
+clobber: clean profile-removal
-rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
tags TAGS \
config.cache config.log pyconfig.h Modules/config.c