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.
73 [[ --enable-ld[=ARG] build ld [ARG={default,yes,no}]]],
74 [case "${enableval}" in
81 [[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
82 [case "${enableval}" in
84 if test x${default_ld} = x; then
85 install_as_default=yes
87 installed_linker=ld.gold
92 AC_MSG_ERROR([invalid --enable-gold argument])
95 [install_as_default=no
96 installed_linker=ld.gold])
97 AC_SUBST(install_as_default)
98 AC_SUBST(installed_linker)
100 dnl For now threads are a configure time option.
101 AC_ARG_ENABLE([threads],
102 [ --enable-threads multi-threaded linking],
103 [case "${enableval}" in
104 yes | "") threads=yes ;;
109 if test "$threads" = "yes"; then
110 AC_DEFINE(ENABLE_THREADS, 1,
111 [Define to do multi-threaded linking])
113 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
115 AC_ARG_ENABLE([plugins],
116 [ --enable-plugins linker plugins],
117 [case "${enableval}" in
118 yes | "") plugins=yes ;;
123 if test "$plugins" = "yes"; then
124 AC_DEFINE(ENABLE_PLUGINS, 1,
125 [Define to enable linker plugins])
127 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
129 AC_ARG_ENABLE([targets],
130 [ --enable-targets alternative target configurations],
131 [case "${enableval}" in
133 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
139 enable_targets=$enableval
142 [# For now, enable all targets by default
146 # Canonicalize the enabled targets.
147 if test -n "$enable_targets"; then
148 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
149 result=`$ac_config_sub $targ 2>/dev/null`
150 if test -n "$result"; then
151 canon_targets="$canon_targets $result"
153 # Permit unrecognized target names, like "all".
154 canon_targets="$canon_targets $targ"
159 # See which specific instantiations we need.
165 default_osabi=ELFOSABI_NONE
170 for targ in $target $canon_targets; do
171 if test "$targ" = "all"; then
178 . ${srcdir}/configure.tgt
180 if test "$targ_obj" = "UNKNOWN"; then
181 AC_MSG_ERROR("unsupported target $targ")
183 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
184 if test "$targ_extra_obj" != ""; then
185 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
187 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
188 if test "$targ_big_endian" = "true" \
189 -o "$targ_extra_big_endian" = "true"; then
192 if test "$targ_big_endian" = "false" \
193 -o "$targ_extra_big_endian" = "false"; then
197 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
198 if test "$targ_big_endian" = "true" \
199 -o "$targ_extra_big_endian" = "true"; then
202 if test "$targ_big_endian" = "false" \
203 -o "$targ_extra_big_endian" = "false"; then
208 if test "$target" = "$targ"; then
209 default_machine=$targ_machine
210 default_size=$targ_size
211 default_big_endian=$targ_big_endian
212 default_osabi=$targ_osabi
214 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
215 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
216 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
217 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
218 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
219 AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx")
225 # Remove any duplicates.
227 for t in $targetobjs; do
235 if test -n "$targ_32_little"; then
236 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
237 [Define to support 32-bit little-endian targets])
239 if test -n "$targ_32_big"; then
240 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
241 [Define to support 32-bit big-endian targets])
243 if test -n "$targ_64_little"; then
244 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
245 [Define to support 64-bit little-endian targets])
247 if test -n "$targ_64_big"; then
248 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
249 [Define to support 64-bit big-endian targets])
252 if test -n "$all_targets"; then
253 TARGETOBJS='$(ALL_TARGETOBJS)'
255 TARGETOBJS="$targetobjs"
259 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
260 [Default machine code])
261 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
262 [Default size (32 or 64)])
263 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
264 [Default big endian (true or false)])
265 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
266 [Default OSABI code])
268 AC_ARG_WITH(lib-path,
269 [ --with-lib-path=dir1:dir2... set default LIB_PATH],
271 yes) LIB_PATH='"/lib:/usr/lib"' ;;
273 *) LIB_PATH='"'"$withval"'"' ;;
275 [LIB_PATH='"::DEFAULT::"'])
276 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
277 [Default library search path])
278 if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
279 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
282 AC_CHECK_TOOL(NM, nm)
293 ZW_GNU_GETTEXT_SISTER_DIR
300 AM_CONDITIONAL(NATIVE_LINKER,
301 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
302 AM_CONDITIONAL(GCC, test "$GCC" = yes)
304 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
305 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
307 dnl Test for whether static linking is supported. Some systems do not
308 dnl install static libraries. This only affects the set of tests that
310 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
311 [LDFLAGS_hold=$LDFLAGS
312 LDFLAGS="$LDFLAGS -static"
314 AC_LANG_PROGRAM([[void f() { }]])],
315 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
316 LDFLAGS=$LDFLAGS_hold])
317 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
319 dnl Some architectures do not support taking pointers of functions
320 dnl defined in shared libraries except in -fPIC mode. We need to
321 dnl tell the unittest framework if we're compiling for one of those
322 dnl targets, so it doesn't try to run the tests that do that.
323 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
331 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
332 dnl only available in gcc 4.1.
333 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
335 #if !defined __GNUC__
337 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
340 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
342 save_CFLAGS="$CFLAGS"
343 CFLAGS="$CFLAGS -mcmodel=medium"
344 AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
345 CFLAGS="$save_CFLAGS"
346 dnl Whether we can test -mcmodel=medium.
347 AM_CONDITIONAL(MCMODEL_MEDIUM,
348 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
350 dnl Test for __thread support.
351 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
352 [AC_COMPILE_IFELSE([__thread int i = 1;],
353 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
355 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
357 dnl On GNU/Linux TLS in static programs only works when using glibc
359 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
361 #include <features.h>
362 #if !defined __GLIBC__
364 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
367 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
369 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
371 dnl Test for #pragma omp threadprivate
372 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
373 [save_CFLAGS="$CFLAGS"
374 CFLAGS="$CFLAGS -fopenmp"
378 #pragma omp threadprivate (i)
379 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
380 CFLAGS="$save_CFLAGS"])
381 if test "$gold_cv_c_threadprivate" = "yes"; then
382 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
383 [Define if compiler supports #pragma omp threadprivate])
385 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
387 dnl Test for the -ftls-dialect=gnu2 option.
388 save_CFLAGS="$CFLAGS"
389 CFLAGS="$CFLAGS -fpic -mtls-dialect=gnu2"
396 ], [have_tls_gnu2=yes], [have_tls_gnu2=no])
397 CFLAGS="$save_CFLAGS"
398 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
400 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
401 dnl only with glibc 2.9 or later.
402 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
404 #include <features.h>
405 #if !defined __GLIBC__
407 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
410 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
412 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
414 dnl Test for the -frandom-seed option.
415 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
416 [save_CFLAGS="$CFLAGS"
417 CFLAGS="$CFLAGS -frandom-seed=foo"
418 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
419 [gold_cv_c_random_seed=no])
420 CFLAGS="$save_CFLAGS"])
421 if test "$gold_cv_c_random_seed" = "yes"; then
422 # In Makefile, '$@' will be expanded to be the name of the file
423 # being built, providing a unique seed for each file.
424 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
426 AC_SUBST(RANDOM_SEED_CFLAGS)
428 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
429 dnl 2.11 or later, and by binutils 2.20.1 or later.
430 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
431 [save_LDFLAGS="$LDFLAGS"
432 LDFLAGS="$LDFLAGS -static"
433 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
434 #include <features.h>
435 #if !defined __GLIBC__
437 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
442 __asm__(".type invoke, %gnu_indirect_function");
443 typedef void (*funcptr) (void);
444 funcptr dispatch (void) __asm__ ("invoke");
445 funcptr dispatch (void) { return &func; }]],
448 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
449 gold_cv_lib_glibc_ifunc=both
451 gold_cv_lib_glibc_ifunc=dyn
452 fi], [gold_cv_lib_glibc_ifunc=no])
453 LDFLAGS="$save_LDFLAGS"])
455 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
456 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
460 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
461 AC_SUBST(WARN_CXXFLAGS)
463 AC_ARG_WITH(gold-ldflags,
464 [ --with-gold-ldflags=FLAGS additional link flags for gold],
465 [if test "$withval" = "no" -o "$withval" = "yes"; then
468 GOLD_LDFLAGS=$withval
471 AC_SUBST(GOLD_LDFLAGS)
473 AC_ARG_WITH(gold-ldadd,
474 [ --with-gold-ldadd=LIBS additional libraries for gold],
475 [if test "$withval" = "no" -o "$withval" = "yes"; then
483 dnl Force support for large files by default. This may need to be
484 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
485 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
488 AC_CHECK_HEADERS(sys/mman.h)
489 AC_CHECK_FUNCS(chsize mmap)
490 AC_REPLACE_FUNCS(pread ftruncate ffsll)
492 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
495 #include <sys/mman.h>
496 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
497 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
498 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
499 AC_DEFINE(HAVE_MREMAP, 1,
500 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
505 # Link in zlib if we can. This allows us to write compressed sections.
507 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_header_zlib_h" = "yes")
509 dnl We have to check these in C, not C++, because autoconf generates
510 dnl tests which have no type information, and current glibc provides
511 dnl multiple declarations of functions like basename when compiling
513 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
517 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
518 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
519 AC_CHECK_HEADERS(byteswap.h)
520 AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
521 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
523 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
524 # at link time with some versions of GCC.
525 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
526 [gold_cv_unordered_map_rehash],
527 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
528 #include <tr1/unordered_map>
529 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
530 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
531 if test "$gold_cv_unordered_map_rehash" = "yes"; then
532 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
533 [Define if ::std::tr1::unordered_map::rehash is usable])
536 # Use of tr1/unordered_map with off_t as a key is not supported on GCC
537 # 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type.
538 AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
539 [gold_cv_hash_off_t],
540 [CXXFLAGS_hold=$CXXFLAGS
541 CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
543 #include <sys/types.h>
544 #include <tr1/unordered_map>
545 std::tr1::hash<off_t> h;
547 [gold_cv_hash_off_t=yes],
548 [gold_cv_hash_off_t=no])
549 CXXFLAGS=$CXXFLAGS_hold])
550 if test "$gold_cv_hash_off_t" = "yes"; then
551 AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1,
552 [Define if std::tr1::hash<off_t> is usable])
555 # gcc 4.3.0 doesn't recognize the printf attribute on a template
556 # function. Check for that. This is gcc bug 35546. This test can
557 # probably be removed after the bug has been fixed for a while.
558 AC_CACHE_CHECK([whether we can use attributes with template functions],
559 [gold_cv_template_attribute],
561 template<typename T> extern void foo(const char*, ...)
562 __attribute__ ((__format__ (__printf__, 1, 2)));
563 template<typename T> void foo(const char* format, ...) {}
564 void bar() { foo<int>("%s\n", "foo"); }
565 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
566 if test "$gold_cv_template_attribute" = "yes"; then
567 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
568 [Define if attributes work on C++ templates])
571 dnl Check if the system has struct stat::st_mtim.
572 AC_CACHE_CHECK([for struct stat::st_mtim.],
573 [gold_cv_stat_st_mtim],
574 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
575 #include <sys/stat.h>
576 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
577 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
578 if test "$gold_cv_stat_st_mtim" = "yes"; then
579 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
580 [Define if struct stat has a field st_mtim with timespec for mtime])
583 dnl Check if gcc supports the -gpubnames option.
584 save_CXXFLAGS="$CXXFLAGS"
585 CXXFLAGS="$CXXFLAGS -gpubnames"
586 AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
587 CXXFLAGS="$save_CXXFLAGS"
588 AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
592 AC_CHECK_HEADERS(locale.h)
593 AC_CHECK_FUNCS(setlocale)
598 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)