PR gold/12525
[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
1d1f116d
CD
349dnl Test for the -frandom-seed option.
350AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
351[save_CFLAGS="$CFLAGS"
352CFLAGS="$CFLAGS -frandom-seed=foo"
353AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
354[gold_cv_c_random_seed=no])
355CFLAGS="$save_CFLAGS"])
356if test "$gold_cv_c_random_seed" = "yes"; then
357 # In Makefile, '$@' will be expanded to be the name of the file
358 # being built, providing a unique seed for each file.
359 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
360fi
361AC_SUBST(RANDOM_SEED_CFLAGS)
362
7223e9ca 363dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
d0773f31 364dnl 2.11 or later, and by binutils 2.20.1 or later.
7223e9ca
ILT
365AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11],
366[AC_COMPILE_IFELSE([
367#include <features.h>
368#if !defined __GLIBC__
369error
370#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
371error
372#endif
d0773f31 373__asm__(".type foo, %gnu_indirect_function");
7223e9ca
ILT
374], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])])
375
376AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes")
377
bae7f79e
ILT
378AM_BINUTILS_WARNINGS
379
2ea97941 380WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
bae7f79e
ILT
381AC_SUBST(WARN_CXXFLAGS)
382
383dnl Force support for large files by default. This may need to be
384dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
494e05f4
ILT
385LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
386AC_SUBST(LFS_CFLAGS)
bae7f79e 387
88597d34
ILT
388AC_CHECK_HEADERS(sys/mman.h)
389AC_CHECK_FUNCS(chsize mmap)
390AC_REPLACE_FUNCS(pread ftruncate ffsll)
391
392AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
393[AC_LINK_IFELSE([
394AC_LANG_PROGRAM([[
395#include <sys/mman.h>
396void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
397]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
398if test "$gold_cv_lib_mremap_maymove" = "yes"; then
399 AC_DEFINE(HAVE_MREMAP, 1,
400 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
401else
402 AC_LIBOBJ(mremap)
403fi
82dcae9d 404
9a0910c3
ILT
405# Link in zlib if we can. This allows us to write compressed sections.
406AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
7fcd0256 407AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
9a0910c3 408
0639a6f6
ILT
409dnl We have to check these in C, not C++, because autoconf generates
410dnl tests which have no type information, and current glibc provides
411dnl multiple declarations of functions like basename when compiling
412dnl with C++.
413AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
414
54dc6425 415AC_LANG_PUSH(C++)
d288e464 416
54dc6425
ILT
417AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
418AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
15d5fa16 419AC_CHECK_HEADERS(byteswap.h)
d675ff46 420AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
3d857b98 421AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
d288e464 422
40fde488
CD
423# Use of ::std::tr1::unordered_map::rehash causes undefined symbols
424# at link time with some versions of GCC.
425AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
426[gold_cv_unordered_map_rehash],
427[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
428#include <tr1/unordered_map>
429void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
430]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
431if test "$gold_cv_unordered_map_rehash" = "yes"; then
432 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
433 [Define if ::std::tr1::unordered_map::rehash is usable])
434fi
435
04bf7072
ILT
436# gcc 4.3.0 doesn't recognize the printf attribute on a template
437# function. Check for that. This is gcc bug 35546. This test can
438# probably be removed after the bug has been fixed for a while.
439AC_CACHE_CHECK([whether we can use attributes with template functions],
440[gold_cv_template_attribute],
441[AC_COMPILE_IFELSE([
442template<typename T> extern void foo(const char*, ...)
443 __attribute__ ((__format__ (__printf__, 1, 2)));
444template<typename T> void foo(const char* format, ...) {}
445void bar() { foo<int>("%s\n", "foo"); }
446], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
447if test "$gold_cv_template_attribute" = "yes"; then
448 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
449 [Define if attributes work on C++ templates])
450fi
451
5d329b7d
ILT
452dnl Check if the system has struct stat::st_mtim.
453AC_CACHE_CHECK([for struct stat::st_mtim.],
454[gold_cv_stat_st_mtim],
455[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
456#include <sys/stat.h>
457long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
458]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
459if test "$gold_cv_stat_st_mtim" = "yes"; then
460 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
461 [Define if struct stat has a field st_mtim with timespec for mtime])
462fi
463
54dc6425
ILT
464AC_LANG_POP(C++)
465
bae7f79e
ILT
466AM_MAINTAINER_MODE
467
5a6f7e2d 468AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.367631 seconds and 4 git commands to generate.