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