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