Sync from gcc/

PR lto/46273
	* configure.ac: Remove libelf tests.  Build lto-plugin on ELF always
	and on other supported platforms whenever LTO is enabled.
	* configure: Rebuild.
This commit is contained in:
Dave Korn
2010-11-03 14:27:06 +00:00
parent cc353b9f34
commit 5e504c84e1
3 changed files with 21 additions and 1039 deletions

View File

@ -1656,149 +1656,12 @@ AC_ARG_ENABLE(lto,
enable_lto=$enableval,
enable_lto=yes; default_enable_lto=yes)
ACX_ELF_TARGET_IFELSE([if test x"$enable_lto" = x"yes" ; then
# Make sure that libelf.h and gelf.h are available.
AC_ARG_WITH(libelf, [ --with-libelf=PATH Specify prefix directory for the installed libelf package
Equivalent to --with-libelf-include=PATH/include
plus --with-libelf-lib=PATH/lib])
AC_ARG_WITH(libelf_include, [ --with-libelf-include=PATH Specify directory for installed libelf include files])
AC_ARG_WITH(libelf_lib, [ --with-libelf-lib=PATH Specify the directory for the installed libelf library])
saved_CFLAGS="$CFLAGS"
saved_CPPFLAGS="$CPPFLAGS"
saved_LIBS="$LIBS"
case $with_libelf in
"")
libelflibs="-lelf"
libelfinc="-I/usr/include/libelf"
;;
*)
libelflibs="-L$with_libelf/lib -lelf"
libelfinc="-I$with_libelf/include -I$with_libelf/include/libelf"
LIBS="$libelflibs $LIBS"
;;
esac
if test "x$with_libelf_include" != x; then
libelfinc="-I$with_libelf_include"
fi
if test "x$with_libelf_lib" != x; then
libelflibs="-L$with_libelf_lib -lelf"
LIBS="$libelflibs $LIBS"
fi
if test "x$with_libelf$with_libelf_include$with_libelf_lib" = x \
&& test -d ${srcdir}/libelf; then
libelflibs='-L$$r/$(HOST_SUBDIR)/libelf/lib -lelf '
libelfinc='-D__LIBELF_INTERNAL__ -I$$r/$(HOST_SUBDIR)/libelf/lib -I$$s/libelf/lib'
LIBS="$libelflibs $LIBS"
else
CFLAGS="$CFLAGS $libelfinc"
CPPFLAGS="$CPPFLAGS $libelfinc"
LIBS="$LIBS $libelflibs"
AC_CHECK_HEADERS(libelf.h, [have_libelf_h=yes])
AC_CHECK_HEADERS(gelf.h, [have_gelf_h=yes])
AC_CHECK_HEADERS(libelf/libelf.h, [have_libelf_libelf_h=yes])
AC_CHECK_HEADERS(libelf/gelf.h, [have_libelf_gelf_h=yes])
# If we couldn't find libelf.h and the user forced it, emit an error.
if test x"$have_libelf_h" != x"yes" \
&& test x"$have_libelf_libelf_h" != x"yes" ; then
if test x"$default_enable_lto" != x"yes" ; then
AC_MSG_ERROR([LTO support requires libelf.h or libelf/libelf.h.])
else
enable_lto=no
libelflibs=
libelfinc=
fi
fi
# If we couldn't find gelf.h and the user forced it, emit an error.
if test x"$have_gelf_h" != x"yes" \
&& test x"$have_libelf_gelf_h" != x"yes" ; then
if test x"$default_enable_lto" != x"yes" ; then
AC_MSG_ERROR([LTO support requires gelf.h or libelf/gelf.h.])
else
enable_lto=no
libelflibs=
libelfinc=
fi
fi
# Check that the detected libelf has the functions we need. We cannot
# rely on just detecting the headers since they do not include
# versioning information. Add functions, if needed.
if test x"$enable_lto" = x"yes" ; then
AC_MSG_CHECKING([for the correct version of libelf])
AC_TRY_LINK(
[#include <libelf.h>],[
elf_errmsg (0);
elf_getscn (0, 0);
elf_nextscn (0, 0);
elf_strptr (0, 0, 0);
elf_getident (0, 0);
elf_begin (0, 0, 0);
elf_ndxscn (0);
elf_end (0);
],
[AC_MSG_RESULT([yes]);],
[AC_MSG_RESULT([no]); enable_lto=no; libelflibs= ; libelfinc= ]
)
# Check for elf_getshdrstrndx or elf_getshstrndx. The latter's flavor
# is determined in gcc/configure.ac.
if test x"$enable_lto" = x"yes" ; then
AC_MSG_CHECKING([for elf_getshdrstrndx])
AC_TRY_LINK(
[#include <libelf.h>],[
elf_getshdrstrndx (0, 0);
],
[AC_MSG_RESULT([yes]);],
[AC_MSG_RESULT([no]);
AC_MSG_CHECKING([for elf_getshstrndx])
AC_TRY_LINK(
[#include <libelf.h>],[
elf_getshstrndx (0, 0);
],
[AC_MSG_RESULT([yes]);],
[AC_MSG_RESULT([no]); enable_lto=no; libelflibs= ; libelfinc= ]
)]
)
fi
# If we couldn't enable LTO and the user forced it, emit an error.
if test x"$enable_lto" = x"no" \
&& test x"$default_enable_lto" != x"yes" ; then
AC_MSG_ERROR([To enable LTO, GCC requires libelf v0.8.12+.
Try the --with-libelf, --with-libelf-include and --with-libelf-lib options
to specify its location.])
fi
fi
CFLAGS="$saved_CFLAGS"
CPPFLAGS="$saved_CPPFLAGS"
LIBS="$saved_LIBS"
fi
# Flags needed for libelf.
AC_SUBST(libelflibs)
AC_SUBST(libelfinc)
# ELF platforms build the lto-plugin when GOLD is in use.
build_lto_plugin=${ENABLE_GOLD}
fi],[if test x"$default_enable_lto" = x"yes" ; then
ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always.
build_lto_plugin=yes
],[if test x"$default_enable_lto" = x"yes" ; then
case $target in
*-apple-darwin* | *-cygwin* | *-mingw*) ;;
# On other non-ELF platforms, LTO must be explicitly enabled.
# On other non-ELF platforms, LTO has yet to be validated.
*) enable_lto=no ;;
esac
else
@ -1816,11 +1679,12 @@ fi],[if test x"$default_enable_lto" = x"yes" ; then
esac
fi
# Among non-ELF, only Windows platforms support the lto-plugin so far.
# Build it unless LTO was explicitly disabled.
case $target in
*-cygwin* | *-mingw*) build_lto_plugin=yes ;;
*-cygwin* | *-mingw*) build_lto_plugin=$enable_lto ;;
*) ;;
esac
default_enable_lto=no])
])
# By default, C is the only stage 1 language.