This changes Python's standard profile-guided build target to work with
Studio instead of gcc. The unfortunate repetition of options seen below
is a workaround for build peculiarities and to meet Studio's requirement
that the profiling options be used at all steps of the build -- not just
compilation.
--- Python-2.6.4/Makefile.pre.in.orig 2012-05-14 06:37:59.575335093 -0700
+++ Python-2.6.4/Makefile.pre.in 2012-05-14 06:41:08.439443308 -0700
@@ -361,27 +361,36 @@
profile-opt:
@echo "Building with support for profile generation:"
$(MAKE) clean
+ $(MAKE) profile-removal
$(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"
+ $(MAKE) all CC="$(CC) -xprofile=collect:$(XPROFILE_DIR)" \
+ CFLAGS="$(CFLAGS) -xprofile=collect:$(XPROFILE_DIR)" \
+ LDFLAGS="$(LDFLAGS) -xprofile=collect:$(XPROFILE_DIR)" \
+ BLDSHARED="$(BLDSHARED) -xprofile=collect:$(XPROFILE_DIR)"
run_profile_task:
- ./$(BUILDPYTHON) $(PROFILE_TASK)
+ LD_LIBRARY_PATH=. ./$(BUILDPYTHON) $(PROFILE_TASK)
build_all_use_profile:
- $(MAKE) all CFLAGS="$(CFLAGS) -fprofile-use"
+ $(MAKE) all CC="$(CC) -xprofile=use:$(XPROFILE_DIR)" \
+ CFLAGS="$(CFLAGS) -xprofile=use:$(XPROFILE_DIR)" \
+ LDFLAGS="$(LDFLAGS) -xprofile=use:$(XPROFILE_DIR)" \
+ BLDSHARED="$(BLDSHARED) -xprofile=use:$(XPROFILE_DIR)"
coverage:
@echo "Building with support for coverage checking:"
$(MAKE) clean
- $(MAKE) all CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
+ $(MAKE) all CC="$(CC) -xprofile=tcov" \
+ CFLAGS="$(CFLAGS) -xO1 -xprofile=tcov" \
+ LDFLAGS="$(LDFLAGS) -xprofile=tcov" \
+ BLDSHARED="$(BLDSHARED) -xprofile=tcov"
# Build the interpreter
@@ -396,10 +405,7 @@
# Build the shared modules
sharedmods: $(BUILDPYTHON)
- @case $$MAKEFLAGS in \
- *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \
- *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
- esac
+ $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build
# Build static library
# avoid long command lines, same as LIBRARY_OBJS
@@ -1166,6 +1172,7 @@
clean: pycremoval
find . -name '*.[oa]' -exec rm -f {} ';'
find . -name '*.s[ol]' -exec rm -f {} ';'
+ find . -name '*.s[ol].*' -exec rm -f {} ';'
find $(srcdir)/build -name 'fficonfig.h' -exec rm -f {} ';' || true
find $(srcdir)/build -name 'fficonfig.py' -exec rm -f {} ';' || true
find . -name '*.so.[0-9]*.[0-9]*' -exec rm -f {} ';'
@@ -1173,6 +1180,7 @@
profile-removal:
find . -name '*.gc??' -exec rm -f {} ';'
+ find . -name '.profile' -exec rm -rf {} ';'
clobber: clean profile-removal
-rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \