1 dnl Process this file with autoconf to produce a configure script.
3 dnl Copyright 2012 Free Software Foundation
5 dnl This file is free software; you can redistribute it and/or modify
6 dnl it under the terms of the GNU General Public License as published by
7 dnl the Free Software Foundation; either version 3 of the License, or
8 dnl (at your option) any later version.
10 dnl This program is distributed in the hope that it will be useful,
11 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 dnl GNU General Public License for more details.
15 dnl You should have received a copy of the GNU General Public License
16 dnl along with this program; see the file COPYING3. If not see
17 dnl <http://www.gnu.org/licenses/>.
23 AC_CONFIG_SRCDIR(gold.cc)
27 AM_INIT_AUTOMAKE([no-dist parallel-tests])
29 AM_CONFIG_HEADER(config.h:config.in)
32 AH_VERBATIM([00_CONFIG_H_CHECK],
33 [/* Check that config.h is #included before system headers
34 (this works only for glibc, but that should be enough). */
35 #if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__)
36 # error config.h must be #included before system headers
38 #define __CONFIG_H__ 1])
41 [ --with-sysroot[=DIR] search for usr/lib et al within DIR],
42 [sysroot=$withval], [sysroot=no])
44 if test "$sysroot" = "yes"; then
45 sysroot='${exec_prefix}/${target_alias}/sys-root'
46 elif test "$sysroot" = "no"; then
51 if test -n "$sysroot"; then
53 "${prefix}" | "${prefix}/"* | \
54 "${exec_prefix}" | "${exec_prefix}/"* | \
55 '${prefix}' | '${prefix}/'*| \
56 '${exec_prefix}' | '${exec_prefix}/'*)
62 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
63 [System root for target files])
64 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
65 [Whether the system root can be relocated])
67 dnl "install_as_default" is true if the linker to be installed as the
68 dnl default linker, ld.
69 dnl "installed_linker" is the installed gold linker name.
71 installed_linker=ld.gold
73 [[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
74 [case "${enableval}" in
76 install_as_default=yes
79 if test x${enable_ld} = xno; then
80 install_as_default=yes
84 [install_as_default=no])
85 AC_SUBST(install_as_default)
86 AC_SUBST(installed_linker)
88 dnl For now threads are a configure time option.
89 AC_ARG_ENABLE([threads],
90 [ --enable-threads multi-threaded linking],
91 [case "${enableval}" in
92 yes | "") threads=yes ;;
97 if test "$threads" = "yes"; then
98 AC_DEFINE(ENABLE_THREADS, 1,
99 [Define to do multi-threaded linking])
101 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
103 AC_ARG_ENABLE([plugins],
104 [ --enable-plugins linker plugins],
105 [case "${enableval}" in
106 yes | "") plugins=yes ;;
111 if test "$plugins" = "yes"; then
112 AC_DEFINE(ENABLE_PLUGINS, 1,
113 [Define to enable linker plugins])
115 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
117 AC_ARG_ENABLE([targets],
118 [ --enable-targets alternative target configurations],
119 [case "${enableval}" in
121 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
127 enable_targets=$enableval
130 [# For now, enable all targets by default
134 # Canonicalize the enabled targets.
135 if test -n "$enable_targets"; then
136 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
137 result=`$ac_config_sub $targ 2>/dev/null`
138 if test -n "$result"; then
139 canon_targets="$canon_targets $result"
141 # Permit unrecognized target names, like "all".
142 canon_targets="$canon_targets $targ"
147 # See which specific instantiations we need.
153 default_osabi=ELFOSABI_NONE
158 for targ in $target $canon_targets; do
159 if test "$targ" = "all"; then
166 . ${srcdir}/configure.tgt
168 if test "$targ_obj" = "UNKNOWN"; then
169 AC_MSG_ERROR("unsupported target $targ")
171 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
172 if test "$targ_extra_obj" != ""; then
173 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
175 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
176 if test "$targ_big_endian" = "true" \
177 -o "$targ_extra_big_endian" = "true"; then
180 if test "$targ_big_endian" = "false" \
181 -o "$targ_extra_big_endian" = "false"; then
185 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
186 if test "$targ_big_endian" = "true" \
187 -o "$targ_extra_big_endian" = "true"; then
190 if test "$targ_big_endian" = "false" \
191 -o "$targ_extra_big_endian" = "false"; then
196 if test "$target" = "$targ"; then
197 default_machine=$targ_machine
198 default_size=$targ_size
199 default_big_endian=$targ_big_endian
200 default_osabi=$targ_osabi
202 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
203 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
204 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
205 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
206 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
207 AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx")
213 # Remove any duplicates.
215 for t in $targetobjs; do
223 if test -n "$targ_32_little"; then
224 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
225 [Define to support 32-bit little-endian targets])
227 if test -n "$targ_32_big"; then
228 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
229 [Define to support 32-bit big-endian targets])
231 if test -n "$targ_64_little"; then
232 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
233 [Define to support 64-bit little-endian targets])
235 if test -n "$targ_64_big"; then
236 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
237 [Define to support 64-bit big-endian targets])
240 if test -n "$all_targets"; then
241 TARGETOBJS='$(ALL_TARGETOBJS)'
243 TARGETOBJS="$targetobjs"
247 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
248 [Default machine code])
249 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
250 [Default size (32 or 64)])
251 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
252 [Default big endian (true or false)])
253 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
254 [Default OSABI code])
256 AC_ARG_WITH(lib-path,
257 [ --with-lib-path=dir1:dir2... set default LIB_PATH],
259 yes) LIB_PATH='"/lib:/usr/lib"' ;;
261 *) LIB_PATH='"'"$withval"'"' ;;
263 [LIB_PATH='"::DEFAULT::"'])
264 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
265 [Default library search path])
266 if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
267 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
270 AC_CHECK_TOOL(NM, nm)
281 ZW_GNU_GETTEXT_SISTER_DIR
288 AM_CONDITIONAL(NATIVE_LINKER,
289 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
290 AM_CONDITIONAL(GCC, test "$GCC" = yes)
292 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
293 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
295 dnl Test for whether static linking is supported. Some systems do not
296 dnl install static libraries. This only affects the set of tests that
298 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
299 [LDFLAGS_hold=$LDFLAGS
300 LDFLAGS="$LDFLAGS -static"
302 AC_LANG_PROGRAM([[void f() { }]])],
303 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
304 LDFLAGS=$LDFLAGS_hold])
305 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
307 dnl Some architectures do not support taking pointers of functions
308 dnl defined in shared libraries except in -fPIC mode. We need to
309 dnl tell the unittest framework if we're compiling for one of those
310 dnl targets, so it doesn't try to run the tests that do that.
311 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
319 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
320 dnl only available in gcc 4.1.
321 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
323 #if !defined __GNUC__
325 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
328 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
330 save_CFLAGS="$CFLAGS"
331 CFLAGS="$CFLAGS -mcmodel=medium"
332 AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
333 CFLAGS="$save_CFLAGS"
334 dnl Whether we can test -mcmodel=medium.
335 AM_CONDITIONAL(MCMODEL_MEDIUM,
336 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
338 dnl Test for __thread support.
339 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
340 [AC_COMPILE_IFELSE([__thread int i = 1;],
341 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
343 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
345 dnl On GNU/Linux TLS in static programs only works when using glibc
347 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
349 #include <features.h>
350 #if !defined __GLIBC__
352 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
355 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
357 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
359 dnl Test for #pragma omp threadprivate
360 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
361 [save_CFLAGS="$CFLAGS"
362 CFLAGS="$CFLAGS -fopenmp"
366 #pragma omp threadprivate (i)
367 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
368 CFLAGS="$save_CFLAGS"])
369 if test "$gold_cv_c_threadprivate" = "yes"; then
370 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
371 [Define if compiler supports #pragma omp threadprivate])
373 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
375 dnl Test for the -ftls-dialect=gnu2 option.
376 save_CFLAGS="$CFLAGS"
377 CFLAGS="$CFLAGS -fpic -mtls-dialect=gnu2"
384 ], [have_tls_gnu2=yes], [have_tls_gnu2=no])
385 CFLAGS="$save_CFLAGS"
386 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
388 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
389 dnl only with glibc 2.9 or later.
390 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
392 #include <features.h>
393 #if !defined __GLIBC__
395 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
398 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
400 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
402 dnl Test for the -frandom-seed option.
403 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
404 [save_CFLAGS="$CFLAGS"
405 CFLAGS="$CFLAGS -frandom-seed=foo"
406 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
407 [gold_cv_c_random_seed=no])
408 CFLAGS="$save_CFLAGS"])
409 if test "$gold_cv_c_random_seed" = "yes"; then
410 # In Makefile, '$@' will be expanded to be the name of the file
411 # being built, providing a unique seed for each file.
412 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
414 AC_SUBST(RANDOM_SEED_CFLAGS)
416 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
417 dnl 2.11 or later, and by binutils 2.20.1 or later.
418 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
419 [save_LDFLAGS="$LDFLAGS"
420 LDFLAGS="$LDFLAGS -static"
421 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
422 #include <features.h>
423 #if !defined __GLIBC__
425 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
430 __asm__(".type invoke, %gnu_indirect_function");
431 typedef void (*funcptr) (void);
432 funcptr dispatch (void) __asm__ ("invoke");
433 funcptr dispatch (void) { return &func; }]],
436 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
437 gold_cv_lib_glibc_ifunc=both
439 gold_cv_lib_glibc_ifunc=dyn
440 fi], [gold_cv_lib_glibc_ifunc=no])
441 LDFLAGS="$save_LDFLAGS"])
443 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
444 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
448 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
449 AC_SUBST(WARN_CXXFLAGS)
451 AC_ARG_WITH(gold-ldflags,
452 [ --with-gold-ldflags=FLAGS additional link flags for gold],
453 [if test "$withval" = "no" -o "$withval" = "yes"; then
456 GOLD_LDFLAGS=$withval
459 AC_SUBST(GOLD_LDFLAGS)
461 AC_ARG_WITH(gold-ldadd,
462 [ --with-gold-ldadd=LIBS additional libraries for gold],
463 [if test "$withval" = "no" -o "$withval" = "yes"; then
471 dnl Force support for large files by default. This may need to be
472 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
473 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
476 AC_CHECK_HEADERS(sys/mman.h)
477 AC_CHECK_FUNCS(chsize mmap)
478 AC_REPLACE_FUNCS(pread ftruncate ffsll)
480 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
483 #include <sys/mman.h>
484 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
485 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
486 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
487 AC_DEFINE(HAVE_MREMAP, 1,
488 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
493 # Link in zlib if we can. This allows us to write compressed sections.
495 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_header_zlib_h" = "yes")
497 dnl We have to check these in C, not C++, because autoconf generates
498 dnl tests which have no type information, and current glibc provides
499 dnl multiple declarations of functions like basename when compiling
501 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
505 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
506 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
507 AC_CHECK_HEADERS(byteswap.h)
508 AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
509 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
511 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
512 # at link time with some versions of GCC.
513 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
514 [gold_cv_unordered_map_rehash],
515 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
516 #include <tr1/unordered_map>
517 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
518 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
519 if test "$gold_cv_unordered_map_rehash" = "yes"; then
520 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
521 [Define if ::std::tr1::unordered_map::rehash is usable])
524 # Use of tr1/unordered_map with off_t as a key is not supported on GCC
525 # 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type.
526 AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
527 [gold_cv_hash_off_t],
528 [CXXFLAGS_hold=$CXXFLAGS
529 CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
531 #include <sys/types.h>
532 #include <tr1/unordered_map>
533 std::tr1::hash<off_t> h;
535 [gold_cv_hash_off_t=yes],
536 [gold_cv_hash_off_t=no])
537 CXXFLAGS=$CXXFLAGS_hold])
538 if test "$gold_cv_hash_off_t" = "yes"; then
539 AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1,
540 [Define if std::tr1::hash<off_t> is usable])
543 # gcc 4.3.0 doesn't recognize the printf attribute on a template
544 # function. Check for that. This is gcc bug 35546. This test can
545 # probably be removed after the bug has been fixed for a while.
546 AC_CACHE_CHECK([whether we can use attributes with template functions],
547 [gold_cv_template_attribute],
549 template<typename T> extern void foo(const char*, ...)
550 __attribute__ ((__format__ (__printf__, 1, 2)));
551 template<typename T> void foo(const char* format, ...) {}
552 void bar() { foo<int>("%s\n", "foo"); }
553 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
554 if test "$gold_cv_template_attribute" = "yes"; then
555 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
556 [Define if attributes work on C++ templates])
559 dnl Check if the system has struct stat::st_mtim.
560 AC_CACHE_CHECK([for struct stat::st_mtim.],
561 [gold_cv_stat_st_mtim],
562 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
563 #include <sys/stat.h>
564 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
565 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
566 if test "$gold_cv_stat_st_mtim" = "yes"; then
567 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
568 [Define if struct stat has a field st_mtim with timespec for mtime])
571 dnl Check if gcc supports the -gpubnames option.
572 save_CXXFLAGS="$CXXFLAGS"
573 CXXFLAGS="$CXXFLAGS -gpubnames"
574 AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
575 CXXFLAGS="$save_CXXFLAGS"
576 AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
580 AC_CHECK_HEADERS(locale.h)
581 AC_CHECK_FUNCS(setlocale)
586 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)