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