gdb/
[deliverable/binutils-gdb.git] / gold / configure.ac
CommitLineData
bae7f79e
ILT
1dnl Process this file with autoconf to produce a configure script.
2
3AC_PREREQ(2.59)
8486ee48
ILT
4
5AC_INIT(gold, 0.1)
6AC_CONFIG_SRCDIR(gold.cc)
bae7f79e
ILT
7
8AC_CANONICAL_TARGET
9
6ea55b82 10AM_INIT_AUTOMAKE([no-dist parallel-tests])
bae7f79e
ILT
11
12AM_CONFIG_HEADER(config.h:config.in)
13
ad2d6943
ILT
14AC_ARG_WITH(sysroot,
15[ --with-sysroot[=DIR] search for usr/lib et al within DIR],
16[sysroot=$withval], [sysroot=no])
17
18if test "$sysroot" = "yes"; then
19 sysroot='${exec_prefix}/${target_alias}/sys-root'
20elif test "$sysroot" = "no"; then
21 sysroot=
22fi
23
24sysroot_relocatable=0
25if 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
34fi
35
36AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
37 [System root for target files])
38AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
39 [Whether the system root can be relocated])
40
4fda8867
NC
41dnl "install_as_default" is true if the linker to be installed as the
42dnl default linker, ld.
43dnl "installed_linker" is the installed gold linker name.
c7791212
NC
44
45default_ld=
46AC_ARG_ENABLE(ld,
47[[ --enable-ld[=ARG] build ld [ARG={default,yes,no}]]],
4fda8867 48[case "${enableval}" in
c7791212
NC
49 default)
50 default_ld=ld.bfd
51 ;;
52esac])
53
54AC_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
4fda8867
NC
61 installed_linker=ld.gold
62 ;;
c7791212 63 no)
4fda8867
NC
64 ;;
65 *)
66 AC_MSG_ERROR([invalid --enable-gold argument])
67 ;;
68 esac],
c7791212
NC
69[install_as_default=no
70 installed_linker=ld.gold])
4fda8867
NC
71AC_SUBST(install_as_default)
72AC_SUBST(installed_linker)
73
fe9a4c12
ILT
74dnl For now threads are a configure time option.
75AC_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])
83if test "$threads" = "yes"; then
84 AC_DEFINE(ENABLE_THREADS, 1,
85 [Define to do multi-threaded linking])
86fi
87AM_CONDITIONAL(THREADS, test "$threads" = "yes")
89fc3421
CC
88
89AC_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])
97if test "$plugins" = "yes"; then
98 AC_DEFINE(ENABLE_PLUGINS, 1,
99 [Define to enable linker plugins])
100fi
101AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
fe9a4c12 102
193a53d9
ILT
103AC_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 ;;
115esac],
116[# For now, enable all targets by default
117 enable_targets=all
118])
119
120# Canonicalize the enabled targets.
121if 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
131fi
132
133# See which specific instantiations we need.
6df6da4a
ILT
134targetobjs=
135all_targets=
fbfba508
ILT
136default_machine=
137default_size=
138default_big_endian=
36959681 139default_osabi=ELFOSABI_NONE
fbfba508
ILT
140targ_32_little=
141targ_32_big=
142targ_64_little=
143targ_64_big=
193a53d9 144for targ in $target $canon_targets; do
193a53d9
ILT
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
6df6da4a 150 all_targets=yes
193a53d9 151 else
fbfba508
ILT
152 . ${srcdir}/configure.tgt
153
154 if test "$targ_obj" = "UNKNOWN"; then
6df6da4a 155 AC_MSG_ERROR("unsupported target $targ")
fbfba508
ILT
156 else
157 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
60b2b4e7
ILT
158 if test "$targ_extra_obj" != ""; then
159 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
160 fi
f5314dd5
DM
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
fbfba508
ILT
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
36959681 186 default_osabi=$targ_osabi
364c7fa5
ILT
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")
fbfba508
ILT
193 fi
194 fi
193a53d9
ILT
195 fi
196done
197
6cfaf60b 198# Remove any duplicates.
9109c078
ILT
199to=""
200for t in $targetobjs; do
201 case " $to " in
202 *" $t "*) ;;
203 *) to="$to $t" ;;
204 esac
205done
206targetobjs=$to
6cfaf60b 207
193a53d9
ILT
208if test -n "$targ_32_little"; then
209 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
210 [Define to support 32-bit little-endian targets])
211fi
212if test -n "$targ_32_big"; then
213 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
214 [Define to support 32-bit big-endian targets])
215fi
216if test -n "$targ_64_little"; then
217 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
218 [Define to support 64-bit little-endian targets])
219fi
220if test -n "$targ_64_big"; then
221 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
222 [Define to support 64-bit big-endian targets])
223fi
224
6df6da4a
ILT
225if test -n "$all_targets"; then
226 TARGETOBJS='$(ALL_TARGETOBJS)'
227else
228 TARGETOBJS="$targetobjs"
229fi
230AC_SUBST(TARGETOBJS)
231
fbfba508
ILT
232AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
233 [Default machine code])
234AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
235 [Default size (32 or 64)])
236AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
237 [Default big endian (true or false)])
36959681
ILT
238AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
239 [Default OSABI code])
fbfba508 240
bae7f79e
ILT
241AC_PROG_CC
242AC_PROG_CXX
dbe717ef 243AC_PROG_YACC
5a6f7e2d 244AC_PROG_RANLIB
bae7f79e 245AC_PROG_INSTALL
537b5f51 246AC_PROG_LN_S
fa99aa09
ILT
247
248AC_GNU_SOURCE
249
bae7f79e
ILT
250ZW_GNU_GETTEXT_SISTER_DIR
251AM_PO_SUBDIRS
252
92e059d8
ILT
253AC_C_BIGENDIAN
254
bae7f79e
ILT
255AC_EXEEXT
256
537b5f51
ILT
257AM_CONDITIONAL(NATIVE_LINKER,
258 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
259AM_CONDITIONAL(GCC, test "$GCC" = yes)
260
eb373049
ILT
261AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
262 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
263
63402fe4
ILT
264dnl Some architectures do not support taking pointers of functions
265dnl defined in shared libraries except in -fPIC mode. We need to
266dnl tell the unittest framework if we're compiling for one of those
267dnl targets, so it doesn't try to run the tests that do that.
268AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
269 case $target_cpu in
270 i?86) true;;
271 x86_64) false;;
11936fb1 272 sparc64) false;;
63402fe4
ILT
273 *) true;;
274 esac])
275
084e2665
ILT
276dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
277dnl only available in gcc 4.1.
278AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
279[AC_COMPILE_IFELSE([
280#if !defined __GNUC__
281error
282#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
283error
284#endif
285], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
286
8a5e3e08 287dnl Whether we can test -mcmodel=medium.
084e2665
ILT
288AM_CONDITIONAL(MCMODEL_MEDIUM,
289[test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
8a5e3e08 290
6eee141f 291dnl Test for __thread support.
097ec620
ILT
292AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
293[AC_COMPILE_IFELSE([__thread int i = 1;],
294[gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
295
296AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
297
298dnl On GNU/Linux TLS in static programs only works when using glibc
299dnl 2.4 or later.
300AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
301[AC_COMPILE_IFELSE([
302#include <features.h>
303#if !defined __GLIBC__
304error
305#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
306error
307#endif
308], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
309
310AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
6eee141f 311
155a0dd7
ILT
312dnl Test for #pragma omp threadprivate
313AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
314[save_CFLAGS="$CFLAGS"
315CFLAGS="$CFLAGS -fopenmp"
316AC_COMPILE_IFELSE([
317#include <omp.h>
318int i;
319#pragma omp threadprivate (i)
320], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
321CFLAGS="$save_CFLAGS"])
322if test "$gold_cv_c_threadprivate" = "yes"; then
323 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
324 [Define if compiler supports #pragma omp threadprivate])
325fi
326AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
327
c2b45e22
CC
328dnl Test for the -ftls-dialect=gnu2 option.
329save_CFLAGS="$CFLAGS"
330CFLAGS="$CFLAGS -mtls-dialect=gnu2"
331AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
332CFLAGS="$save_CFLAGS"
333AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
334
335dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
b0074644
ILT
336dnl only with glibc 2.9 or later.
337AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
c2b45e22
CC
338[AC_COMPILE_IFELSE([
339#include <features.h>
340#if !defined __GLIBC__
341error
b0074644 342#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
c2b45e22
CC
343error
344#endif
b0074644 345], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
c2b45e22 346
b0074644 347AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
c2b45e22 348
2fd32231
ILT
349dnl Check whether the compiler supports constructor priorities in
350dnl attributes, which were added in gcc 4.3.
351AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
352[AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
353[gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
354
355AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
356
1d1f116d
CD
357dnl Test for the -frandom-seed option.
358AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
359[save_CFLAGS="$CFLAGS"
360CFLAGS="$CFLAGS -frandom-seed=foo"
361AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
362[gold_cv_c_random_seed=no])
363CFLAGS="$save_CFLAGS"])
364if test "$gold_cv_c_random_seed" = "yes"; then
365 # In Makefile, '$@' will be expanded to be the name of the file
366 # being built, providing a unique seed for each file.
367 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
368fi
369AC_SUBST(RANDOM_SEED_CFLAGS)
370
7223e9ca
ILT
371dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
372dnl 2.11 or later.
373AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11],
374[AC_COMPILE_IFELSE([
375#include <features.h>
376#if !defined __GLIBC__
377error
378#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
379error
380#endif
381], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])])
382
383AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes")
384
bae7f79e
ILT
385AM_BINUTILS_WARNINGS
386
2ea97941 387WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
bae7f79e
ILT
388AC_SUBST(WARN_CXXFLAGS)
389
390dnl Force support for large files by default. This may need to be
391dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
494e05f4
ILT
392LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
393AC_SUBST(LFS_CFLAGS)
bae7f79e 394
9201d894 395AC_CHECK_FUNCS(chsize)
fd03461a 396AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
82dcae9d 397
9a0910c3
ILT
398# Link in zlib if we can. This allows us to write compressed sections.
399AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
7fcd0256 400AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
9a0910c3 401
0639a6f6
ILT
402dnl We have to check these in C, not C++, because autoconf generates
403dnl tests which have no type information, and current glibc provides
404dnl multiple declarations of functions like basename when compiling
405dnl with C++.
406AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
407
54dc6425 408AC_LANG_PUSH(C++)
d288e464 409
54dc6425
ILT
410AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
411AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
15d5fa16 412AC_CHECK_HEADERS(byteswap.h)
d675ff46 413AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
3d857b98 414AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
d288e464 415
40fde488
CD
416# Use of ::std::tr1::unordered_map::rehash causes undefined symbols
417# at link time with some versions of GCC.
418AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
419[gold_cv_unordered_map_rehash],
420[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
421#include <tr1/unordered_map>
422void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
423]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
424if test "$gold_cv_unordered_map_rehash" = "yes"; then
425 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
426 [Define if ::std::tr1::unordered_map::rehash is usable])
427fi
428
04bf7072
ILT
429# gcc 4.3.0 doesn't recognize the printf attribute on a template
430# function. Check for that. This is gcc bug 35546. This test can
431# probably be removed after the bug has been fixed for a while.
432AC_CACHE_CHECK([whether we can use attributes with template functions],
433[gold_cv_template_attribute],
434[AC_COMPILE_IFELSE([
435template<typename T> extern void foo(const char*, ...)
436 __attribute__ ((__format__ (__printf__, 1, 2)));
437template<typename T> void foo(const char* format, ...) {}
438void bar() { foo<int>("%s\n", "foo"); }
439], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
440if test "$gold_cv_template_attribute" = "yes"; then
441 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
442 [Define if attributes work on C++ templates])
443fi
444
5d329b7d
ILT
445dnl Check if the system has struct stat::st_mtim.
446AC_CACHE_CHECK([for struct stat::st_mtim.],
447[gold_cv_stat_st_mtim],
448[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
449#include <sys/stat.h>
450long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
451]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
452if test "$gold_cv_stat_st_mtim" = "yes"; then
453 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
454 [Define if struct stat has a field st_mtim with timespec for mtime])
455fi
456
54dc6425
ILT
457AC_LANG_POP(C++)
458
bae7f79e
ILT
459AM_MAINTAINER_MODE
460
5a6f7e2d 461AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.222595 seconds and 4 git commands to generate.