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