]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gold/configure.ac
2010-11-23 Phil Muldoon <pmuldoon@redhat.com>
[thirdparty/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.
44AC_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])
65AC_SUBST(install_as_default)
66AC_SUBST(installed_linker)
67
fe9a4c12
ILT
68dnl For now threads are a configure time option.
69AC_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])
77if test "$threads" = "yes"; then
78 AC_DEFINE(ENABLE_THREADS, 1,
79 [Define to do multi-threaded linking])
80fi
81AM_CONDITIONAL(THREADS, test "$threads" = "yes")
89fc3421
CC
82
83AC_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])
91if test "$plugins" = "yes"; then
92 AC_DEFINE(ENABLE_PLUGINS, 1,
93 [Define to enable linker plugins])
94fi
95AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
fe9a4c12 96
193a53d9
ILT
97AC_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 ;;
109esac],
110[# For now, enable all targets by default
111 enable_targets=all
112])
113
114# Canonicalize the enabled targets.
115if 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
125fi
126
127# See which specific instantiations we need.
6df6da4a
ILT
128targetobjs=
129all_targets=
fbfba508
ILT
130default_machine=
131default_size=
132default_big_endian=
36959681 133default_osabi=ELFOSABI_NONE
fbfba508
ILT
134targ_32_little=
135targ_32_big=
136targ_64_little=
137targ_64_big=
193a53d9 138for targ in $target $canon_targets; do
193a53d9
ILT
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
6df6da4a 144 all_targets=yes
193a53d9 145 else
fbfba508
ILT
146 . ${srcdir}/configure.tgt
147
148 if test "$targ_obj" = "UNKNOWN"; then
6df6da4a 149 AC_MSG_ERROR("unsupported target $targ")
fbfba508
ILT
150 else
151 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
60b2b4e7
ILT
152 if test "$targ_extra_obj" != ""; then
153 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
154 fi
f5314dd5
DM
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
fbfba508
ILT
174 fi
175
176 if test "$target" = "$targ"; then
177 default_machine=$targ_machine
178 default_size=$targ_size
179 default_big_endian=$targ_big_endian
36959681 180 default_osabi=$targ_osabi
364c7fa5
ILT
181
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")
fbfba508
ILT
187 fi
188 fi
193a53d9
ILT
189 fi
190done
191
6cfaf60b 192# Remove any duplicates.
9109c078
ILT
193to=""
194for t in $targetobjs; do
195 case " $to " in
196 *" $t "*) ;;
197 *) to="$to $t" ;;
198 esac
199done
200targetobjs=$to
6cfaf60b 201
193a53d9
ILT
202if test -n "$targ_32_little"; then
203 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
204 [Define to support 32-bit little-endian targets])
205fi
206if test -n "$targ_32_big"; then
207 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
208 [Define to support 32-bit big-endian targets])
209fi
210if test -n "$targ_64_little"; then
211 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
212 [Define to support 64-bit little-endian targets])
213fi
214if test -n "$targ_64_big"; then
215 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
216 [Define to support 64-bit big-endian targets])
217fi
218
6df6da4a
ILT
219if test -n "$all_targets"; then
220 TARGETOBJS='$(ALL_TARGETOBJS)'
221else
222 TARGETOBJS="$targetobjs"
223fi
224AC_SUBST(TARGETOBJS)
225
fbfba508
ILT
226AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
227 [Default machine code])
228AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
229 [Default size (32 or 64)])
230AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
231 [Default big endian (true or false)])
36959681
ILT
232AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
233 [Default OSABI code])
fbfba508 234
bae7f79e
ILT
235AC_PROG_CC
236AC_PROG_CXX
dbe717ef 237AC_PROG_YACC
5a6f7e2d 238AC_PROG_RANLIB
bae7f79e 239AC_PROG_INSTALL
537b5f51 240AC_PROG_LN_S
fa99aa09
ILT
241
242AC_GNU_SOURCE
243
bae7f79e
ILT
244ZW_GNU_GETTEXT_SISTER_DIR
245AM_PO_SUBDIRS
246
92e059d8
ILT
247AC_C_BIGENDIAN
248
bae7f79e
ILT
249AC_EXEEXT
250
537b5f51
ILT
251AM_CONDITIONAL(NATIVE_LINKER,
252 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
253AM_CONDITIONAL(GCC, test "$GCC" = yes)
254
eb373049
ILT
255AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
256 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
257
63402fe4
ILT
258dnl Some architectures do not support taking pointers of functions
259dnl defined in shared libraries except in -fPIC mode. We need to
260dnl tell the unittest framework if we're compiling for one of those
261dnl targets, so it doesn't try to run the tests that do that.
262AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
263 case $target_cpu in
264 i?86) true;;
265 x86_64) false;;
11936fb1 266 sparc64) false;;
63402fe4
ILT
267 *) true;;
268 esac])
269
084e2665
ILT
270dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
271dnl only available in gcc 4.1.
272AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
273[AC_COMPILE_IFELSE([
274#if !defined __GNUC__
275error
276#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
277error
278#endif
279], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
280
8a5e3e08 281dnl Whether we can test -mcmodel=medium.
084e2665
ILT
282AM_CONDITIONAL(MCMODEL_MEDIUM,
283[test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
8a5e3e08 284
6eee141f 285dnl Test for __thread support.
097ec620
ILT
286AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
287[AC_COMPILE_IFELSE([__thread int i = 1;],
288[gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
289
290AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
291
292dnl On GNU/Linux TLS in static programs only works when using glibc
293dnl 2.4 or later.
294AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
295[AC_COMPILE_IFELSE([
296#include <features.h>
297#if !defined __GLIBC__
298error
299#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
300error
301#endif
302], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
303
304AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
6eee141f 305
155a0dd7
ILT
306dnl Test for #pragma omp threadprivate
307AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
308[save_CFLAGS="$CFLAGS"
309CFLAGS="$CFLAGS -fopenmp"
310AC_COMPILE_IFELSE([
311#include <omp.h>
312int i;
313#pragma omp threadprivate (i)
314], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
315CFLAGS="$save_CFLAGS"])
316if test "$gold_cv_c_threadprivate" = "yes"; then
317 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
318 [Define if compiler supports #pragma omp threadprivate])
319fi
320AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
321
c2b45e22
CC
322dnl Test for the -ftls-dialect=gnu2 option.
323save_CFLAGS="$CFLAGS"
324CFLAGS="$CFLAGS -mtls-dialect=gnu2"
325AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
326CFLAGS="$save_CFLAGS"
327AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
328
329dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
b0074644
ILT
330dnl only with glibc 2.9 or later.
331AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
c2b45e22
CC
332[AC_COMPILE_IFELSE([
333#include <features.h>
334#if !defined __GLIBC__
335error
b0074644 336#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
c2b45e22
CC
337error
338#endif
b0074644 339], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
c2b45e22 340
b0074644 341AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
c2b45e22 342
2fd32231
ILT
343dnl Check whether the compiler supports constructor priorities in
344dnl attributes, which were added in gcc 4.3.
345AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
346[AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
347[gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
348
349AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
350
1d1f116d
CD
351dnl Test for the -frandom-seed option.
352AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
353[save_CFLAGS="$CFLAGS"
354CFLAGS="$CFLAGS -frandom-seed=foo"
355AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
356[gold_cv_c_random_seed=no])
357CFLAGS="$save_CFLAGS"])
358if test "$gold_cv_c_random_seed" = "yes"; then
359 # In Makefile, '$@' will be expanded to be the name of the file
360 # being built, providing a unique seed for each file.
361 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
362fi
363AC_SUBST(RANDOM_SEED_CFLAGS)
364
7223e9ca
ILT
365dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
366dnl 2.11 or later.
367AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11],
368[AC_COMPILE_IFELSE([
369#include <features.h>
370#if !defined __GLIBC__
371error
372#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
373error
374#endif
375], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])])
376
377AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes")
378
bae7f79e
ILT
379AM_BINUTILS_WARNINGS
380
2ea97941 381WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
bae7f79e
ILT
382AC_SUBST(WARN_CXXFLAGS)
383
384dnl Force support for large files by default. This may need to be
385dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
494e05f4
ILT
386LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
387AC_SUBST(LFS_CFLAGS)
bae7f79e 388
9201d894 389AC_CHECK_FUNCS(chsize)
fd03461a 390AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
82dcae9d 391
9a0910c3
ILT
392# Link in zlib if we can. This allows us to write compressed sections.
393AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
7fcd0256 394AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
9a0910c3 395
0639a6f6
ILT
396dnl We have to check these in C, not C++, because autoconf generates
397dnl tests which have no type information, and current glibc provides
398dnl multiple declarations of functions like basename when compiling
399dnl with C++.
400AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
401
54dc6425 402AC_LANG_PUSH(C++)
d288e464 403
54dc6425
ILT
404AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
405AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
15d5fa16 406AC_CHECK_HEADERS(byteswap.h)
d675ff46 407AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
3d857b98 408AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
d288e464 409
40fde488
CD
410# Use of ::std::tr1::unordered_map::rehash causes undefined symbols
411# at link time with some versions of GCC.
412AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
413[gold_cv_unordered_map_rehash],
414[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
415#include <tr1/unordered_map>
416void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
417]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
418if test "$gold_cv_unordered_map_rehash" = "yes"; then
419 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
420 [Define if ::std::tr1::unordered_map::rehash is usable])
421fi
422
04bf7072
ILT
423# gcc 4.3.0 doesn't recognize the printf attribute on a template
424# function. Check for that. This is gcc bug 35546. This test can
425# probably be removed after the bug has been fixed for a while.
426AC_CACHE_CHECK([whether we can use attributes with template functions],
427[gold_cv_template_attribute],
428[AC_COMPILE_IFELSE([
429template<typename T> extern void foo(const char*, ...)
430 __attribute__ ((__format__ (__printf__, 1, 2)));
431template<typename T> void foo(const char* format, ...) {}
432void bar() { foo<int>("%s\n", "foo"); }
433], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
434if test "$gold_cv_template_attribute" = "yes"; then
435 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
436 [Define if attributes work on C++ templates])
437fi
438
5d329b7d
ILT
439dnl Check if the system has struct stat::st_mtim.
440AC_CACHE_CHECK([for struct stat::st_mtim.],
441[gold_cv_stat_st_mtim],
442[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
443#include <sys/stat.h>
444long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
445]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
446if test "$gold_cv_stat_st_mtim" = "yes"; then
447 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
448 [Define if struct stat has a field st_mtim with timespec for mtime])
449fi
450
54dc6425
ILT
451AC_LANG_POP(C++)
452
bae7f79e
ILT
453AM_MAINTAINER_MODE
454
5a6f7e2d 455AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)