1 dnl Process this file with autoconf to produce a configure script.
6 AC_CONFIG_SRCDIR(gold.cc)
10 AM_INIT_AUTOMAKE([no-dist parallel-tests])
12 AM_CONFIG_HEADER(config.h:config.in)
15 [ --with-sysroot[=DIR] search for usr/lib et al within DIR],
16 [sysroot=$withval], [sysroot=no])
18 if test "$sysroot" = "yes"; then
19 sysroot='${exec_prefix}/${target_alias}/sys-root'
20 elif test "$sysroot" = "no"; then
25 if test -n "$sysroot"; then
27 "${prefix}" | "${prefix}/"* | \
28 "${exec_prefix}" | "${exec_prefix}/"* | \
29 '${prefix}' | '${prefix}/'*| \
30 '${exec_prefix}' | '${exec_prefix}/'*)
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])
41 dnl "install_as_default" is true if the linker to be installed as the
42 dnl default linker, ld.
43 dnl "installed_linker" is the installed gold linker name.
47 [[ --enable-ld[=ARG] build ld [ARG={default,yes,no}]]],
48 [case "${enableval}" in
55 [[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
56 [case "${enableval}" in
58 if test x${default_ld} = x; then
59 install_as_default=yes
61 installed_linker=ld.gold
66 AC_MSG_ERROR([invalid --enable-gold argument])
69 [install_as_default=no
70 installed_linker=ld.gold])
71 AC_SUBST(install_as_default)
72 AC_SUBST(installed_linker)
74 dnl For now threads are a configure time option.
75 AC_ARG_ENABLE([threads],
76 [ --enable-threads multi-threaded linking],
77 [case "${enableval}" in
78 yes | "") threads=yes ;;
83 if test "$threads" = "yes"; then
84 AC_DEFINE(ENABLE_THREADS, 1,
85 [Define to do multi-threaded linking])
87 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
89 AC_ARG_ENABLE([plugins],
90 [ --enable-plugins linker plugins],
91 [case "${enableval}" in
92 yes | "") plugins=yes ;;
97 if test "$plugins" = "yes"; then
98 AC_DEFINE(ENABLE_PLUGINS, 1,
99 [Define to enable linker plugins])
101 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
103 AC_ARG_ENABLE([targets],
104 [ --enable-targets alternative target configurations],
105 [case "${enableval}" in
107 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
113 enable_targets=$enableval
116 [# For now, enable all targets by default
120 # Canonicalize the enabled targets.
121 if 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"
127 # Permit unrecognized target names, like "all".
128 canon_targets="$canon_targets $targ"
133 # See which specific instantiations we need.
139 default_osabi=ELFOSABI_NONE
144 for targ in $target $canon_targets; do
145 if test "$targ" = "all"; then
152 . ${srcdir}/configure.tgt
154 if test "$targ_obj" = "UNKNOWN"; then
155 AC_MSG_ERROR("unsupported target $targ")
157 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
158 if test "$targ_extra_obj" != ""; then
159 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
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
166 if test "$targ_big_endian" = "false" \
167 -o "$targ_extra_big_endian" = "false"; then
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
176 if test "$targ_big_endian" = "false" \
177 -o "$targ_extra_big_endian" = "false"; then
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
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")
198 # Remove any duplicates.
200 for t in $targetobjs; do
208 if test -n "$targ_32_little"; then
209 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
210 [Define to support 32-bit little-endian targets])
212 if test -n "$targ_32_big"; then
213 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
214 [Define to support 32-bit big-endian targets])
216 if test -n "$targ_64_little"; then
217 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
218 [Define to support 64-bit little-endian targets])
220 if test -n "$targ_64_big"; then
221 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
222 [Define to support 64-bit big-endian targets])
225 if test -n "$all_targets"; then
226 TARGETOBJS='$(ALL_TARGETOBJS)'
228 TARGETOBJS="$targetobjs"
232 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
233 [Default machine code])
234 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
235 [Default size (32 or 64)])
236 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
237 [Default big endian (true or false)])
238 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
239 [Default OSABI code])
241 AC_ARG_WITH(lib-path,
242 [ --with-lib-path=dir1:dir2... set default LIB_PATH],
244 yes) LIB_PATH='"/lib:/usr/lib"' ;;
246 *) LIB_PATH='"'"$withval"'"' ;;
248 [LIB_PATH='"::DEFAULT::"'])
249 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
250 [Default library search path])
251 if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
252 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
255 AC_CHECK_TOOL(NM, nm)
266 ZW_GNU_GETTEXT_SISTER_DIR
273 AM_CONDITIONAL(NATIVE_LINKER,
274 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
275 AM_CONDITIONAL(GCC, test "$GCC" = yes)
277 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
278 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
280 dnl Test for whether static linking is supported. Some systems do not
281 dnl install static libraries. This only affects the set of tests that
283 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
284 [LDFLAGS_hold=$LDFLAGS
285 LDFLAGS="$LDFLAGS -static"
287 AC_LANG_PROGRAM([[void f() { }]])],
288 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
289 LDFLAGS=$LDFLAGS_hold])
290 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
292 dnl Some architectures do not support taking pointers of functions
293 dnl defined in shared libraries except in -fPIC mode. We need to
294 dnl tell the unittest framework if we're compiling for one of those
295 dnl targets, so it doesn't try to run the tests that do that.
296 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
304 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
305 dnl only available in gcc 4.1.
306 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
308 #if !defined __GNUC__
310 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
313 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
315 save_CFLAGS="$CFLAGS"
316 CFLAGS="$CFLAGS -mcmodel=medium"
317 AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
318 CFLAGS="$save_CFLAGS"
319 dnl Whether we can test -mcmodel=medium.
320 AM_CONDITIONAL(MCMODEL_MEDIUM,
321 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
323 dnl Test for __thread support.
324 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
325 [AC_COMPILE_IFELSE([__thread int i = 1;],
326 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
328 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
330 dnl On GNU/Linux TLS in static programs only works when using glibc
332 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
334 #include <features.h>
335 #if !defined __GLIBC__
337 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
340 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
342 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
344 dnl Test for #pragma omp threadprivate
345 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
346 [save_CFLAGS="$CFLAGS"
347 CFLAGS="$CFLAGS -fopenmp"
351 #pragma omp threadprivate (i)
352 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
353 CFLAGS="$save_CFLAGS"])
354 if test "$gold_cv_c_threadprivate" = "yes"; then
355 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
356 [Define if compiler supports #pragma omp threadprivate])
358 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
360 dnl Test for the -ftls-dialect=gnu2 option.
361 save_CFLAGS="$CFLAGS"
362 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
363 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
364 CFLAGS="$save_CFLAGS"
365 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
367 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
368 dnl only with glibc 2.9 or later.
369 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
371 #include <features.h>
372 #if !defined __GLIBC__
374 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
377 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
379 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
381 dnl Test for the -frandom-seed option.
382 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
383 [save_CFLAGS="$CFLAGS"
384 CFLAGS="$CFLAGS -frandom-seed=foo"
385 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
386 [gold_cv_c_random_seed=no])
387 CFLAGS="$save_CFLAGS"])
388 if test "$gold_cv_c_random_seed" = "yes"; then
389 # In Makefile, '$@' will be expanded to be the name of the file
390 # being built, providing a unique seed for each file.
391 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
393 AC_SUBST(RANDOM_SEED_CFLAGS)
395 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
396 dnl 2.11 or later, and by binutils 2.20.1 or later.
397 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
398 [save_LDFLAGS="$LDFLAGS"
399 LDFLAGS="$LDFLAGS -static"
400 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
401 #include <features.h>
402 #if !defined __GLIBC__
404 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
409 __asm__(".type invoke, %gnu_indirect_function");
410 typedef void (*funcptr) (void);
411 funcptr dispatch (void) __asm__ ("invoke");
412 funcptr dispatch (void) { return &func; }]],
415 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
416 gold_cv_lib_glibc_ifunc=both
418 gold_cv_lib_glibc_ifunc=dyn
419 fi], [gold_cv_lib_glibc_ifunc=no])
420 LDFLAGS="$save_LDFLAGS"])
422 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
423 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
427 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
428 AC_SUBST(WARN_CXXFLAGS)
430 AC_ARG_WITH(gold-ldflags,
431 [ --with-gold-ldflags=FLAGS additional link flags for gold],
432 [if test "$withval" = "no" -o "$withval" = "yes"; then
435 GOLD_LDFLAGS=$withval
438 AC_SUBST(GOLD_LDFLAGS)
440 AC_ARG_WITH(gold-ldadd,
441 [ --with-gold-ldadd=LIBS additional libraries for gold],
442 [if test "$withval" = "no" -o "$withval" = "yes"; then
450 dnl Force support for large files by default. This may need to be
451 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
452 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
455 AC_CHECK_HEADERS(sys/mman.h)
456 AC_CHECK_FUNCS(chsize mmap)
457 AC_REPLACE_FUNCS(pread ftruncate ffsll)
459 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
462 #include <sys/mman.h>
463 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
464 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
465 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
466 AC_DEFINE(HAVE_MREMAP, 1,
467 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
472 # Link in zlib if we can. This allows us to write compressed sections.
473 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
474 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
476 dnl We have to check these in C, not C++, because autoconf generates
477 dnl tests which have no type information, and current glibc provides
478 dnl multiple declarations of functions like basename when compiling
480 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
484 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
485 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
486 AC_CHECK_HEADERS(byteswap.h)
487 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
488 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
490 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
491 # at link time with some versions of GCC.
492 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
493 [gold_cv_unordered_map_rehash],
494 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
495 #include <tr1/unordered_map>
496 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
497 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
498 if test "$gold_cv_unordered_map_rehash" = "yes"; then
499 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
500 [Define if ::std::tr1::unordered_map::rehash is usable])
503 # gcc 4.3.0 doesn't recognize the printf attribute on a template
504 # function. Check for that. This is gcc bug 35546. This test can
505 # probably be removed after the bug has been fixed for a while.
506 AC_CACHE_CHECK([whether we can use attributes with template functions],
507 [gold_cv_template_attribute],
509 template<typename T> extern void foo(const char*, ...)
510 __attribute__ ((__format__ (__printf__, 1, 2)));
511 template<typename T> void foo(const char* format, ...) {}
512 void bar() { foo<int>("%s\n", "foo"); }
513 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
514 if test "$gold_cv_template_attribute" = "yes"; then
515 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
516 [Define if attributes work on C++ templates])
519 dnl Check if the system has struct stat::st_mtim.
520 AC_CACHE_CHECK([for struct stat::st_mtim.],
521 [gold_cv_stat_st_mtim],
522 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
523 #include <sys/stat.h>
524 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
525 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
526 if test "$gold_cv_stat_st_mtim" = "yes"; then
527 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
528 [Define if struct stat has a field st_mtim with timespec for mtime])
535 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)