summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2016-09-07 00:15:21 (GMT)
committerBrett Cannon <brett@python.org>2016-09-07 00:15:21 (GMT)
commit8c94f9746578fd9294f606d9d81e7fb466b34bdb (patch)
tree9d521dc5882938d283a974cbd7212fa40dc5b65e
parent653c8509191623951ca7d0091f470d3632034d84 (diff)
downloadcpython-8c94f9746578fd9294f606d9d81e7fb466b34bdb.zip
cpython-8c94f9746578fd9294f606d9d81e7fb466b34bdb.tar.gz
cpython-8c94f9746578fd9294f606d9d81e7fb466b34bdb.tar.bz2
Issue #26359: Add the --with-optimizations flag.
-rw-r--r--Makefile.pre.in8
-rw-r--r--Misc/NEWS2
-rwxr-xr-xconfigure69
-rw-r--r--configure.ac41
4 files changed, 103 insertions, 17 deletions
diff --git a/Makefile.pre.in b/Makefile.pre.in
index f07c282..4e6679a 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -481,7 +481,7 @@ LIBRARY_OBJS= \
# Rules
# Default target
-all: build_all
+all: @DEF_MAKE_ALL_RULE@
build_all: $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks Programs/_testembed python-config
# Compile a binary with profile guided optimization.
@@ -505,7 +505,7 @@ profile-opt:
$(MAKE) profile-removal
build_all_generate_profile:
- $(MAKE) all CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LIBS="$(LIBS)"
+ $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LIBS="$(LIBS)"
run_profile_task:
: # FIXME: can't run for a cross build
@@ -515,14 +515,14 @@ build_all_merge_profile:
$(LLVM_PROF_MERGER)
build_all_use_profile:
- $(MAKE) all CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_USE_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) @LTOFLAGS@"
+ $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_USE_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) @LTOFLAGS@"
# Compile and run with gcov
.PHONY=coverage coverage-lcov coverage-report
coverage:
@echo "Building with support for coverage checking:"
$(MAKE) clean profile-removal
- $(MAKE) all CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
+ $(MAKE) @DEF_MAKE_RULE@ CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
coverage-lcov:
@echo "Creating Coverage HTML report with LCOV:"
diff --git a/Misc/NEWS b/Misc/NEWS
index 7c62a15..7b4f657 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -256,6 +256,8 @@ Windows
Build
-----
+- Issue #26359: Add the --with-optimizations configure flag.
+
- Issue #27713: Suppress spurious build warnings when updating importlib's
bootstrap files. Patch by Xiang Zhang
diff --git a/configure b/configure
index 462c968..7671ca4 100755
--- a/configure
+++ b/configure
@@ -674,6 +674,8 @@ LLVM_PROF_MERGER
PGO_PROF_USE_FLAG
PGO_PROF_GEN_FLAG
LTOFLAGS
+DEF_MAKE_RULE
+DEF_MAKE_ALL_RULE
ABIFLAGS
LN
MKDIR_P
@@ -774,7 +776,6 @@ infodir
docdir
oldincludedir
includedir
-runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -808,6 +809,7 @@ with_suffix
enable_shared
enable_profiling
with_pydebug
+with_optimizations
with_lto
with_hash_algorithm
with_address_sanitizer
@@ -885,7 +887,6 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
-runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1138,15 +1139,6 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
- -runstatedir | --runstatedir | --runstatedi | --runstated \
- | --runstate | --runstat | --runsta | --runst | --runs \
- | --run | --ru | --r)
- ac_prev=runstatedir ;;
- -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
- | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
- | --run=* | --ru=* | --r=*)
- runstatedir=$ac_optarg ;;
-
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1284,7 +1276,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir runstatedir
+ libdir localedir mandir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1437,7 +1429,6 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1500,6 +1491,8 @@ Optional Packages:
compiler
--with-suffix=.exe set executable suffix
--with-pydebug build with Py_DEBUG defined
+ --with-optimizations Enable all optimizations when available (LTO, PGO,
+ etc). Disabled by default.
--with-lto Enable Link Time Optimization in PGO builds.
Disabled by default.
--with-hash-algorithm=[fnv|siphash24]
@@ -6528,6 +6521,46 @@ $as_echo "no" >&6; }
fi
+# Enable optimization flags
+
+
+Py_OPT='false'
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-optimizations" >&5
+$as_echo_n "checking for --with-optimizations... " >&6; }
+
+# Check whether --with-optimizations was given.
+if test "${with_optimizations+set}" = set; then :
+ withval=$with_optimizations;
+if test "$withval" != no
+then
+ Py_OPT='true'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; };
+else
+ Py_OPT='false'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; };
+fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+if test "$Py_OPT" = 'true' ; then
+ Py_LTO='true'
+ case $ac_sys_system in
+ Darwin*)
+ # At least on macOS El Capitan, LTO does not work with PGO.
+ Py_LTO='false'
+ ;;
+ esac
+ DEF_MAKE_ALL_RULE="profile-opt"
+ DEF_MAKE_RULE="build_all"
+else
+ DEF_MAKE_ALL_RULE="build_all"
+ DEF_MAKE_RULE="all"
+fi
+
# Enable LTO flags
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-lto" >&5
@@ -17636,3 +17669,13 @@ $SHELL $srcdir/Modules/makesetup -c $srcdir/Modules/config.c.in \
-s Modules Modules/Setup.config \
Modules/Setup.local Modules/Setup
mv config.c Modules
+
+if test "$Py_OPT" = 'false' -a "$Py_DEBUG" != 'true'; then
+ echo "" >&6
+ echo "" >&6
+ echo "If you want a release build with all optimizations active (LTO, PGO, etc),"
+ echo "please run ./configure --with-optimizations" >&6
+ echo "" >&6
+ echo "" >&6
+fi
+
diff --git a/configure.ac b/configure.ac
index fb2ae67..fce8147 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1230,6 +1230,37 @@ else AC_MSG_RESULT(no); Py_DEBUG='false'
fi],
[AC_MSG_RESULT(no)])
+# Enable optimization flags
+AC_SUBST(DEF_MAKE_ALL_RULE)
+AC_SUBST(DEF_MAKE_RULE)
+Py_OPT='false'
+AC_MSG_CHECKING(for --with-optimizations)
+AC_ARG_WITH(optimizations, AS_HELP_STRING([--with-optimizations], [Enable all optimizations when available (LTO, PGO, etc). Disabled by default.]),
+[
+if test "$withval" != no
+then
+ Py_OPT='true'
+ AC_MSG_RESULT(yes);
+else
+ Py_OPT='false'
+ AC_MSG_RESULT(no);
+fi],
+[AC_MSG_RESULT(no)])
+if test "$Py_OPT" = 'true' ; then
+ Py_LTO='true'
+ case $ac_sys_system in
+ Darwin*)
+ # At least on macOS El Capitan, LTO does not work with PGO.
+ Py_LTO='false'
+ ;;
+ esac
+ DEF_MAKE_ALL_RULE="profile-opt"
+ DEF_MAKE_RULE="build_all"
+else
+ DEF_MAKE_ALL_RULE="build_all"
+ DEF_MAKE_RULE="all"
+fi
+
# Enable LTO flags
AC_SUBST(LTOFLAGS)
AC_MSG_CHECKING(for --with-lto)
@@ -5299,3 +5330,13 @@ $SHELL $srcdir/Modules/makesetup -c $srcdir/Modules/config.c.in \
-s Modules Modules/Setup.config \
Modules/Setup.local Modules/Setup
mv config.c Modules
+
+if test "$Py_OPT" = 'false' -a "$Py_DEBUG" != 'true'; then
+ echo "" >&AS_MESSAGE_FD
+ echo "" >&AS_MESSAGE_FD
+ echo "If you want a release build with all optimizations active (LTO, PGO, etc),"
+ echo "please run ./configure --with-optimizations" >&AS_MESSAGE_FD
+ echo "" >&AS_MESSAGE_FD
+ echo "" >&AS_MESSAGE_FD
+fi
+