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