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")
214 # Remove any duplicates.
216 for t in $targetobjs; do
224 if test -n "$targ_32_little"; then
225 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
226 [Define to support 32-bit little-endian targets])
228 if test -n "$targ_32_big"; then
229 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
230 [Define to support 32-bit big-endian targets])
232 if test -n "$targ_64_little"; then
233 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
234 [Define to support 64-bit little-endian targets])
236 if test -n "$targ_64_big"; then
237 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
238 [Define to support 64-bit big-endian targets])
241 if test -n "$all_targets"; then
242 TARGETOBJS='$(ALL_TARGETOBJS)'
244 TARGETOBJS="$targetobjs"
248 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
249 [Default machine code])
250 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
251 [Default size (32 or 64)])
252 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
253 [Default big endian (true or false)])
254 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
255 [Default OSABI code])
257 AC_ARG_WITH(lib-path,
258 [ --with-lib-path=dir1:dir2... set default LIB_PATH],
260 yes) LIB_PATH='"/lib:/usr/lib"' ;;
262 *) LIB_PATH='"'"$withval"'"' ;;
264 [LIB_PATH='"::DEFAULT::"'])
265 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
266 [Default library search path])
267 if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
268 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
271 AC_CHECK_TOOL(NM, nm)
282 ZW_GNU_GETTEXT_SISTER_DIR
289 AM_CONDITIONAL(NATIVE_LINKER,
290 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
291 AM_CONDITIONAL(GCC, test "$GCC" = yes)
293 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
294 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
296 dnl Test for whether static linking is supported. Some systems do not
297 dnl install static libraries. This only affects the set of tests that
299 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
300 [LDFLAGS_hold=$LDFLAGS
301 LDFLAGS="$LDFLAGS -static"
303 AC_LANG_PROGRAM([[void f() { }]])],
304 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
305 LDFLAGS=$LDFLAGS_hold])
306 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
308 dnl Some architectures do not support taking pointers of functions
309 dnl defined in shared libraries except in -fPIC mode. We need to
310 dnl tell the unittest framework if we're compiling for one of those
311 dnl targets, so it doesn't try to run the tests that do that.
312 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
320 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
321 dnl only available in gcc 4.1.
322 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
324 #if !defined __GNUC__
326 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
329 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
331 save_CFLAGS="$CFLAGS"
332 CFLAGS="$CFLAGS -mcmodel=medium"
333 AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
334 CFLAGS="$save_CFLAGS"
335 dnl Whether we can test -mcmodel=medium.
336 AM_CONDITIONAL(MCMODEL_MEDIUM,
337 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
339 dnl Test for __thread support.
340 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
341 [AC_COMPILE_IFELSE([__thread int i = 1;],
342 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
344 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
346 dnl On GNU/Linux TLS in static programs only works when using glibc
348 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
350 #include <features.h>
351 #if !defined __GLIBC__
353 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
356 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
358 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
360 dnl Test for #pragma omp threadprivate
361 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
362 [save_CFLAGS="$CFLAGS"
363 CFLAGS="$CFLAGS -fopenmp"
367 #pragma omp threadprivate (i)
368 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
369 CFLAGS="$save_CFLAGS"])
370 if test "$gold_cv_c_threadprivate" = "yes"; then
371 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
372 [Define if compiler supports #pragma omp threadprivate])
374 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
376 dnl Test for the -ftls-dialect=gnu2 option.
377 save_CFLAGS="$CFLAGS"
378 CFLAGS="$CFLAGS -fpic -mtls-dialect=gnu2"
385 ], [have_tls_gnu2=yes], [have_tls_gnu2=no])
386 CFLAGS="$save_CFLAGS"
387 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
389 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
390 dnl only with glibc 2.9 or later.
391 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
393 #include <features.h>
394 #if !defined __GLIBC__
396 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
399 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
401 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
403 dnl Test for the -frandom-seed option.
404 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
405 [save_CFLAGS="$CFLAGS"
406 CFLAGS="$CFLAGS -frandom-seed=foo"
407 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
408 [gold_cv_c_random_seed=no])
409 CFLAGS="$save_CFLAGS"])
410 if test "$gold_cv_c_random_seed" = "yes"; then
411 # In Makefile, '$@' will be expanded to be the name of the file
412 # being built, providing a unique seed for each file.
413 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
415 AC_SUBST(RANDOM_SEED_CFLAGS)
417 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
418 dnl 2.11 or later, and by binutils 2.20.1 or later.
419 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
420 [save_LDFLAGS="$LDFLAGS"
421 LDFLAGS="$LDFLAGS -static"
422 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
423 #include <features.h>
424 #if !defined __GLIBC__
426 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
431 __asm__(".type invoke, %gnu_indirect_function");
432 typedef void (*funcptr) (void);
433 funcptr dispatch (void) __asm__ ("invoke");
434 funcptr dispatch (void) { return &func; }]],
437 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
438 gold_cv_lib_glibc_ifunc=both
440 gold_cv_lib_glibc_ifunc=dyn
441 fi], [gold_cv_lib_glibc_ifunc=no])
442 LDFLAGS="$save_LDFLAGS"])
444 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
445 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
449 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
450 AC_SUBST(WARN_CXXFLAGS)
452 AC_ARG_WITH(gold-ldflags,
453 [ --with-gold-ldflags=FLAGS additional link flags for gold],
454 [if test "$withval" = "no" -o "$withval" = "yes"; then
457 GOLD_LDFLAGS=$withval
460 AC_SUBST(GOLD_LDFLAGS)
462 AC_ARG_WITH(gold-ldadd,
463 [ --with-gold-ldadd=LIBS additional libraries for gold],
464 [if test "$withval" = "no" -o "$withval" = "yes"; then
472 dnl Force support for large files by default. This may need to be
473 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
474 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
477 AC_CHECK_HEADERS(sys/mman.h)
478 AC_CHECK_FUNCS(chsize mmap)
479 AC_REPLACE_FUNCS(pread ftruncate ffsll)
481 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
484 #include <sys/mman.h>
485 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
486 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
487 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
488 AC_DEFINE(HAVE_MREMAP, 1,
489 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
494 # Link in zlib if we can. This allows us to write compressed sections.
496 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_header_zlib_h" = "yes")
498 dnl We have to check these in C, not C++, because autoconf generates
499 dnl tests which have no type information, and current glibc provides
500 dnl multiple declarations of functions like basename when compiling
502 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
506 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
507 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
508 AC_CHECK_HEADERS(byteswap.h)
510 dnl When plugins enabled dynamic loader interface is required. Check headers
511 dnl which may provide this interface. In case of dlfcn.h add libdl to link.
512 AC_CHECK_HEADERS(windows.h)
513 AC_CHECK_HEADERS(dlfcn.h, [DLOPEN_LIBS="-ldl"], [DLOPEN_LIBS=""])
514 AC_SUBST(DLOPEN_LIBS)
516 AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
517 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
519 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
520 # at link time with some versions of GCC.
521 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
522 [gold_cv_unordered_map_rehash],
523 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
524 #include <tr1/unordered_map>
525 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
526 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
527 if test "$gold_cv_unordered_map_rehash" = "yes"; then
528 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
529 [Define if ::std::tr1::unordered_map::rehash is usable])
532 # Use of tr1/unordered_map with off_t as a key is not supported on GCC
533 # 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type.
534 AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
535 [gold_cv_hash_off_t],
536 [CXXFLAGS_hold=$CXXFLAGS
537 CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
539 #include <sys/types.h>
540 #include <tr1/unordered_map>
541 std::tr1::hash<off_t> h;
543 [gold_cv_hash_off_t=yes],
544 [gold_cv_hash_off_t=no])
545 CXXFLAGS=$CXXFLAGS_hold])
546 if test "$gold_cv_hash_off_t" = "yes"; then
547 AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1,
548 [Define if std::tr1::hash<off_t> is usable])
551 # gcc 4.3.0 doesn't recognize the printf attribute on a template
552 # function. Check for that. This is gcc bug 35546. This test can
553 # probably be removed after the bug has been fixed for a while.
554 AC_CACHE_CHECK([whether we can use attributes with template functions],
555 [gold_cv_template_attribute],
557 template<typename T> extern void foo(const char*, ...)
558 __attribute__ ((__format__ (__printf__, 1, 2)));
559 template<typename T> void foo(const char* format, ...) {}
560 void bar() { foo<int>("%s\n", "foo"); }
561 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
562 if test "$gold_cv_template_attribute" = "yes"; then
563 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
564 [Define if attributes work on C++ templates])
567 dnl Check if the system has struct stat::st_mtim.
568 AC_CACHE_CHECK([for struct stat::st_mtim.],
569 [gold_cv_stat_st_mtim],
570 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
571 #include <sys/stat.h>
572 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
573 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
574 if test "$gold_cv_stat_st_mtim" = "yes"; then
575 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
576 [Define if struct stat has a field st_mtim with timespec for mtime])
579 dnl Check if gcc supports the -gpubnames option.
580 save_CXXFLAGS="$CXXFLAGS"
581 CXXFLAGS="$CXXFLAGS -gpubnames"
582 AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
583 CXXFLAGS="$save_CXXFLAGS"
584 AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
588 AC_CHECK_HEADERS(locale.h)
589 AC_CHECK_FUNCS(setlocale)
594 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)