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
dnl Test for __thread support.
342
AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
343
[AC_COMPILE_IFELSE([__thread int i = 1;],
344
[gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
346
AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
348
dnl On GNU/Linux TLS in static programs only works when using glibc
350
AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
352
#include <features.h>
353
#if !defined __GLIBC__
355
#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
358
], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
360
AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
362
dnl Test for #pragma omp threadprivate
363
AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
364
[save_CFLAGS="$CFLAGS"
365
CFLAGS="$CFLAGS -fopenmp"
369
#pragma omp threadprivate (i)
370
], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
371
CFLAGS="$save_CFLAGS"])
372
if test "$gold_cv_c_threadprivate" = "yes"; then
373
AC_DEFINE(HAVE_OMP_SUPPORT, 1,
374
[Define if compiler supports #pragma omp threadprivate])
376
AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
378
dnl Test for the -ftls-dialect=gnu2 option.
379
save_CFLAGS="$CFLAGS"
380
CFLAGS="$CFLAGS -fpic -mtls-dialect=gnu2"
387
], [have_tls_gnu2=yes], [have_tls_gnu2=no])
388
CFLAGS="$save_CFLAGS"
389
AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
391
dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
392
dnl only with glibc 2.9 or later.
393
AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
395
#include <features.h>
396
#if !defined __GLIBC__
398
#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
401
], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
403
AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
405
dnl Test for the -frandom-seed option.
406
AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
407
[save_CFLAGS="$CFLAGS"
408
CFLAGS="$CFLAGS -frandom-seed=foo"
409
AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
410
[gold_cv_c_random_seed=no])
411
CFLAGS="$save_CFLAGS"])
412
if test "$gold_cv_c_random_seed" = "yes"; then
413
# In Makefile, '$@' will be expanded to be the name of the file
414
# being built, providing a unique seed for each file.
415
RANDOM_SEED_CFLAGS=-frandom-seed=\$@
417
AC_SUBST(RANDOM_SEED_CFLAGS)
419
dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
420
dnl 2.11 or later, and by binutils 2.20.1 or later.
421
AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
422
[save_LDFLAGS="$LDFLAGS"
423
LDFLAGS="$LDFLAGS -static"
424
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
425
#include <features.h>
426
#if !defined __GLIBC__
428
#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
433
__asm__(".type invoke, %gnu_indirect_function");
434
typedef void (*funcptr) (void);
435
funcptr dispatch (void) __asm__ ("invoke");
436
funcptr dispatch (void) { return &func; }]],
439
if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
440
gold_cv_lib_glibc_ifunc=both
442
gold_cv_lib_glibc_ifunc=dyn
443
fi], [gold_cv_lib_glibc_ifunc=no])
444
LDFLAGS="$save_LDFLAGS"])
446
AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
447
AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
451
WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
452
AC_SUBST(WARN_CXXFLAGS)
454
AC_ARG_WITH(gold-ldflags,
455
[ --with-gold-ldflags=FLAGS additional link flags for gold],
456
[if test "$withval" = "no" -o "$withval" = "yes"; then
459
GOLD_LDFLAGS=$withval
462
AC_SUBST(GOLD_LDFLAGS)
464
AC_ARG_WITH(gold-ldadd,
465
[ --with-gold-ldadd=LIBS additional libraries for gold],
466
[if test "$withval" = "no" -o "$withval" = "yes"; then
474
dnl Force support for large files by default. This may need to be
475
dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
476
LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
479
AC_CHECK_HEADERS(sys/mman.h)
480
AC_CHECK_FUNCS(chsize mmap)
481
AC_REPLACE_FUNCS(pread ftruncate ffsll)
483
AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
486
#include <sys/mman.h>
487
void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
488
]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
489
if test "$gold_cv_lib_mremap_maymove" = "yes"; then
490
AC_DEFINE(HAVE_MREMAP, 1,
491
[Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
496
# Link in zlib if we can. This allows us to write compressed sections.
498
AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_header_zlib_h" = "yes")
500
dnl We have to check these in C, not C++, because autoconf generates
501
dnl tests which have no type information, and current glibc provides
502
dnl multiple declarations of functions like basename when compiling
504
AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
508
AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
509
AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
510
AC_CHECK_HEADERS(byteswap.h)
512
dnl When plugins enabled dynamic loader interface is required. Check headers
513
dnl which may provide this interface. In case of dlfcn.h add libdl to link.
514
AC_CHECK_HEADERS(windows.h)
515
AC_CHECK_HEADERS(dlfcn.h, [DLOPEN_LIBS="-ldl"], [DLOPEN_LIBS=""])
516
AC_SUBST(DLOPEN_LIBS)
518
AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
519
AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
521
# Use of ::std::tr1::unordered_map::rehash causes undefined symbols
522
# at link time with some versions of GCC.
523
AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
524
[gold_cv_unordered_map_rehash],
525
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
526
#include <tr1/unordered_map>
527
void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
528
]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
529
if test "$gold_cv_unordered_map_rehash" = "yes"; then
530
AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
531
[Define if ::std::tr1::unordered_map::rehash is usable])
534
# Use of tr1/unordered_map with off_t as a key is not supported on GCC
535
# 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type.
536
AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
537
[gold_cv_hash_off_t],
538
[CXXFLAGS_hold=$CXXFLAGS
539
CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
541
#include <sys/types.h>
542
#include <tr1/unordered_map>
543
std::tr1::hash<off_t> h;
545
[gold_cv_hash_off_t=yes],
546
[gold_cv_hash_off_t=no])
547
CXXFLAGS=$CXXFLAGS_hold])
548
if test "$gold_cv_hash_off_t" = "yes"; then
549
AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1,
550
[Define if std::tr1::hash<off_t> is usable])
553
# gcc 4.3.0 doesn't recognize the printf attribute on a template
554
# function. Check for that. This is gcc bug 35546. This test can
555
# probably be removed after the bug has been fixed for a while.
556
AC_CACHE_CHECK([whether we can use attributes with template functions],
557
[gold_cv_template_attribute],
559
template<typename T> extern void foo(const char*, ...)
560
__attribute__ ((__format__ (__printf__, 1, 2)));
561
template<typename T> void foo(const char* format, ...) {}
562
void bar() { foo<int>("%s\n", "foo"); }
563
], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
564
if test "$gold_cv_template_attribute" = "yes"; then
565
AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
566
[Define if attributes work on C++ templates])
569
dnl Check if the system has struct stat::st_mtim.
570
AC_CACHE_CHECK([for struct stat::st_mtim.],
571
[gold_cv_stat_st_mtim],
572
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
573
#include <sys/stat.h>
574
long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
575
]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
576
if test "$gold_cv_stat_st_mtim" = "yes"; then
577
AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
578
[Define if struct stat has a field st_mtim with timespec for mtime])
581
dnl Check if gcc supports the -gpubnames option.
582
save_CXXFLAGS="$CXXFLAGS"
583
CXXFLAGS="$CXXFLAGS -gpubnames"
584
AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
585
CXXFLAGS="$save_CXXFLAGS"
586
AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
590
AC_CHECK_HEADERS(locale.h)
591
AC_CHECK_FUNCS(setlocale)
594
if test x$DEB_TARGET_MULTIARCH != x; then
595
multiarch=$DEB_TARGET_MULTIARCH
596
if test -n "$multiarch"; then
597
MULTIARCH_DIRNAME='-DMULTIARCH_DIRNAME=\"'$multiarch'\"'
600
AC_SUBST(MULTIARCH_DIRNAME)
604
AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)