1dnl Process this file with autoconf to produce a configure script. 2dnl 3dnl Copyright (C) 2006-2020 Free Software Foundation, Inc. 4dnl 5dnl This file is free software; you can redistribute it and/or modify 6dnl it under the terms of the GNU General Public License as published by 7dnl the Free Software Foundation; either version 3 of the License, or 8dnl (at your option) any later version. 9dnl 10dnl This program is distributed in the hope that it will be useful, 11dnl but WITHOUT ANY WARRANTY; without even the implied warranty of 12dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13dnl GNU General Public License for more details. 14dnl 15dnl You should have received a copy of the GNU General Public License 16dnl along with this program; see the file COPYING3. If not see 17dnl <http://www.gnu.org/licenses/>. 18dnl 19 20AC_INIT(gold, 0.1) 21AC_CONFIG_SRCDIR(gold.cc) 22 23AC_CANONICAL_TARGET 24 25AM_INIT_AUTOMAKE([no-dist parallel-tests]) 26 27AM_CONFIG_HEADER(config.h:config.in) 28 29AC_USE_SYSTEM_EXTENSIONS 30 31# PR 14072 32AH_VERBATIM([00_CONFIG_H_CHECK], 33[/* Check that config.h is #included before system headers 34 (this works only for glibc, but that should be enough). */ 35#if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__) 36# error config.h must be #included before system headers 37#endif 38#define __CONFIG_H__ 1]) 39 40AC_ARG_WITH(sysroot, 41[ --with-sysroot[=DIR] search for usr/lib et al within DIR], 42[sysroot=$withval], [sysroot=no]) 43 44if test "$sysroot" = "yes"; then 45 sysroot='${exec_prefix}/${target_alias}/sys-root' 46elif test "$sysroot" = "no"; then 47 sysroot= 48fi 49 50sysroot_relocatable=0 51if test -n "$sysroot"; then 52 case "$sysroot" in 53 "${prefix}" | "${prefix}/"* | \ 54 "${exec_prefix}" | "${exec_prefix}/"* | \ 55 '${prefix}' | '${prefix}/'*| \ 56 '${exec_prefix}' | '${exec_prefix}/'*) 57 sysroot_relocatable=1 58 ;; 59 esac 60fi 61 62AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot", 63 [System root for target files]) 64AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable, 65 [Whether the system root can be relocated]) 66 67dnl "install_as_default" is true if the linker to be installed as the 68dnl default linker, ld. 69dnl "installed_linker" is the installed gold linker name. 70 71installed_linker=ld.gold 72AC_ARG_ENABLE(gold, 73[[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]], 74[case "${enableval}" in 75 default) 76 install_as_default=yes 77 ;; 78 yes) 79 if test x${enable_ld} = xno; then 80 install_as_default=yes 81 fi 82 ;; 83 esac], 84[install_as_default=no]) 85AC_SUBST(install_as_default) 86AC_SUBST(installed_linker) 87 88AC_PLUGINS 89if test "$plugins" = "yes"; then 90 AC_DEFINE(ENABLE_PLUGINS, 1, 91 [Define to enable linker plugins]) 92fi 93AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes") 94 95# Decide if -z relro should be enabled in ELF linker by default. 96ac_default_ld_z_relro=unset 97# Provide a configure time option to override our default. 98AC_ARG_ENABLE(relro, 99 AS_HELP_STRING([--enable-relro], 100 [enable -z relro in ELF linker by default]), 101[case "${enableval}" in 102 yes) ac_default_ld_z_relro=1 ;; 103 no) ac_default_ld_z_relro=0 ;; 104esac])dnl 105if test "${ac_default_ld_z_relro}" = unset; then 106 ac_default_ld_z_relro=1 107fi 108AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_RELRO, 109 $ac_default_ld_z_relro, 110 [Define to 1 if you want to enable -z relro in ELF linker by default.]) 111 112AC_ARG_ENABLE([targets], 113[ --enable-targets alternative target configurations], 114[case "${enableval}" in 115 yes | "") 116 AC_MSG_ERROR([--enable-targets option must specify target names or 'all']) 117 ;; 118 no) 119 enable_targets= 120 ;; 121 *) 122 enable_targets=$enableval 123 ;; 124esac], 125[# For now, enable all targets by default 126 enable_targets=all 127]) 128 129# Canonicalize the enabled targets. 130if test -n "$enable_targets"; then 131 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do 132 result=`$ac_config_sub $targ 2>/dev/null` 133 if test -n "$result"; then 134 canon_targets="$canon_targets $result" 135 else 136 # Permit unrecognized target names, like "all". 137 canon_targets="$canon_targets $targ" 138 fi 139 done 140fi 141 142# Decide which "--hash-style" to use by default 143# Provide a configure time option to override our default. 144AC_ARG_ENABLE([default-hash-style], 145AS_HELP_STRING([--enable-default-hash-style={sysv,gnu,both}], 146 [use this default hash style]), 147[case "${enable_default_hash_style}" in 148 sysv | gnu | both) ;; 149 *) AC_MSG_ERROR([bad value ${enable_default_hash_style} for enable-default-hash-style option]) ;; 150esac], 151[case "${target}" in 152 # Enable gnu hash only on GNU targets, but not mips 153 mips*-*-*) enable_default_hash_style=sysv ;; 154 *-*-gnu* | *-*-linux* | *-*-nacl*) enable_default_hash_style=both ;; 155 *) enable_default_hash_style=sysv ;; 156esac]) 157 158AC_DEFINE_UNQUOTED([DEFAULT_HASH_STYLE], 159 ["${enable_default_hash_style}"], 160 [Set the default --hash-style value]) 161 162# See which specific instantiations we need. 163targetobjs= 164all_targets= 165default_machine= 166default_size= 167default_big_endian= 168default_osabi=ELFOSABI_NONE 169targ_32_little= 170targ_32_big= 171targ_64_little= 172targ_64_big= 173for targ in $target $canon_targets; do 174 if test "$targ" = "all"; then 175 targ_32_little=yes 176 targ_32_big=yes 177 targ_64_little=yes 178 targ_64_big=yes 179 all_targets=yes 180 else 181 . ${srcdir}/configure.tgt 182 183 if test "$targ_obj" = "UNKNOWN"; then 184 AC_MSG_ERROR("unsupported target $targ") 185 else 186 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)" 187 if test "$targ_extra_obj" != ""; then 188 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)" 189 fi 190 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then 191 if test "$targ_big_endian" = "true" \ 192 -o "$targ_extra_big_endian" = "true"; then 193 targ_32_big=yes 194 fi 195 if test "$targ_big_endian" = "false" \ 196 -o "$targ_extra_big_endian" = "false"; then 197 targ_32_little=yes 198 fi 199 fi 200 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then 201 if test "$targ_big_endian" = "true" \ 202 -o "$targ_extra_big_endian" = "true"; then 203 targ_64_big=yes 204 fi 205 if test "$targ_big_endian" = "false" \ 206 -o "$targ_extra_big_endian" = "false"; then 207 targ_64_little=yes 208 fi 209 fi 210 211 if test "$target" = "$targ"; then 212 default_machine=$targ_machine 213 default_size=$targ_size 214 default_big_endian=$targ_big_endian 215 default_osabi=$targ_osabi 216 217 AM_CONDITIONAL(DEFAULT_TARGET_AARCH64, test "$targ_obj" = "aarch64") 218 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm") 219 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386") 220 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc") 221 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc") 222 AM_CONDITIONAL(DEFAULT_TARGET_S390, test "$targ_obj" = "s390") 223 target_x86_64=no 224 target_x32=no 225 if test "$targ_obj" = "x86_64"; then 226 case "$target" in 227 x86_64*-linux-gnux32) 228 target_x32=yes 229 default_size=32 230 ;; 231 *) 232 target_x86_64=yes 233 ;; 234 esac 235 fi 236 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$target_x86_64" = "yes") 237 AM_CONDITIONAL(DEFAULT_TARGET_X32, test "$target_x32" = "yes") 238 AM_CONDITIONAL(DEFAULT_TARGET_X86_64_OR_X32, 239 test "$target_x86_64" = "yes" -o "$target_x32" = "yes") 240 AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx") 241 AM_CONDITIONAL(DEFAULT_TARGET_MIPS, test "$targ_obj" = "mips") 242 DEFAULT_TARGET=${targ_obj} 243 AC_SUBST(DEFAULT_TARGET) 244 fi 245 fi 246 fi 247done 248 249# Remove any duplicates. 250to="" 251for t in $targetobjs; do 252 case " $to " in 253 *" $t "*) ;; 254 *) to="$to $t" ;; 255 esac 256done 257targetobjs=$to 258 259if test -n "$targ_32_little"; then 260 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1, 261 [Define to support 32-bit little-endian targets]) 262fi 263if test -n "$targ_32_big"; then 264 AC_DEFINE(HAVE_TARGET_32_BIG, 1, 265 [Define to support 32-bit big-endian targets]) 266fi 267if test -n "$targ_64_little"; then 268 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1, 269 [Define to support 64-bit little-endian targets]) 270fi 271if test -n "$targ_64_big"; then 272 AC_DEFINE(HAVE_TARGET_64_BIG, 1, 273 [Define to support 64-bit big-endian targets]) 274fi 275 276if test -n "$all_targets"; then 277 TARGETOBJS='$(ALL_TARGETOBJS)' 278else 279 TARGETOBJS="$targetobjs" 280fi 281AC_SUBST(TARGETOBJS) 282 283AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine, 284 [Default machine code]) 285AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size, 286 [Default size (32 or 64)]) 287AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian, 288 [Default big endian (true or false)]) 289AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi, 290 [Default OSABI code]) 291 292AC_ARG_WITH(lib-path, 293[ --with-lib-path=dir1:dir2... set default LIB_PATH], 294[case "$withval" in 295 yes) LIB_PATH='"/lib:/usr/lib"' ;; 296 no) LIB_PATH='""' ;; 297 *) LIB_PATH='"'"$withval"'"' ;; 298 esac], 299[LIB_PATH='"::DEFAULT::"']) 300AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH, 301 [Default library search path]) 302if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then 303 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker]) 304fi 305 306AC_CHECK_TOOL(NM, nm) 307 308AC_PROG_CC 309AC_PROG_CXX 310AC_PROG_YACC 311AC_PROG_RANLIB 312AC_PROG_INSTALL 313AC_PROG_LN_S 314 315AC_GNU_SOURCE 316 317ZW_GNU_GETTEXT_SISTER_DIR 318AM_PO_SUBDIRS 319 320AC_C_BIGENDIAN 321 322AC_EXEEXT 323 324AM_CONDITIONAL(NATIVE_LINKER, 325 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias") 326AM_CONDITIONAL(GCC, test "$GCC" = yes) 327 328AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER, 329 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias") 330 331dnl Test for whether static linking is supported. Some systems do not 332dnl install static libraries. This only affects the set of tests that 333dnl we run. 334AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static], 335[LDFLAGS_hold=$LDFLAGS 336LDFLAGS="$LDFLAGS -static" 337AC_LINK_IFELSE([ 338AC_LANG_PROGRAM([[void f() { }]])], 339[gold_cv_lib_static=yes], [gold_cv_lib_static=no]) 340LDFLAGS=$LDFLAGS_hold]) 341AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes") 342 343dnl Some architectures do not support taking pointers of functions 344dnl defined in shared libraries except in -fPIC mode. We need to 345dnl tell the unittest framework if we're compiling for one of those 346dnl targets, so it doesn't try to run the tests that do that. 347AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [ 348 case $target_cpu in 349 powerpc*) false;; 350 x86_64) false;; 351 sparc64) false;; 352 s390x) false;; 353 *) true;; 354 esac]) 355 356dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is 357dnl only available in gcc 4.1. 358AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41], 359[AC_COMPILE_IFELSE([AC_LANG_SOURCE([ 360#if !defined __GNUC__ 361error 362#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) 363error 364#endif 365])], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])]) 366 367save_CFLAGS="$CFLAGS" 368CFLAGS="$CFLAGS -mcmodel=medium" 369AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_mcmodel_medium=yes], [have_mcmodel_medium=no]) 370CFLAGS="$save_CFLAGS" 371dnl Whether we can test -mcmodel=medium. 372AM_CONDITIONAL(MCMODEL_MEDIUM, 373[test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"]) 374 375AC_CACHE_CHECK([whether $CC supports -fmerge-constants], 376 [gold_cv_merge_constants], [ 377save_CFLAGS="$CFLAGS" 378CFLAGS="$CFLAGS -fmerge-constants" 379AC_COMPILE_IFELSE([AC_LANG_SOURCE([const char *s = "foo";])], 380 [gold_cv_merge_constants=yes], 381 [gold_cv_merge_constants=no]) 382CFLAGS="$save_CFLAGS"]) 383AC_SUBST([MERGE_CONSTANTS_FLAG]) 384AS_IF([test "$gold_cv_merge_constants" = yes], 385 [MERGE_CONSTANTS_FLAG=-fmerge-constants], 386 [MERGE_CONSTANTS_FLAG=]) 387 388dnl Test for __thread support. 389AC_CACHE_CHECK([for thread support], [gold_cv_c_thread], 390[AC_COMPILE_IFELSE([AC_LANG_SOURCE([__thread int i = 1;])], 391[gold_cv_c_thread=yes], [gold_cv_c_thread=no])]) 392 393AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes") 394 395dnl On GNU/Linux TLS in static programs only works when using glibc 396dnl 2.4 or later. 397AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24], 398[AC_COMPILE_IFELSE([AC_LANG_SOURCE([ 399#include <features.h> 400#if !defined __GLIBC__ 401error 402#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4) 403error 404#endif 405])], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])]) 406 407AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes") 408 409dnl Test for #pragma omp threadprivate 410AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate], 411[save_CFLAGS="$CFLAGS" 412CFLAGS="$CFLAGS -fopenmp" 413AC_COMPILE_IFELSE([AC_LANG_SOURCE([ 414#include <omp.h> 415int i; 416#pragma omp threadprivate (i) 417])], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no]) 418CFLAGS="$save_CFLAGS"]) 419if test "$gold_cv_c_threadprivate" = "yes"; then 420 AC_DEFINE(HAVE_OMP_SUPPORT, 1, 421 [Define if compiler supports #pragma omp threadprivate]) 422fi 423AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes") 424 425dnl Test for the -ftls-dialect=gnu2 option. 426dnl Use -Werror in case of compilers that make unknown -m options warnings. 427dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS 428dnl gets set later by default Autoconf magic to include -Werror. (We are 429dnl assuming here that there is no compiler that groks -mtls-dialect=gnu2 430dnl but does not grok -Werror.) 431save_CFLAGS="$CFLAGS" 432CFLAGS="$CFLAGS -Werror -fpic -mtls-dialect=gnu2" 433AC_COMPILE_IFELSE([AC_LANG_SOURCE([ 434__thread int i; 435void foo (void) 436{ 437 i = 10; 438} 439])], [have_tls_gnu2=yes], [have_tls_gnu2=no]) 440CFLAGS="$save_CFLAGS" 441AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes") 442 443dnl On GNU/Linux TLS descriptors are supported by the dynamic loader 444dnl only with glibc 2.9 or later. 445AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29], 446[AC_COMPILE_IFELSE([AC_LANG_SOURCE([ 447#include <features.h> 448#if !defined __GLIBC__ 449error 450#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9) 451error 452#endif 453])], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])]) 454 455AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes") 456 457dnl Test for the -frandom-seed option. 458AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed], 459[save_CFLAGS="$CFLAGS" 460CFLAGS="$CFLAGS -frandom-seed=foo" 461AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [gold_cv_c_random_seed=yes], 462[gold_cv_c_random_seed=no]) 463CFLAGS="$save_CFLAGS"]) 464if test "$gold_cv_c_random_seed" = "yes"; then 465 # In Makefile, '$@' will be expanded to be the name of the file 466 # being built, providing a unique seed for each file. 467 RANDOM_SEED_CFLAGS=-frandom-seed=\$@ 468fi 469AC_SUBST(RANDOM_SEED_CFLAGS) 470 471dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc 472dnl 2.11 or later, and by binutils 2.20.1 or later. 473AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc], 474[save_LDFLAGS="$LDFLAGS" 475LDFLAGS="$LDFLAGS -static" 476AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 477#include <features.h> 478#if !defined __GLIBC__ 479error 480#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11) 481error 482#endif 483void func (void) { } 484void invoke (void); 485__asm__(".type invoke, %gnu_indirect_function"); 486typedef void (*funcptr) (void); 487funcptr dispatch (void) __asm__ ("invoke"); 488funcptr dispatch (void) { return &func; }]], 489[[invoke();]]) 490], [ 491if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then 492 gold_cv_lib_glibc_ifunc=both 493else 494 gold_cv_lib_glibc_ifunc=dyn 495fi], [gold_cv_lib_glibc_ifunc=no]) 496LDFLAGS="$save_LDFLAGS"]) 497 498AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no") 499AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both") 500 501AM_BINUTILS_WARNINGS 502 503WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'` 504AC_SUBST(WARN_CXXFLAGS) 505 506AC_ARG_WITH(gold-ldflags, 507[ --with-gold-ldflags=FLAGS additional link flags for gold], 508[if test "$withval" = "no" -o "$withval" = "yes"; then 509 GOLD_LDFLAGS= 510 else 511 GOLD_LDFLAGS=$withval 512 fi], 513[GOLD_LDFLAGS=]) 514AC_SUBST(GOLD_LDFLAGS) 515 516AC_ARG_WITH(gold-ldadd, 517[ --with-gold-ldadd=LIBS additional libraries for gold], 518[if test "$withval" = "no" -o "$withval" = "yes"; then 519 GOLD_LDADD= 520 else 521 GOLD_LDADD=$withval 522 fi], 523[GOLD_LDADD=]) 524AC_SUBST(GOLD_LDADD) 525 526dnl Force support for large files by default. This may need to be 527dnl host dependent. If build == host, we can check getconf LFS_CFLAGS. 528LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" 529AC_SUBST(LFS_CFLAGS) 530 531AC_CHECK_HEADERS(sys/mman.h) 532AC_CHECK_FUNCS(chsize mmap link) 533AC_REPLACE_FUNCS(pread ftruncate ffsll) 534 535AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove], 536[AC_LINK_IFELSE([ 537AC_LANG_PROGRAM([[ 538#include <sys/mman.h> 539void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); } 540]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])]) 541if test "$gold_cv_lib_mremap_maymove" = "yes"; then 542 AC_DEFINE(HAVE_MREMAP, 1, 543 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support]) 544else 545 AC_LIBOBJ(mremap) 546fi 547 548# Link in zlib if we can. This allows us to write compressed sections. 549AM_ZLIB 550 551AC_ARG_ENABLE([threads], 552[[ --enable-threads[=ARG] multi-threaded linking [ARG={auto,yes,no}]]], 553[case "${enableval}" in 554 yes | "") threads=yes ;; 555 no) threads=no ;; 556 auto) threads=auto ;; 557 *) threads=yes ;; 558 esac], 559[threads=auto]) 560 561if test "$threads" = "yes"; then 562 AX_PTHREAD([threads=yes], AC_MSG_ERROR([pthread not found])) 563elif test "$threads" = "auto"; then 564 AX_PTHREAD([threads=yes], [threads=no]) 565fi 566 567if test "$threads" = "yes"; then 568 AC_DEFINE(ENABLE_THREADS, 1, 569 [Define to do multi-threaded linking]) 570fi 571AM_CONDITIONAL(THREADS, test "$threads" = "yes") 572 573dnl We have to check these in C, not C++, because autoconf generates 574dnl tests which have no type information, and current glibc provides 575dnl multiple declarations of functions like basename when compiling 576dnl with C++. 577AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp]) 578 579dnl Check if gcc supports the -gpubnames option. 580dnl Use -Werror in case of compilers that make unknown -g options warnings. 581dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS 582dnl gets set later by default Autoconf magic to include -Werror. (We are 583dnl assuming here that there is no compiler that groks -gpubnames 584dnl but does not grok -Werror.) 585save_CFLAGS="$CFLAGS" 586CFLAGS="$CFLAGS -Werror -gpubnames" 587AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_pubnames=yes], [have_pubnames=no]) 588CFLAGS="$save_CFLAGS" 589AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes") 590 591dnl Check if gcc supports the -fno-use-linker-plugin option. 592save_CFLAGS="$CFLAGS" 593CFLAGS="$CFLAGS -Werror -fno-use-linker-plugin" 594AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_no_use_linker_plugin=yes], [have_no_use_linker_plugin=no]) 595CFLAGS="$save_CFLAGS" 596AM_CONDITIONAL(HAVE_NO_USE_LINKER_PLUGIN, test "$have_no_use_linker_plugin" = "yes") 597 598AC_LANG_PUSH(C++) 599 600AC_CHECK_HEADERS(unordered_set unordered_map) 601AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map) 602AC_CHECK_HEADERS(ext/hash_map ext/hash_set) 603AC_CHECK_HEADERS(byteswap.h) 604 605dnl When plugins enabled dynamic loader interface is required. Check headers 606dnl which may provide this interface. Add the necessary library to link. 607AC_CHECK_HEADERS(windows.h) 608AC_CHECK_HEADERS(dlfcn.h) 609AC_SEARCH_LIBS(dlopen, [dl dld]) 610case "$ac_cv_search_dlopen" in 611 no*) DLOPEN_LIBS="";; 612 *) DLOPEN_LIBS="$ac_cv_search_dlopen";; 613esac 614AC_SUBST(DLOPEN_LIBS) 615 616AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times mkdtemp) 617AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem]) 618 619# Use of ::std::tr1::unordered_map::rehash causes undefined symbols 620# at link time with some versions of GCC. 621AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.], 622[gold_cv_unordered_map_rehash], 623[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 624#include <tr1/unordered_map> 625void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); } 626]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])]) 627if test "$gold_cv_unordered_map_rehash" = "yes"; then 628 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1, 629 [Define if ::std::tr1::unordered_map::rehash is usable]) 630fi 631 632# Use of tr1/unordered_map with off_t as a key is not supported on GCC 633# 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type. 634AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined], 635[gold_cv_hash_off_t], 636[CXXFLAGS_hold=$CXXFLAGS 637CXXFLAGS="$CXXFLAGS $LFS_CFLAGS" 638AC_COMPILE_IFELSE([AC_LANG_SOURCE([ 639#include <sys/types.h> 640#include <tr1/unordered_map> 641std::tr1::hash<off_t> h; 642])], 643[gold_cv_hash_off_t=yes], 644[gold_cv_hash_off_t=no]) 645CXXFLAGS=$CXXFLAGS_hold]) 646if test "$gold_cv_hash_off_t" = "yes"; then 647 AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1, 648 [Define if std::tr1::hash<off_t> is usable]) 649fi 650 651# gcc 4.3.0 doesn't recognize the printf attribute on a template 652# function. Check for that. This is gcc bug 35546. This test can 653# probably be removed after the bug has been fixed for a while. 654AC_CACHE_CHECK([whether we can use attributes with template functions], 655[gold_cv_template_attribute], 656[AC_COMPILE_IFELSE([AC_LANG_SOURCE([ 657template<typename T> extern void foo(const char*, ...) 658 __attribute__ ((__format__ (__printf__, 1, 2))); 659template<typename T> void foo(const char* format, ...) {} 660void bar() { foo<int>("%s\n", "foo"); } 661])], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])]) 662if test "$gold_cv_template_attribute" = "yes"; then 663 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1, 664 [Define if attributes work on C++ templates]) 665fi 666 667dnl Check if the system has struct stat::st_mtim. 668AC_CACHE_CHECK([for struct stat::st_mtim.], 669[gold_cv_stat_st_mtim], 670[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 671#include <sys/stat.h> 672long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);} 673]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])]) 674if test "$gold_cv_stat_st_mtim" = "yes"; then 675 AC_DEFINE(HAVE_STAT_ST_MTIM, 1, 676 [Define if struct stat has a field st_mtim with timespec for mtime]) 677fi 678 679AC_LANG_POP(C++) 680 681AC_CHECK_HEADERS(locale.h) 682AC_CHECK_FUNCS(setlocale) 683AM_LC_MESSAGES 684 685AM_MAINTAINER_MODE 686 687AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in) 688