diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index b1d1623a38cbee..a545d5a9372ac0 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 00000000000000..cf19eb6052e8db --- /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 1133004b86a216..987bfdf215ccb4 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 1756d25d16fa47..050f1836011143 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 11dd84f12c6692..aaff79f720e3c4 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"
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: