mirror of https://github.com/python/cpython
bpo-44340: Add support for building with clang full/thin lto (GH-27231)
This commit is contained in:
parent
635bfe8162
commit
b2cf2513f9
|
@ -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
|
||||||
|
|
|
@ -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.
|
|
@ -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,
|
||||||
|
|
|
@ -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"
|
||||||
|
|
57
configure.ac
57
configure.ac
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue