* script-sections.h (class Script_sections): Make
[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([no-dist parallel-tests])
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 "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)
67
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])
80 fi
81 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
82
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])
94 fi
95 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
96
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
112 ])
113
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
125 fi
126
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
147
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
175
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
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")
187 fi
188 fi
189 fi
190 done
191
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
201
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])
205 fi
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])
209 fi
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])
213 fi
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])
217 fi
218
219 if test -n "$all_targets"; then
220 TARGETOBJS='$(ALL_TARGETOBJS)'
221 else
222 TARGETOBJS="$targetobjs"
223 fi
224 AC_SUBST(TARGETOBJS)
225
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])
234
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
241
242 AC_GNU_SOURCE
243
244 ZW_GNU_GETTEXT_SISTER_DIR
245 AM_PO_SUBDIRS
246
247 AC_C_BIGENDIAN
248
249 AC_EXEEXT
250
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)
254
255 AM_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
258 dnl Some architectures do not support taking pointers of functions
259 dnl defined in shared libraries except in -fPIC mode. We need to
260 dnl tell the unittest framework if we're compiling for one of those
261 dnl targets, so it doesn't try to run the tests that do that.
262 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
263 case $target_cpu in
264 i?86) true;;
265 x86_64) false;;
266 sparc64) false;;
267 *) true;;
268 esac])
269
270 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
271 dnl only available in gcc 4.1.
272 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
273 [AC_COMPILE_IFELSE([
274 #if !defined __GNUC__
275 error
276 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
277 error
278 #endif
279 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
280
281 dnl Whether we can test -mcmodel=medium.
282 AM_CONDITIONAL(MCMODEL_MEDIUM,
283 [test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
284
285 dnl Test for __thread support.
286 AC_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
290 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
291
292 dnl On GNU/Linux TLS in static programs only works when using glibc
293 dnl 2.4 or later.
294 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
295 [AC_COMPILE_IFELSE([
296 #include <features.h>
297 #if !defined __GLIBC__
298 error
299 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
300 error
301 #endif
302 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
303
304 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
305
306 dnl Test for #pragma omp threadprivate
307 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
308 [save_CFLAGS="$CFLAGS"
309 CFLAGS="$CFLAGS -fopenmp"
310 AC_COMPILE_IFELSE([
311 #include <omp.h>
312 int i;
313 #pragma omp threadprivate (i)
314 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
315 CFLAGS="$save_CFLAGS"])
316 if test "$gold_cv_c_threadprivate" = "yes"; then
317 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
318 [Define if compiler supports #pragma omp threadprivate])
319 fi
320 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
321
322 dnl Test for the -ftls-dialect=gnu2 option.
323 save_CFLAGS="$CFLAGS"
324 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
325 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
326 CFLAGS="$save_CFLAGS"
327 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
328
329 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
330 dnl only with glibc 2.9 or later.
331 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
332 [AC_COMPILE_IFELSE([
333 #include <features.h>
334 #if !defined __GLIBC__
335 error
336 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
337 error
338 #endif
339 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
340
341 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
342
343 dnl Check whether the compiler supports constructor priorities in
344 dnl attributes, which were added in gcc 4.3.
345 AC_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
349 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
350
351 dnl Test for the -frandom-seed option.
352 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
353 [save_CFLAGS="$CFLAGS"
354 CFLAGS="$CFLAGS -frandom-seed=foo"
355 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
356 [gold_cv_c_random_seed=no])
357 CFLAGS="$save_CFLAGS"])
358 if 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=\$@
362 fi
363 AC_SUBST(RANDOM_SEED_CFLAGS)
364
365 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
366 dnl 2.11 or later.
367 AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11],
368 [AC_COMPILE_IFELSE([
369 #include <features.h>
370 #if !defined __GLIBC__
371 error
372 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
373 error
374 #endif
375 ], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])])
376
377 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes")
378
379 AM_BINUTILS_WARNINGS
380
381 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
382 AC_SUBST(WARN_CXXFLAGS)
383
384 dnl Force support for large files by default. This may need to be
385 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
386 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
387 AC_SUBST(LFS_CFLAGS)
388
389 AC_CHECK_FUNCS(chsize)
390 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
391
392 # Link in zlib if we can. This allows us to write compressed sections.
393 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
394 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
395
396 dnl We have to check these in C, not C++, because autoconf generates
397 dnl tests which have no type information, and current glibc provides
398 dnl multiple declarations of functions like basename when compiling
399 dnl with C++.
400 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
401
402 AC_LANG_PUSH(C++)
403
404 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
405 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
406 AC_CHECK_HEADERS(byteswap.h)
407 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
408 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
409
410 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
411 # at link time with some versions of GCC.
412 AC_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>
416 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
417 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
418 if 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])
421 fi
422
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.
426 AC_CACHE_CHECK([whether we can use attributes with template functions],
427 [gold_cv_template_attribute],
428 [AC_COMPILE_IFELSE([
429 template<typename T> extern void foo(const char*, ...)
430 __attribute__ ((__format__ (__printf__, 1, 2)));
431 template<typename T> void foo(const char* format, ...) {}
432 void bar() { foo<int>("%s\n", "foo"); }
433 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
434 if test "$gold_cv_template_attribute" = "yes"; then
435 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
436 [Define if attributes work on C++ templates])
437 fi
438
439 dnl Check if the system has struct stat::st_mtim.
440 AC_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>
444 long 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])])
446 if 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])
449 fi
450
451 AC_LANG_POP(C++)
452
453 AM_MAINTAINER_MODE
454
455 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.044238 seconds and 5 git commands to generate.