1 dnl Process this file with autoconf to produce a configure script.
3 dnl Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
4 dnl Free Software Foundation, Inc.
6 dnl This file is free software; you can redistribute it and/or modify
7 dnl it under the terms of the GNU General Public License as published by
8 dnl the Free Software Foundation; either version 3 of the License, or
9 dnl (at your option) any later version.
11 dnl This program is distributed in the hope that it will be useful,
12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 dnl GNU General Public License for more details.
16 dnl You should have received a copy of the GNU General Public License
17 dnl along with this program; see the file COPYING3. If not see
18 dnl <http://www.gnu.org/licenses/>.
24 AC_CONFIG_SRCDIR(gold.cc)
28 AM_INIT_AUTOMAKE([no-dist parallel-tests])
30 AM_CONFIG_HEADER(config.h:config.in)
33 AH_VERBATIM([00_CONFIG_H_CHECK],
34 [/* Check that config.h is #included before system headers
35 (this works only for glibc, but that should be enough). */
36 #if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__)
37 # error config.h must be #included before system headers
39 #define __CONFIG_H__ 1])
42 [ --with-sysroot[=DIR] search for usr/lib et al within DIR],
43 [sysroot=$withval], [sysroot=no])
45 if test "$sysroot" = "yes"; then
46 sysroot='${exec_prefix}/${target_alias}/sys-root'
47 elif test "$sysroot" = "no"; then
52 if test -n "$sysroot"; then
54 "${prefix}" | "${prefix}/"* | \
55 "${exec_prefix}" | "${exec_prefix}/"* | \
56 '${prefix}' | '${prefix}/'*| \
57 '${exec_prefix}' | '${exec_prefix}/'*)
63 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
64 [System root for target files])
65 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
66 [Whether the system root can be relocated])
68 dnl "install_as_default" is true if the linker to be installed as the
69 dnl default linker, ld.
70 dnl "installed_linker" is the installed gold linker name.
72 installed_linker=ld.gold
74 [[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
75 [case "${enableval}" in
77 install_as_default=yes
80 if test x${enable_ld} = xno; then
81 install_as_default=yes
85 [install_as_default=no])
86 AC_SUBST(install_as_default)
87 AC_SUBST(installed_linker)
89 dnl For now threads are a configure time option.
90 AC_ARG_ENABLE([threads],
91 [ --enable-threads multi-threaded linking],
92 [case "${enableval}" in
93 yes | "") threads=yes ;;
98 if test "$threads" = "yes"; then
99 AC_DEFINE(ENABLE_THREADS, 1,
100 [Define to do multi-threaded linking])
102 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
104 AC_ARG_ENABLE([plugins],
105 [ --enable-plugins linker plugins],
106 [case "${enableval}" in
107 yes | "") plugins=yes ;;
112 if test "$plugins" = "yes"; then
113 AC_DEFINE(ENABLE_PLUGINS, 1,
114 [Define to enable linker plugins])
116 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
118 AC_ARG_ENABLE([targets],
119 [ --enable-targets alternative target configurations],
120 [case "${enableval}" in
122 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
128 enable_targets=$enableval
131 [# For now, enable all targets by default
135 # Canonicalize the enabled targets.
136 if test -n "$enable_targets"; then
137 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
138 result=`$ac_config_sub $targ 2>/dev/null`
139 if test -n "$result"; then
140 canon_targets="$canon_targets $result"
142 # Permit unrecognized target names, like "all".
143 canon_targets="$canon_targets $targ"
148 # See which specific instantiations we need.
154 default_osabi=ELFOSABI_NONE
159 for targ in $target $canon_targets; do
160 if test "$targ" = "all"; then
167 . ${srcdir}/configure.tgt
169 if test "$targ_obj" = "UNKNOWN"; then
170 AC_MSG_ERROR("unsupported target $targ")
172 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
173 if test "$targ_extra_obj" != ""; then
174 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
176 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
177 if test "$targ_big_endian" = "true" \
178 -o "$targ_extra_big_endian" = "true"; then
181 if test "$targ_big_endian" = "false" \
182 -o "$targ_extra_big_endian" = "false"; then
186 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
187 if test "$targ_big_endian" = "true" \
188 -o "$targ_extra_big_endian" = "true"; then
191 if test "$targ_big_endian" = "false" \
192 -o "$targ_extra_big_endian" = "false"; then
197 if test "$target" = "$targ"; then
198 default_machine=$targ_machine
199 default_size=$targ_size
200 default_big_endian=$targ_big_endian
201 default_osabi=$targ_osabi
203 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
204 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
205 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
206 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
207 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
208 AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx")
209 DEFAULT_TARGET=${targ_obj}
210 AC_SUBST(DEFAULT_TARGET)
216 # Remove any duplicates.
218 for t in $targetobjs; do
226 if test -n "$targ_32_little"; then
227 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
228 [Define to support 32-bit little-endian targets])
230 if test -n "$targ_32_big"; then
231 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
232 [Define to support 32-bit big-endian targets])
234 if test -n "$targ_64_little"; then
235 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
236 [Define to support 64-bit little-endian targets])
238 if test -n "$targ_64_big"; then
239 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
240 [Define to support 64-bit big-endian targets])
243 if test -n "$all_targets"; then
244 TARGETOBJS='$(ALL_TARGETOBJS)'
246 TARGETOBJS="$targetobjs"
250 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
251 [Default machine code])
252 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
253 [Default size (32 or 64)])
254 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
255 [Default big endian (true or false)])
256 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
257 [Default OSABI code])
259 AC_ARG_WITH(lib-path,
260 [ --with-lib-path=dir1:dir2... set default LIB_PATH],
262 yes) LIB_PATH='"/lib:/usr/lib"' ;;
264 *) LIB_PATH='"'"$withval"'"' ;;
266 [LIB_PATH='"::DEFAULT::"'])
267 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
268 [Default library search path])
269 if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
270 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
273 AC_CHECK_TOOL(NM, nm)
284 ZW_GNU_GETTEXT_SISTER_DIR
291 AM_CONDITIONAL(NATIVE_LINKER,
292 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
293 AM_CONDITIONAL(GCC, test "$GCC" = yes)
295 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
296 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
298 dnl Test for whether static linking is supported. Some systems do not
299 dnl install static libraries. This only affects the set of tests that
301 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
302 [LDFLAGS_hold=$LDFLAGS
303 LDFLAGS="$LDFLAGS -static"
305 AC_LANG_PROGRAM([[void f() { }]])],
306 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
307 LDFLAGS=$LDFLAGS_hold])
308 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
310 dnl Some architectures do not support taking pointers of functions
311 dnl defined in shared libraries except in -fPIC mode. We need to
312 dnl tell the unittest framework if we're compiling for one of those
313 dnl targets, so it doesn't try to run the tests that do that.
314 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
322 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
323 dnl only available in gcc 4.1.
324 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
326 #if !defined __GNUC__
328 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
331 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
333 save_CFLAGS="$CFLAGS"
334 CFLAGS="$CFLAGS -mcmodel=medium"
335 AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
336 CFLAGS="$save_CFLAGS"
337 dnl Whether we can test -mcmodel=medium.
338 AM_CONDITIONAL(MCMODEL_MEDIUM,
339 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
341 AC_CACHE_CHECK([whether $CC supports -fmerge-constants],
342 [gold_cv_merge_constants], [
343 save_CFLAGS="$CFLAGS"
344 CFLAGS="$CFLAGS -fmerge-constants"
345 AC_COMPILE_IFELSE([const char *s = "foo";],
346 [gold_cv_merge_constants=yes],
347 [gold_cv_merge_constants=no])
348 CFLAGS="$save_CFLAGS"])
349 AC_SUBST([MERGE_CONSTANTS_FLAG])
350 AS_IF([test "$gold_cv_merge_constants" = yes],
351 [MERGE_CONSTANTS_FLAG=-fmerge-constants],
352 [MERGE_CONSTANTS_FLAG=])
354 dnl Test for __thread support.
355 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
356 [AC_COMPILE_IFELSE([__thread int i = 1;],
357 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
359 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
361 dnl On GNU/Linux TLS in static programs only works when using glibc
363 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
365 #include <features.h>
366 #if !defined __GLIBC__
368 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
371 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
373 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
375 dnl Test for #pragma omp threadprivate
376 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
377 [save_CFLAGS="$CFLAGS"
378 CFLAGS="$CFLAGS -fopenmp"
382 #pragma omp threadprivate (i)
383 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
384 CFLAGS="$save_CFLAGS"])
385 if test "$gold_cv_c_threadprivate" = "yes"; then
386 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
387 [Define if compiler supports #pragma omp threadprivate])
389 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
391 dnl Test for the -ftls-dialect=gnu2 option.
392 dnl Use -Werror in case of compilers that make unknown -m options warnings.
393 dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
394 dnl gets set later by default Autoconf magic to include -Werror. (We are
395 dnl assuming here that there is no compiler that groks -mtls-dialect=gnu2
396 dnl but does not grok -Werror.)
397 save_CFLAGS="$CFLAGS"
398 CFLAGS="$CFLAGS -Werror -fpic -mtls-dialect=gnu2"
405 ], [have_tls_gnu2=yes], [have_tls_gnu2=no])
406 CFLAGS="$save_CFLAGS"
407 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
409 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
410 dnl only with glibc 2.9 or later.
411 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
413 #include <features.h>
414 #if !defined __GLIBC__
416 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
419 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
421 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
423 dnl Test for the -frandom-seed option.
424 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
425 [save_CFLAGS="$CFLAGS"
426 CFLAGS="$CFLAGS -frandom-seed=foo"
427 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
428 [gold_cv_c_random_seed=no])
429 CFLAGS="$save_CFLAGS"])
430 if test "$gold_cv_c_random_seed" = "yes"; then
431 # In Makefile, '$@' will be expanded to be the name of the file
432 # being built, providing a unique seed for each file.
433 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
435 AC_SUBST(RANDOM_SEED_CFLAGS)
437 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
438 dnl 2.11 or later, and by binutils 2.20.1 or later.
439 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
440 [save_LDFLAGS="$LDFLAGS"
441 LDFLAGS="$LDFLAGS -static"
442 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
443 #include <features.h>
444 #if !defined __GLIBC__
446 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
451 __asm__(".type invoke, %gnu_indirect_function");
452 typedef void (*funcptr) (void);
453 funcptr dispatch (void) __asm__ ("invoke");
454 funcptr dispatch (void) { return &func; }]],
457 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
458 gold_cv_lib_glibc_ifunc=both
460 gold_cv_lib_glibc_ifunc=dyn
461 fi], [gold_cv_lib_glibc_ifunc=no])
462 LDFLAGS="$save_LDFLAGS"])
464 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
465 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
469 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
470 AC_SUBST(WARN_CXXFLAGS)
472 AC_ARG_WITH(gold-ldflags,
473 [ --with-gold-ldflags=FLAGS additional link flags for gold],
474 [if test "$withval" = "no" -o "$withval" = "yes"; then
477 GOLD_LDFLAGS=$withval
480 AC_SUBST(GOLD_LDFLAGS)
482 AC_ARG_WITH(gold-ldadd,
483 [ --with-gold-ldadd=LIBS additional libraries for gold],
484 [if test "$withval" = "no" -o "$withval" = "yes"; then
492 dnl Force support for large files by default. This may need to be
493 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
494 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
497 AC_CHECK_HEADERS(sys/mman.h)
498 AC_CHECK_FUNCS(chsize mmap)
499 AC_REPLACE_FUNCS(pread ftruncate ffsll)
501 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
504 #include <sys/mman.h>
505 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
506 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
507 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
508 AC_DEFINE(HAVE_MREMAP, 1,
509 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
514 # Link in zlib if we can. This allows us to write compressed sections.
516 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_header_zlib_h" = "yes")
518 dnl We have to check these in C, not C++, because autoconf generates
519 dnl tests which have no type information, and current glibc provides
520 dnl multiple declarations of functions like basename when compiling
522 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
526 AC_CHECK_HEADERS(unordered_set unordered_map)
527 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
528 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
529 AC_CHECK_HEADERS(byteswap.h)
531 dnl When plugins enabled dynamic loader interface is required. Check headers
532 dnl which may provide this interface. Add the necessary library to link.
533 AC_CHECK_HEADERS(windows.h)
534 AC_CHECK_HEADERS(dlfcn.h)
535 AC_SEARCH_LIBS(dlopen, [dl dld])
536 case "$ac_cv_search_dlopen" in
537 no*) DLOPEN_LIBS="";;
538 *) DLOPEN_LIBS="$ac_cv_search_dlopen";;
540 AC_SUBST(DLOPEN_LIBS)
542 AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
543 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
545 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
546 # at link time with some versions of GCC.
547 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
548 [gold_cv_unordered_map_rehash],
549 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
550 #include <tr1/unordered_map>
551 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
552 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
553 if test "$gold_cv_unordered_map_rehash" = "yes"; then
554 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
555 [Define if ::std::tr1::unordered_map::rehash is usable])
558 # Use of tr1/unordered_map with off_t as a key is not supported on GCC
559 # 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type.
560 AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
561 [gold_cv_hash_off_t],
562 [CXXFLAGS_hold=$CXXFLAGS
563 CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
565 #include <sys/types.h>
566 #include <tr1/unordered_map>
567 std::tr1::hash<off_t> h;
569 [gold_cv_hash_off_t=yes],
570 [gold_cv_hash_off_t=no])
571 CXXFLAGS=$CXXFLAGS_hold])
572 if test "$gold_cv_hash_off_t" = "yes"; then
573 AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1,
574 [Define if std::tr1::hash<off_t> is usable])
577 # gcc 4.3.0 doesn't recognize the printf attribute on a template
578 # function. Check for that. This is gcc bug 35546. This test can
579 # probably be removed after the bug has been fixed for a while.
580 AC_CACHE_CHECK([whether we can use attributes with template functions],
581 [gold_cv_template_attribute],
583 template<typename T> extern void foo(const char*, ...)
584 __attribute__ ((__format__ (__printf__, 1, 2)));
585 template<typename T> void foo(const char* format, ...) {}
586 void bar() { foo<int>("%s\n", "foo"); }
587 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
588 if test "$gold_cv_template_attribute" = "yes"; then
589 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
590 [Define if attributes work on C++ templates])
593 dnl Check if the system has struct stat::st_mtim.
594 AC_CACHE_CHECK([for struct stat::st_mtim.],
595 [gold_cv_stat_st_mtim],
596 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
597 #include <sys/stat.h>
598 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
599 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
600 if test "$gold_cv_stat_st_mtim" = "yes"; then
601 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
602 [Define if struct stat has a field st_mtim with timespec for mtime])
605 dnl Check if gcc supports the -gpubnames option.
606 dnl Use -Werror in case of compilers that make unknown -g options warnings.
607 dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
608 dnl gets set later by default Autoconf magic to include -Werror. (We are
609 dnl assuming here that there is no compiler that groks -gpubnames
610 dnl but does not grok -Werror.)
611 save_CXXFLAGS="$CXXFLAGS"
612 CXXFLAGS="$CXXFLAGS -Werror -gpubnames"
613 AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
614 CXXFLAGS="$save_CXXFLAGS"
615 AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
619 AC_CHECK_HEADERS(locale.h)
620 AC_CHECK_FUNCS(setlocale)
625 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)