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