* configure.ac: Rewrite targetobjs duplicate removal code to use
[deliverable/binutils-gdb.git] / gold / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2
3 AC_PREREQ(2.59)
4
5 AC_INIT(gold, 0.1)
6 AC_CONFIG_SRCDIR(gold.cc)
7
8 AC_CANONICAL_TARGET
9
10 AM_INIT_AUTOMAKE
11
12 AM_CONFIG_HEADER(config.h:config.in)
13
14 AC_ARG_WITH(sysroot,
15 [ --with-sysroot[=DIR] search for usr/lib et al within DIR],
16 [sysroot=$withval], [sysroot=no])
17
18 if test "$sysroot" = "yes"; then
19 sysroot='${exec_prefix}/${target_alias}/sys-root'
20 elif test "$sysroot" = "no"; then
21 sysroot=
22 fi
23
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
34 fi
35
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])
40
41 dnl For now threads are a configure time option.
42 AC_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])
50 if test "$threads" = "yes"; then
51 AC_DEFINE(ENABLE_THREADS, 1,
52 [Define to do multi-threaded linking])
53 fi
54 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
55
56 AC_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])
64 if test "$plugins" = "yes"; then
65 AC_DEFINE(ENABLE_PLUGINS, 1,
66 [Define to enable linker plugins])
67 fi
68 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
69
70 AC_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 ;;
82 esac],
83 [# For now, enable all targets by default
84 enable_targets=all
85 ])
86
87 # Canonicalize the enabled targets.
88 if 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
98 fi
99
100 # See which specific instantiations we need.
101 targetobjs=
102 all_targets=
103 default_machine=
104 default_size=
105 default_big_endian=
106 default_osabi=ELFOSABI_NONE
107 targ_32_little=
108 targ_32_big=
109 targ_64_little=
110 targ_64_big=
111 for targ in $target $canon_targets; do
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
117 all_targets=yes
118 else
119 . ${srcdir}/configure.tgt
120
121 if test "$targ_obj" = "UNKNOWN"; then
122 AC_MSG_ERROR("unsupported target $targ")
123 else
124 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
125 if test "$targ_extra_obj" != ""; then
126 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
127 fi
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
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
153 default_osabi=$targ_osabi
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")
160 fi
161 fi
162 fi
163 done
164
165 # Remove any duplicates.
166 to=""
167 for t in $targetobjs; do
168 case " $to " in
169 *" $t "*) ;;
170 *) to="$to $t" ;;
171 esac
172 done
173 targetobjs=$to
174
175 if test -n "$targ_32_little"; then
176 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
177 [Define to support 32-bit little-endian targets])
178 fi
179 if test -n "$targ_32_big"; then
180 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
181 [Define to support 32-bit big-endian targets])
182 fi
183 if test -n "$targ_64_little"; then
184 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
185 [Define to support 64-bit little-endian targets])
186 fi
187 if test -n "$targ_64_big"; then
188 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
189 [Define to support 64-bit big-endian targets])
190 fi
191
192 if test -n "$all_targets"; then
193 TARGETOBJS='$(ALL_TARGETOBJS)'
194 else
195 TARGETOBJS="$targetobjs"
196 fi
197 AC_SUBST(TARGETOBJS)
198
199 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
200 [Default machine code])
201 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
202 [Default size (32 or 64)])
203 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
204 [Default big endian (true or false)])
205 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
206 [Default OSABI code])
207
208 AC_PROG_CC
209 AC_PROG_CXX
210 AC_PROG_YACC
211 AC_PROG_RANLIB
212 AC_PROG_INSTALL
213 AC_PROG_LN_S
214
215 AC_GNU_SOURCE
216
217 ZW_GNU_GETTEXT_SISTER_DIR
218 AM_PO_SUBDIRS
219
220 AC_C_BIGENDIAN
221
222 AC_EXEEXT
223
224 AM_CONDITIONAL(NATIVE_LINKER,
225 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
226 AM_CONDITIONAL(GCC, test "$GCC" = yes)
227
228 dnl Some architectures do not support taking pointers of functions
229 dnl defined in shared libraries except in -fPIC mode. We need to
230 dnl tell the unittest framework if we're compiling for one of those
231 dnl targets, so it doesn't try to run the tests that do that.
232 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
233 case $target_cpu in
234 i?86) true;;
235 x86_64) false;;
236 sparc64) false;;
237 *) true;;
238 esac])
239
240 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
241 dnl only available in gcc 4.1.
242 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
243 [AC_COMPILE_IFELSE([
244 #if !defined __GNUC__
245 error
246 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
247 error
248 #endif
249 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
250
251 dnl Whether we can test -mcmodel=medium.
252 AM_CONDITIONAL(MCMODEL_MEDIUM,
253 [test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
254
255 dnl Test for __thread support.
256 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
257 [AC_COMPILE_IFELSE([__thread int i = 1;],
258 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
259
260 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
261
262 dnl On GNU/Linux TLS in static programs only works when using glibc
263 dnl 2.4 or later.
264 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
265 [AC_COMPILE_IFELSE([
266 #include <features.h>
267 #if !defined __GLIBC__
268 error
269 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
270 error
271 #endif
272 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
273
274 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
275
276 dnl Test for #pragma omp threadprivate
277 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
278 [save_CFLAGS="$CFLAGS"
279 CFLAGS="$CFLAGS -fopenmp"
280 AC_COMPILE_IFELSE([
281 #include <omp.h>
282 int i;
283 #pragma omp threadprivate (i)
284 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
285 CFLAGS="$save_CFLAGS"])
286 if test "$gold_cv_c_threadprivate" = "yes"; then
287 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
288 [Define if compiler supports #pragma omp threadprivate])
289 fi
290 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
291
292 dnl Test for the -ftls-dialect=gnu2 option.
293 save_CFLAGS="$CFLAGS"
294 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
295 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
296 CFLAGS="$save_CFLAGS"
297 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
298
299 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
300 dnl only with glibc 2.9 or later.
301 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
302 [AC_COMPILE_IFELSE([
303 #include <features.h>
304 #if !defined __GLIBC__
305 error
306 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
307 error
308 #endif
309 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
310
311 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
312
313 dnl Check whether the compiler supports constructor priorities in
314 dnl attributes, which were added in gcc 4.3.
315 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
316 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
317 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
318
319 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
320
321 dnl Test for the -frandom-seed option.
322 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
323 [save_CFLAGS="$CFLAGS"
324 CFLAGS="$CFLAGS -frandom-seed=foo"
325 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
326 [gold_cv_c_random_seed=no])
327 CFLAGS="$save_CFLAGS"])
328 if test "$gold_cv_c_random_seed" = "yes"; then
329 # In Makefile, '$@' will be expanded to be the name of the file
330 # being built, providing a unique seed for each file.
331 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
332 fi
333 AC_SUBST(RANDOM_SEED_CFLAGS)
334
335 AM_BINUTILS_WARNINGS
336
337 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
338 AC_SUBST(WARN_CXXFLAGS)
339
340 dnl Force support for large files by default. This may need to be
341 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
342 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
343 AC_SUBST(LFS_CFLAGS)
344
345 AC_CHECK_FUNCS(chsize)
346 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
347
348 # Link in zlib if we can. This allows us to write compressed sections.
349 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
350 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
351
352 dnl We have to check these in C, not C++, because autoconf generates
353 dnl tests which have no type information, and current glibc provides
354 dnl multiple declarations of functions like basename when compiling
355 dnl with C++.
356 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
357
358 AC_LANG_PUSH(C++)
359
360 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
361 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
362 AC_CHECK_HEADERS(byteswap.h)
363 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
364 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
365
366 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
367 # at link time with some versions of GCC.
368 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
369 [gold_cv_unordered_map_rehash],
370 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
371 #include <tr1/unordered_map>
372 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
373 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
374 if test "$gold_cv_unordered_map_rehash" = "yes"; then
375 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
376 [Define if ::std::tr1::unordered_map::rehash is usable])
377 fi
378
379 # gcc 4.3.0 doesn't recognize the printf attribute on a template
380 # function. Check for that. This is gcc bug 35546. This test can
381 # probably be removed after the bug has been fixed for a while.
382 AC_CACHE_CHECK([whether we can use attributes with template functions],
383 [gold_cv_template_attribute],
384 [AC_COMPILE_IFELSE([
385 template<typename T> extern void foo(const char*, ...)
386 __attribute__ ((__format__ (__printf__, 1, 2)));
387 template<typename T> void foo(const char* format, ...) {}
388 void bar() { foo<int>("%s\n", "foo"); }
389 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
390 if test "$gold_cv_template_attribute" = "yes"; then
391 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
392 [Define if attributes work on C++ templates])
393 fi
394
395 dnl Check if the system has struct stat::st_mtim.
396 AC_CACHE_CHECK([for struct stat::st_mtim.],
397 [gold_cv_stat_st_mtim],
398 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
399 #include <sys/stat.h>
400 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
401 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
402 if test "$gold_cv_stat_st_mtim" = "yes"; then
403 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
404 [Define if struct stat has a field st_mtim with timespec for mtime])
405 fi
406
407 AC_LANG_POP(C++)
408
409 AM_MAINTAINER_MODE
410
411 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.038737 seconds and 5 git commands to generate.