components/python/python27/patches/12-studio-profile.patch
author John Beck <John.Beck@Oracle.COM>
Mon, 06 Oct 2014 13:15:36 -0700
branchs11u2-sru
changeset 3379 e99da14b537a
parent 634 bd9c94f9f6e0
child 3565 2d729d36ded7
permissions -rw-r--r--
PSARC 2014/183 Python 2.7.6 18251953 update Python 2.7 line to version 2.7.6 19004605 update Python 2.7 line to version 2.7.7 19308541 update Python 2.7 line to version 2.7.8 19284990 python 2.7.7 segfaults while under memory stress 17431625 64-bit python should use long rather than int for os.sysconf() return value 19164544 Python 2.7 test_tcl fails 19030238 Python 2.7 test_sysconfig fails - no module named _osx_support 19030198 Python 2.7 tests fail - import name error 19032456 more Python 2.7 tests failing with import errors 19022543 Python 2.7 test_lib2to3 fails

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.  As it is Solaris-specific, it is not suitable for upstream.

--- Python-2.7.8/Makefile.pre.in.~2~	2014-07-17 20:46:10.626664937 -0700
+++ Python-2.7.8/Makefile.pre.in	2014-07-17 20:46:10.736821411 -0700
@@ -413,28 +413,37 @@
 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:
 	: # FIXME: can't run for a cross build
-	./$(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
@@ -1298,7 +1307,7 @@
 	-rm -f Lib/lib2to3/*Grammar*.pickle
 
 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) \