2010-02-05 Doug Kwan <dougkwan@google.com>
[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
8486ee48 10AM_INIT_AUTOMAKE
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
fe9a4c12
ILT
41dnl For now threads are a configure time option.
42AC_ARG_ENABLE([threads],
43[ --enable-threads multi-threaded linking],
44[case "${enableval}" in
45 yes | "") threads=yes ;;
46 no) threads=no ;;
47 *) threads=yes ;;
48 esac],
49[threads=no])
50if test "$threads" = "yes"; then
51 AC_DEFINE(ENABLE_THREADS, 1,
52 [Define to do multi-threaded linking])
53fi
54AM_CONDITIONAL(THREADS, test "$threads" = "yes")
89fc3421
CC
55
56AC_ARG_ENABLE([plugins],
57[ --enable-plugins linker plugins],
58[case "${enableval}" in
59 yes | "") plugins=yes ;;
60 no) plugins=no ;;
61 *) plugins=yes ;;
62 esac],
63[plugins=no])
64if test "$plugins" = "yes"; then
65 AC_DEFINE(ENABLE_PLUGINS, 1,
66 [Define to enable linker plugins])
67fi
68AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
fe9a4c12 69
193a53d9
ILT
70AC_ARG_ENABLE([targets],
71[ --enable-targets alternative target configurations],
72[case "${enableval}" in
73 yes | "")
74 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
75 ;;
76 no)
77 enable_targets=
78 ;;
79 *)
80 enable_targets=$enableval
81 ;;
82esac],
83[# For now, enable all targets by default
84 enable_targets=all
85])
86
87# Canonicalize the enabled targets.
88if test -n "$enable_targets"; then
89 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
90 result=`$ac_config_sub $targ 2>/dev/null`
91 if test -n "$result"; then
92 canon_targets="$canon_targets $result"
93 else
94 # Permit unrecognized target names, like "all".
95 canon_targets="$canon_targets $targ"
96 fi
97 done
98fi
99
100# See which specific instantiations we need.
6df6da4a
ILT
101targetobjs=
102all_targets=
fbfba508
ILT
103default_machine=
104default_size=
105default_big_endian=
36959681 106default_osabi=ELFOSABI_NONE
fbfba508
ILT
107targ_32_little=
108targ_32_big=
109targ_64_little=
110targ_64_big=
193a53d9 111for targ in $target $canon_targets; do
193a53d9
ILT
112 if test "$targ" = "all"; then
113 targ_32_little=yes
114 targ_32_big=yes
115 targ_64_little=yes
116 targ_64_big=yes
6df6da4a 117 all_targets=yes
193a53d9 118 else
fbfba508
ILT
119 . ${srcdir}/configure.tgt
120
121 if test "$targ_obj" = "UNKNOWN"; then
6df6da4a 122 AC_MSG_ERROR("unsupported target $targ")
fbfba508
ILT
123 else
124 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
60b2b4e7
ILT
125 if test "$targ_extra_obj" != ""; then
126 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
127 fi
f5314dd5
DM
128 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
129 if test "$targ_big_endian" = "true" \
130 -o "$targ_extra_big_endian" = "true"; then
131 targ_32_big=yes
132 fi
133 if test "$targ_big_endian" = "false" \
134 -o "$targ_extra_big_endian" = "false"; then
135 targ_32_little=yes
136 fi
137 fi
138 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
139 if test "$targ_big_endian" = "true" \
140 -o "$targ_extra_big_endian" = "true"; then
141 targ_64_big=yes
142 fi
143 if test "$targ_big_endian" = "false" \
144 -o "$targ_extra_big_endian" = "false"; then
145 targ_64_little=yes
146 fi
fbfba508
ILT
147 fi
148
149 if test "$target" = "$targ"; then
150 default_machine=$targ_machine
151 default_size=$targ_size
152 default_big_endian=$targ_big_endian
36959681 153 default_osabi=$targ_osabi
364c7fa5
ILT
154
155 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
156 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
157 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
158 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
159 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
fbfba508
ILT
160 fi
161 fi
193a53d9
ILT
162 fi
163done
164
6cfaf60b
DK
165# Remove any duplicates.
166targetobjs=`echo $targetobjs | tr ' ' '\n' | sort | uniq | tr '\n' ' '`
167
193a53d9
ILT
168if test -n "$targ_32_little"; then
169 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
170 [Define to support 32-bit little-endian targets])
171fi
172if test -n "$targ_32_big"; then
173 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
174 [Define to support 32-bit big-endian targets])
175fi
176if test -n "$targ_64_little"; then
177 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
178 [Define to support 64-bit little-endian targets])
179fi
180if test -n "$targ_64_big"; then
181 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
182 [Define to support 64-bit big-endian targets])
183fi
184
6df6da4a
ILT
185if test -n "$all_targets"; then
186 TARGETOBJS='$(ALL_TARGETOBJS)'
187else
188 TARGETOBJS="$targetobjs"
189fi
190AC_SUBST(TARGETOBJS)
191
fbfba508
ILT
192AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
193 [Default machine code])
194AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
195 [Default size (32 or 64)])
196AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
197 [Default big endian (true or false)])
36959681
ILT
198AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
199 [Default OSABI code])
fbfba508 200
bae7f79e
ILT
201AC_PROG_CC
202AC_PROG_CXX
dbe717ef 203AC_PROG_YACC
5a6f7e2d 204AC_PROG_RANLIB
bae7f79e 205AC_PROG_INSTALL
537b5f51 206AC_PROG_LN_S
fa99aa09
ILT
207
208AC_GNU_SOURCE
209
bae7f79e
ILT
210ZW_GNU_GETTEXT_SISTER_DIR
211AM_PO_SUBDIRS
212
92e059d8
ILT
213AC_C_BIGENDIAN
214
bae7f79e
ILT
215AC_EXEEXT
216
537b5f51
ILT
217AM_CONDITIONAL(NATIVE_LINKER,
218 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
219AM_CONDITIONAL(GCC, test "$GCC" = yes)
220
63402fe4
ILT
221dnl Some architectures do not support taking pointers of functions
222dnl defined in shared libraries except in -fPIC mode. We need to
223dnl tell the unittest framework if we're compiling for one of those
224dnl targets, so it doesn't try to run the tests that do that.
225AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
226 case $target_cpu in
227 i?86) true;;
228 x86_64) false;;
11936fb1 229 sparc64) false;;
63402fe4
ILT
230 *) true;;
231 esac])
232
084e2665
ILT
233dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
234dnl only available in gcc 4.1.
235AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
236[AC_COMPILE_IFELSE([
237#if !defined __GNUC__
238error
239#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
240error
241#endif
242], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
243
8a5e3e08 244dnl Whether we can test -mcmodel=medium.
084e2665
ILT
245AM_CONDITIONAL(MCMODEL_MEDIUM,
246[test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
8a5e3e08 247
6eee141f 248dnl Test for __thread support.
097ec620
ILT
249AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
250[AC_COMPILE_IFELSE([__thread int i = 1;],
251[gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
252
253AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
254
255dnl On GNU/Linux TLS in static programs only works when using glibc
256dnl 2.4 or later.
257AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
258[AC_COMPILE_IFELSE([
259#include <features.h>
260#if !defined __GLIBC__
261error
262#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
263error
264#endif
265], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
266
267AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
6eee141f 268
155a0dd7
ILT
269dnl Test for #pragma omp threadprivate
270AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
271[save_CFLAGS="$CFLAGS"
272CFLAGS="$CFLAGS -fopenmp"
273AC_COMPILE_IFELSE([
274#include <omp.h>
275int i;
276#pragma omp threadprivate (i)
277], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
278CFLAGS="$save_CFLAGS"])
279if test "$gold_cv_c_threadprivate" = "yes"; then
280 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
281 [Define if compiler supports #pragma omp threadprivate])
282fi
283AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
284
c2b45e22
CC
285dnl Test for the -ftls-dialect=gnu2 option.
286save_CFLAGS="$CFLAGS"
287CFLAGS="$CFLAGS -mtls-dialect=gnu2"
288AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
289CFLAGS="$save_CFLAGS"
290AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
291
292dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
b0074644
ILT
293dnl only with glibc 2.9 or later.
294AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
c2b45e22
CC
295[AC_COMPILE_IFELSE([
296#include <features.h>
297#if !defined __GLIBC__
298error
b0074644 299#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
c2b45e22
CC
300error
301#endif
b0074644 302], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
c2b45e22 303
b0074644 304AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
c2b45e22 305
2fd32231
ILT
306dnl Check whether the compiler supports constructor priorities in
307dnl attributes, which were added in gcc 4.3.
308AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
309[AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
310[gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
311
312AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
313
1d1f116d
CD
314dnl Test for the -frandom-seed option.
315AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
316[save_CFLAGS="$CFLAGS"
317CFLAGS="$CFLAGS -frandom-seed=foo"
318AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
319[gold_cv_c_random_seed=no])
320CFLAGS="$save_CFLAGS"])
321if test "$gold_cv_c_random_seed" = "yes"; then
322 # In Makefile, '$@' will be expanded to be the name of the file
323 # being built, providing a unique seed for each file.
324 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
325fi
326AC_SUBST(RANDOM_SEED_CFLAGS)
327
bae7f79e
ILT
328AM_BINUTILS_WARNINGS
329
2ea97941 330WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
bae7f79e
ILT
331AC_SUBST(WARN_CXXFLAGS)
332
333dnl Force support for large files by default. This may need to be
334dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
494e05f4
ILT
335LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
336AC_SUBST(LFS_CFLAGS)
bae7f79e 337
9201d894 338AC_CHECK_FUNCS(chsize)
fd03461a 339AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
82dcae9d 340
9a0910c3
ILT
341# Link in zlib if we can. This allows us to write compressed sections.
342AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
7fcd0256 343AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
9a0910c3 344
0639a6f6
ILT
345dnl We have to check these in C, not C++, because autoconf generates
346dnl tests which have no type information, and current glibc provides
347dnl multiple declarations of functions like basename when compiling
348dnl with C++.
349AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
350
54dc6425 351AC_LANG_PUSH(C++)
d288e464 352
54dc6425
ILT
353AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
354AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
15d5fa16 355AC_CHECK_HEADERS(byteswap.h)
d675ff46 356AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
3d857b98 357AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
d288e464 358
40fde488
CD
359# Use of ::std::tr1::unordered_map::rehash causes undefined symbols
360# at link time with some versions of GCC.
361AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
362[gold_cv_unordered_map_rehash],
363[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
364#include <tr1/unordered_map>
365void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
366]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
367if test "$gold_cv_unordered_map_rehash" = "yes"; then
368 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
369 [Define if ::std::tr1::unordered_map::rehash is usable])
370fi
371
04bf7072
ILT
372# gcc 4.3.0 doesn't recognize the printf attribute on a template
373# function. Check for that. This is gcc bug 35546. This test can
374# probably be removed after the bug has been fixed for a while.
375AC_CACHE_CHECK([whether we can use attributes with template functions],
376[gold_cv_template_attribute],
377[AC_COMPILE_IFELSE([
378template<typename T> extern void foo(const char*, ...)
379 __attribute__ ((__format__ (__printf__, 1, 2)));
380template<typename T> void foo(const char* format, ...) {}
381void bar() { foo<int>("%s\n", "foo"); }
382], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
383if test "$gold_cv_template_attribute" = "yes"; then
384 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
385 [Define if attributes work on C++ templates])
386fi
387
5d329b7d
ILT
388dnl Check if the system has struct stat::st_mtim.
389AC_CACHE_CHECK([for struct stat::st_mtim.],
390[gold_cv_stat_st_mtim],
391[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
392#include <sys/stat.h>
393long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
394]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
395if test "$gold_cv_stat_st_mtim" = "yes"; then
396 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
397 [Define if struct stat has a field st_mtim with timespec for mtime])
398fi
399
54dc6425
ILT
400AC_LANG_POP(C++)
401
bae7f79e
ILT
402AM_MAINTAINER_MODE
403
5a6f7e2d 404AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.164436 seconds and 4 git commands to generate.