* libltdl/config/ltmain.m4sh (func_mode_link): Allow through flags matching -O*, -flto*, -fwhopr, -fuse-linker-plugin. * libltdl/m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS): Drop symbols starting with __gnu_lto. (_LT_LINKER_SHLIBS) [linux] <archive_cmds, archive_expsyms_cmds>: Add $pic_flag for GCC. (_LT_LANG_CXX_CONFIG) [linux] <archive_cmds, archive_expsyms_cmds>: Likewise. (_LT_SYS_HIDDEN_LIBDEPS): Ignore files matching *.lto.o. * NEWS: Update.
Signed-off-by: Ralf Wildenhues <ralf.wildenh...@gmx.de> --- ChangeLog | 12 ++++++++++++ NEWS | 1 + libltdl/config/ltmain.m4sh | 4 +++- libltdl/m4/libtool.m4 | 8 +++++--- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index f7e2943..4878aee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2010-08-29 Ralf Wildenhues <ralf.wildenh...@gmx.de> + Support GCC LTO on GNU/Linux. + * libltdl/config/ltmain.m4sh (func_mode_link): Allow through + flags matching -O*, -flto*, -fwhopr, -fuse-linker-plugin. + * libltdl/m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS): Drop symbols + starting with __gnu_lto. + (_LT_LINKER_SHLIBS) [linux] <archive_cmds, archive_expsyms_cmds>: + Add $pic_flag for GCC. + (_LT_LANG_CXX_CONFIG) [linux] <archive_cmds, archive_expsyms_cmds>: + Likewise. + (_LT_SYS_HIDDEN_LIBDEPS): Ignore files matching *.lto.o. + * NEWS: Update. + Disable GCC LTO for verbose library extraction. * libltdl/m4/libtool.m4 (_LT_SYS_HIDDEN_LIBDEPS): Temporarily append -fno-lto or -fno-whopr to CFLAGS if CC or CFLAGS (which diff --git a/NEWS b/NEWS index 688bdca..f321bf0 100644 --- a/NEWS +++ b/NEWS @@ -97,6 +97,7 @@ New in 2.2.7b 2010-05-20: git version 2.2.7a, Libtool team: - With binutils 2.19.50+, shared libraries can be built on AIX. - Initial support for the Cuda Compiler Driver on GNU/Linux. - Support for Haiku (i586-pc-haiku). + - Initial support for GCC link-time optimization (LTO) flags. * Bug fixes: diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh index 32860c7..e86e944 100644 --- a/libltdl/config/ltmain.m4sh +++ b/libltdl/config/ltmain.m4sh @@ -5015,8 +5015,10 @@ func_mode_link () # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*) + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4 index 0a5f5b1..8ae64b7 100644 --- a/libltdl/m4/libtool.m4 +++ b/libltdl/m4/libtool.m4 @@ -3615,6 +3615,7 @@ for ac_symprfx in "" "_"; do else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -4664,7 +4665,7 @@ _LT_EOF if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then - tmp_addflag= + tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler @@ -5788,8 +5789,8 @@ if test "$_lt_caught_CXX_error" != yes; then # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' @@ -6897,6 +6898,7 @@ if AC_TRY_EVAL(ac_compile); then prev= ;; + *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. -- 1.7.2.1.222.g9988