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:
150
configure.ac
150
configure.ac
@ -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.
|
||||
|
Reference in New Issue
Block a user