1dnl Process this file with autoconf to produce a configure script. 2 3AC_PREREQ(2.59) 4 5AC_INIT(gold, 0.1) 6AC_CONFIG_SRCDIR(gold.cc) 7 8AC_CANONICAL_TARGET 9 10AM_INIT_AUTOMAKE([no-dist parallel-tests]) 11 12AM_CONFIG_HEADER(config.h:config.in) 13 14AC_ARG_WITH(sysroot, 15[ --with-sysroot[=DIR] search for usr/lib et al within DIR], 16[sysroot=$withval], [sysroot=no]) 17 18if test "$sysroot" = "yes"; then 19 sysroot='${exec_prefix}/${target_alias}/sys-root' 20elif test "$sysroot" = "no"; then 21 sysroot= 22fi 23 24sysroot_relocatable=0 25if test -n "$sysroot"; then 26 case "sysroot" in 27 "${prefix}" | "${prefix}/"* | \ 28 "${exec_prefix}" | "${exec_prefix}/"* | \ 29 '${prefix}' | '${prefix}/'*| \ 30 '${exec_prefix}' | '${exec_prefix}/'*) 31 sysroot_relocatable=1 32 ;; 33 esac 34fi 35 36AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot", 37 [System root for target files]) 38AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable, 39 [Whether the system root can be relocated]) 40 41dnl "install_as_default" is true if the linker to be installed as the 42dnl default linker, ld. 43dnl "installed_linker" is the installed gold linker name. 44 45default_ld= 46AC_ARG_ENABLE(ld, 47[[ --enable-ld[=ARG] build ld [ARG={default,yes,no}]]], 48[case "${enableval}" in 49 default) 50 default_ld=ld.bfd 51 ;; 52esac]) 53 54AC_ARG_ENABLE(gold, 55[[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]], 56[case "${enableval}" in 57 yes|default) 58 if test x${default_ld} = x; then 59 install_as_default=yes 60 fi 61 installed_linker=ld.gold 62 ;; 63 no) 64 ;; 65 *) 66 AC_MSG_ERROR([invalid --enable-gold argument]) 67 ;; 68 esac], 69[install_as_default=no 70 installed_linker=ld.gold]) 71AC_SUBST(install_as_default) 72AC_SUBST(installed_linker) 73 74dnl For now threads are a configure time option. 75AC_ARG_ENABLE([threads], 76[ --enable-threads multi-threaded linking], 77[case "${enableval}" in 78 yes | "") threads=yes ;; 79 no) threads=no ;; 80 *) threads=yes ;; 81 esac], 82[threads=no]) 83if test "$threads" = "yes"; then 84 AC_DEFINE(ENABLE_THREADS, 1, 85 [Define to do multi-threaded linking]) 86fi 87AM_CONDITIONAL(THREADS, test "$threads" = "yes") 88 89AC_ARG_ENABLE([plugins], 90[ --enable-plugins linker plugins], 91[case "${enableval}" in 92 yes | "") plugins=yes ;; 93 no) plugins=no ;; 94 *) plugins=yes ;; 95 esac], 96[plugins=no]) 97if test "$plugins" = "yes"; then 98 AC_DEFINE(ENABLE_PLUGINS, 1, 99 [Define to enable linker plugins]) 100fi 101AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes") 102 103AC_ARG_ENABLE([targets], 104[ --enable-targets alternative target configurations], 105[case "${enableval}" in 106 yes | "") 107 AC_MSG_ERROR([--enable-targets option must specify target names or 'all']) 108 ;; 109 no) 110 enable_targets= 111 ;; 112 *) 113 enable_targets=$enableval 114 ;; 115esac], 116[# For now, enable all targets by default 117 enable_targets=all 118]) 119 120# Canonicalize the enabled targets. 121if test -n "$enable_targets"; then 122 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do 123 result=`$ac_config_sub $targ 2>/dev/null` 124 if test -n "$result"; then 125 canon_targets="$canon_targets $result" 126 else 127 # Permit unrecognized target names, like "all". 128 canon_targets="$canon_targets $targ" 129 fi 130 done 131fi 132 133# See which specific instantiations we need. 134targetobjs= 135all_targets= 136default_machine= 137default_size= 138default_big_endian= 139default_osabi=ELFOSABI_NONE 140targ_32_little= 141targ_32_big= 142targ_64_little= 143targ_64_big= 144for targ in $target $canon_targets; do 145 if test "$targ" = "all"; then 146 targ_32_little=yes 147 targ_32_big=yes 148 targ_64_little=yes 149 targ_64_big=yes 150 all_targets=yes 151 else 152 . ${srcdir}/configure.tgt 153 154 if test "$targ_obj" = "UNKNOWN"; then 155 AC_MSG_ERROR("unsupported target $targ") 156 else 157 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)" 158 if test "$targ_extra_obj" != ""; then 159 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)" 160 fi 161 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then 162 if test "$targ_big_endian" = "true" \ 163 -o "$targ_extra_big_endian" = "true"; then 164 targ_32_big=yes 165 fi 166 if test "$targ_big_endian" = "false" \ 167 -o "$targ_extra_big_endian" = "false"; then 168 targ_32_little=yes 169 fi 170 fi 171 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then 172 if test "$targ_big_endian" = "true" \ 173 -o "$targ_extra_big_endian" = "true"; then 174 targ_64_big=yes 175 fi 176 if test "$targ_big_endian" = "false" \ 177 -o "$targ_extra_big_endian" = "false"; then 178 targ_64_little=yes 179 fi 180 fi 181 182 if test "$target" = "$targ"; then 183 default_machine=$targ_machine 184 default_size=$targ_size 185 default_big_endian=$targ_big_endian 186 default_osabi=$targ_osabi 187 188 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm") 189 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386") 190 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc") 191 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc") 192 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64") 193 fi 194 fi 195 fi 196done 197 198# Remove any duplicates. 199to="" 200for t in $targetobjs; do 201 case " $to " in 202 *" $t "*) ;; 203 *) to="$to $t" ;; 204 esac 205done 206targetobjs=$to 207 208if test -n "$targ_32_little"; then 209 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1, 210 [Define to support 32-bit little-endian targets]) 211fi 212if test -n "$targ_32_big"; then 213 AC_DEFINE(HAVE_TARGET_32_BIG, 1, 214 [Define to support 32-bit big-endian targets]) 215fi 216if test -n "$targ_64_little"; then 217 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1, 218 [Define to support 64-bit little-endian targets]) 219fi 220if test -n "$targ_64_big"; then 221 AC_DEFINE(HAVE_TARGET_64_BIG, 1, 222 [Define to support 64-bit big-endian targets]) 223fi 224 225if test -n "$all_targets"; then 226 TARGETOBJS='$(ALL_TARGETOBJS)' 227else 228 TARGETOBJS="$targetobjs" 229fi 230AC_SUBST(TARGETOBJS) 231 232AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine, 233 [Default machine code]) 234AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size, 235 [Default size (32 or 64)]) 236AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian, 237 [Default big endian (true or false)]) 238AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi, 239 [Default OSABI code]) 240 241AC_PROG_CC 242AC_PROG_CXX 243AC_PROG_YACC 244AC_PROG_RANLIB 245AC_PROG_INSTALL 246AC_PROG_LN_S 247 248AC_GNU_SOURCE 249 250ZW_GNU_GETTEXT_SISTER_DIR 251AM_PO_SUBDIRS 252 253AC_C_BIGENDIAN 254 255AC_EXEEXT 256 257AM_CONDITIONAL(NATIVE_LINKER, 258 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias") 259AM_CONDITIONAL(GCC, test "$GCC" = yes) 260 261AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER, 262 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias") 263 264dnl Some architectures do not support taking pointers of functions 265dnl defined in shared libraries except in -fPIC mode. We need to 266dnl tell the unittest framework if we're compiling for one of those 267dnl targets, so it doesn't try to run the tests that do that. 268AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [ 269 case $target_cpu in 270 i?86) true;; 271 x86_64) false;; 272 sparc64) false;; 273 *) true;; 274 esac]) 275 276dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is 277dnl only available in gcc 4.1. 278AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41], 279[AC_COMPILE_IFELSE([ 280#if !defined __GNUC__ 281error 282#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) 283error 284#endif 285], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])]) 286 287dnl Whether we can test -mcmodel=medium. 288AM_CONDITIONAL(MCMODEL_MEDIUM, 289[test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"]) 290 291dnl Test for __thread support. 292AC_CACHE_CHECK([for thread support], [gold_cv_c_thread], 293[AC_COMPILE_IFELSE([__thread int i = 1;], 294[gold_cv_c_thread=yes], [gold_cv_c_thread=no])]) 295 296AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes") 297 298dnl On GNU/Linux TLS in static programs only works when using glibc 299dnl 2.4 or later. 300AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24], 301[AC_COMPILE_IFELSE([ 302#include <features.h> 303#if !defined __GLIBC__ 304error 305#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4) 306error 307#endif 308], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])]) 309 310AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes") 311 312dnl Test for #pragma omp threadprivate 313AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate], 314[save_CFLAGS="$CFLAGS" 315CFLAGS="$CFLAGS -fopenmp" 316AC_COMPILE_IFELSE([ 317#include <omp.h> 318int i; 319#pragma omp threadprivate (i) 320], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no]) 321CFLAGS="$save_CFLAGS"]) 322if test "$gold_cv_c_threadprivate" = "yes"; then 323 AC_DEFINE(HAVE_OMP_SUPPORT, 1, 324 [Define if compiler supports #pragma omp threadprivate]) 325fi 326AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes") 327 328dnl Test for the -ftls-dialect=gnu2 option. 329save_CFLAGS="$CFLAGS" 330CFLAGS="$CFLAGS -mtls-dialect=gnu2" 331AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no]) 332CFLAGS="$save_CFLAGS" 333AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes") 334 335dnl On GNU/Linux TLS descriptors are supported by the dynamic loader 336dnl only with glibc 2.9 or later. 337AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29], 338[AC_COMPILE_IFELSE([ 339#include <features.h> 340#if !defined __GLIBC__ 341error 342#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9) 343error 344#endif 345], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])]) 346 347AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes") 348 349dnl Check whether the compiler supports constructor priorities in 350dnl attributes, which were added in gcc 4.3. 351AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio], 352[AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));], 353[gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])]) 354 355AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes") 356 357dnl Test for the -frandom-seed option. 358AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed], 359[save_CFLAGS="$CFLAGS" 360CFLAGS="$CFLAGS -frandom-seed=foo" 361AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes], 362[gold_cv_c_random_seed=no]) 363CFLAGS="$save_CFLAGS"]) 364if test "$gold_cv_c_random_seed" = "yes"; then 365 # In Makefile, '$@' will be expanded to be the name of the file 366 # being built, providing a unique seed for each file. 367 RANDOM_SEED_CFLAGS=-frandom-seed=\$@ 368fi 369AC_SUBST(RANDOM_SEED_CFLAGS) 370 371dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc 372dnl 2.11 or later, and by binutils 2.20.1 or later. 373AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11], 374[AC_COMPILE_IFELSE([ 375#include <features.h> 376#if !defined __GLIBC__ 377error 378#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11) 379error 380#endif 381__asm__(".type foo, %gnu_indirect_function"); 382], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])]) 383 384AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes") 385 386AM_BINUTILS_WARNINGS 387 388WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'` 389AC_SUBST(WARN_CXXFLAGS) 390 391dnl Force support for large files by default. This may need to be 392dnl host dependent. If build == host, we can check getconf LFS_CFLAGS. 393LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" 394AC_SUBST(LFS_CFLAGS) 395 396AC_CHECK_FUNCS(chsize) 397AC_REPLACE_FUNCS(pread ftruncate mremap ffsll) 398 399# Link in zlib if we can. This allows us to write compressed sections. 400AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)]) 401AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no") 402 403dnl We have to check these in C, not C++, because autoconf generates 404dnl tests which have no type information, and current glibc provides 405dnl multiple declarations of functions like basename when compiling 406dnl with C++. 407AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp]) 408 409AC_LANG_PUSH(C++) 410 411AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map) 412AC_CHECK_HEADERS(ext/hash_map ext/hash_set) 413AC_CHECK_HEADERS(byteswap.h) 414AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times) 415AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem]) 416 417# Use of ::std::tr1::unordered_map::rehash causes undefined symbols 418# at link time with some versions of GCC. 419AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.], 420[gold_cv_unordered_map_rehash], 421[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 422#include <tr1/unordered_map> 423void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); } 424]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])]) 425if test "$gold_cv_unordered_map_rehash" = "yes"; then 426 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1, 427 [Define if ::std::tr1::unordered_map::rehash is usable]) 428fi 429 430# gcc 4.3.0 doesn't recognize the printf attribute on a template 431# function. Check for that. This is gcc bug 35546. This test can 432# probably be removed after the bug has been fixed for a while. 433AC_CACHE_CHECK([whether we can use attributes with template functions], 434[gold_cv_template_attribute], 435[AC_COMPILE_IFELSE([ 436template<typename T> extern void foo(const char*, ...) 437 __attribute__ ((__format__ (__printf__, 1, 2))); 438template<typename T> void foo(const char* format, ...) {} 439void bar() { foo<int>("%s\n", "foo"); } 440], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])]) 441if test "$gold_cv_template_attribute" = "yes"; then 442 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1, 443 [Define if attributes work on C++ templates]) 444fi 445 446dnl Check if the system has struct stat::st_mtim. 447AC_CACHE_CHECK([for struct stat::st_mtim.], 448[gold_cv_stat_st_mtim], 449[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 450#include <sys/stat.h> 451long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);} 452]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])]) 453if test "$gold_cv_stat_st_mtim" = "yes"; then 454 AC_DEFINE(HAVE_STAT_ST_MTIM, 1, 455 [Define if struct stat has a field st_mtim with timespec for mtime]) 456fi 457 458AC_LANG_POP(C++) 459 460AM_MAINTAINER_MODE 461 462AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in) 463