bpo-44340: Add support for building with clang full/thin lto (GH-27231)

This commit is contained in:
Dong-hee Na 2021-07-19 19:52:56 +09:00 committed by GitHub
parent 635bfe8162
commit b2cf2513f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 107 additions and 33 deletions

View File

@ -171,7 +171,7 @@ recommended for best performance.
.. versionadded:: 3.8 .. versionadded:: 3.8
.. cmdoption:: --with-lto .. cmdoption:: --with-lto=[full|thin|no|yes]
Enable Link Time Optimization (LTO) in any build (disabled by default). Enable Link Time Optimization (LTO) in any build (disabled by default).
@ -180,6 +180,9 @@ recommended for best performance.
.. versionadded:: 3.6 .. versionadded:: 3.6
.. versionadded:: 3.11
To use ThinLTO feature, use ``--with-lto=thin`` on Clang.
.. cmdoption:: --with-computed-gotos .. cmdoption:: --with-computed-gotos
Enable computed gotos in evaluation loop (enabled by default on supported Enable computed gotos in evaluation loop (enabled by default on supported

View File

@ -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.

4
aclocal.m4 vendored
View File

@ -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 # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,

72
configure vendored
View File

@ -1545,7 +1545,8 @@ Optional Packages:
--with-trace-refs enable tracing references for debugging purpose --with-trace-refs enable tracing references for debugging purpose
(default is no) (default is no)
--with-assertions build with C assertions enabled (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) is no)
--with-hash-algorithm=[fnv|siphash24] --with-hash-algorithm=[fnv|siphash24]
select hash algorithm for use in Python/pyhash.c select hash algorithm for use in Python/pyhash.c
@ -3039,27 +3040,27 @@ VERSION=3.11
SOVERSION=1.0 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). # on Linux, so we need _GNU_SOURCE to re-enable them (makedev, tm_zone).
$as_echo "#define _GNU_SOURCE 1" >>confdefs.h $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 # certain features on NetBSD, so we need _NETBSD_SOURCE to re-enable
# them. # them.
$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h $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 # certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable
# them. # them.
$as_echo "#define __BSD_VISIBLE 1" >>confdefs.h $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 # certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable
# them. # them.
@ -6585,16 +6586,36 @@ $as_echo_n "checking for --with-lto... " >&6; }
# Check whether --with-lto was given. # Check whether --with-lto was given.
if test "${with_lto+set}" = set; then : if test "${with_lto+set}" = set; then :
withval=$with_lto; withval=$with_lto;
if test "$withval" != no case "$withval" in
then full)
Py_LTO='true' Py_LTO='true'
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 Py_LTO_POLICY='full'
$as_echo "yes" >&6; }; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
else $as_echo "yes" >&6; }
Py_LTO='false' ;;
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 thin)
$as_echo "no" >&6; }; Py_LTO='true'
fi 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 else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; } $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 case $ac_sys_system in
Darwin*) Darwin*)
# Any changes made here should be reflected in the GCC+Darwin case below # Any changes made here should be reflected in the GCC+Darwin case below
LTOFLAGS="-flto -Wl,-export_dynamic" if test $Py_LTO_POLICY = default
LTOCFLAGS="-flto" 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 esac
;; ;;
*gcc*) *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 case $ac_sys_system in
Darwin*) Darwin*)
LTOFLAGS="-flto -Wl,-export_dynamic" LTOFLAGS="-flto -Wl,-export_dynamic"

View File

@ -1360,16 +1360,34 @@ fi
# Enable LTO flags # Enable LTO flags
AC_MSG_CHECKING(for --with-lto) 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 case "$withval" in
then full)
Py_LTO='true' Py_LTO='true'
AC_MSG_RESULT(yes); Py_LTO_POLICY='full'
else AC_MSG_RESULT(yes)
Py_LTO='false' ;;
AC_MSG_RESULT(no); thin)
fi], 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)]) [AC_MSG_RESULT(no)])
if test "$Py_LTO" = 'true' ; then if test "$Py_LTO" = 'true' ; then
case $CC in case $CC in
@ -1405,15 +1423,30 @@ if test "$Py_LTO" = 'true' ; then
case $ac_sys_system in case $ac_sys_system in
Darwin*) Darwin*)
# Any changes made here should be reflected in the GCC+Darwin case below # Any changes made here should be reflected in the GCC+Darwin case below
LTOFLAGS="-flto -Wl,-export_dynamic" if test $Py_LTO_POLICY = default
LTOCFLAGS="-flto" 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 esac
;; ;;
*gcc*) *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 case $ac_sys_system in
Darwin*) Darwin*)
LTOFLAGS="-flto -Wl,-export_dynamic" LTOFLAGS="-flto -Wl,-export_dynamic"