2011-09-09 Kai Tietz <ktietz@redhat.com>
[binutils.git] / gold / configure.ac
blob949c8c3b106364f2b13a60b4e5da86b7b6c75c15
1 dnl Process this file with autoconf to produce a configure script.
3 AC_PREREQ(2.59)
5 AC_INIT(gold, 0.1)
6 AC_CONFIG_SRCDIR(gold.cc)
8 AC_CANONICAL_TARGET
10 AM_INIT_AUTOMAKE([no-dist parallel-tests])
12 AM_CONFIG_HEADER(config.h:config.in)
14 AC_ARG_WITH(sysroot,
15 [  --with-sysroot[=DIR]    search for usr/lib et al within DIR],
16 [sysroot=$withval], [sysroot=no])
18 if test "$sysroot" = "yes"; then
19   sysroot='${exec_prefix}/${target_alias}/sys-root'
20 elif test "$sysroot" = "no"; then
21   sysroot=
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
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])
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.
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])
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)
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])
87 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
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])
101 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
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
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
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
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
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
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
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
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])
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])
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])
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])
225 if test -n "$all_targets"; then
226   TARGETOBJS='$(ALL_TARGETOBJS)'
227 else
228   TARGETOBJS="$targetobjs"
230 AC_SUBST(TARGETOBJS)
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])
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
248 AC_GNU_SOURCE
250 ZW_GNU_GETTEXT_SISTER_DIR
251 AM_PO_SUBDIRS
253 AC_C_BIGENDIAN
255 AC_EXEEXT
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)
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")
264 dnl Test for whether static linking is supported.  Some systems do not
265 dnl install static libraries.  This only affects the set of tests that
266 dnl we run.
267 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
268 [LDFLAGS_hold=$LDFLAGS
269 LDFLAGS="$LDFLAGS -static"
270 AC_LINK_IFELSE([
271 AC_LANG_PROGRAM([[void f() { }]])],
272 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
273 LDFLAGS=$LDFLAGS_hold])
274 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
276 dnl Some architectures do not support taking pointers of functions
277 dnl defined in shared libraries except in -fPIC mode.  We need to
278 dnl tell the unittest framework if we're compiling for one of those
279 dnl targets, so it doesn't try to run the tests that do that.
280 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
281   case $target_cpu in
282     i?86) true;;
283     x86_64) false;;
284     sparc64) false;;
285     *) true;;
286   esac])
288 dnl Test for gcc 4.1 or later.  Full support for -mcmodel=medium is
289 dnl only available in gcc 4.1.
290 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
291 [AC_COMPILE_IFELSE([
292 #if !defined __GNUC__
293 error
294 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
295 error
296 #endif
297 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
299 dnl Whether we can test -mcmodel=medium.
300 AM_CONDITIONAL(MCMODEL_MEDIUM,
301 [test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
303 dnl Test for __thread support.
304 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
305 [AC_COMPILE_IFELSE([__thread int i = 1;],
306 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
308 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
310 dnl On GNU/Linux TLS in static programs only works when using glibc
311 dnl 2.4 or later.
312 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
313 [AC_COMPILE_IFELSE([
314 #include <features.h>
315 #if !defined __GLIBC__
316 error
317 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
318 error
319 #endif
320 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
322 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
324 dnl Test for #pragma omp threadprivate
325 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
326 [save_CFLAGS="$CFLAGS"
327 CFLAGS="$CFLAGS -fopenmp"
328 AC_COMPILE_IFELSE([
329 #include <omp.h>
330 int i;
331 #pragma omp threadprivate (i)
332 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
333 CFLAGS="$save_CFLAGS"])
334 if test "$gold_cv_c_threadprivate" = "yes"; then
335   AC_DEFINE(HAVE_OMP_SUPPORT, 1,
336             [Define if compiler supports #pragma omp threadprivate])
338 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
340 dnl Test for the -ftls-dialect=gnu2 option.
341 save_CFLAGS="$CFLAGS"
342 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
343 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
344 CFLAGS="$save_CFLAGS"
345 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
347 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
348 dnl only with glibc 2.9 or later.
349 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
350 [AC_COMPILE_IFELSE([
351 #include <features.h>
352 #if !defined __GLIBC__
353 error
354 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
355 error
356 #endif
357 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
359 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
361 dnl Test for the -frandom-seed option.
362 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
363 [save_CFLAGS="$CFLAGS"
364 CFLAGS="$CFLAGS -frandom-seed=foo"
365 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
366 [gold_cv_c_random_seed=no])
367 CFLAGS="$save_CFLAGS"])
368 if test "$gold_cv_c_random_seed" = "yes"; then
369   # In Makefile, '$@' will be expanded to be the name of the file
370   # being built, providing a unique seed for each file.
371   RANDOM_SEED_CFLAGS=-frandom-seed=\$@
373 AC_SUBST(RANDOM_SEED_CFLAGS)
375 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
376 dnl 2.11 or later, and by binutils 2.20.1 or later.
377 AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11],
378 [AC_COMPILE_IFELSE([
379 #include <features.h>
380 #if !defined __GLIBC__
381 error
382 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
383 error
384 #endif
385 __asm__(".type foo, %gnu_indirect_function");
386 ], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])])
388 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes")
390 AM_BINUTILS_WARNINGS
392 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
393 AC_SUBST(WARN_CXXFLAGS)
395 dnl Force support for large files by default.  This may need to be
396 dnl host dependent.  If build == host, we can check getconf LFS_CFLAGS.
397 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
398 AC_SUBST(LFS_CFLAGS)
400 AC_CHECK_HEADERS(sys/mman.h)
401 AC_CHECK_FUNCS(chsize mmap)
402 AC_REPLACE_FUNCS(pread ftruncate ffsll)
404 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
405 [AC_LINK_IFELSE([
406 AC_LANG_PROGRAM([[
407 #include <sys/mman.h>
408 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
409 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
410 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
411   AC_DEFINE(HAVE_MREMAP, 1,
412     [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
413 else
414   AC_LIBOBJ(mremap)
417 # Link in zlib if we can.  This allows us to write compressed sections.
418 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
419 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
421 dnl We have to check these in C, not C++, because autoconf generates
422 dnl tests which have no type information, and current glibc provides
423 dnl multiple declarations of functions like basename when compiling
424 dnl with C++.
425 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
427 AC_LANG_PUSH(C++)
429 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
430 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
431 AC_CHECK_HEADERS(byteswap.h)
432 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
433 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
435 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
436 # at link time with some versions of GCC.
437 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
438 [gold_cv_unordered_map_rehash],
439 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
440 #include <tr1/unordered_map>
441 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
442 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
443 if test "$gold_cv_unordered_map_rehash" = "yes"; then
444   AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
445             [Define if ::std::tr1::unordered_map::rehash is usable])
448 # gcc 4.3.0 doesn't recognize the printf attribute on a template
449 # function.  Check for that.  This is gcc bug 35546.  This test can
450 # probably be removed after the bug has been fixed for a while.
451 AC_CACHE_CHECK([whether we can use attributes with template functions],
452 [gold_cv_template_attribute],
453 [AC_COMPILE_IFELSE([
454 template<typename T> extern void foo(const char*, ...)
455   __attribute__ ((__format__ (__printf__, 1, 2)));
456 template<typename T> void foo(const char* format, ...) {}
457 void bar() { foo<int>("%s\n", "foo"); }
458 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
459 if test "$gold_cv_template_attribute" = "yes"; then
460   AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
461             [Define if attributes work on C++ templates])
464 dnl Check if the system has struct stat::st_mtim.
465 AC_CACHE_CHECK([for struct stat::st_mtim.],
466 [gold_cv_stat_st_mtim],
467 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
468 #include <sys/stat.h>
469 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
470 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
471 if test "$gold_cv_stat_st_mtim" = "yes"; then
472   AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
473             [Define if struct stat has a field st_mtim with timespec for mtime])
476 AC_LANG_POP(C++)
478 AM_MAINTAINER_MODE
480 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)