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 AH_VERBATIM([00_CONFIG_H_CHECK],
16 [/* Check that config.h is #included before system headers
17 (this works only for glibc, but that should be enough). */
18 #if defined(__GLIBC__) && !defined(__CONFIG_H__)
19 # error config.h must be #included before system headers
21 #define __CONFIG_H__ 1])
24 [ --with-sysroot[=DIR] search for usr/lib et al within DIR],
25 [sysroot=$withval], [sysroot=no])
27 if test "$sysroot" = "yes"; then
28 sysroot='${exec_prefix}/${target_alias}/sys-root'
29 elif test "$sysroot" = "no"; then
34 if test -n "$sysroot"; then
36 "${prefix}" | "${prefix}/"* | \
37 "${exec_prefix}" | "${exec_prefix}/"* | \
38 '${prefix}' | '${prefix}/'*| \
39 '${exec_prefix}' | '${exec_prefix}/'*)
45 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
46 [System root for target files])
47 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
48 [Whether the system root can be relocated])
50 dnl "install_as_default" is true if the linker to be installed as the
51 dnl default linker, ld.
52 dnl "installed_linker" is the installed gold linker name.
56 [[ --enable-ld[=ARG] build ld [ARG={default,yes,no}]]],
57 [case "${enableval}" in
64 [[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
65 [case "${enableval}" in
67 if test x${default_ld} = x; then
68 install_as_default=yes
70 installed_linker=ld.gold
75 AC_MSG_ERROR([invalid --enable-gold argument])
78 [install_as_default=no
79 installed_linker=ld.gold])
80 AC_SUBST(install_as_default)
81 AC_SUBST(installed_linker)
83 dnl For now threads are a configure time option.
84 AC_ARG_ENABLE([threads],
85 [ --enable-threads multi-threaded linking],
86 [case "${enableval}" in
87 yes | "") threads=yes ;;
92 if test "$threads" = "yes"; then
93 AC_DEFINE(ENABLE_THREADS, 1,
94 [Define to do multi-threaded linking])
96 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
98 AC_ARG_ENABLE([plugins],
99 [ --enable-plugins linker plugins],
100 [case "${enableval}" in
101 yes | "") plugins=yes ;;
106 if test "$plugins" = "yes"; then
107 AC_DEFINE(ENABLE_PLUGINS, 1,
108 [Define to enable linker plugins])
110 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
112 AC_ARG_ENABLE([targets],
113 [ --enable-targets alternative target configurations],
114 [case "${enableval}" in
116 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
122 enable_targets=$enableval
125 [# For now, enable all targets by default
129 # Canonicalize the enabled targets.
130 if 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"
136 # Permit unrecognized target names, like "all".
137 canon_targets="$canon_targets $targ"
142 # See which specific instantiations we need.
148 default_osabi=ELFOSABI_NONE
153 for targ in $target $canon_targets; do
154 if test "$targ" = "all"; then
161 . ${srcdir}/configure.tgt
163 if test "$targ_obj" = "UNKNOWN"; then
164 AC_MSG_ERROR("unsupported target $targ")
166 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
167 if test "$targ_extra_obj" != ""; then
168 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
170 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
171 if test "$targ_big_endian" = "true" \
172 -o "$targ_extra_big_endian" = "true"; then
175 if test "$targ_big_endian" = "false" \
176 -o "$targ_extra_big_endian" = "false"; then
180 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
181 if test "$targ_big_endian" = "true" \
182 -o "$targ_extra_big_endian" = "true"; then
185 if test "$targ_big_endian" = "false" \
186 -o "$targ_extra_big_endian" = "false"; then
191 if test "$target" = "$targ"; then
192 default_machine=$targ_machine
193 default_size=$targ_size
194 default_big_endian=$targ_big_endian
195 default_osabi=$targ_osabi
197 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
198 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
199 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
200 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
201 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
207 # Remove any duplicates.
209 for t in $targetobjs; do
217 if test -n "$targ_32_little"; then
218 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
219 [Define to support 32-bit little-endian targets])
221 if test -n "$targ_32_big"; then
222 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
223 [Define to support 32-bit big-endian targets])
225 if test -n "$targ_64_little"; then
226 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
227 [Define to support 64-bit little-endian targets])
229 if test -n "$targ_64_big"; then
230 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
231 [Define to support 64-bit big-endian targets])
234 if test -n "$all_targets"; then
235 TARGETOBJS='$(ALL_TARGETOBJS)'
237 TARGETOBJS="$targetobjs"
241 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
242 [Default machine code])
243 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
244 [Default size (32 or 64)])
245 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
246 [Default big endian (true or false)])
247 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
248 [Default OSABI code])
250 AC_ARG_WITH(lib-path,
251 [ --with-lib-path=dir1:dir2... set default LIB_PATH],
253 yes) LIB_PATH='"/lib:/usr/lib"' ;;
255 *) LIB_PATH='"'"$withval"'"' ;;
257 [LIB_PATH='"::DEFAULT::"'])
258 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
259 [Default library search path])
260 if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
261 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
264 AC_CHECK_TOOL(NM, nm)
275 ZW_GNU_GETTEXT_SISTER_DIR
282 AM_CONDITIONAL(NATIVE_LINKER,
283 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
284 AM_CONDITIONAL(GCC, test "$GCC" = yes)
286 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
287 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
289 dnl Test for whether static linking is supported. Some systems do not
290 dnl install static libraries. This only affects the set of tests that
292 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
293 [LDFLAGS_hold=$LDFLAGS
294 LDFLAGS="$LDFLAGS -static"
296 AC_LANG_PROGRAM([[void f() { }]])],
297 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
298 LDFLAGS=$LDFLAGS_hold])
299 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
301 dnl Some architectures do not support taking pointers of functions
302 dnl defined in shared libraries except in -fPIC mode. We need to
303 dnl tell the unittest framework if we're compiling for one of those
304 dnl targets, so it doesn't try to run the tests that do that.
305 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
313 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
314 dnl only available in gcc 4.1.
315 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
317 #if !defined __GNUC__
319 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
322 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
324 save_CFLAGS="$CFLAGS"
325 CFLAGS="$CFLAGS -mcmodel=medium"
326 AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
327 CFLAGS="$save_CFLAGS"
328 dnl Whether we can test -mcmodel=medium.
329 AM_CONDITIONAL(MCMODEL_MEDIUM,
330 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
332 dnl Test for __thread support.
333 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
334 [AC_COMPILE_IFELSE([__thread int i = 1;],
335 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
337 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
339 dnl On GNU/Linux TLS in static programs only works when using glibc
341 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
343 #include <features.h>
344 #if !defined __GLIBC__
346 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
349 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
351 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
353 dnl Test for #pragma omp threadprivate
354 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
355 [save_CFLAGS="$CFLAGS"
356 CFLAGS="$CFLAGS -fopenmp"
360 #pragma omp threadprivate (i)
361 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
362 CFLAGS="$save_CFLAGS"])
363 if test "$gold_cv_c_threadprivate" = "yes"; then
364 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
365 [Define if compiler supports #pragma omp threadprivate])
367 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
369 dnl Test for the -ftls-dialect=gnu2 option.
370 save_CFLAGS="$CFLAGS"
371 CFLAGS="$CFLAGS -fpic -mtls-dialect=gnu2"
378 ], [have_tls_gnu2=yes], [have_tls_gnu2=no])
379 CFLAGS="$save_CFLAGS"
380 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
382 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
383 dnl only with glibc 2.9 or later.
384 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
386 #include <features.h>
387 #if !defined __GLIBC__
389 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
392 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
394 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
396 dnl Test for the -frandom-seed option.
397 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
398 [save_CFLAGS="$CFLAGS"
399 CFLAGS="$CFLAGS -frandom-seed=foo"
400 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
401 [gold_cv_c_random_seed=no])
402 CFLAGS="$save_CFLAGS"])
403 if test "$gold_cv_c_random_seed" = "yes"; then
404 # In Makefile, '$@' will be expanded to be the name of the file
405 # being built, providing a unique seed for each file.
406 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
408 AC_SUBST(RANDOM_SEED_CFLAGS)
410 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
411 dnl 2.11 or later, and by binutils 2.20.1 or later.
412 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
413 [save_LDFLAGS="$LDFLAGS"
414 LDFLAGS="$LDFLAGS -static"
415 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
416 #include <features.h>
417 #if !defined __GLIBC__
419 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
424 __asm__(".type invoke, %gnu_indirect_function");
425 typedef void (*funcptr) (void);
426 funcptr dispatch (void) __asm__ ("invoke");
427 funcptr dispatch (void) { return &func; }]],
430 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
431 gold_cv_lib_glibc_ifunc=both
433 gold_cv_lib_glibc_ifunc=dyn
434 fi], [gold_cv_lib_glibc_ifunc=no])
435 LDFLAGS="$save_LDFLAGS"])
437 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
438 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
442 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
443 AC_SUBST(WARN_CXXFLAGS)
445 AC_ARG_WITH(gold-ldflags,
446 [ --with-gold-ldflags=FLAGS additional link flags for gold],
447 [if test "$withval" = "no" -o "$withval" = "yes"; then
450 GOLD_LDFLAGS=$withval
453 AC_SUBST(GOLD_LDFLAGS)
455 AC_ARG_WITH(gold-ldadd,
456 [ --with-gold-ldadd=LIBS additional libraries for gold],
457 [if test "$withval" = "no" -o "$withval" = "yes"; then
465 dnl Force support for large files by default. This may need to be
466 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
467 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
470 AC_CHECK_HEADERS(sys/mman.h)
471 AC_CHECK_FUNCS(chsize mmap)
472 AC_REPLACE_FUNCS(pread ftruncate ffsll)
474 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
477 #include <sys/mman.h>
478 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
479 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
480 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
481 AC_DEFINE(HAVE_MREMAP, 1,
482 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
487 # Link in zlib if we can. This allows us to write compressed sections.
488 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
489 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
491 dnl We have to check these in C, not C++, because autoconf generates
492 dnl tests which have no type information, and current glibc provides
493 dnl multiple declarations of functions like basename when compiling
495 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
499 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
500 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
501 AC_CHECK_HEADERS(byteswap.h)
502 AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
503 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
505 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
506 # at link time with some versions of GCC.
507 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
508 [gold_cv_unordered_map_rehash],
509 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
510 #include <tr1/unordered_map>
511 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
512 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
513 if test "$gold_cv_unordered_map_rehash" = "yes"; then
514 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
515 [Define if ::std::tr1::unordered_map::rehash is usable])
518 # Use of tr1/unordered_map with off_t as a key is not supported on GCC
519 # 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type.
520 AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
521 [gold_cv_hash_off_t],
522 [CXXFLAGS_hold=$CXXFLAGS
523 CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
525 #include <sys/types.h>
526 #include <tr1/unordered_map>
527 std::tr1::hash<off_t> h;
529 [gold_cv_hash_off_t=yes],
530 [gold_cv_hash_off_t=no])
531 CXXFLAGS=$CFLAGS_hold])
532 if test "$gold_cv_hash_off_t" = "yes"; then
533 AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1,
534 [Define if std::tr1::hash<off_t> is usable])
537 # gcc 4.3.0 doesn't recognize the printf attribute on a template
538 # function. Check for that. This is gcc bug 35546. This test can
539 # probably be removed after the bug has been fixed for a while.
540 AC_CACHE_CHECK([whether we can use attributes with template functions],
541 [gold_cv_template_attribute],
543 template<typename T> extern void foo(const char*, ...)
544 __attribute__ ((__format__ (__printf__, 1, 2)));
545 template<typename T> void foo(const char* format, ...) {}
546 void bar() { foo<int>("%s\n", "foo"); }
547 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
548 if test "$gold_cv_template_attribute" = "yes"; then
549 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
550 [Define if attributes work on C++ templates])
553 dnl Check if the system has struct stat::st_mtim.
554 AC_CACHE_CHECK([for struct stat::st_mtim.],
555 [gold_cv_stat_st_mtim],
556 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
557 #include <sys/stat.h>
558 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
559 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
560 if test "$gold_cv_stat_st_mtim" = "yes"; then
561 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
562 [Define if struct stat has a field st_mtim with timespec for mtime])
567 AC_CHECK_HEADERS(locale.h)
568 AC_CHECK_FUNCS(setlocale)
573 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)