]> Git Repo - binutils.git/blob - gold/configure.ac
Fix gold to use mallinfo2 if available instead of deprecated mallinfo.
[binutils.git] / gold / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2 dnl
3 dnl   Copyright (C) 2006-2021 Free Software Foundation, Inc.
4 dnl
5 dnl This file is free software; you can redistribute it and/or modify
6 dnl it under the terms of the GNU General Public License as published by
7 dnl the Free Software Foundation; either version 3 of the License, or
8 dnl (at your option) any later version.
9 dnl
10 dnl This program is distributed in the hope that it will be useful,
11 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 dnl GNU General Public License for more details.
14 dnl
15 dnl You should have received a copy of the GNU General Public License
16 dnl along with this program; see the file COPYING3.  If not see
17 dnl <http://www.gnu.org/licenses/>.
18 dnl
19
20 AC_INIT(gold, 0.1)
21 AC_CONFIG_SRCDIR(gold.cc)
22
23 AC_CANONICAL_TARGET
24
25 AM_INIT_AUTOMAKE([no-dist parallel-tests])
26
27 AM_CONFIG_HEADER(config.h:config.in)
28
29 AC_USE_SYSTEM_EXTENSIONS
30
31 # PR 14072
32 AH_VERBATIM([00_CONFIG_H_CHECK],
33 [/* Check that config.h is #included before system headers
34    (this works only for glibc, but that should be enough).  */
35 #if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__)
36 #  error config.h must be #included before system headers
37 #endif
38 #define __CONFIG_H__ 1])
39
40 AC_ARG_WITH(sysroot,
41 [  --with-sysroot[=DIR]    search for usr/lib et al within DIR],
42 [sysroot=$withval], [sysroot=no])
43
44 if test "$sysroot" = "yes"; then
45   sysroot='${exec_prefix}/${target_alias}/sys-root'
46 elif test "$sysroot" = "no"; then
47   sysroot=
48 fi
49
50 sysroot_relocatable=0
51 if test -n "$sysroot"; then
52   case "$sysroot" in
53     "${prefix}" | "${prefix}/"* | \
54     "${exec_prefix}" | "${exec_prefix}/"* | \
55     '${prefix}' | '${prefix}/'*| \
56     '${exec_prefix}' | '${exec_prefix}/'*)
57       sysroot_relocatable=1
58       ;;
59   esac
60 fi
61
62 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
63   [System root for target files])
64 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
65   [Whether the system root can be relocated])
66
67 dnl "install_as_default" is true if the linker to be installed as the
68 dnl default linker, ld.
69 dnl "installed_linker" is the installed gold linker name.
70
71 installed_linker=ld.gold
72 AC_ARG_ENABLE(gold,
73 [[  --enable-gold[=ARG]     build gold [ARG={default,yes,no}]]],
74 [case "${enableval}" in
75  default)
76    install_as_default=yes
77    ;;
78  yes)
79    if test x${enable_ld} = xno; then
80      install_as_default=yes
81    fi
82    ;;
83  esac],
84 [install_as_default=no])
85 AC_SUBST(install_as_default)
86 AC_SUBST(installed_linker)
87
88 AC_PLUGINS
89 if test "$plugins" = "yes"; then
90   AC_DEFINE(ENABLE_PLUGINS, 1,
91             [Define to enable linker plugins])
92 fi
93 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
94
95 # Decide if -z relro should be enabled in ELF linker by default.
96 ac_default_ld_z_relro=unset
97 # Provide a configure time option to override our default.
98 AC_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 ;;
104 esac])dnl
105 if test "${ac_default_ld_z_relro}" = unset; then
106   ac_default_ld_z_relro=1
107 fi
108 AC_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
112 AC_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     ;;
124 esac],
125 [# For now, enable all targets by default
126  enable_targets=all
127 ])
128
129 # Canonicalize the enabled targets.
130 if 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
140 fi
141
142 # Decide which "--hash-style" to use by default
143 # Provide a configure time option to override our default.
144 AC_ARG_ENABLE([default-hash-style],
145 AS_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]) ;;
150 esac],
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 ;;
156 esac])
157
158 AC_DEFINE_UNQUOTED([DEFAULT_HASH_STYLE],
159   ["${enable_default_hash_style}"],
160   [Set the default --hash-style value])
161
162 # See which specific instantiations we need.
163 targetobjs=
164 all_targets=
165 default_machine=
166 default_size=
167 default_big_endian=
168 default_osabi=ELFOSABI_NONE
169 targ_32_little=
170 targ_32_big=
171 targ_64_little=
172 targ_64_big=
173 for targ in $target $canon_targets; do
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
179     all_targets=yes
180   else
181     . ${srcdir}/configure.tgt
182
183     if test "$targ_obj" = "UNKNOWN"; then
184       AC_MSG_ERROR("unsupported target $targ")
185     else
186       targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
187       if test "$targ_extra_obj" != ""; then
188         targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
189       fi
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
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
215         default_osabi=$targ_osabi
216
217         AM_CONDITIONAL(DEFAULT_TARGET_AARCH64, test "$targ_obj" = "aarch64")
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")
222         AM_CONDITIONAL(DEFAULT_TARGET_S390, test "$targ_obj" = "s390")
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
229             default_size=32
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")
238         AM_CONDITIONAL(DEFAULT_TARGET_X86_64_OR_X32,
239                        test "$target_x86_64" = "yes" -o "$target_x32" = "yes")
240         AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx")
241         AM_CONDITIONAL(DEFAULT_TARGET_MIPS, test "$targ_obj" = "mips")
242         DEFAULT_TARGET=${targ_obj}
243         AC_SUBST(DEFAULT_TARGET)
244       fi
245     fi
246   fi
247 done
248
249 # Remove any duplicates.
250 to=""
251 for t in $targetobjs; do
252   case " $to " in
253   *" $t "*) ;;
254   *) to="$to $t" ;;
255   esac
256 done
257 targetobjs=$to
258
259 if test -n "$targ_32_little"; then
260   AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
261               [Define to support 32-bit little-endian targets])
262 fi
263 if test -n "$targ_32_big"; then
264   AC_DEFINE(HAVE_TARGET_32_BIG, 1,
265               [Define to support 32-bit big-endian targets])
266 fi
267 if test -n "$targ_64_little"; then
268   AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
269               [Define to support 64-bit little-endian targets])
270 fi
271 if test -n "$targ_64_big"; then
272   AC_DEFINE(HAVE_TARGET_64_BIG, 1,
273               [Define to support 64-bit big-endian targets])
274 fi
275
276 if test -n "$all_targets"; then
277   TARGETOBJS='$(ALL_TARGETOBJS)'
278 else
279   TARGETOBJS="$targetobjs"
280 fi
281 AC_SUBST(TARGETOBJS)
282
283 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
284                    [Default machine code])
285 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
286                    [Default size (32 or 64)])
287 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
288                    [Default big endian (true or false)])
289 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
290                    [Default OSABI code])
291
292 AC_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::"'])
300 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
301                    [Default library search path])
302 if 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])
304 fi
305
306 AC_CHECK_TOOL(NM, nm)
307
308 AC_PROG_CC
309 AC_PROG_CXX
310 AC_PROG_YACC
311 AC_PROG_RANLIB
312 AC_PROG_INSTALL
313 AC_PROG_LN_S
314
315 AC_GNU_SOURCE
316
317 ZW_GNU_GETTEXT_SISTER_DIR
318 AM_PO_SUBDIRS
319
320 AC_C_BIGENDIAN
321
322 AC_EXEEXT
323
324 AM_CONDITIONAL(NATIVE_LINKER,
325   test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
326 AM_CONDITIONAL(GCC, test "$GCC" = yes)
327
328 AM_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
331 dnl Test for whether static linking is supported.  Some systems do not
332 dnl install static libraries.  This only affects the set of tests that
333 dnl we run.
334 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
335 [LDFLAGS_hold=$LDFLAGS
336 LDFLAGS="$LDFLAGS -static"
337 AC_LINK_IFELSE([
338 AC_LANG_PROGRAM([[void f() { }]])],
339 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
340 LDFLAGS=$LDFLAGS_hold])
341 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
342
343 dnl Some architectures do not support taking pointers of functions
344 dnl defined in shared libraries except in -fPIC mode.  We need to
345 dnl tell the unittest framework if we're compiling for one of those
346 dnl targets, so it doesn't try to run the tests that do that.
347 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
348   case $target_cpu in
349     powerpc*) false;;
350     x86_64) false;;
351     sparc64) false;;
352     s390x) false;;
353     *) true;;
354   esac])
355
356 dnl Test for gcc 4.1 or later.  Full support for -mcmodel=medium is
357 dnl only available in gcc 4.1.
358 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
359 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([
360 #if !defined __GNUC__
361 error
362 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
363 error
364 #endif
365 ])], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
366
367 save_CFLAGS="$CFLAGS"
368 CFLAGS="$CFLAGS -mcmodel=medium"
369 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
370 CFLAGS="$save_CFLAGS"
371 dnl Whether we can test -mcmodel=medium.
372 AM_CONDITIONAL(MCMODEL_MEDIUM,
373 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
374
375 dnl Test for gcc 9 or later.  Some incremental tests fail with GCC 9 or
376 dnl later.
377 AC_CACHE_CHECK([for gcc >= 9], [gold_cv_prog_gcc9],
378 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([
379 #if !defined __GNUC__ || __GNUC__ < 9
380 error
381 #endif
382 ])], [gold_cv_prog_gcc9=yes], [gold_cv_prog_gcc9=no])])
383 AM_CONDITIONAL(GCC9, [test "$gold_cv_prog_gcc9" = "yes"])
384
385 dnl Test for -fcf-protection on x86-64.  Some incremental tests fail with
386 dnl -fcf-protection.
387 AC_CACHE_CHECK([for -fcf-protection], [gold_cv_cflags_cf_protection],
388 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([
389 #if !defined __x86_64__ || !defined __CET__
390 error
391 #endif
392 ])], [gold_cv_cflags_cf_protection=yes], [gold_cv_cflags_cf_protection=no])])
393 AM_CONDITIONAL(CFLAGS_CF_PROTECTION, [test "$gold_cv_cflags_cf_protection" = "yes"])
394
395 AC_CACHE_CHECK([whether $CC supports -fmerge-constants],
396                [gold_cv_merge_constants], [
397 save_CFLAGS="$CFLAGS"
398 CFLAGS="$CFLAGS -fmerge-constants"
399 AC_COMPILE_IFELSE([AC_LANG_SOURCE([const char *s = "foo";])],
400                   [gold_cv_merge_constants=yes],
401                   [gold_cv_merge_constants=no])
402 CFLAGS="$save_CFLAGS"])
403 AC_SUBST([MERGE_CONSTANTS_FLAG])
404 AS_IF([test "$gold_cv_merge_constants" = yes],
405       [MERGE_CONSTANTS_FLAG=-fmerge-constants],
406       [MERGE_CONSTANTS_FLAG=])
407
408 dnl Test for __thread support.
409 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
410 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([__thread int i = 1;])],
411 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
412
413 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
414
415 dnl On GNU/Linux TLS in static programs only works when using glibc
416 dnl 2.4 or later.
417 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
418 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([
419 #include <features.h>
420 #if !defined __GLIBC__
421 error
422 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
423 error
424 #endif
425 ])], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
426
427 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
428
429 dnl Test for #pragma omp threadprivate
430 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
431 [save_CFLAGS="$CFLAGS"
432 CFLAGS="$CFLAGS -fopenmp"
433 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
434 #include <omp.h>
435 int i;
436 #pragma omp threadprivate (i)
437 ])], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
438 CFLAGS="$save_CFLAGS"])
439 if test "$gold_cv_c_threadprivate" = "yes"; then
440   AC_DEFINE(HAVE_OMP_SUPPORT, 1,
441             [Define if compiler supports #pragma omp threadprivate])
442 fi
443 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
444
445 dnl Test for the -ftls-dialect=gnu2 option.
446 dnl Use -Werror in case of compilers that make unknown -m options warnings.
447 dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
448 dnl gets set later by default Autoconf magic to include -Werror.  (We are
449 dnl assuming here that there is no compiler that groks -mtls-dialect=gnu2
450 dnl but does not grok -Werror.)
451 save_CFLAGS="$CFLAGS"
452 CFLAGS="$CFLAGS -Werror -fpic -mtls-dialect=gnu2"
453 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
454 __thread int i;
455 void foo (void)
456 {
457   i = 10;
458 }
459 ])], [have_tls_gnu2=yes], [have_tls_gnu2=no])
460 CFLAGS="$save_CFLAGS"
461 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
462
463 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
464 dnl only with glibc 2.9 or later.
465 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
466 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([
467 #include <features.h>
468 #if !defined __GLIBC__
469 error
470 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
471 error
472 #endif
473 ])], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
474
475 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
476
477 dnl Test for the -frandom-seed option.
478 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
479 [save_CFLAGS="$CFLAGS"
480 CFLAGS="$CFLAGS -frandom-seed=foo"
481 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [gold_cv_c_random_seed=yes],
482 [gold_cv_c_random_seed=no])
483 CFLAGS="$save_CFLAGS"])
484 if 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=\$@
488 fi
489 AC_SUBST(RANDOM_SEED_CFLAGS)
490
491 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
492 dnl 2.11 or later, and by binutils 2.20.1 or later.
493 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
494 [save_LDFLAGS="$LDFLAGS"
495 LDFLAGS="$LDFLAGS -static"
496 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
497 #include <features.h>
498 #if !defined __GLIBC__
499 error
500 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
501 error
502 #endif
503 void func (void) { }
504 void invoke (void);
505 __asm__(".type invoke, %gnu_indirect_function");
506 typedef void (*funcptr) (void);
507 funcptr dispatch (void) __asm__ ("invoke");
508 funcptr dispatch (void) { return &func; }]],
509 [[invoke();]])
510 ], [
511 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
512   gold_cv_lib_glibc_ifunc=both
513 else
514   gold_cv_lib_glibc_ifunc=dyn
515 fi], [gold_cv_lib_glibc_ifunc=no])
516 LDFLAGS="$save_LDFLAGS"])
517
518 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
519 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
520
521 AM_BINUTILS_WARNINGS
522
523 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
524 AC_SUBST(WARN_CXXFLAGS)
525
526 AC_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=])
534 AC_SUBST(GOLD_LDFLAGS)
535
536 AC_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=])
544 AC_SUBST(GOLD_LDADD)
545
546 dnl Force support for large files by default.  This may need to be
547 dnl host dependent.  If build == host, we can check getconf LFS_CFLAGS.
548 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
549 AC_SUBST(LFS_CFLAGS)
550
551 AC_CHECK_HEADERS(sys/mman.h)
552 AC_CHECK_FUNCS(chsize mmap link)
553 AC_REPLACE_FUNCS(pread ftruncate ffsll)
554
555 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
556 [AC_LINK_IFELSE([
557 AC_LANG_PROGRAM([[
558 #include <sys/mman.h>
559 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
560 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
561 if 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])
564 else
565   AC_LIBOBJ(mremap)
566 fi
567
568 # Link in zlib if we can.  This allows us to write compressed sections.
569 AM_ZLIB
570
571 AC_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
581 if test "$threads" = "yes"; then
582   AX_PTHREAD([threads=yes], AC_MSG_ERROR([pthread not found]))
583 elif test "$threads" = "auto"; then
584   AX_PTHREAD([threads=yes], [threads=no])
585 fi
586
587 if test "$threads" = "yes"; then
588   AC_DEFINE(ENABLE_THREADS, 1,
589             [Define to do multi-threaded linking])
590 fi
591 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
592
593 dnl We have to check these in C, not C++, because autoconf generates
594 dnl tests which have no type information, and current glibc provides
595 dnl multiple declarations of functions like basename when compiling
596 dnl with C++.
597 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
598
599 dnl Check if gcc supports the -gpubnames option.
600 dnl Use -Werror in case of compilers that make unknown -g options warnings.
601 dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
602 dnl gets set later by default Autoconf magic to include -Werror.  (We are
603 dnl assuming here that there is no compiler that groks -gpubnames
604 dnl but does not grok -Werror.)
605 save_CFLAGS="$CFLAGS"
606 CFLAGS="$CFLAGS -Werror -gpubnames"
607 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_pubnames=yes], [have_pubnames=no])
608 CFLAGS="$save_CFLAGS"
609 AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
610
611 dnl Check if gcc supports the -fno-use-linker-plugin option.
612 save_CFLAGS="$CFLAGS"
613 CFLAGS="$CFLAGS -Werror -fno-use-linker-plugin"
614 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_no_use_linker_plugin=yes], [have_no_use_linker_plugin=no])
615 CFLAGS="$save_CFLAGS"
616 AM_CONDITIONAL(HAVE_NO_USE_LINKER_PLUGIN, test "$have_no_use_linker_plugin" = "yes")
617
618 AC_LANG_PUSH(C++)
619
620 AC_CHECK_HEADERS(unordered_set unordered_map)
621 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
622 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
623 AC_CHECK_HEADERS(byteswap.h)
624
625 dnl Check for bswap_{16,32,64}
626 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64], [], [], [[#include <byteswap.h>]])
627
628 dnl When plugins enabled dynamic loader interface is required. Check headers
629 dnl which may provide this interface. Add the necessary library to link.
630 AC_CHECK_HEADERS(windows.h)
631 AC_CHECK_HEADERS(dlfcn.h)
632 AC_SEARCH_LIBS(dlopen, [dl dld])
633 case "$ac_cv_search_dlopen" in
634   no*) DLOPEN_LIBS="";;
635   *)   DLOPEN_LIBS="$ac_cv_search_dlopen";;
636 esac
637 AC_SUBST(DLOPEN_LIBS)
638
639 AC_CHECK_FUNCS(mallinfo mallinfo2 posix_fallocate fallocate readv sysconf times mkdtemp)
640 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
641
642 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
643 # at link time with some versions of GCC.
644 AC_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>
648 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
649 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
650 if 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])
653 fi
654
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.
657 AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
658 [gold_cv_hash_off_t],
659 [CXXFLAGS_hold=$CXXFLAGS
660 CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
661 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
662 #include <sys/types.h>
663 #include <tr1/unordered_map>
664 std::tr1::hash<off_t> h;
665 ])],
666 [gold_cv_hash_off_t=yes],
667 [gold_cv_hash_off_t=no])
668 CXXFLAGS=$CXXFLAGS_hold])
669 if 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])
672 fi
673
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.
677 AC_CACHE_CHECK([whether we can use attributes with template functions],
678 [gold_cv_template_attribute],
679 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([
680 template<typename T> extern void foo(const char*, ...)
681   __attribute__ ((__format__ (__printf__, 1, 2)));
682 template<typename T> void foo(const char* format, ...) {}
683 void bar() { foo<int>("%s\n", "foo"); }
684 ])], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
685 if test "$gold_cv_template_attribute" = "yes"; then
686   AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
687             [Define if attributes work on C++ templates])
688 fi
689
690 dnl Check if the system has struct stat::st_mtim.
691 AC_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>
695 long 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])])
697 if 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])
700 fi
701
702 AC_LANG_POP(C++)
703
704 AC_CHECK_HEADERS(locale.h)
705 AC_CHECK_FUNCS(setlocale)
706 AM_LC_MESSAGES
707
708 AM_MAINTAINER_MODE
709
710 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.063983 seconds and 4 git commands to generate.