* options.h (class General_options): Define
[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 Whether we can test -mcmodel=medium.
231 AM_CONDITIONAL(MCMODEL_MEDIUM, [test "$target_cpu" = "x86_64"])
232
233 dnl Test for __thread support.
234 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
235 [AC_COMPILE_IFELSE([__thread int i = 1;],
236 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
237
238 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
239
240 dnl On GNU/Linux TLS in static programs only works when using glibc
241 dnl 2.4 or later.
242 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
243 [AC_COMPILE_IFELSE([
244 #include <features.h>
245 #if !defined __GLIBC__
246 error
247 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
248 error
249 #endif
250 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
251
252 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
253
254 dnl Test for #pragma omp threadprivate
255 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
256 [save_CFLAGS="$CFLAGS"
257 CFLAGS="$CFLAGS -fopenmp"
258 AC_COMPILE_IFELSE([
259 #include <omp.h>
260 int i;
261 #pragma omp threadprivate (i)
262 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
263 CFLAGS="$save_CFLAGS"])
264 if test "$gold_cv_c_threadprivate" = "yes"; then
265 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
266 [Define if compiler supports #pragma omp threadprivate])
267 fi
268 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
269
270 dnl Test for the -ftls-dialect=gnu2 option.
271 save_CFLAGS="$CFLAGS"
272 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
273 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
274 CFLAGS="$save_CFLAGS"
275 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
276
277 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
278 dnl only with glibc 2.9 or later.
279 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
280 [AC_COMPILE_IFELSE([
281 #include <features.h>
282 #if !defined __GLIBC__
283 error
284 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
285 error
286 #endif
287 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
288
289 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
290
291 dnl Check whether the compiler supports constructor priorities in
292 dnl attributes, which were added in gcc 4.3.
293 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
294 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
295 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
296
297 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
298
299 dnl Test for the -frandom-seed option.
300 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
301 [save_CFLAGS="$CFLAGS"
302 CFLAGS="$CFLAGS -frandom-seed=foo"
303 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
304 [gold_cv_c_random_seed=no])
305 CFLAGS="$save_CFLAGS"])
306 if test "$gold_cv_c_random_seed" = "yes"; then
307 # In Makefile, '$@' will be expanded to be the name of the file
308 # being built, providing a unique seed for each file.
309 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
310 fi
311 AC_SUBST(RANDOM_SEED_CFLAGS)
312
313 AM_BINUTILS_WARNINGS
314
315 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
316 AC_SUBST(WARN_CXXFLAGS)
317
318 dnl Force support for large files by default. This may need to be
319 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
320 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
321 AC_SUBST(LFS_CFLAGS)
322
323 AC_CHECK_FUNCS(chsize)
324 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
325
326 # Link in zlib if we can. This allows us to write compressed sections.
327 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
328 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
329
330 dnl We have to check these in C, not C++, because autoconf generates
331 dnl tests which have no type information, and current glibc provides
332 dnl multiple declarations of functions like basename when compiling
333 dnl with C++.
334 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
335
336 AC_LANG_PUSH(C++)
337
338 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
339 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
340 AC_CHECK_HEADERS(byteswap.h)
341 AC_CHECK_FUNCS(mallinfo posix_fallocate)
342 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
343
344 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
345 # at link time with some versions of GCC.
346 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
347 [gold_cv_unordered_map_rehash],
348 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
349 #include <tr1/unordered_map>
350 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
351 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
352 if test "$gold_cv_unordered_map_rehash" = "yes"; then
353 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
354 [Define if ::std::tr1::unordered_map::rehash is usable])
355 fi
356
357 # gcc 4.3.0 doesn't recognize the printf attribute on a template
358 # function. Check for that. This is gcc bug 35546. This test can
359 # probably be removed after the bug has been fixed for a while.
360 AC_CACHE_CHECK([whether we can use attributes with template functions],
361 [gold_cv_template_attribute],
362 [AC_COMPILE_IFELSE([
363 template<typename T> extern void foo(const char*, ...)
364 __attribute__ ((__format__ (__printf__, 1, 2)));
365 template<typename T> void foo(const char* format, ...) {}
366 void bar() { foo<int>("%s\n", "foo"); }
367 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
368 if test "$gold_cv_template_attribute" = "yes"; then
369 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
370 [Define if attributes work on C++ templates])
371 fi
372
373 AC_LANG_POP(C++)
374
375 AM_MAINTAINER_MODE
376
377 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.048385 seconds and 5 git commands to generate.