* configure.ac: Set the MCMODEL_MEDIUM conditional to false if
[external/binutils.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)