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 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 For now threads are a configure time option. 42AC_ARG_ENABLE([threads], 43[ --enable-threads multi-threaded linking], 44[case "${enableval}" in 45 yes | "") threads=yes ;; 46 no) threads=no ;; 47 *) threads=yes ;; 48 esac], 49[threads=no]) 50if test "$threads" = "yes"; then 51 AC_DEFINE(ENABLE_THREADS, 1, 52 [Define to do multi-threaded linking]) 53fi 54AM_CONDITIONAL(THREADS, test "$threads" = "yes") 55 56AC_ARG_ENABLE([targets], 57[ --enable-targets alternative target configurations], 58[case "${enableval}" in 59 yes | "") 60 AC_MSG_ERROR([--enable-targets option must specify target names or 'all']) 61 ;; 62 no) 63 enable_targets= 64 ;; 65 *) 66 enable_targets=$enableval 67 ;; 68esac], 69[# For now, enable all targets by default 70 enable_targets=all 71]) 72 73# Canonicalize the enabled targets. 74if test -n "$enable_targets"; then 75 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do 76 result=`$ac_config_sub $targ 2>/dev/null` 77 if test -n "$result"; then 78 canon_targets="$canon_targets $result" 79 else 80 # Permit unrecognized target names, like "all". 81 canon_targets="$canon_targets $targ" 82 fi 83 done 84fi 85 86# See which specific instantiations we need. 87targetobjs= 88all_targets= 89default_machine= 90default_size= 91default_big_endian= 92targ_32_little= 93targ_32_big= 94targ_64_little= 95targ_64_big= 96for targ in $target $canon_targets; do 97 if test "$targ" = "all"; then 98 targ_32_little=yes 99 targ_32_big=yes 100 targ_64_little=yes 101 targ_64_big=yes 102 all_targets=yes 103 else 104 . ${srcdir}/configure.tgt 105 106 if test "$targ_obj" = "UNKNOWN"; then 107 AC_MSG_ERROR("unsupported target $targ") 108 else 109 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)" 110 if test "$targ_extra_obj" != ""; then 111 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)" 112 fi 113 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then 114 if test "$targ_big_endian" = "true" \ 115 -o "$targ_extra_big_endian" = "true"; then 116 targ_32_big=yes 117 fi 118 if test "$targ_big_endian" = "false" \ 119 -o "$targ_extra_big_endian" = "false"; then 120 targ_32_little=yes 121 fi 122 fi 123 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then 124 if test "$targ_big_endian" = "true" \ 125 -o "$targ_extra_big_endian" = "true"; then 126 targ_64_big=yes 127 fi 128 if test "$targ_big_endian" = "false" \ 129 -o "$targ_extra_big_endian" = "false"; then 130 targ_64_little=yes 131 fi 132 fi 133 134 if test "$target" = "$targ"; then 135 default_machine=$targ_machine 136 default_size=$targ_size 137 default_big_endian=$targ_big_endian 138 fi 139 fi 140 fi 141done 142 143if test -n "$targ_32_little"; then 144 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1, 145 [Define to support 32-bit little-endian targets]) 146fi 147if test -n "$targ_32_big"; then 148 AC_DEFINE(HAVE_TARGET_32_BIG, 1, 149 [Define to support 32-bit big-endian targets]) 150fi 151if test -n "$targ_64_little"; then 152 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1, 153 [Define to support 64-bit little-endian targets]) 154fi 155if test -n "$targ_64_big"; then 156 AC_DEFINE(HAVE_TARGET_64_BIG, 1, 157 [Define to support 64-bit big-endian targets]) 158fi 159 160if test -n "$all_targets"; then 161 TARGETOBJS='$(ALL_TARGETOBJS)' 162else 163 TARGETOBJS="$targetobjs" 164fi 165AC_SUBST(TARGETOBJS) 166 167AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine, 168 [Default machine code]) 169AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size, 170 [Default size (32 or 64)]) 171AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian, 172 [Default big endian (true or false)]) 173 174AC_PROG_CC 175AC_PROG_CXX 176AC_PROG_YACC 177AC_PROG_RANLIB 178AC_PROG_INSTALL 179AC_PROG_LN_S 180 181AC_GNU_SOURCE 182 183ZW_GNU_GETTEXT_SISTER_DIR 184AM_PO_SUBDIRS 185 186AC_C_BIGENDIAN 187 188AC_EXEEXT 189 190AM_CONDITIONAL(NATIVE_LINKER, 191 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias") 192AM_CONDITIONAL(GCC, test "$GCC" = yes) 193 194dnl Some architectures do not support taking pointers of functions 195dnl defined in shared libraries except in -fPIC mode. We need to 196dnl tell the unittest framework if we're compiling for one of those 197dnl targets, so it doesn't try to run the tests that do that. 198AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [ 199 case $target_cpu in 200 i?86) true;; 201 x86_64) false;; 202 sparc64) false;; 203 *) true;; 204 esac]) 205 206dnl Test for __thread support. 207AC_CACHE_CHECK([for thread support], [gold_cv_c_thread], 208[AC_COMPILE_IFELSE([__thread int i = 1;], 209[gold_cv_c_thread=yes], [gold_cv_c_thread=no])]) 210 211AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes") 212 213dnl On GNU/Linux TLS in static programs only works when using glibc 214dnl 2.4 or later. 215AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24], 216[AC_COMPILE_IFELSE([ 217#include <features.h> 218#if !defined __GLIBC__ 219error 220#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4) 221error 222#endif 223], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])]) 224 225AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes") 226 227dnl Test for #pragma omp threadprivate 228AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate], 229[save_CFLAGS="$CFLAGS" 230CFLAGS="$CFLAGS -fopenmp" 231AC_COMPILE_IFELSE([ 232#include <omp.h> 233int i; 234#pragma omp threadprivate (i) 235], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no]) 236CFLAGS="$save_CFLAGS"]) 237if test "$gold_cv_c_threadprivate" = "yes"; then 238 AC_DEFINE(HAVE_OMP_SUPPORT, 1, 239 [Define if compiler supports #pragma omp threadprivate]) 240fi 241AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes") 242 243dnl Test for the -ftls-dialect=gnu2 option. 244save_CFLAGS="$CFLAGS" 245CFLAGS="$CFLAGS -mtls-dialect=gnu2" 246AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no]) 247CFLAGS="$save_CFLAGS" 248AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes") 249 250dnl On GNU/Linux TLS descriptors are supported by the dynamic loader 251dnl only with glibc 2.5 or later. 252AC_CACHE_CHECK([for glibc >= 2.5], [gold_cv_lib_glibc25], 253[AC_COMPILE_IFELSE([ 254#include <features.h> 255#if !defined __GLIBC__ 256error 257#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 5) 258error 259#endif 260], [gold_cv_lib_glibc25=yes], [gold_cv_lib_glibc25=no])]) 261 262AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc25" = "yes") 263 264dnl Check whether the compiler supports constructor priorities in 265dnl attributes, which were added in gcc 4.3. 266AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio], 267[AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));], 268[gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])]) 269 270AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes") 271 272dnl Test for the -frandom-seed option. 273AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed], 274[save_CFLAGS="$CFLAGS" 275CFLAGS="$CFLAGS -frandom-seed=foo" 276AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes], 277[gold_cv_c_random_seed=no]) 278CFLAGS="$save_CFLAGS"]) 279if test "$gold_cv_c_random_seed" = "yes"; then 280 # In Makefile, '$@' will be expanded to be the name of the file 281 # being built, providing a unique seed for each file. 282 RANDOM_SEED_CFLAGS=-frandom-seed=\$@ 283fi 284AC_SUBST(RANDOM_SEED_CFLAGS) 285 286AM_BINUTILS_WARNINGS 287 288WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'` 289AC_SUBST(WARN_CXXFLAGS) 290 291dnl Force support for large files by default. This may need to be 292dnl host dependent. If build == host, we can check getconf LFS_CFLAGS. 293LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" 294AC_SUBST(LFS_CFLAGS) 295 296AC_REPLACE_FUNCS(pread) 297 298# Link in zlib if we can. This allows us to write compressed sections. 299AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)]) 300AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no") 301 302AC_LANG_PUSH(C++) 303 304AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map) 305AC_CHECK_HEADERS(ext/hash_map ext/hash_set) 306AC_CHECK_FUNCS(mallinfo) 307 308# gcc 4.3.0 doesn't recognize the printf attribute on a template 309# function. Check for that. This is gcc bug 35546. This test can 310# probably be removed after the bug has been fixed for a while. 311AC_CACHE_CHECK([whether we can use attributes with template functions], 312[gold_cv_template_attribute], 313[AC_COMPILE_IFELSE([ 314template<typename T> extern void foo(const char*, ...) 315 __attribute__ ((__format__ (__printf__, 1, 2))); 316template<typename T> void foo(const char* format, ...) {} 317void bar() { foo<int>("%s\n", "foo"); } 318], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])]) 319if test "$gold_cv_template_attribute" = "yes"; then 320 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1, 321 [Define if attributes work on C++ templates]) 322fi 323 324AC_LANG_POP(C++) 325 326AM_MAINTAINER_MODE 327 328AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in) 329