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