* configure.in (AC_CHECK_FUNCS): Add setlocale.
[deliverable/binutils-gdb.git] / gold / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2
3 AC_PREREQ(2.59)
4
5 AC_INIT(gold, 0.1)
6 AC_CONFIG_SRCDIR(gold.cc)
7
8 AC_CANONICAL_TARGET
9
10 AM_INIT_AUTOMAKE([no-dist parallel-tests])
11
12 AM_CONFIG_HEADER(config.h:config.in)
13
14 AC_ARG_WITH(sysroot,
15 [ --with-sysroot[=DIR] search for usr/lib et al within DIR],
16 [sysroot=$withval], [sysroot=no])
17
18 if test "$sysroot" = "yes"; then
19 sysroot='${exec_prefix}/${target_alias}/sys-root'
20 elif test "$sysroot" = "no"; then
21 sysroot=
22 fi
23
24 sysroot_relocatable=0
25 if test -n "$sysroot"; then
26 case "sysroot" in
27 "${prefix}" | "${prefix}/"* | \
28 "${exec_prefix}" | "${exec_prefix}/"* | \
29 '${prefix}' | '${prefix}/'*| \
30 '${exec_prefix}' | '${exec_prefix}/'*)
31 sysroot_relocatable=1
32 ;;
33 esac
34 fi
35
36 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
37 [System root for target files])
38 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
39 [Whether the system root can be relocated])
40
41 dnl "install_as_default" is true if the linker to be installed as the
42 dnl default linker, ld.
43 dnl "installed_linker" is the installed gold linker name.
44
45 default_ld=
46 AC_ARG_ENABLE(ld,
47 [[ --enable-ld[=ARG] build ld [ARG={default,yes,no}]]],
48 [case "${enableval}" in
49 default)
50 default_ld=ld.bfd
51 ;;
52 esac])
53
54 AC_ARG_ENABLE(gold,
55 [[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
56 [case "${enableval}" in
57 yes|default)
58 if test x${default_ld} = x; then
59 install_as_default=yes
60 fi
61 installed_linker=ld.gold
62 ;;
63 no)
64 ;;
65 *)
66 AC_MSG_ERROR([invalid --enable-gold argument])
67 ;;
68 esac],
69 [install_as_default=no
70 installed_linker=ld.gold])
71 AC_SUBST(install_as_default)
72 AC_SUBST(installed_linker)
73
74 dnl For now threads are a configure time option.
75 AC_ARG_ENABLE([threads],
76 [ --enable-threads multi-threaded linking],
77 [case "${enableval}" in
78 yes | "") threads=yes ;;
79 no) threads=no ;;
80 *) threads=yes ;;
81 esac],
82 [threads=no])
83 if test "$threads" = "yes"; then
84 AC_DEFINE(ENABLE_THREADS, 1,
85 [Define to do multi-threaded linking])
86 fi
87 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
88
89 AC_ARG_ENABLE([plugins],
90 [ --enable-plugins linker plugins],
91 [case "${enableval}" in
92 yes | "") plugins=yes ;;
93 no) plugins=no ;;
94 *) plugins=yes ;;
95 esac],
96 [plugins=no])
97 if test "$plugins" = "yes"; then
98 AC_DEFINE(ENABLE_PLUGINS, 1,
99 [Define to enable linker plugins])
100 fi
101 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
102
103 AC_ARG_ENABLE([targets],
104 [ --enable-targets alternative target configurations],
105 [case "${enableval}" in
106 yes | "")
107 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
108 ;;
109 no)
110 enable_targets=
111 ;;
112 *)
113 enable_targets=$enableval
114 ;;
115 esac],
116 [# For now, enable all targets by default
117 enable_targets=all
118 ])
119
120 # Canonicalize the enabled targets.
121 if test -n "$enable_targets"; then
122 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
123 result=`$ac_config_sub $targ 2>/dev/null`
124 if test -n "$result"; then
125 canon_targets="$canon_targets $result"
126 else
127 # Permit unrecognized target names, like "all".
128 canon_targets="$canon_targets $targ"
129 fi
130 done
131 fi
132
133 # See which specific instantiations we need.
134 targetobjs=
135 all_targets=
136 default_machine=
137 default_size=
138 default_big_endian=
139 default_osabi=ELFOSABI_NONE
140 targ_32_little=
141 targ_32_big=
142 targ_64_little=
143 targ_64_big=
144 for targ in $target $canon_targets; do
145 if test "$targ" = "all"; then
146 targ_32_little=yes
147 targ_32_big=yes
148 targ_64_little=yes
149 targ_64_big=yes
150 all_targets=yes
151 else
152 . ${srcdir}/configure.tgt
153
154 if test "$targ_obj" = "UNKNOWN"; then
155 AC_MSG_ERROR("unsupported target $targ")
156 else
157 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
158 if test "$targ_extra_obj" != ""; then
159 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
160 fi
161 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
162 if test "$targ_big_endian" = "true" \
163 -o "$targ_extra_big_endian" = "true"; then
164 targ_32_big=yes
165 fi
166 if test "$targ_big_endian" = "false" \
167 -o "$targ_extra_big_endian" = "false"; then
168 targ_32_little=yes
169 fi
170 fi
171 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
172 if test "$targ_big_endian" = "true" \
173 -o "$targ_extra_big_endian" = "true"; then
174 targ_64_big=yes
175 fi
176 if test "$targ_big_endian" = "false" \
177 -o "$targ_extra_big_endian" = "false"; then
178 targ_64_little=yes
179 fi
180 fi
181
182 if test "$target" = "$targ"; then
183 default_machine=$targ_machine
184 default_size=$targ_size
185 default_big_endian=$targ_big_endian
186 default_osabi=$targ_osabi
187
188 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
189 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
190 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
191 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
192 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
193 fi
194 fi
195 fi
196 done
197
198 # Remove any duplicates.
199 to=""
200 for t in $targetobjs; do
201 case " $to " in
202 *" $t "*) ;;
203 *) to="$to $t" ;;
204 esac
205 done
206 targetobjs=$to
207
208 if test -n "$targ_32_little"; then
209 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
210 [Define to support 32-bit little-endian targets])
211 fi
212 if test -n "$targ_32_big"; then
213 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
214 [Define to support 32-bit big-endian targets])
215 fi
216 if test -n "$targ_64_little"; then
217 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
218 [Define to support 64-bit little-endian targets])
219 fi
220 if test -n "$targ_64_big"; then
221 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
222 [Define to support 64-bit big-endian targets])
223 fi
224
225 if test -n "$all_targets"; then
226 TARGETOBJS='$(ALL_TARGETOBJS)'
227 else
228 TARGETOBJS="$targetobjs"
229 fi
230 AC_SUBST(TARGETOBJS)
231
232 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
233 [Default machine code])
234 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
235 [Default size (32 or 64)])
236 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
237 [Default big endian (true or false)])
238 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
239 [Default OSABI code])
240
241 AC_ARG_WITH(lib-path,
242 [ --with-lib-path=dir1:dir2... set default LIB_PATH],
243 [case "$withval" in
244 yes) LIB_PATH='"/lib:/usr/lib"' ;;
245 no) LIB_PATH='""' ;;
246 *) LIB_PATH='"'"$withval"'"' ;;
247 esac],
248 [LIB_PATH='"::DEFAULT::"'])
249 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
250 [Default library search path])
251 if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
252 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
253 fi
254
255 AC_CHECK_TOOL(NM, nm)
256
257 AC_PROG_CC
258 AC_PROG_CXX
259 AC_PROG_YACC
260 AC_PROG_RANLIB
261 AC_PROG_INSTALL
262 AC_PROG_LN_S
263
264 AC_GNU_SOURCE
265
266 ZW_GNU_GETTEXT_SISTER_DIR
267 AM_PO_SUBDIRS
268
269 AC_C_BIGENDIAN
270
271 AC_EXEEXT
272
273 AM_CONDITIONAL(NATIVE_LINKER,
274 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
275 AM_CONDITIONAL(GCC, test "$GCC" = yes)
276
277 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
278 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
279
280 dnl Test for whether static linking is supported. Some systems do not
281 dnl install static libraries. This only affects the set of tests that
282 dnl we run.
283 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
284 [LDFLAGS_hold=$LDFLAGS
285 LDFLAGS="$LDFLAGS -static"
286 AC_LINK_IFELSE([
287 AC_LANG_PROGRAM([[void f() { }]])],
288 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
289 LDFLAGS=$LDFLAGS_hold])
290 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
291
292 dnl Some architectures do not support taking pointers of functions
293 dnl defined in shared libraries except in -fPIC mode. We need to
294 dnl tell the unittest framework if we're compiling for one of those
295 dnl targets, so it doesn't try to run the tests that do that.
296 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
297 case $target_cpu in
298 i?86) true;;
299 x86_64) false;;
300 sparc64) false;;
301 *) true;;
302 esac])
303
304 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
305 dnl only available in gcc 4.1.
306 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
307 [AC_COMPILE_IFELSE([
308 #if !defined __GNUC__
309 error
310 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
311 error
312 #endif
313 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
314
315 save_CFLAGS="$CFLAGS"
316 CFLAGS="$CFLAGS -mcmodel=medium"
317 AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
318 CFLAGS="$save_CFLAGS"
319 dnl Whether we can test -mcmodel=medium.
320 AM_CONDITIONAL(MCMODEL_MEDIUM,
321 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
322
323 dnl Test for __thread support.
324 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
325 [AC_COMPILE_IFELSE([__thread int i = 1;],
326 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
327
328 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
329
330 dnl On GNU/Linux TLS in static programs only works when using glibc
331 dnl 2.4 or later.
332 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
333 [AC_COMPILE_IFELSE([
334 #include <features.h>
335 #if !defined __GLIBC__
336 error
337 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
338 error
339 #endif
340 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
341
342 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
343
344 dnl Test for #pragma omp threadprivate
345 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
346 [save_CFLAGS="$CFLAGS"
347 CFLAGS="$CFLAGS -fopenmp"
348 AC_COMPILE_IFELSE([
349 #include <omp.h>
350 int i;
351 #pragma omp threadprivate (i)
352 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
353 CFLAGS="$save_CFLAGS"])
354 if test "$gold_cv_c_threadprivate" = "yes"; then
355 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
356 [Define if compiler supports #pragma omp threadprivate])
357 fi
358 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
359
360 dnl Test for the -ftls-dialect=gnu2 option.
361 save_CFLAGS="$CFLAGS"
362 CFLAGS="$CFLAGS -fpic -mtls-dialect=gnu2"
363 AC_COMPILE_IFELSE([
364 __thread int i;
365 void foo (void)
366 {
367 i = 10;
368 }
369 ], [have_tls_gnu2=yes], [have_tls_gnu2=no])
370 CFLAGS="$save_CFLAGS"
371 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
372
373 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
374 dnl only with glibc 2.9 or later.
375 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
376 [AC_COMPILE_IFELSE([
377 #include <features.h>
378 #if !defined __GLIBC__
379 error
380 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
381 error
382 #endif
383 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
384
385 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
386
387 dnl Test for the -frandom-seed option.
388 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
389 [save_CFLAGS="$CFLAGS"
390 CFLAGS="$CFLAGS -frandom-seed=foo"
391 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
392 [gold_cv_c_random_seed=no])
393 CFLAGS="$save_CFLAGS"])
394 if test "$gold_cv_c_random_seed" = "yes"; then
395 # In Makefile, '$@' will be expanded to be the name of the file
396 # being built, providing a unique seed for each file.
397 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
398 fi
399 AC_SUBST(RANDOM_SEED_CFLAGS)
400
401 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
402 dnl 2.11 or later, and by binutils 2.20.1 or later.
403 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
404 [save_LDFLAGS="$LDFLAGS"
405 LDFLAGS="$LDFLAGS -static"
406 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
407 #include <features.h>
408 #if !defined __GLIBC__
409 error
410 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
411 error
412 #endif
413 void func (void) { }
414 void invoke (void);
415 __asm__(".type invoke, %gnu_indirect_function");
416 typedef void (*funcptr) (void);
417 funcptr dispatch (void) __asm__ ("invoke");
418 funcptr dispatch (void) { return &func; }]],
419 [[invoke();]])
420 ], [
421 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
422 gold_cv_lib_glibc_ifunc=both
423 else
424 gold_cv_lib_glibc_ifunc=dyn
425 fi], [gold_cv_lib_glibc_ifunc=no])
426 LDFLAGS="$save_LDFLAGS"])
427
428 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
429 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
430
431 AM_BINUTILS_WARNINGS
432
433 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
434 AC_SUBST(WARN_CXXFLAGS)
435
436 AC_ARG_WITH(gold-ldflags,
437 [ --with-gold-ldflags=FLAGS additional link flags for gold],
438 [if test "$withval" = "no" -o "$withval" = "yes"; then
439 GOLD_LDFLAGS=
440 else
441 GOLD_LDFLAGS=$withval
442 fi],
443 [GOLD_LDFLAGS=])
444 AC_SUBST(GOLD_LDFLAGS)
445
446 AC_ARG_WITH(gold-ldadd,
447 [ --with-gold-ldadd=LIBS additional libraries for gold],
448 [if test "$withval" = "no" -o "$withval" = "yes"; then
449 GOLD_LDADD=
450 else
451 GOLD_LDADD=$withval
452 fi],
453 [GOLD_LDADD=])
454 AC_SUBST(GOLD_LDADD)
455
456 dnl Force support for large files by default. This may need to be
457 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
458 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
459 AC_SUBST(LFS_CFLAGS)
460
461 AC_CHECK_HEADERS(sys/mman.h)
462 AC_CHECK_FUNCS(chsize mmap)
463 AC_REPLACE_FUNCS(pread ftruncate ffsll)
464
465 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
466 [AC_LINK_IFELSE([
467 AC_LANG_PROGRAM([[
468 #include <sys/mman.h>
469 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
470 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
471 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
472 AC_DEFINE(HAVE_MREMAP, 1,
473 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
474 else
475 AC_LIBOBJ(mremap)
476 fi
477
478 # Link in zlib if we can. This allows us to write compressed sections.
479 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
480 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
481
482 dnl We have to check these in C, not C++, because autoconf generates
483 dnl tests which have no type information, and current glibc provides
484 dnl multiple declarations of functions like basename when compiling
485 dnl with C++.
486 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
487
488 AC_LANG_PUSH(C++)
489
490 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
491 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
492 AC_CHECK_HEADERS(byteswap.h)
493 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
494 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
495
496 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
497 # at link time with some versions of GCC.
498 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
499 [gold_cv_unordered_map_rehash],
500 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
501 #include <tr1/unordered_map>
502 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
503 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
504 if test "$gold_cv_unordered_map_rehash" = "yes"; then
505 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
506 [Define if ::std::tr1::unordered_map::rehash is usable])
507 fi
508
509 # gcc 4.3.0 doesn't recognize the printf attribute on a template
510 # function. Check for that. This is gcc bug 35546. This test can
511 # probably be removed after the bug has been fixed for a while.
512 AC_CACHE_CHECK([whether we can use attributes with template functions],
513 [gold_cv_template_attribute],
514 [AC_COMPILE_IFELSE([
515 template<typename T> extern void foo(const char*, ...)
516 __attribute__ ((__format__ (__printf__, 1, 2)));
517 template<typename T> void foo(const char* format, ...) {}
518 void bar() { foo<int>("%s\n", "foo"); }
519 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
520 if test "$gold_cv_template_attribute" = "yes"; then
521 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
522 [Define if attributes work on C++ templates])
523 fi
524
525 dnl Check if the system has struct stat::st_mtim.
526 AC_CACHE_CHECK([for struct stat::st_mtim.],
527 [gold_cv_stat_st_mtim],
528 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
529 #include <sys/stat.h>
530 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
531 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
532 if test "$gold_cv_stat_st_mtim" = "yes"; then
533 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
534 [Define if struct stat has a field st_mtim with timespec for mtime])
535 fi
536
537 AC_LANG_POP(C++)
538
539 AC_CHECK_FUNCS(setlocale)
540 AM_LC_MESSAGES
541
542 AM_MAINTAINER_MODE
543
544 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.041684 seconds and 5 git commands to generate.