Fix a typo in comments.
[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
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
63402fe4
ILT
255dnl Some architectures do not support taking pointers of functions
256dnl defined in shared libraries except in -fPIC mode. We need to
257dnl tell the unittest framework if we're compiling for one of those
258dnl targets, so it doesn't try to run the tests that do that.
259AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
260 case $target_cpu in
261 i?86) true;;
262 x86_64) false;;
11936fb1 263 sparc64) false;;
63402fe4
ILT
264 *) true;;
265 esac])
266
084e2665
ILT
267dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
268dnl only available in gcc 4.1.
269AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
270[AC_COMPILE_IFELSE([
271#if !defined __GNUC__
272error
273#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
274error
275#endif
276], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
277
8a5e3e08 278dnl Whether we can test -mcmodel=medium.
084e2665
ILT
279AM_CONDITIONAL(MCMODEL_MEDIUM,
280[test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
8a5e3e08 281
6eee141f 282dnl Test for __thread support.
097ec620
ILT
283AC_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])])
286
287AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
288
289dnl On GNU/Linux TLS in static programs only works when using glibc
290dnl 2.4 or later.
291AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
292[AC_COMPILE_IFELSE([
293#include <features.h>
294#if !defined __GLIBC__
295error
296#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
297error
298#endif
299], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
300
301AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
6eee141f 302
155a0dd7
ILT
303dnl Test for #pragma omp threadprivate
304AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
305[save_CFLAGS="$CFLAGS"
306CFLAGS="$CFLAGS -fopenmp"
307AC_COMPILE_IFELSE([
308#include <omp.h>
309int i;
310#pragma omp threadprivate (i)
311], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
312CFLAGS="$save_CFLAGS"])
313if test "$gold_cv_c_threadprivate" = "yes"; then
314 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
315 [Define if compiler supports #pragma omp threadprivate])
316fi
317AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
318
c2b45e22
CC
319dnl Test for the -ftls-dialect=gnu2 option.
320save_CFLAGS="$CFLAGS"
321CFLAGS="$CFLAGS -mtls-dialect=gnu2"
322AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
323CFLAGS="$save_CFLAGS"
324AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
325
326dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
b0074644
ILT
327dnl only with glibc 2.9 or later.
328AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
c2b45e22
CC
329[AC_COMPILE_IFELSE([
330#include <features.h>
331#if !defined __GLIBC__
332error
b0074644 333#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
c2b45e22
CC
334error
335#endif
b0074644 336], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
c2b45e22 337
b0074644 338AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
c2b45e22 339
2fd32231
ILT
340dnl Check whether the compiler supports constructor priorities in
341dnl attributes, which were added in gcc 4.3.
342AC_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])])
345
346AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
347
1d1f116d
CD
348dnl Test for the -frandom-seed option.
349AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
350[save_CFLAGS="$CFLAGS"
351CFLAGS="$CFLAGS -frandom-seed=foo"
352AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
353[gold_cv_c_random_seed=no])
354CFLAGS="$save_CFLAGS"])
355if 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=\$@
359fi
360AC_SUBST(RANDOM_SEED_CFLAGS)
361
bae7f79e
ILT
362AM_BINUTILS_WARNINGS
363
2ea97941 364WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
bae7f79e
ILT
365AC_SUBST(WARN_CXXFLAGS)
366
367dnl Force support for large files by default. This may need to be
368dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
494e05f4
ILT
369LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
370AC_SUBST(LFS_CFLAGS)
bae7f79e 371
9201d894 372AC_CHECK_FUNCS(chsize)
fd03461a 373AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
82dcae9d 374
9a0910c3
ILT
375# Link in zlib if we can. This allows us to write compressed sections.
376AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
7fcd0256 377AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
9a0910c3 378
0639a6f6
ILT
379dnl We have to check these in C, not C++, because autoconf generates
380dnl tests which have no type information, and current glibc provides
381dnl multiple declarations of functions like basename when compiling
382dnl with C++.
383AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
384
54dc6425 385AC_LANG_PUSH(C++)
d288e464 386
54dc6425
ILT
387AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
388AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
15d5fa16 389AC_CHECK_HEADERS(byteswap.h)
d675ff46 390AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
3d857b98 391AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
d288e464 392
40fde488
CD
393# Use of ::std::tr1::unordered_map::rehash causes undefined symbols
394# at link time with some versions of GCC.
395AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
396[gold_cv_unordered_map_rehash],
397[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
398#include <tr1/unordered_map>
399void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
400]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
401if test "$gold_cv_unordered_map_rehash" = "yes"; then
402 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
403 [Define if ::std::tr1::unordered_map::rehash is usable])
404fi
405
04bf7072
ILT
406# gcc 4.3.0 doesn't recognize the printf attribute on a template
407# function. Check for that. This is gcc bug 35546. This test can
408# probably be removed after the bug has been fixed for a while.
409AC_CACHE_CHECK([whether we can use attributes with template functions],
410[gold_cv_template_attribute],
411[AC_COMPILE_IFELSE([
412template<typename T> extern void foo(const char*, ...)
413 __attribute__ ((__format__ (__printf__, 1, 2)));
414template<typename T> void foo(const char* format, ...) {}
415void bar() { foo<int>("%s\n", "foo"); }
416], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
417if test "$gold_cv_template_attribute" = "yes"; then
418 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
419 [Define if attributes work on C++ templates])
420fi
421
5d329b7d
ILT
422dnl Check if the system has struct stat::st_mtim.
423AC_CACHE_CHECK([for struct stat::st_mtim.],
424[gold_cv_stat_st_mtim],
425[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
426#include <sys/stat.h>
427long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
428]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
429if test "$gold_cv_stat_st_mtim" = "yes"; then
430 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
431 [Define if struct stat has a field st_mtim with timespec for mtime])
432fi
433
54dc6425
ILT
434AC_LANG_POP(C++)
435
bae7f79e
ILT
436AM_MAINTAINER_MODE
437
5a6f7e2d 438AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.188982 seconds and 4 git commands to generate.