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