PR gold/12910
[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_PROG_CC
242 AC_PROG_CXX
243 AC_PROG_YACC
244 AC_PROG_RANLIB
245 AC_PROG_INSTALL
246 AC_PROG_LN_S
247
248 AC_GNU_SOURCE
249
250 ZW_GNU_GETTEXT_SISTER_DIR
251 AM_PO_SUBDIRS
252
253 AC_C_BIGENDIAN
254
255 AC_EXEEXT
256
257 AM_CONDITIONAL(NATIVE_LINKER,
258 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
259 AM_CONDITIONAL(GCC, test "$GCC" = yes)
260
261 AM_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
264 dnl Some architectures do not support taking pointers of functions
265 dnl defined in shared libraries except in -fPIC mode. We need to
266 dnl tell the unittest framework if we're compiling for one of those
267 dnl targets, so it doesn't try to run the tests that do that.
268 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
269 case $target_cpu in
270 i?86) true;;
271 x86_64) false;;
272 sparc64) false;;
273 *) true;;
274 esac])
275
276 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
277 dnl only available in gcc 4.1.
278 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
279 [AC_COMPILE_IFELSE([
280 #if !defined __GNUC__
281 error
282 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
283 error
284 #endif
285 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
286
287 dnl Whether we can test -mcmodel=medium.
288 AM_CONDITIONAL(MCMODEL_MEDIUM,
289 [test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
290
291 dnl Test for __thread support.
292 AC_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
296 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
297
298 dnl On GNU/Linux TLS in static programs only works when using glibc
299 dnl 2.4 or later.
300 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
301 [AC_COMPILE_IFELSE([
302 #include <features.h>
303 #if !defined __GLIBC__
304 error
305 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
306 error
307 #endif
308 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
309
310 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
311
312 dnl Test for #pragma omp threadprivate
313 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
314 [save_CFLAGS="$CFLAGS"
315 CFLAGS="$CFLAGS -fopenmp"
316 AC_COMPILE_IFELSE([
317 #include <omp.h>
318 int i;
319 #pragma omp threadprivate (i)
320 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
321 CFLAGS="$save_CFLAGS"])
322 if test "$gold_cv_c_threadprivate" = "yes"; then
323 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
324 [Define if compiler supports #pragma omp threadprivate])
325 fi
326 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
327
328 dnl Test for the -ftls-dialect=gnu2 option.
329 save_CFLAGS="$CFLAGS"
330 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
331 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
332 CFLAGS="$save_CFLAGS"
333 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
334
335 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
336 dnl only with glibc 2.9 or later.
337 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
338 [AC_COMPILE_IFELSE([
339 #include <features.h>
340 #if !defined __GLIBC__
341 error
342 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
343 error
344 #endif
345 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
346
347 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
348
349 dnl Test for the -frandom-seed option.
350 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
351 [save_CFLAGS="$CFLAGS"
352 CFLAGS="$CFLAGS -frandom-seed=foo"
353 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
354 [gold_cv_c_random_seed=no])
355 CFLAGS="$save_CFLAGS"])
356 if 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=\$@
360 fi
361 AC_SUBST(RANDOM_SEED_CFLAGS)
362
363 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
364 dnl 2.11 or later, and by binutils 2.20.1 or later.
365 AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11],
366 [AC_COMPILE_IFELSE([
367 #include <features.h>
368 #if !defined __GLIBC__
369 error
370 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
371 error
372 #endif
373 __asm__(".type foo, %gnu_indirect_function");
374 ], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])])
375
376 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes")
377
378 AM_BINUTILS_WARNINGS
379
380 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
381 AC_SUBST(WARN_CXXFLAGS)
382
383 dnl Force support for large files by default. This may need to be
384 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
385 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
386 AC_SUBST(LFS_CFLAGS)
387
388 AC_CHECK_HEADERS(sys/mman.h)
389 AC_CHECK_FUNCS(chsize mmap)
390 AC_REPLACE_FUNCS(pread ftruncate ffsll)
391
392 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
393 [AC_LINK_IFELSE([
394 AC_LANG_PROGRAM([[
395 #include <sys/mman.h>
396 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
397 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
398 if 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])
401 else
402 AC_LIBOBJ(mremap)
403 fi
404
405 # Link in zlib if we can. This allows us to write compressed sections.
406 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
407 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
408
409 dnl We have to check these in C, not C++, because autoconf generates
410 dnl tests which have no type information, and current glibc provides
411 dnl multiple declarations of functions like basename when compiling
412 dnl with C++.
413 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
414
415 AC_LANG_PUSH(C++)
416
417 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
418 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
419 AC_CHECK_HEADERS(byteswap.h)
420 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
421 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
422
423 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
424 # at link time with some versions of GCC.
425 AC_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>
429 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
430 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
431 if 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])
434 fi
435
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.
439 AC_CACHE_CHECK([whether we can use attributes with template functions],
440 [gold_cv_template_attribute],
441 [AC_COMPILE_IFELSE([
442 template<typename T> extern void foo(const char*, ...)
443 __attribute__ ((__format__ (__printf__, 1, 2)));
444 template<typename T> void foo(const char* format, ...) {}
445 void bar() { foo<int>("%s\n", "foo"); }
446 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
447 if test "$gold_cv_template_attribute" = "yes"; then
448 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
449 [Define if attributes work on C++ templates])
450 fi
451
452 dnl Check if the system has struct stat::st_mtim.
453 AC_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>
457 long 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])])
459 if 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])
462 fi
463
464 AC_LANG_POP(C++)
465
466 AM_MAINTAINER_MODE
467
468 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.061016 seconds and 5 git commands to generate.