2010-09-01 Tristan Gingold <gingold@adacore.com>
[binutils.git] / gold / configure.ac
blobba6bd172353c838b42b3120038c1dccaecdb50d4
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.
44 AC_ARG_ENABLE(gold,
45 [[  --enable-gold[=ARG]     build gold [ARG={both}[/{gold,ld}]]]],
46 [case "${enableval}" in 
47  yes)
48    install_as_default=gold
49    installed_linker=ld
50    ;;
51  both/gold)
52    install_as_default=yes
53    installed_linker=ld.gold
54    ;;
55  both|both/ld)
56    install_as_default=no
57    installed_linker=ld.gold
58    ;;
59  *)
60    AC_MSG_ERROR([invalid --enable-gold argument])
61    ;;
62  esac],
63 [install_as_default=gold
64  installed_linker=ld])
65 AC_SUBST(install_as_default)
66 AC_SUBST(installed_linker)
68 dnl For now threads are a configure time option.
69 AC_ARG_ENABLE([threads],
70 [  --enable-threads        multi-threaded linking],
71 [case "${enableval}" in
72   yes | "") threads=yes ;;
73   no) threads=no ;;
74   *) threads=yes ;;
75  esac],
76 [threads=no])
77 if test "$threads" = "yes"; then
78   AC_DEFINE(ENABLE_THREADS, 1,
79             [Define to do multi-threaded linking])
81 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
83 AC_ARG_ENABLE([plugins],
84 [  --enable-plugins        linker plugins],
85 [case "${enableval}" in
86   yes | "") plugins=yes ;;
87   no) plugins=no ;;
88   *) plugins=yes ;;
89  esac],
90 [plugins=no])
91 if test "$plugins" = "yes"; then
92   AC_DEFINE(ENABLE_PLUGINS, 1,
93             [Define to enable linker plugins])
95 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
97 AC_ARG_ENABLE([targets],
98 [  --enable-targets        alternative target configurations],
99 [case "${enableval}" in
100   yes | "")
101     AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
102     ;;
103   no)
104     enable_targets=
105     ;;
106   *)
107     enable_targets=$enableval
108     ;;
109 esac],
110 [# For now, enable all targets by default
111  enable_targets=all
114 # Canonicalize the enabled targets.
115 if test -n "$enable_targets"; then
116   for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
117     result=`$ac_config_sub $targ 2>/dev/null`
118     if test -n "$result"; then
119       canon_targets="$canon_targets $result"
120     else
121       # Permit unrecognized target names, like "all".
122       canon_targets="$canon_targets $targ"
123     fi
124   done
127 # See which specific instantiations we need.
128 targetobjs=
129 all_targets=
130 default_machine=
131 default_size=
132 default_big_endian=
133 default_osabi=ELFOSABI_NONE
134 targ_32_little=
135 targ_32_big=
136 targ_64_little=
137 targ_64_big=
138 for targ in $target $canon_targets; do
139   if test "$targ" = "all"; then
140     targ_32_little=yes
141     targ_32_big=yes
142     targ_64_little=yes
143     targ_64_big=yes
144     all_targets=yes
145   else
146     . ${srcdir}/configure.tgt
148     if test "$targ_obj" = "UNKNOWN"; then
149       AC_MSG_ERROR("unsupported target $targ")
150     else
151       targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
152       if test "$targ_extra_obj" != ""; then
153         targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
154       fi
155       if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
156           if test "$targ_big_endian" = "true" \
157               -o "$targ_extra_big_endian" = "true"; then
158               targ_32_big=yes
159           fi
160           if test "$targ_big_endian" = "false" \
161               -o "$targ_extra_big_endian" = "false"; then
162               targ_32_little=yes
163           fi
164       fi
165       if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
166           if test "$targ_big_endian" = "true" \
167               -o "$targ_extra_big_endian" = "true"; then
168               targ_64_big=yes
169           fi
170           if test "$targ_big_endian" = "false" \
171               -o "$targ_extra_big_endian" = "false"; then
172               targ_64_little=yes
173           fi
174       fi
176       if test "$target" = "$targ"; then
177         default_machine=$targ_machine
178         default_size=$targ_size
179         default_big_endian=$targ_big_endian
180         default_osabi=$targ_osabi
182         AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
183         AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
184         AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
185         AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
186         AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
187       fi
188     fi
189   fi
190 done
192 # Remove any duplicates.
193 to=""
194 for t in $targetobjs; do
195   case " $to " in
196   *" $t "*) ;;
197   *) to="$to $t" ;;
198   esac
199 done
200 targetobjs=$to
202 if test -n "$targ_32_little"; then
203   AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
204               [Define to support 32-bit little-endian targets])
206 if test -n "$targ_32_big"; then
207   AC_DEFINE(HAVE_TARGET_32_BIG, 1,
208               [Define to support 32-bit big-endian targets])
210 if test -n "$targ_64_little"; then
211   AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
212               [Define to support 64-bit little-endian targets])
214 if test -n "$targ_64_big"; then
215   AC_DEFINE(HAVE_TARGET_64_BIG, 1,
216               [Define to support 64-bit big-endian targets])
219 if test -n "$all_targets"; then
220   TARGETOBJS='$(ALL_TARGETOBJS)'
221 else
222   TARGETOBJS="$targetobjs"
224 AC_SUBST(TARGETOBJS)
226 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
227                    [Default machine code])
228 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
229                    [Default size (32 or 64)])
230 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
231                    [Default big endian (true or false)])
232 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
233                    [Default OSABI code])
235 AC_PROG_CC
236 AC_PROG_CXX
237 AC_PROG_YACC
238 AC_PROG_RANLIB
239 AC_PROG_INSTALL
240 AC_PROG_LN_S
242 AC_GNU_SOURCE
244 ZW_GNU_GETTEXT_SISTER_DIR
245 AM_PO_SUBDIRS
247 AC_C_BIGENDIAN
249 AC_EXEEXT
251 AM_CONDITIONAL(NATIVE_LINKER,
252   test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
253 AM_CONDITIONAL(GCC, test "$GCC" = yes)
255 dnl Some architectures do not support taking pointers of functions
256 dnl defined in shared libraries except in -fPIC mode.  We need to
257 dnl tell the unittest framework if we're compiling for one of those
258 dnl targets, so it doesn't try to run the tests that do that.
259 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
260   case $target_cpu in
261     i?86) true;;
262     x86_64) false;;
263     sparc64) false;;
264     *) true;;
265   esac])
267 dnl Test for gcc 4.1 or later.  Full support for -mcmodel=medium is
268 dnl only available in gcc 4.1.
269 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
270 [AC_COMPILE_IFELSE([
271 #if !defined __GNUC__
272 error
273 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
274 error
275 #endif
276 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
278 dnl Whether we can test -mcmodel=medium.
279 AM_CONDITIONAL(MCMODEL_MEDIUM,
280 [test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
282 dnl Test for __thread support.
283 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
284 [AC_COMPILE_IFELSE([__thread int i = 1;],
285 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
287 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
289 dnl On GNU/Linux TLS in static programs only works when using glibc
290 dnl 2.4 or later.
291 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
292 [AC_COMPILE_IFELSE([
293 #include <features.h>
294 #if !defined __GLIBC__
295 error
296 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
297 error
298 #endif
299 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
301 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
303 dnl Test for #pragma omp threadprivate
304 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
305 [save_CFLAGS="$CFLAGS"
306 CFLAGS="$CFLAGS -fopenmp"
307 AC_COMPILE_IFELSE([
308 #include <omp.h>
309 int i;
310 #pragma omp threadprivate (i)
311 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
312 CFLAGS="$save_CFLAGS"])
313 if test "$gold_cv_c_threadprivate" = "yes"; then
314   AC_DEFINE(HAVE_OMP_SUPPORT, 1,
315             [Define if compiler supports #pragma omp threadprivate])
317 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
319 dnl Test for the -ftls-dialect=gnu2 option.
320 save_CFLAGS="$CFLAGS"
321 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
322 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
323 CFLAGS="$save_CFLAGS"
324 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
326 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
327 dnl only with glibc 2.9 or later.
328 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
329 [AC_COMPILE_IFELSE([
330 #include <features.h>
331 #if !defined __GLIBC__
332 error
333 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
334 error
335 #endif
336 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
338 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
340 dnl Check whether the compiler supports constructor priorities in
341 dnl attributes, which were added in gcc 4.3.
342 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
343 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
344 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
346 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
348 dnl Test for the -frandom-seed option.
349 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
350 [save_CFLAGS="$CFLAGS"
351 CFLAGS="$CFLAGS -frandom-seed=foo"
352 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
353 [gold_cv_c_random_seed=no])
354 CFLAGS="$save_CFLAGS"])
355 if test "$gold_cv_c_random_seed" = "yes"; then
356   # In Makefile, '$@' will be expanded to be the name of the file
357   # being built, providing a unique seed for each file.
358   RANDOM_SEED_CFLAGS=-frandom-seed=\$@
360 AC_SUBST(RANDOM_SEED_CFLAGS)
362 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
363 dnl 2.11 or later.
364 AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11],
365 [AC_COMPILE_IFELSE([
366 #include <features.h>
367 #if !defined __GLIBC__
368 error
369 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
370 error
371 #endif
372 ], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])])
374 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes")
376 AM_BINUTILS_WARNINGS
378 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
379 AC_SUBST(WARN_CXXFLAGS)
381 dnl Force support for large files by default.  This may need to be
382 dnl host dependent.  If build == host, we can check getconf LFS_CFLAGS.
383 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
384 AC_SUBST(LFS_CFLAGS)
386 AC_CHECK_FUNCS(chsize)
387 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
389 # Link in zlib if we can.  This allows us to write compressed sections.
390 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
391 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
393 dnl We have to check these in C, not C++, because autoconf generates
394 dnl tests which have no type information, and current glibc provides
395 dnl multiple declarations of functions like basename when compiling
396 dnl with C++.
397 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
399 AC_LANG_PUSH(C++)
401 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
402 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
403 AC_CHECK_HEADERS(byteswap.h)
404 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
405 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
407 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
408 # at link time with some versions of GCC.
409 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
410 [gold_cv_unordered_map_rehash],
411 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
412 #include <tr1/unordered_map>
413 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
414 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
415 if test "$gold_cv_unordered_map_rehash" = "yes"; then
416   AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
417             [Define if ::std::tr1::unordered_map::rehash is usable])
420 # gcc 4.3.0 doesn't recognize the printf attribute on a template
421 # function.  Check for that.  This is gcc bug 35546.  This test can
422 # probably be removed after the bug has been fixed for a while.
423 AC_CACHE_CHECK([whether we can use attributes with template functions],
424 [gold_cv_template_attribute],
425 [AC_COMPILE_IFELSE([
426 template<typename T> extern void foo(const char*, ...)
427   __attribute__ ((__format__ (__printf__, 1, 2)));
428 template<typename T> void foo(const char* format, ...) {}
429 void bar() { foo<int>("%s\n", "foo"); }
430 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
431 if test "$gold_cv_template_attribute" = "yes"; then
432   AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
433             [Define if attributes work on C++ templates])
436 dnl Check if the system has struct stat::st_mtim.
437 AC_CACHE_CHECK([for struct stat::st_mtim.],
438 [gold_cv_stat_st_mtim],
439 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
440 #include <sys/stat.h>
441 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
442 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
443 if test "$gold_cv_stat_st_mtim" = "yes"; then
444   AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
445             [Define if struct stat has a field st_mtim with timespec for mtime])
448 AC_LANG_POP(C++)
450 AM_MAINTAINER_MODE
452 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)