Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bpo-44340: Add support for building with clang full/thin lto #27231

Merged
merged 5 commits into from
Jul 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion Doc/using/configure.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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).

Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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 changes: 2 additions & 2 deletions aclocal.m4
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
72 changes: 54 additions & 18 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.

Expand Down Expand Up @@ -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; }
Expand Down Expand Up @@ -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"
Expand Down
57 changes: 45 additions & 12 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the Py_LTO_POLICY is the default, it will follow the default LTO option of compiler

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
Expand Down Expand Up @@ -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
gpshead marked this conversation as resolved.
Show resolved Hide resolved
then
AC_MSG_ERROR([thin lto is not supported under gcc compiler.])
fi
case $ac_sys_system in
Darwin*)
LTOFLAGS="-flto -Wl,-export_dynamic"
Expand Down