2010-02-04 Doug Kwan <dougkwan@google.com>
[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 targetobjs=`echo $targetobjs | tr ' ' '\n' | sort | uniq | tr '\n' ' '`
167
168 if test -n "$targ_32_little"; then
169 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
170 [Define to support 32-bit little-endian targets])
171 fi
172 if test -n "$targ_32_big"; then
173 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
174 [Define to support 32-bit big-endian targets])
175 fi
176 if test -n "$targ_64_little"; then
177 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
178 [Define to support 64-bit little-endian targets])
179 fi
180 if test -n "$targ_64_big"; then
181 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
182 [Define to support 64-bit big-endian targets])
183 fi
184
185 if test -n "$all_targets"; then
186 TARGETOBJS='$(ALL_TARGETOBJS)'
187 else
188 TARGETOBJS="$targetobjs"
189 fi
190 AC_SUBST(TARGETOBJS)
191
192 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
193 [Default machine code])
194 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
195 [Default size (32 or 64)])
196 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
197 [Default big endian (true or false)])
198 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
199 [Default OSABI code])
200
201 AC_PROG_CC
202 AC_PROG_CXX
203 AC_PROG_YACC
204 AC_PROG_RANLIB
205 AC_PROG_INSTALL
206 AC_PROG_LN_S
207
208 AC_GNU_SOURCE
209
210 ZW_GNU_GETTEXT_SISTER_DIR
211 AM_PO_SUBDIRS
212
213 AC_C_BIGENDIAN
214
215 AC_EXEEXT
216
217 AM_CONDITIONAL(NATIVE_LINKER,
218 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
219 AM_CONDITIONAL(GCC, test "$GCC" = yes)
220
221 dnl Some architectures do not support taking pointers of functions
222 dnl defined in shared libraries except in -fPIC mode. We need to
223 dnl tell the unittest framework if we're compiling for one of those
224 dnl targets, so it doesn't try to run the tests that do that.
225 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
226 case $target_cpu in
227 i?86) true;;
228 x86_64) false;;
229 sparc64) false;;
230 *) true;;
231 esac])
232
233 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
234 dnl only available in gcc 4.1.
235 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
236 [AC_COMPILE_IFELSE([
237 #if !defined __GNUC__
238 error
239 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
240 error
241 #endif
242 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
243
244 dnl Whether we can test -mcmodel=medium.
245 AM_CONDITIONAL(MCMODEL_MEDIUM,
246 [test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
247
248 dnl Test for __thread support.
249 AC_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
253 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
254
255 dnl On GNU/Linux TLS in static programs only works when using glibc
256 dnl 2.4 or later.
257 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
258 [AC_COMPILE_IFELSE([
259 #include <features.h>
260 #if !defined __GLIBC__
261 error
262 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
263 error
264 #endif
265 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
266
267 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
268
269 dnl Test for #pragma omp threadprivate
270 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
271 [save_CFLAGS="$CFLAGS"
272 CFLAGS="$CFLAGS -fopenmp"
273 AC_COMPILE_IFELSE([
274 #include <omp.h>
275 int i;
276 #pragma omp threadprivate (i)
277 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
278 CFLAGS="$save_CFLAGS"])
279 if test "$gold_cv_c_threadprivate" = "yes"; then
280 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
281 [Define if compiler supports #pragma omp threadprivate])
282 fi
283 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
284
285 dnl Test for the -ftls-dialect=gnu2 option.
286 save_CFLAGS="$CFLAGS"
287 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
288 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
289 CFLAGS="$save_CFLAGS"
290 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
291
292 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
293 dnl only with glibc 2.9 or later.
294 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
295 [AC_COMPILE_IFELSE([
296 #include <features.h>
297 #if !defined __GLIBC__
298 error
299 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
300 error
301 #endif
302 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
303
304 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
305
306 dnl Check whether the compiler supports constructor priorities in
307 dnl attributes, which were added in gcc 4.3.
308 AC_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
312 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
313
314 dnl Test for the -frandom-seed option.
315 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
316 [save_CFLAGS="$CFLAGS"
317 CFLAGS="$CFLAGS -frandom-seed=foo"
318 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
319 [gold_cv_c_random_seed=no])
320 CFLAGS="$save_CFLAGS"])
321 if 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=\$@
325 fi
326 AC_SUBST(RANDOM_SEED_CFLAGS)
327
328 AM_BINUTILS_WARNINGS
329
330 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
331 AC_SUBST(WARN_CXXFLAGS)
332
333 dnl Force support for large files by default. This may need to be
334 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
335 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
336 AC_SUBST(LFS_CFLAGS)
337
338 AC_CHECK_FUNCS(chsize)
339 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
340
341 # Link in zlib if we can. This allows us to write compressed sections.
342 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
343 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
344
345 dnl We have to check these in C, not C++, because autoconf generates
346 dnl tests which have no type information, and current glibc provides
347 dnl multiple declarations of functions like basename when compiling
348 dnl with C++.
349 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
350
351 AC_LANG_PUSH(C++)
352
353 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
354 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
355 AC_CHECK_HEADERS(byteswap.h)
356 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
357 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
358
359 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
360 # at link time with some versions of GCC.
361 AC_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>
365 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
366 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
367 if 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])
370 fi
371
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.
375 AC_CACHE_CHECK([whether we can use attributes with template functions],
376 [gold_cv_template_attribute],
377 [AC_COMPILE_IFELSE([
378 template<typename T> extern void foo(const char*, ...)
379 __attribute__ ((__format__ (__printf__, 1, 2)));
380 template<typename T> void foo(const char* format, ...) {}
381 void bar() { foo<int>("%s\n", "foo"); }
382 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
383 if test "$gold_cv_template_attribute" = "yes"; then
384 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
385 [Define if attributes work on C++ templates])
386 fi
387
388 dnl Check if the system has struct stat::st_mtim.
389 AC_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>
393 long 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])])
395 if 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])
398 fi
399
400 AC_LANG_POP(C++)
401
402 AM_MAINTAINER_MODE
403
404 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.049805 seconds and 5 git commands to generate.