X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gold%2Fconfigure.ac;h=76db2b7586b894a4566efabf11d1bd62457a8dbc;hb=abdb711e0855f0597a96db0486b598144b788212;hp=4cc9569e12fb266602b8022ea2610a7ea7adfcbf;hpb=2b64b5511a0d0814eb3938cff986edf493a7b362;p=deliverable%2Fbinutils-gdb.git
diff --git a/gold/configure.ac b/gold/configure.ac
index 4cc9569e12..76db2b7586 100644
--- a/gold/configure.ac
+++ b/gold/configure.ac
@@ -1,7 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
dnl
-dnl Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
-dnl Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2019 Free Software Foundation, Inc.
dnl
dnl This file is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
@@ -18,8 +17,6 @@ dnl along with this program; see the file COPYING3. If not see
dnl .
dnl
-AC_PREREQ(2.59)
-
AC_INIT(gold, 0.1)
AC_CONFIG_SRCDIR(gold.cc)
@@ -29,6 +26,8 @@ AM_INIT_AUTOMAKE([no-dist parallel-tests])
AM_CONFIG_HEADER(config.h:config.in)
+AC_USE_SYSTEM_EXTENSIONS
+
# PR 14072
AH_VERBATIM([00_CONFIG_H_CHECK],
[/* Check that config.h is #included before system headers
@@ -50,7 +49,7 @@ fi
sysroot_relocatable=0
if test -n "$sysroot"; then
- case "sysroot" in
+ case "$sysroot" in
"${prefix}" | "${prefix}/"* | \
"${exec_prefix}" | "${exec_prefix}/"* | \
'${prefix}' | '${prefix}/'*| \
@@ -86,35 +85,30 @@ AC_ARG_ENABLE(gold,
AC_SUBST(install_as_default)
AC_SUBST(installed_linker)
-dnl For now threads are a configure time option.
-AC_ARG_ENABLE([threads],
-[ --enable-threads multi-threaded linking],
-[case "${enableval}" in
- yes | "") threads=yes ;;
- no) threads=no ;;
- *) threads=yes ;;
- esac],
-[threads=no])
-if test "$threads" = "yes"; then
- AC_DEFINE(ENABLE_THREADS, 1,
- [Define to do multi-threaded linking])
-fi
-AM_CONDITIONAL(THREADS, test "$threads" = "yes")
-
-AC_ARG_ENABLE([plugins],
-[ --enable-plugins linker plugins],
-[case "${enableval}" in
- yes | "") plugins=yes ;;
- no) plugins=no ;;
- *) plugins=yes ;;
- esac],
-[plugins=no])
+AC_PLUGINS
if test "$plugins" = "yes"; then
AC_DEFINE(ENABLE_PLUGINS, 1,
[Define to enable linker plugins])
fi
AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
+# Decide if -z relro should be enabled in ELF linker by default.
+ac_default_ld_z_relro=unset
+# Provide a configure time option to override our default.
+AC_ARG_ENABLE(relro,
+ AS_HELP_STRING([--enable-relro],
+ [enable -z relro in ELF linker by default]),
+[case "${enableval}" in
+ yes) ac_default_ld_z_relro=1 ;;
+ no) ac_default_ld_z_relro=0 ;;
+esac])dnl
+if test "${ac_default_ld_z_relro}" = unset; then
+ ac_default_ld_z_relro=1
+fi
+AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_RELRO,
+ $ac_default_ld_z_relro,
+ [Define to 1 if you want to enable -z relro in ELF linker by default.])
+
AC_ARG_ENABLE([targets],
[ --enable-targets alternative target configurations],
[case "${enableval}" in
@@ -145,6 +139,26 @@ if test -n "$enable_targets"; then
done
fi
+# Decide which "--hash-style" to use by default
+# Provide a configure time option to override our default.
+AC_ARG_ENABLE([default-hash-style],
+AS_HELP_STRING([--enable-default-hash-style={sysv,gnu,both}],
+ [use this default hash style]),
+[case "${enable_default_hash_style}" in
+ sysv | gnu | both) ;;
+ *) AC_MSG_ERROR([bad value ${enable_default_hash_style} for enable-default-hash-style option]) ;;
+esac],
+[case "${target}" in
+ # Enable gnu hash only on GNU targets, but not mips
+ mips*-*-*) enable_default_hash_style=sysv ;;
+ *-*-gnu* | *-*-linux* | *-*-nacl*) enable_default_hash_style=both ;;
+ *) enable_default_hash_style=sysv ;;
+esac])
+
+AC_DEFINE_UNQUOTED([DEFAULT_HASH_STYLE],
+ ["${enable_default_hash_style}"],
+ [Set the default --hash-style value])
+
# See which specific instantiations we need.
targetobjs=
all_targets=
@@ -200,12 +214,31 @@ for targ in $target $canon_targets; do
default_big_endian=$targ_big_endian
default_osabi=$targ_osabi
+ AM_CONDITIONAL(DEFAULT_TARGET_AARCH64, test "$targ_obj" = "aarch64")
AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
- AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
+ AM_CONDITIONAL(DEFAULT_TARGET_S390, test "$targ_obj" = "s390")
+ target_x86_64=no
+ target_x32=no
+ if test "$targ_obj" = "x86_64"; then
+ case "$target" in
+ x86_64*-linux-gnux32)
+ target_x32=yes
+ default_size=32
+ ;;
+ *)
+ target_x86_64=yes
+ ;;
+ esac
+ fi
+ AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$target_x86_64" = "yes")
+ AM_CONDITIONAL(DEFAULT_TARGET_X32, test "$target_x32" = "yes")
+ AM_CONDITIONAL(DEFAULT_TARGET_X86_64_OR_X32,
+ test "$target_x86_64" = "yes" -o "$target_x32" = "yes")
AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx")
+ AM_CONDITIONAL(DEFAULT_TARGET_MIPS, test "$targ_obj" = "mips")
DEFAULT_TARGET=${targ_obj}
AC_SUBST(DEFAULT_TARGET)
fi
@@ -316,23 +349,24 @@ AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
powerpc*) false;;
x86_64) false;;
sparc64) false;;
+ s390x) false;;
*) true;;
esac])
dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
dnl only available in gcc 4.1.
AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
-[AC_COMPILE_IFELSE([
+[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#if !defined __GNUC__
error
#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
error
#endif
-], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
+])], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -mcmodel=medium"
-AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
CFLAGS="$save_CFLAGS"
dnl Whether we can test -mcmodel=medium.
AM_CONDITIONAL(MCMODEL_MEDIUM,
@@ -342,9 +376,9 @@ AC_CACHE_CHECK([whether $CC supports -fmerge-constants],
[gold_cv_merge_constants], [
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fmerge-constants"
-AC_COMPILE_IFELSE([const char *s = "foo";],
- [have_merge_constants=yes],
- [have_merge_constants=no])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([const char *s = "foo";])],
+ [gold_cv_merge_constants=yes],
+ [gold_cv_merge_constants=no])
CFLAGS="$save_CFLAGS"])
AC_SUBST([MERGE_CONSTANTS_FLAG])
AS_IF([test "$gold_cv_merge_constants" = yes],
@@ -353,7 +387,7 @@ AS_IF([test "$gold_cv_merge_constants" = yes],
dnl Test for __thread support.
AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
-[AC_COMPILE_IFELSE([__thread int i = 1;],
+[AC_COMPILE_IFELSE([AC_LANG_SOURCE([__thread int i = 1;])],
[gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
@@ -361,14 +395,14 @@ AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
dnl On GNU/Linux TLS in static programs only works when using glibc
dnl 2.4 or later.
AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
-[AC_COMPILE_IFELSE([
+[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include
#if !defined __GLIBC__
error
#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
error
#endif
-], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
+])], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
@@ -376,11 +410,11 @@ dnl Test for #pragma omp threadprivate
AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
[save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fopenmp"
-AC_COMPILE_IFELSE([
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include
int i;
#pragma omp threadprivate (i)
-], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
+])], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
CFLAGS="$save_CFLAGS"])
if test "$gold_cv_c_threadprivate" = "yes"; then
AC_DEFINE(HAVE_OMP_SUPPORT, 1,
@@ -389,29 +423,34 @@ fi
AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
dnl Test for the -ftls-dialect=gnu2 option.
+dnl Use -Werror in case of compilers that make unknown -m options warnings.
+dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
+dnl gets set later by default Autoconf magic to include -Werror. (We are
+dnl assuming here that there is no compiler that groks -mtls-dialect=gnu2
+dnl but does not grok -Werror.)
save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -fpic -mtls-dialect=gnu2"
-AC_COMPILE_IFELSE([
+CFLAGS="$CFLAGS -Werror -fpic -mtls-dialect=gnu2"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([
__thread int i;
void foo (void)
{
i = 10;
}
-], [have_tls_gnu2=yes], [have_tls_gnu2=no])
+])], [have_tls_gnu2=yes], [have_tls_gnu2=no])
CFLAGS="$save_CFLAGS"
AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
dnl only with glibc 2.9 or later.
AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
-[AC_COMPILE_IFELSE([
+[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include
#if !defined __GLIBC__
error
#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
error
#endif
-], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
+])], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
@@ -419,7 +458,7 @@ dnl Test for the -frandom-seed option.
AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
[save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -frandom-seed=foo"
-AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [gold_cv_c_random_seed=yes],
[gold_cv_c_random_seed=no])
CFLAGS="$save_CFLAGS"])
if test "$gold_cv_c_random_seed" = "yes"; then
@@ -490,7 +529,7 @@ LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
AC_SUBST(LFS_CFLAGS)
AC_CHECK_HEADERS(sys/mman.h)
-AC_CHECK_FUNCS(chsize mmap)
+AC_CHECK_FUNCS(chsize mmap link)
AC_REPLACE_FUNCS(pread ftruncate ffsll)
AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
@@ -508,7 +547,28 @@ fi
# Link in zlib if we can. This allows us to write compressed sections.
AM_ZLIB
-AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_header_zlib_h" = "yes")
+
+AC_ARG_ENABLE([threads],
+[[ --enable-threads[=ARG] multi-threaded linking [ARG={auto,yes,no}]]],
+[case "${enableval}" in
+ yes | "") threads=yes ;;
+ no) threads=no ;;
+ auto) threads=auto ;;
+ *) threads=yes ;;
+ esac],
+[threads=auto])
+
+if test "$threads" = "yes"; then
+ AX_PTHREAD([threads=yes], AC_MSG_ERROR([pthread not found]))
+elif test "$threads" = "auto"; then
+ AX_PTHREAD([threads=yes], [threads=no])
+fi
+
+if test "$threads" = "yes"; then
+ AC_DEFINE(ENABLE_THREADS, 1,
+ [Define to do multi-threaded linking])
+fi
+AM_CONDITIONAL(THREADS, test "$threads" = "yes")
dnl We have to check these in C, not C++, because autoconf generates
dnl tests which have no type information, and current glibc provides
@@ -516,19 +576,44 @@ dnl multiple declarations of functions like basename when compiling
dnl with C++.
AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
+dnl Check if gcc supports the -gpubnames option.
+dnl Use -Werror in case of compilers that make unknown -g options warnings.
+dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
+dnl gets set later by default Autoconf magic to include -Werror. (We are
+dnl assuming here that there is no compiler that groks -gpubnames
+dnl but does not grok -Werror.)
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -Werror -gpubnames"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_pubnames=yes], [have_pubnames=no])
+CFLAGS="$save_CFLAGS"
+AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
+
+dnl Check if gcc supports the -fno-use-linker-plugin option.
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -Werror -fno-use-linker-plugin"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_no_use_linker_plugin=yes], [have_no_use_linker_plugin=no])
+CFLAGS="$save_CFLAGS"
+AM_CONDITIONAL(HAVE_NO_USE_LINKER_PLUGIN, test "$have_no_use_linker_plugin" = "yes")
+
AC_LANG_PUSH(C++)
+AC_CHECK_HEADERS(unordered_set unordered_map)
AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
AC_CHECK_HEADERS(byteswap.h)
dnl When plugins enabled dynamic loader interface is required. Check headers
-dnl which may provide this interface. In case of dlfcn.h add libdl to link.
+dnl which may provide this interface. Add the necessary library to link.
AC_CHECK_HEADERS(windows.h)
-AC_CHECK_HEADERS(dlfcn.h, [DLOPEN_LIBS="-ldl"], [DLOPEN_LIBS=""])
+AC_CHECK_HEADERS(dlfcn.h)
+AC_SEARCH_LIBS(dlopen, [dl dld])
+case "$ac_cv_search_dlopen" in
+ no*) DLOPEN_LIBS="";;
+ *) DLOPEN_LIBS="$ac_cv_search_dlopen";;
+esac
AC_SUBST(DLOPEN_LIBS)
-AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
+AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times mkdtemp)
AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
# Use of ::std::tr1::unordered_map::rehash causes undefined symbols
@@ -550,11 +635,11 @@ AC_CACHE_CHECK([whether std::tr1::hash is defined],
[gold_cv_hash_off_t],
[CXXFLAGS_hold=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
-AC_COMPILE_IFELSE([
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include
#include
std::tr1::hash h;
-],
+])],
[gold_cv_hash_off_t=yes],
[gold_cv_hash_off_t=no])
CXXFLAGS=$CXXFLAGS_hold])
@@ -568,12 +653,12 @@ fi
# probably be removed after the bug has been fixed for a while.
AC_CACHE_CHECK([whether we can use attributes with template functions],
[gold_cv_template_attribute],
-[AC_COMPILE_IFELSE([
+[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
template extern void foo(const char*, ...)
__attribute__ ((__format__ (__printf__, 1, 2)));
template void foo(const char* format, ...) {}
void bar() { foo("%s\n", "foo"); }
-], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
+])], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
if test "$gold_cv_template_attribute" = "yes"; then
AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
[Define if attributes work on C++ templates])
@@ -591,13 +676,6 @@ if test "$gold_cv_stat_st_mtim" = "yes"; then
[Define if struct stat has a field st_mtim with timespec for mtime])
fi
-dnl Check if gcc supports the -gpubnames option.
-save_CXXFLAGS="$CXXFLAGS"
-CXXFLAGS="$CXXFLAGS -gpubnames"
-AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
-CXXFLAGS="$save_CXXFLAGS"
-AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
-
AC_LANG_POP(C++)
AC_CHECK_HEADERS(locale.h)