]> Git Repo - binutils.git/blob - gold/configure.ac
Check if -mcmodel=medium works
[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([no-dist parallel-tests])
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 "install_as_default" is true if the linker to be installed as the
42 dnl default linker, ld.
43 dnl "installed_linker" is the installed gold linker name.
44
45 default_ld=
46 AC_ARG_ENABLE(ld,
47 [[  --enable-ld[=ARG]     build ld [ARG={default,yes,no}]]],
48 [case "${enableval}" in 
49   default)
50     default_ld=ld.bfd
51     ;;
52 esac])
53
54 AC_ARG_ENABLE(gold,
55 [[  --enable-gold[=ARG]     build gold [ARG={default,yes,no}]]],
56 [case "${enableval}" in
57  yes|default)
58    if test x${default_ld} = x; then
59      install_as_default=yes
60    fi
61    installed_linker=ld.gold
62    ;;
63  no)
64    ;;
65  *)
66    AC_MSG_ERROR([invalid --enable-gold argument])
67    ;;
68  esac],
69 [install_as_default=no
70  installed_linker=ld.gold])
71 AC_SUBST(install_as_default)
72 AC_SUBST(installed_linker)
73
74 dnl For now threads are a configure time option.
75 AC_ARG_ENABLE([threads],
76 [  --enable-threads        multi-threaded linking],
77 [case "${enableval}" in
78   yes | "") threads=yes ;;
79   no) threads=no ;;
80   *) threads=yes ;;
81  esac],
82 [threads=no])
83 if test "$threads" = "yes"; then
84   AC_DEFINE(ENABLE_THREADS, 1,
85             [Define to do multi-threaded linking])
86 fi
87 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
88
89 AC_ARG_ENABLE([plugins],
90 [  --enable-plugins        linker plugins],
91 [case "${enableval}" in
92   yes | "") plugins=yes ;;
93   no) plugins=no ;;
94   *) plugins=yes ;;
95  esac],
96 [plugins=no])
97 if test "$plugins" = "yes"; then
98   AC_DEFINE(ENABLE_PLUGINS, 1,
99             [Define to enable linker plugins])
100 fi
101 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
102
103 AC_ARG_ENABLE([targets],
104 [  --enable-targets        alternative target configurations],
105 [case "${enableval}" in
106   yes | "")
107     AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
108     ;;
109   no)
110     enable_targets=
111     ;;
112   *)
113     enable_targets=$enableval
114     ;;
115 esac],
116 [# For now, enable all targets by default
117  enable_targets=all
118 ])
119
120 # Canonicalize the enabled targets.
121 if test -n "$enable_targets"; then
122   for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
123     result=`$ac_config_sub $targ 2>/dev/null`
124     if test -n "$result"; then
125       canon_targets="$canon_targets $result"
126     else
127       # Permit unrecognized target names, like "all".
128       canon_targets="$canon_targets $targ"
129     fi
130   done
131 fi
132
133 # See which specific instantiations we need.
134 targetobjs=
135 all_targets=
136 default_machine=
137 default_size=
138 default_big_endian=
139 default_osabi=ELFOSABI_NONE
140 targ_32_little=
141 targ_32_big=
142 targ_64_little=
143 targ_64_big=
144 for targ in $target $canon_targets; do
145   if test "$targ" = "all"; then
146     targ_32_little=yes
147     targ_32_big=yes
148     targ_64_little=yes
149     targ_64_big=yes
150     all_targets=yes
151   else
152     . ${srcdir}/configure.tgt
153
154     if test "$targ_obj" = "UNKNOWN"; then
155       AC_MSG_ERROR("unsupported target $targ")
156     else
157       targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
158       if test "$targ_extra_obj" != ""; then
159         targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
160       fi
161       if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
162           if test "$targ_big_endian" = "true" \
163               -o "$targ_extra_big_endian" = "true"; then
164               targ_32_big=yes
165           fi
166           if test "$targ_big_endian" = "false" \
167               -o "$targ_extra_big_endian" = "false"; then
168               targ_32_little=yes
169           fi
170       fi
171       if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
172           if test "$targ_big_endian" = "true" \
173               -o "$targ_extra_big_endian" = "true"; then
174               targ_64_big=yes
175           fi
176           if test "$targ_big_endian" = "false" \
177               -o "$targ_extra_big_endian" = "false"; then
178               targ_64_little=yes
179           fi
180       fi
181
182       if test "$target" = "$targ"; then
183         default_machine=$targ_machine
184         default_size=$targ_size
185         default_big_endian=$targ_big_endian
186         default_osabi=$targ_osabi
187
188         AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
189         AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
190         AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
191         AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
192         AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
193       fi
194     fi
195   fi
196 done
197
198 # Remove any duplicates.
199 to=""
200 for t in $targetobjs; do
201   case " $to " in
202   *" $t "*) ;;
203   *) to="$to $t" ;;
204   esac
205 done
206 targetobjs=$to
207
208 if test -n "$targ_32_little"; then
209   AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
210               [Define to support 32-bit little-endian targets])
211 fi
212 if test -n "$targ_32_big"; then
213   AC_DEFINE(HAVE_TARGET_32_BIG, 1,
214               [Define to support 32-bit big-endian targets])
215 fi
216 if test -n "$targ_64_little"; then
217   AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
218               [Define to support 64-bit little-endian targets])
219 fi
220 if test -n "$targ_64_big"; then
221   AC_DEFINE(HAVE_TARGET_64_BIG, 1,
222               [Define to support 64-bit big-endian targets])
223 fi
224
225 if test -n "$all_targets"; then
226   TARGETOBJS='$(ALL_TARGETOBJS)'
227 else
228   TARGETOBJS="$targetobjs"
229 fi
230 AC_SUBST(TARGETOBJS)
231
232 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
233                    [Default machine code])
234 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
235                    [Default size (32 or 64)])
236 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
237                    [Default big endian (true or false)])
238 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
239                    [Default OSABI code])
240
241 AC_ARG_WITH(lib-path,
242 [  --with-lib-path=dir1:dir2...  set default LIB_PATH],
243 [case "$withval" in
244  yes) LIB_PATH='"/lib:/usr/lib"' ;;
245  no) LIB_PATH='""' ;;
246  *) LIB_PATH='"'"$withval"'"' ;;
247  esac],
248 [LIB_PATH='"::DEFAULT::"'])
249 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
250                    [Default library search path])
251 if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
252   AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
253 fi
254
255 AC_CHECK_TOOL(NM, nm)
256
257 AC_PROG_CC
258 AC_PROG_CXX
259 AC_PROG_YACC
260 AC_PROG_RANLIB
261 AC_PROG_INSTALL
262 AC_PROG_LN_S
263
264 AC_GNU_SOURCE
265
266 ZW_GNU_GETTEXT_SISTER_DIR
267 AM_PO_SUBDIRS
268
269 AC_C_BIGENDIAN
270
271 AC_EXEEXT
272
273 AM_CONDITIONAL(NATIVE_LINKER,
274   test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
275 AM_CONDITIONAL(GCC, test "$GCC" = yes)
276
277 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
278   test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
279
280 dnl Test for whether static linking is supported.  Some systems do not
281 dnl install static libraries.  This only affects the set of tests that
282 dnl we run.
283 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
284 [LDFLAGS_hold=$LDFLAGS
285 LDFLAGS="$LDFLAGS -static"
286 AC_LINK_IFELSE([
287 AC_LANG_PROGRAM([[void f() { }]])],
288 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
289 LDFLAGS=$LDFLAGS_hold])
290 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
291
292 dnl Some architectures do not support taking pointers of functions
293 dnl defined in shared libraries except in -fPIC mode.  We need to
294 dnl tell the unittest framework if we're compiling for one of those
295 dnl targets, so it doesn't try to run the tests that do that.
296 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
297   case $target_cpu in
298     i?86) true;;
299     x86_64) false;;
300     sparc64) false;;
301     *) true;;
302   esac])
303
304 dnl Test for gcc 4.1 or later.  Full support for -mcmodel=medium is
305 dnl only available in gcc 4.1.
306 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
307 [AC_COMPILE_IFELSE([
308 #if !defined __GNUC__
309 error
310 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
311 error
312 #endif
313 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
314
315 save_CFLAGS="$CFLAGS"
316 CFLAGS="$CFLAGS -mcmodel=medium"
317 AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
318 CFLAGS="$save_CFLAGS"
319 dnl Whether we can test -mcmodel=medium.
320 AM_CONDITIONAL(MCMODEL_MEDIUM,
321 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
322
323 dnl Test for __thread support.
324 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
325 [AC_COMPILE_IFELSE([__thread int i = 1;],
326 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
327
328 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
329
330 dnl On GNU/Linux TLS in static programs only works when using glibc
331 dnl 2.4 or later.
332 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
333 [AC_COMPILE_IFELSE([
334 #include <features.h>
335 #if !defined __GLIBC__
336 error
337 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
338 error
339 #endif
340 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
341
342 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
343
344 dnl Test for #pragma omp threadprivate
345 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
346 [save_CFLAGS="$CFLAGS"
347 CFLAGS="$CFLAGS -fopenmp"
348 AC_COMPILE_IFELSE([
349 #include <omp.h>
350 int i;
351 #pragma omp threadprivate (i)
352 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
353 CFLAGS="$save_CFLAGS"])
354 if test "$gold_cv_c_threadprivate" = "yes"; then
355   AC_DEFINE(HAVE_OMP_SUPPORT, 1,
356             [Define if compiler supports #pragma omp threadprivate])
357 fi
358 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
359
360 dnl Test for the -ftls-dialect=gnu2 option.
361 save_CFLAGS="$CFLAGS"
362 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
363 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
364 CFLAGS="$save_CFLAGS"
365 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
366
367 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
368 dnl only with glibc 2.9 or later.
369 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
370 [AC_COMPILE_IFELSE([
371 #include <features.h>
372 #if !defined __GLIBC__
373 error
374 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
375 error
376 #endif
377 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
378
379 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
380
381 dnl Test for the -frandom-seed option.
382 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
383 [save_CFLAGS="$CFLAGS"
384 CFLAGS="$CFLAGS -frandom-seed=foo"
385 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
386 [gold_cv_c_random_seed=no])
387 CFLAGS="$save_CFLAGS"])
388 if test "$gold_cv_c_random_seed" = "yes"; then
389   # In Makefile, '$@' will be expanded to be the name of the file
390   # being built, providing a unique seed for each file.
391   RANDOM_SEED_CFLAGS=-frandom-seed=\$@
392 fi
393 AC_SUBST(RANDOM_SEED_CFLAGS)
394
395 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
396 dnl 2.11 or later, and by binutils 2.20.1 or later.
397 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
398 [save_LDFLAGS="$LDFLAGS"
399 LDFLAGS="$LDFLAGS -static"
400 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
401 #include <features.h>
402 #if !defined __GLIBC__
403 error
404 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
405 error
406 #endif
407 void func (void) { }
408 void invoke (void);
409 __asm__(".type invoke, %gnu_indirect_function");
410 typedef void (*funcptr) (void);
411 funcptr dispatch (void) __asm__ ("invoke");
412 funcptr dispatch (void) { return &func; }]],
413 [[invoke();]])
414 ], [
415 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
416   gold_cv_lib_glibc_ifunc=both
417 else
418   gold_cv_lib_glibc_ifunc=dyn
419 fi], [gold_cv_lib_glibc_ifunc=no])
420 LDFLAGS="$save_LDFLAGS"])
421
422 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
423 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
424
425 AM_BINUTILS_WARNINGS
426
427 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
428 AC_SUBST(WARN_CXXFLAGS)
429
430 AC_ARG_WITH(gold-ldflags,
431 [  --with-gold-ldflags=FLAGS  additional link flags for gold],
432 [if test "$withval" = "no" -o "$withval" = "yes"; then
433    GOLD_LDFLAGS=
434  else
435    GOLD_LDFLAGS=$withval
436  fi],
437 [GOLD_LDFLAGS=])
438 AC_SUBST(GOLD_LDFLAGS)
439
440 AC_ARG_WITH(gold-ldadd,
441 [  --with-gold-ldadd=LIBS     additional libraries for gold],
442 [if test "$withval" = "no" -o "$withval" = "yes"; then
443    GOLD_LDADD=
444  else
445    GOLD_LDADD=$withval
446  fi],
447 [GOLD_LDADD=])
448 AC_SUBST(GOLD_LDADD)
449
450 dnl Force support for large files by default.  This may need to be
451 dnl host dependent.  If build == host, we can check getconf LFS_CFLAGS.
452 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
453 AC_SUBST(LFS_CFLAGS)
454
455 AC_CHECK_HEADERS(sys/mman.h)
456 AC_CHECK_FUNCS(chsize mmap)
457 AC_REPLACE_FUNCS(pread ftruncate ffsll)
458
459 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
460 [AC_LINK_IFELSE([
461 AC_LANG_PROGRAM([[
462 #include <sys/mman.h>
463 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
464 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
465 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
466   AC_DEFINE(HAVE_MREMAP, 1,
467     [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
468 else
469   AC_LIBOBJ(mremap)
470 fi
471
472 # Link in zlib if we can.  This allows us to write compressed sections.
473 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
474 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
475
476 dnl We have to check these in C, not C++, because autoconf generates
477 dnl tests which have no type information, and current glibc provides
478 dnl multiple declarations of functions like basename when compiling
479 dnl with C++.
480 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
481
482 AC_LANG_PUSH(C++)
483
484 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
485 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
486 AC_CHECK_HEADERS(byteswap.h)
487 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
488 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
489
490 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
491 # at link time with some versions of GCC.
492 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
493 [gold_cv_unordered_map_rehash],
494 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
495 #include <tr1/unordered_map>
496 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
497 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
498 if test "$gold_cv_unordered_map_rehash" = "yes"; then
499   AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
500             [Define if ::std::tr1::unordered_map::rehash is usable])
501 fi
502
503 # gcc 4.3.0 doesn't recognize the printf attribute on a template
504 # function.  Check for that.  This is gcc bug 35546.  This test can
505 # probably be removed after the bug has been fixed for a while.
506 AC_CACHE_CHECK([whether we can use attributes with template functions],
507 [gold_cv_template_attribute],
508 [AC_COMPILE_IFELSE([
509 template<typename T> extern void foo(const char*, ...)
510   __attribute__ ((__format__ (__printf__, 1, 2)));
511 template<typename T> void foo(const char* format, ...) {}
512 void bar() { foo<int>("%s\n", "foo"); }
513 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
514 if test "$gold_cv_template_attribute" = "yes"; then
515   AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
516             [Define if attributes work on C++ templates])
517 fi
518
519 dnl Check if the system has struct stat::st_mtim.
520 AC_CACHE_CHECK([for struct stat::st_mtim.],
521 [gold_cv_stat_st_mtim],
522 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
523 #include <sys/stat.h>
524 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
525 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
526 if test "$gold_cv_stat_st_mtim" = "yes"; then
527   AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
528             [Define if struct stat has a field st_mtim with timespec for mtime])
529 fi
530
531 AC_LANG_POP(C++)
532
533 AM_MAINTAINER_MODE
534
535 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
This page took 0.054357 seconds and 4 git commands to generate.