summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDong-hee Na <donghee.na@python.org>2021-07-19 10:52:56 (GMT)
committerGitHub <noreply@github.com>2021-07-19 10:52:56 (GMT)
commitb2cf2513f9184c850a69fab718532b4f7c6a003d (patch)
tree825b69796206e39d8703842958ef2d19ea951ca9
parent635bfe8162981332b36cc556bac78e869af579c2 (diff)
downloadcpython-b2cf2513f9184c850a69fab718532b4f7c6a003d.zip
cpython-b2cf2513f9184c850a69fab718532b4f7c6a003d.tar.gz
cpython-b2cf2513f9184c850a69fab718532b4f7c6a003d.tar.bz2
bpo-44340: Add support for building with clang full/thin lto (GH-27231)
-rw-r--r--Doc/using/configure.rst5
-rw-r--r--Misc/NEWS.d/next/Build/2021-07-19-01-09-56.bpo-44340.JNeOf4.rst2
-rw-r--r--aclocal.m44
-rwxr-xr-xconfigure72
-rw-r--r--configure.ac57
5 files changed, 107 insertions, 33 deletions
diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst
index b1d1623..a545d5a 100644
--- a/Doc/using/configure.rst
+++ b/Doc/using/configure.rst
@@ -171,7 +171,7 @@ recommended for best performance.
.. versionadded:: 3.8
-.. cmdoption:: --with-lto
+.. cmdoption:: --with-lto=[full|thin|no|yes]
Enable Link Time Optimization (LTO) in any build (disabled by default).
@@ -180,6 +180,9 @@ recommended for best performance.
.. versionadded:: 3.6
+ .. versionadded:: 3.11
+ To use ThinLTO feature, use ``--with-lto=thin`` on Clang.
+
.. cmdoption:: --with-computed-gotos
Enable computed gotos in evaluation loop (enabled by default on supported
diff --git a/Misc/NEWS.d/next/Build/2021-07-19-01-09-56.bpo-44340.JNeOf4.rst b/Misc/NEWS.d/next/Build/2021-07-19-01-09-56.bpo-44340.JNeOf4.rst
new file mode 100644
index 0000000..cf19eb6
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2021-07-19-01-09-56.bpo-44340.JNeOf4.rst
@@ -0,0 +1,2 @@
+Add support for building with clang thin lto via --with-lto=thin/full. Patch
+by Dong-hee Na and Brett Holman.
diff --git a/aclocal.m4 b/aclocal.m4
index 1133004..987bfdf 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.3 -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/configure b/configure
index 1756d25..050f183 100755
--- a/configure
+++ b/configure
@@ -1545,7 +1545,8 @@ Optional Packages:
--with-trace-refs enable tracing references for debugging purpose
(default is no)
--with-assertions build with C assertions enabled (default is no)
- --with-lto enable Link-Time-Optimization in any build (default
+ --with-lto=[full|thin|no|yes]
+ enable Link-Time-Optimization in any build (default
is no)
--with-hash-algorithm=[fnv|siphash24]
select hash algorithm for use in Python/pyhash.c
@@ -3039,27 +3040,27 @@ VERSION=3.11
SOVERSION=1.0
-# The later defininition of _XOPEN_SOURCE disables certain features
+# The later definition of _XOPEN_SOURCE disables certain features
# on Linux, so we need _GNU_SOURCE to re-enable them (makedev, tm_zone).
$as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
+# The later definition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
# certain features on NetBSD, so we need _NETBSD_SOURCE to re-enable
# them.
$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h
-# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
+# The later definition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
# certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable
# them.
$as_echo "#define __BSD_VISIBLE 1" >>confdefs.h
-# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
+# The later definition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
# certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable
# them.
@@ -6585,16 +6586,36 @@ $as_echo_n "checking for --with-lto... " >&6; }
# Check whether --with-lto was given.
if test "${with_lto+set}" = set; then :
withval=$with_lto;
-if test "$withval" != no
-then
- Py_LTO='true'
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };
-else
- Py_LTO='false'
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; };
-fi
+case "$withval" in
+ full)
+ Py_LTO='true'
+ Py_LTO_POLICY='full'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ thin)
+ Py_LTO='true'
+ Py_LTO_POLICY='thin'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ yes)
+ Py_LTO='true'
+ Py_LTO_POLICY='default'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ no)
+ Py_LTO='false'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ *)
+ Py_LTO='false'
+ as_fn_error $? "unknown lto option: '$withval'" "$LINENO" 5
+ ;;
+esac
+
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
@@ -6732,15 +6753,30 @@ $as_echo "$as_me: llvm-ar found via xcrun: ${LLVM_AR}" >&6;}
case $ac_sys_system in
Darwin*)
# Any changes made here should be reflected in the GCC+Darwin case below
- LTOFLAGS="-flto -Wl,-export_dynamic"
- LTOCFLAGS="-flto"
+ if test $Py_LTO_POLICY = default
+ then
+ LTOFLAGS="-flto -Wl,-export_dynamic"
+ LTOCFLAGS="-flto"
+ else
+ LTOFLAGS="-flto=${Py_LTO_POLICY} -Wl,-export_dynamic"
+ LTOCFLAGS="-flto=${Py_LTO_POLICY}"
+ fi
;;
*)
- LTOFLAGS="-flto"
+ if test $Py_LTO_POLICY = default
+ then
+ LTOFLAGS="-flto"
+ else
+ LTOFLAGS="-flto=${Py_LTO_POLICY}"
+ fi
;;
esac
;;
*gcc*)
+ if test $Py_LTO_POLICY = thin
+ then
+ as_fn_error $? "thin lto is not supported under gcc compiler." "$LINENO" 5
+ fi
case $ac_sys_system in
Darwin*)
LTOFLAGS="-flto -Wl,-export_dynamic"
diff --git a/configure.ac b/configure.ac
index 11dd84f..aaff79f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1360,16 +1360,34 @@ fi
# Enable LTO flags
AC_MSG_CHECKING(for --with-lto)
-AC_ARG_WITH(lto, AS_HELP_STRING([--with-lto], [enable Link-Time-Optimization in any build (default is no)]),
+AC_ARG_WITH(lto, AS_HELP_STRING([--with-lto=@<:@full|thin|no|yes@:>@], [enable Link-Time-Optimization in any build (default is no)]),
[
-if test "$withval" != no
-then
- Py_LTO='true'
- AC_MSG_RESULT(yes);
-else
- Py_LTO='false'
- AC_MSG_RESULT(no);
-fi],
+case "$withval" in
+ full)
+ Py_LTO='true'
+ Py_LTO_POLICY='full'
+ AC_MSG_RESULT(yes)
+ ;;
+ thin)
+ Py_LTO='true'
+ Py_LTO_POLICY='thin'
+ AC_MSG_RESULT(yes)
+ ;;
+ yes)
+ Py_LTO='true'
+ Py_LTO_POLICY='default'
+ AC_MSG_RESULT(yes)
+ ;;
+ no)
+ Py_LTO='false'
+ AC_MSG_RESULT(no)
+ ;;
+ *)
+ Py_LTO='false'
+ AC_MSG_ERROR([unknown lto option: '$withval'])
+ ;;
+esac
+],
[AC_MSG_RESULT(no)])
if test "$Py_LTO" = 'true' ; then
case $CC in
@@ -1405,15 +1423,30 @@ if test "$Py_LTO" = 'true' ; then
case $ac_sys_system in
Darwin*)
# Any changes made here should be reflected in the GCC+Darwin case below
- LTOFLAGS="-flto -Wl,-export_dynamic"
- LTOCFLAGS="-flto"
+ if test $Py_LTO_POLICY = default
+ then
+ LTOFLAGS="-flto -Wl,-export_dynamic"
+ LTOCFLAGS="-flto"
+ else
+ LTOFLAGS="-flto=${Py_LTO_POLICY} -Wl,-export_dynamic"
+ LTOCFLAGS="-flto=${Py_LTO_POLICY}"
+ fi
;;
*)
- LTOFLAGS="-flto"
+ if test $Py_LTO_POLICY = default
+ then
+ LTOFLAGS="-flto"
+ else
+ LTOFLAGS="-flto=${Py_LTO_POLICY}"
+ fi
;;
esac
;;
*gcc*)
+ if test $Py_LTO_POLICY = thin
+ then
+ AC_MSG_ERROR([thin lto is not supported under gcc compiler.])
+ fi
case $ac_sys_system in
Darwin*)
LTOFLAGS="-flto -Wl,-export_dynamic"