]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gold/configure.ac
Add new gdb.ada/bp_c_mixed_case testcase for PR gdb/22670
[thirdparty/binutils-gdb.git] / gold / configure.ac
CommitLineData
bae7f79e 1dnl Process this file with autoconf to produce a configure script.
5bf135a7 2dnl
219d1afa 3dnl Copyright (C) 2006-2018 Free Software Foundation, Inc.
5bf135a7
NC
4dnl
5dnl This file is free software; you can redistribute it and/or modify
6dnl it under the terms of the GNU General Public License as published by
7dnl the Free Software Foundation; either version 3 of the License, or
8dnl (at your option) any later version.
2b64b551 9dnl
5bf135a7
NC
10dnl This program is distributed in the hope that it will be useful,
11dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13dnl GNU General Public License for more details.
2b64b551 14dnl
5bf135a7
NC
15dnl You should have received a copy of the GNU General Public License
16dnl along with this program; see the file COPYING3. If not see
17dnl <http://www.gnu.org/licenses/>.
18dnl
bae7f79e
ILT
19
20AC_PREREQ(2.59)
8486ee48
ILT
21
22AC_INIT(gold, 0.1)
23AC_CONFIG_SRCDIR(gold.cc)
bae7f79e
ILT
24
25AC_CANONICAL_TARGET
26
6ea55b82 27AM_INIT_AUTOMAKE([no-dist parallel-tests])
bae7f79e
ILT
28
29AM_CONFIG_HEADER(config.h:config.in)
30
df7b86aa
NC
31# PR 14072
32AH_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). */
0a6f1bf2 35#if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__)
df7b86aa
NC
36# error config.h must be #included before system headers
37#endif
38#define __CONFIG_H__ 1])
39
ad2d6943
ILT
40AC_ARG_WITH(sysroot,
41[ --with-sysroot[=DIR] search for usr/lib et al within DIR],
42[sysroot=$withval], [sysroot=no])
43
44if test "$sysroot" = "yes"; then
45 sysroot='${exec_prefix}/${target_alias}/sys-root'
46elif test "$sysroot" = "no"; then
47 sysroot=
48fi
49
50sysroot_relocatable=0
51if test -n "$sysroot"; then
7a34932b 52 case "$sysroot" in
ad2d6943
ILT
53 "${prefix}" | "${prefix}/"* | \
54 "${exec_prefix}" | "${exec_prefix}/"* | \
55 '${prefix}' | '${prefix}/'*| \
56 '${exec_prefix}' | '${exec_prefix}/'*)
57 sysroot_relocatable=1
58 ;;
59 esac
60fi
61
62AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
63 [System root for target files])
64AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
65 [Whether the system root can be relocated])
66
4fda8867
NC
67dnl "install_as_default" is true if the linker to be installed as the
68dnl default linker, ld.
69dnl "installed_linker" is the installed gold linker name.
c7791212 70
f2a6224b 71installed_linker=ld.gold
c7791212
NC
72AC_ARG_ENABLE(gold,
73[[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
74[case "${enableval}" in
f2a6224b
L
75 default)
76 install_as_default=yes
77 ;;
78 yes)
79 if test x${enable_ld} = xno; then
c7791212
NC
80 install_as_default=yes
81 fi
4fda8867
NC
82 ;;
83 esac],
f2a6224b 84[install_as_default=no])
4fda8867
NC
85AC_SUBST(install_as_default)
86AC_SUBST(installed_linker)
87
fe9a4c12
ILT
88dnl For now threads are a configure time option.
89AC_ARG_ENABLE([threads],
90[ --enable-threads multi-threaded linking],
91[case "${enableval}" in
92 yes | "") threads=yes ;;
93 no) threads=no ;;
94 *) threads=yes ;;
95 esac],
96[threads=no])
97if test "$threads" = "yes"; then
98 AC_DEFINE(ENABLE_THREADS, 1,
99 [Define to do multi-threaded linking])
100fi
101AM_CONDITIONAL(THREADS, test "$threads" = "yes")
89fc3421
CC
102
103AC_ARG_ENABLE([plugins],
104[ --enable-plugins linker plugins],
105[case "${enableval}" in
106 yes | "") plugins=yes ;;
107 no) plugins=no ;;
108 *) plugins=yes ;;
109 esac],
110[plugins=no])
111if test "$plugins" = "yes"; then
112 AC_DEFINE(ENABLE_PLUGINS, 1,
113 [Define to enable linker plugins])
114fi
115AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
fe9a4c12 116
6b1edb94
L
117# Decide if -z relro should be enabled in ELF linker by default.
118ac_default_ld_z_relro=unset
119# Provide a configure time option to override our default.
120AC_ARG_ENABLE(relro,
121 AS_HELP_STRING([--enable-relro],
122 [enable -z relro in ELF linker by default]),
123[case "${enableval}" in
124 yes) ac_default_ld_z_relro=1 ;;
125 no) ac_default_ld_z_relro=0 ;;
126esac])dnl
127if test "${ac_default_ld_z_relro}" = unset; then
128 ac_default_ld_z_relro=1
129fi
130AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_RELRO,
131 $ac_default_ld_z_relro,
132 [Define to 1 if you want to enable -z relro in ELF linker by default.])
133
193a53d9
ILT
134AC_ARG_ENABLE([targets],
135[ --enable-targets alternative target configurations],
136[case "${enableval}" in
137 yes | "")
138 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
139 ;;
140 no)
141 enable_targets=
142 ;;
143 *)
144 enable_targets=$enableval
145 ;;
146esac],
147[# For now, enable all targets by default
148 enable_targets=all
149])
150
151# Canonicalize the enabled targets.
152if test -n "$enable_targets"; then
153 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
154 result=`$ac_config_sub $targ 2>/dev/null`
155 if test -n "$result"; then
156 canon_targets="$canon_targets $result"
157 else
158 # Permit unrecognized target names, like "all".
159 canon_targets="$canon_targets $targ"
160 fi
161 done
162fi
163
2760f24c
RG
164# Decide which "--hash-style" to use by default
165# Provide a configure time option to override our default.
166AC_ARG_ENABLE([default-hash-style],
167AS_HELP_STRING([--enable-default-hash-style={sysv,gnu,both}],
168 [use this default hash style]),
169[case "${enable_default_hash_style}" in
170 sysv | gnu | both) ;;
171 *) AC_MSG_ERROR([bad value ${enable_default_hash_style} for enable-default-hash-style option]) ;;
172esac],
173[case "${target}" in
174 # Enable gnu hash only on GNU targets, but not mips
175 mips*-*-*) enable_default_hash_style=sysv ;;
176 *-*-gnu* | *-*-linux* | *-*-nacl*) enable_default_hash_style=both ;;
177 *) enable_default_hash_style=sysv ;;
178esac])
179
180AC_DEFINE_UNQUOTED([DEFAULT_HASH_STYLE],
181 ["${enable_default_hash_style}"],
182 [Set the default --hash-style value])
183
193a53d9 184# See which specific instantiations we need.
6df6da4a
ILT
185targetobjs=
186all_targets=
fbfba508
ILT
187default_machine=
188default_size=
189default_big_endian=
36959681 190default_osabi=ELFOSABI_NONE
fbfba508
ILT
191targ_32_little=
192targ_32_big=
193targ_64_little=
194targ_64_big=
193a53d9 195for targ in $target $canon_targets; do
193a53d9
ILT
196 if test "$targ" = "all"; then
197 targ_32_little=yes
198 targ_32_big=yes
199 targ_64_little=yes
200 targ_64_big=yes
6df6da4a 201 all_targets=yes
193a53d9 202 else
fbfba508
ILT
203 . ${srcdir}/configure.tgt
204
205 if test "$targ_obj" = "UNKNOWN"; then
6df6da4a 206 AC_MSG_ERROR("unsupported target $targ")
fbfba508
ILT
207 else
208 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
60b2b4e7
ILT
209 if test "$targ_extra_obj" != ""; then
210 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
211 fi
f5314dd5
DM
212 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
213 if test "$targ_big_endian" = "true" \
214 -o "$targ_extra_big_endian" = "true"; then
215 targ_32_big=yes
216 fi
217 if test "$targ_big_endian" = "false" \
218 -o "$targ_extra_big_endian" = "false"; then
219 targ_32_little=yes
220 fi
221 fi
222 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
223 if test "$targ_big_endian" = "true" \
224 -o "$targ_extra_big_endian" = "true"; then
225 targ_64_big=yes
226 fi
227 if test "$targ_big_endian" = "false" \
228 -o "$targ_extra_big_endian" = "false"; then
229 targ_64_little=yes
230 fi
fbfba508
ILT
231 fi
232
233 if test "$target" = "$targ"; then
234 default_machine=$targ_machine
235 default_size=$targ_size
236 default_big_endian=$targ_big_endian
36959681 237 default_osabi=$targ_osabi
364c7fa5 238
053a4d68 239 AM_CONDITIONAL(DEFAULT_TARGET_AARCH64, test "$targ_obj" = "aarch64")
364c7fa5
ILT
240 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
241 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
242 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
243 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
e79a4bad 244 AM_CONDITIONAL(DEFAULT_TARGET_S390, test "$targ_obj" = "s390")
4fc1b9d4
L
245 target_x86_64=no
246 target_x32=no
247 if test "$targ_obj" = "x86_64"; then
248 case "$target" in
249 x86_64*-linux-gnux32)
250 target_x32=yes
be66981e 251 default_size=32
4fc1b9d4
L
252 ;;
253 *)
254 target_x86_64=yes
255 ;;
256 esac
257 fi
258 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$target_x86_64" = "yes")
259 AM_CONDITIONAL(DEFAULT_TARGET_X32, test "$target_x32" = "yes")
ad961eab
L
260 AM_CONDITIONAL(DEFAULT_TARGET_X86_64_OR_X32,
261 test "$target_x86_64" = "yes" -o "$target_x32" = "yes")
5c0b3823 262 AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx")
9810d34d 263 AM_CONDITIONAL(DEFAULT_TARGET_MIPS, test "$targ_obj" = "mips")
9df9de2c
CC
264 DEFAULT_TARGET=${targ_obj}
265 AC_SUBST(DEFAULT_TARGET)
fbfba508
ILT
266 fi
267 fi
193a53d9
ILT
268 fi
269done
270
6cfaf60b 271# Remove any duplicates.
9109c078
ILT
272to=""
273for t in $targetobjs; do
274 case " $to " in
275 *" $t "*) ;;
276 *) to="$to $t" ;;
277 esac
278done
279targetobjs=$to
6cfaf60b 280
193a53d9
ILT
281if test -n "$targ_32_little"; then
282 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
283 [Define to support 32-bit little-endian targets])
284fi
285if test -n "$targ_32_big"; then
286 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
287 [Define to support 32-bit big-endian targets])
288fi
289if test -n "$targ_64_little"; then
290 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
291 [Define to support 64-bit little-endian targets])
292fi
293if test -n "$targ_64_big"; then
294 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
295 [Define to support 64-bit big-endian targets])
296fi
297
6df6da4a
ILT
298if test -n "$all_targets"; then
299 TARGETOBJS='$(ALL_TARGETOBJS)'
300else
301 TARGETOBJS="$targetobjs"
302fi
303AC_SUBST(TARGETOBJS)
304
fbfba508
ILT
305AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
306 [Default machine code])
307AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
308 [Default size (32 or 64)])
309AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
310 [Default big endian (true or false)])
36959681
ILT
311AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
312 [Default OSABI code])
fbfba508 313
3f3cddf1
ILT
314AC_ARG_WITH(lib-path,
315[ --with-lib-path=dir1:dir2... set default LIB_PATH],
316[case "$withval" in
317 yes) LIB_PATH='"/lib:/usr/lib"' ;;
318 no) LIB_PATH='""' ;;
319 *) LIB_PATH='"'"$withval"'"' ;;
320 esac],
321[LIB_PATH='"::DEFAULT::"'])
322AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
323 [Default library search path])
324if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
325 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
326fi
327
ebb300b2
CC
328AC_CHECK_TOOL(NM, nm)
329
bae7f79e
ILT
330AC_PROG_CC
331AC_PROG_CXX
dbe717ef 332AC_PROG_YACC
5a6f7e2d 333AC_PROG_RANLIB
bae7f79e 334AC_PROG_INSTALL
537b5f51 335AC_PROG_LN_S
fa99aa09
ILT
336
337AC_GNU_SOURCE
338
bae7f79e
ILT
339ZW_GNU_GETTEXT_SISTER_DIR
340AM_PO_SUBDIRS
341
92e059d8
ILT
342AC_C_BIGENDIAN
343
bae7f79e
ILT
344AC_EXEEXT
345
537b5f51
ILT
346AM_CONDITIONAL(NATIVE_LINKER,
347 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
348AM_CONDITIONAL(GCC, test "$GCC" = yes)
349
eb373049
ILT
350AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
351 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
352
328c7c2f
ILT
353dnl Test for whether static linking is supported. Some systems do not
354dnl install static libraries. This only affects the set of tests that
355dnl we run.
356AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
dd7af074 357[LDFLAGS_hold=$LDFLAGS
328c7c2f 358LDFLAGS="$LDFLAGS -static"
dd7af074 359AC_LINK_IFELSE([
328c7c2f 360AC_LANG_PROGRAM([[void f() { }]])],
dd7af074
ILT
361[gold_cv_lib_static=yes], [gold_cv_lib_static=no])
362LDFLAGS=$LDFLAGS_hold])
328c7c2f
ILT
363AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
364
63402fe4
ILT
365dnl Some architectures do not support taking pointers of functions
366dnl defined in shared libraries except in -fPIC mode. We need to
367dnl tell the unittest framework if we're compiling for one of those
368dnl targets, so it doesn't try to run the tests that do that.
369AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
370 case $target_cpu in
864a1b56 371 powerpc*) false;;
63402fe4 372 x86_64) false;;
11936fb1 373 sparc64) false;;
e79a4bad 374 s390x) false;;
63402fe4
ILT
375 *) true;;
376 esac])
377
084e2665
ILT
378dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
379dnl only available in gcc 4.1.
380AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
381[AC_COMPILE_IFELSE([
382#if !defined __GNUC__
383error
384#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
385error
386#endif
387], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
388
24482ca0
L
389save_CFLAGS="$CFLAGS"
390CFLAGS="$CFLAGS -mcmodel=medium"
391AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
392CFLAGS="$save_CFLAGS"
8a5e3e08 393dnl Whether we can test -mcmodel=medium.
084e2665 394AM_CONDITIONAL(MCMODEL_MEDIUM,
24482ca0 395[test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
8a5e3e08 396
2b64b551
RM
397AC_CACHE_CHECK([whether $CC supports -fmerge-constants],
398 [gold_cv_merge_constants], [
399save_CFLAGS="$CFLAGS"
400CFLAGS="$CFLAGS -fmerge-constants"
401AC_COMPILE_IFELSE([const char *s = "foo";],
2500c017
CC
402 [gold_cv_merge_constants=yes],
403 [gold_cv_merge_constants=no])
2b64b551
RM
404CFLAGS="$save_CFLAGS"])
405AC_SUBST([MERGE_CONSTANTS_FLAG])
406AS_IF([test "$gold_cv_merge_constants" = yes],
407 [MERGE_CONSTANTS_FLAG=-fmerge-constants],
408 [MERGE_CONSTANTS_FLAG=])
409
6eee141f 410dnl Test for __thread support.
097ec620
ILT
411AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
412[AC_COMPILE_IFELSE([__thread int i = 1;],
413[gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
414
415AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
416
417dnl On GNU/Linux TLS in static programs only works when using glibc
418dnl 2.4 or later.
419AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
420[AC_COMPILE_IFELSE([
421#include <features.h>
422#if !defined __GLIBC__
423error
424#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
425error
426#endif
427], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
428
429AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
6eee141f 430
155a0dd7
ILT
431dnl Test for #pragma omp threadprivate
432AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
433[save_CFLAGS="$CFLAGS"
434CFLAGS="$CFLAGS -fopenmp"
435AC_COMPILE_IFELSE([
436#include <omp.h>
437int i;
438#pragma omp threadprivate (i)
439], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
440CFLAGS="$save_CFLAGS"])
441if test "$gold_cv_c_threadprivate" = "yes"; then
442 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
443 [Define if compiler supports #pragma omp threadprivate])
444fi
445AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
446
c2b45e22 447dnl Test for the -ftls-dialect=gnu2 option.
13323c49
RM
448dnl Use -Werror in case of compilers that make unknown -m options warnings.
449dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
450dnl gets set later by default Autoconf magic to include -Werror. (We are
451dnl assuming here that there is no compiler that groks -mtls-dialect=gnu2
452dnl but does not grok -Werror.)
c2b45e22 453save_CFLAGS="$CFLAGS"
13323c49 454CFLAGS="$CFLAGS -Werror -fpic -mtls-dialect=gnu2"
63887f3d
L
455AC_COMPILE_IFELSE([
456__thread int i;
457void foo (void)
458{
459 i = 10;
460}
461], [have_tls_gnu2=yes], [have_tls_gnu2=no])
c2b45e22
CC
462CFLAGS="$save_CFLAGS"
463AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
464
465dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
b0074644
ILT
466dnl only with glibc 2.9 or later.
467AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
c2b45e22
CC
468[AC_COMPILE_IFELSE([
469#include <features.h>
470#if !defined __GLIBC__
471error
b0074644 472#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
c2b45e22
CC
473error
474#endif
b0074644 475], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
c2b45e22 476
b0074644 477AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
c2b45e22 478
1d1f116d
CD
479dnl Test for the -frandom-seed option.
480AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
481[save_CFLAGS="$CFLAGS"
482CFLAGS="$CFLAGS -frandom-seed=foo"
483AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
484[gold_cv_c_random_seed=no])
485CFLAGS="$save_CFLAGS"])
486if test "$gold_cv_c_random_seed" = "yes"; then
487 # In Makefile, '$@' will be expanded to be the name of the file
488 # being built, providing a unique seed for each file.
489 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
490fi
491AC_SUBST(RANDOM_SEED_CFLAGS)
492
7223e9ca 493dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
d0773f31 494dnl 2.11 or later, and by binutils 2.20.1 or later.
ebb300b2
CC
495AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
496[save_LDFLAGS="$LDFLAGS"
497LDFLAGS="$LDFLAGS -static"
498AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7223e9ca
ILT
499#include <features.h>
500#if !defined __GLIBC__
501error
502#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
503error
504#endif
ebb300b2
CC
505void func (void) { }
506void invoke (void);
507__asm__(".type invoke, %gnu_indirect_function");
508typedef void (*funcptr) (void);
509funcptr dispatch (void) __asm__ ("invoke");
510funcptr dispatch (void) { return &func; }]],
511[[invoke();]])
512], [
513if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
514 gold_cv_lib_glibc_ifunc=both
515else
516 gold_cv_lib_glibc_ifunc=dyn
517fi], [gold_cv_lib_glibc_ifunc=no])
518LDFLAGS="$save_LDFLAGS"])
7223e9ca 519
ebb300b2
CC
520AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
521AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
7223e9ca 522
bae7f79e
ILT
523AM_BINUTILS_WARNINGS
524
2ea97941 525WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
bae7f79e
ILT
526AC_SUBST(WARN_CXXFLAGS)
527
dc87f620
ILT
528AC_ARG_WITH(gold-ldflags,
529[ --with-gold-ldflags=FLAGS additional link flags for gold],
530[if test "$withval" = "no" -o "$withval" = "yes"; then
531 GOLD_LDFLAGS=
532 else
533 GOLD_LDFLAGS=$withval
534 fi],
535[GOLD_LDFLAGS=])
536AC_SUBST(GOLD_LDFLAGS)
537
538AC_ARG_WITH(gold-ldadd,
539[ --with-gold-ldadd=LIBS additional libraries for gold],
540[if test "$withval" = "no" -o "$withval" = "yes"; then
541 GOLD_LDADD=
542 else
543 GOLD_LDADD=$withval
544 fi],
545[GOLD_LDADD=])
546AC_SUBST(GOLD_LDADD)
547
bae7f79e
ILT
548dnl Force support for large files by default. This may need to be
549dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
494e05f4
ILT
550LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
551AC_SUBST(LFS_CFLAGS)
bae7f79e 552
88597d34
ILT
553AC_CHECK_HEADERS(sys/mman.h)
554AC_CHECK_FUNCS(chsize mmap)
555AC_REPLACE_FUNCS(pread ftruncate ffsll)
556
557AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
558[AC_LINK_IFELSE([
559AC_LANG_PROGRAM([[
560#include <sys/mman.h>
561void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
562]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
563if test "$gold_cv_lib_mremap_maymove" = "yes"; then
564 AC_DEFINE(HAVE_MREMAP, 1,
565 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
566else
567 AC_LIBOBJ(mremap)
568fi
82dcae9d 569
9a0910c3 570# Link in zlib if we can. This allows us to write compressed sections.
ae2eea65 571AM_ZLIB
9a0910c3 572
0639a6f6
ILT
573dnl We have to check these in C, not C++, because autoconf generates
574dnl tests which have no type information, and current glibc provides
575dnl multiple declarations of functions like basename when compiling
576dnl with C++.
577AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
578
ae447ddd
CC
579dnl Check if gcc supports the -gpubnames option.
580dnl Use -Werror in case of compilers that make unknown -g options warnings.
581dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
582dnl gets set later by default Autoconf magic to include -Werror. (We are
583dnl assuming here that there is no compiler that groks -gpubnames
584dnl but does not grok -Werror.)
585save_CFLAGS="$CFLAGS"
586CFLAGS="$CFLAGS -Werror -gpubnames"
587AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
588CFLAGS="$save_CFLAGS"
589AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
590
591dnl Check if gcc supports the -fno-use-linker-plugin option.
592save_CFLAGS="$CFLAGS"
593CFLAGS="$CFLAGS -Werror -fno-use-linker-plugin"
594AC_COMPILE_IFELSE([int i;], [have_no_use_linker_plugin=yes], [have_no_use_linker_plugin=no])
595CFLAGS="$save_CFLAGS"
596AM_CONDITIONAL(HAVE_NO_USE_LINKER_PLUGIN, test "$have_no_use_linker_plugin" = "yes")
597
54dc6425 598AC_LANG_PUSH(C++)
d288e464 599
8356f2d0 600AC_CHECK_HEADERS(unordered_set unordered_map)
54dc6425
ILT
601AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
602AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
15d5fa16 603AC_CHECK_HEADERS(byteswap.h)
0bf402d5
ILT
604
605dnl When plugins enabled dynamic loader interface is required. Check headers
6632e8cc 606dnl which may provide this interface. Add the necessary library to link.
0bf402d5 607AC_CHECK_HEADERS(windows.h)
6632e8cc
CC
608AC_CHECK_HEADERS(dlfcn.h)
609AC_SEARCH_LIBS(dlopen, [dl dld])
610case "$ac_cv_search_dlopen" in
611 no*) DLOPEN_LIBS="";;
612 *) DLOPEN_LIBS="$ac_cv_search_dlopen";;
613esac
0bf402d5
ILT
614AC_SUBST(DLOPEN_LIBS)
615
7c0640fa 616AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
3d857b98 617AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
d288e464 618
40fde488
CD
619# Use of ::std::tr1::unordered_map::rehash causes undefined symbols
620# at link time with some versions of GCC.
621AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
622[gold_cv_unordered_map_rehash],
623[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
624#include <tr1/unordered_map>
625void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
626]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
627if test "$gold_cv_unordered_map_rehash" = "yes"; then
628 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
629 [Define if ::std::tr1::unordered_map::rehash is usable])
630fi
631
81c82a68
ILT
632# Use of tr1/unordered_map with off_t as a key is not supported on GCC
633# 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type.
634AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
635[gold_cv_hash_off_t],
636[CXXFLAGS_hold=$CXXFLAGS
637CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
638AC_COMPILE_IFELSE([
639#include <sys/types.h>
640#include <tr1/unordered_map>
641std::tr1::hash<off_t> h;
642],
643[gold_cv_hash_off_t=yes],
644[gold_cv_hash_off_t=no])
26e4ef59 645CXXFLAGS=$CXXFLAGS_hold])
81c82a68
ILT
646if test "$gold_cv_hash_off_t" = "yes"; then
647 AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1,
648 [Define if std::tr1::hash<off_t> is usable])
649fi
650
04bf7072
ILT
651# gcc 4.3.0 doesn't recognize the printf attribute on a template
652# function. Check for that. This is gcc bug 35546. This test can
653# probably be removed after the bug has been fixed for a while.
654AC_CACHE_CHECK([whether we can use attributes with template functions],
655[gold_cv_template_attribute],
656[AC_COMPILE_IFELSE([
657template<typename T> extern void foo(const char*, ...)
658 __attribute__ ((__format__ (__printf__, 1, 2)));
659template<typename T> void foo(const char* format, ...) {}
660void bar() { foo<int>("%s\n", "foo"); }
661], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
662if test "$gold_cv_template_attribute" = "yes"; then
663 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
664 [Define if attributes work on C++ templates])
665fi
666
5d329b7d
ILT
667dnl Check if the system has struct stat::st_mtim.
668AC_CACHE_CHECK([for struct stat::st_mtim.],
669[gold_cv_stat_st_mtim],
670[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
671#include <sys/stat.h>
672long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
673]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
674if test "$gold_cv_stat_st_mtim" = "yes"; then
675 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
676 [Define if struct stat has a field st_mtim with timespec for mtime])
677fi
678
54dc6425
ILT
679AC_LANG_POP(C++)
680
58797674 681AC_CHECK_HEADERS(locale.h)
44350750
NC
682AC_CHECK_FUNCS(setlocale)
683AM_LC_MESSAGES
684
bae7f79e
ILT
685AM_MAINTAINER_MODE
686
5a6f7e2d 687AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)