1 dnl Process this file with autoconf to produce a configure script.
6 AC_CONFIG_SRCDIR(gold.cc)
10 AM_INIT_AUTOMAKE([no-dist parallel-tests])
12 AM_CONFIG_HEADER(config.h:config.in)
15 [ --with-sysroot[=DIR] search for usr/lib et al within DIR],
16 [sysroot=$withval], [sysroot=no])
18 if test "$sysroot" = "yes"; then
19 sysroot='${exec_prefix}/${target_alias}/sys-root'
20 elif test "$sysroot" = "no"; then
25 if test -n "$sysroot"; then
27 "${prefix}" | "${prefix}/"* | \
28 "${exec_prefix}" | "${exec_prefix}/"* | \
29 '${prefix}' | '${prefix}/'*| \
30 '${exec_prefix}' | '${exec_prefix}/'*)
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])
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.
45 [[ --enable-gold[=ARG] build gold [ARG={both}[/{gold,ld}]]]],
46 [case "${enableval}" in
48 install_as_default=gold
52 install_as_default=yes
53 installed_linker=ld.gold
57 installed_linker=ld.gold
60 AC_MSG_ERROR([invalid --enable-gold argument])
63 [install_as_default=gold
65 AC_SUBST(install_as_default)
66 AC_SUBST(installed_linker)
68 dnl For now threads are a configure time option.
69 AC_ARG_ENABLE([threads],
70 [ --enable-threads multi-threaded linking],
71 [case "${enableval}" in
72 yes | "") threads=yes ;;
77 if test "$threads" = "yes"; then
78 AC_DEFINE(ENABLE_THREADS, 1,
79 [Define to do multi-threaded linking])
81 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
83 AC_ARG_ENABLE([plugins],
84 [ --enable-plugins linker plugins],
85 [case "${enableval}" in
86 yes | "") plugins=yes ;;
91 if test "$plugins" = "yes"; then
92 AC_DEFINE(ENABLE_PLUGINS, 1,
93 [Define to enable linker plugins])
95 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
97 AC_ARG_ENABLE([targets],
98 [ --enable-targets alternative target configurations],
99 [case "${enableval}" in
101 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
107 enable_targets=$enableval
110 [# For now, enable all targets by default
114 # Canonicalize the enabled targets.
115 if test -n "$enable_targets"; then
116 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
117 result=`$ac_config_sub $targ 2>/dev/null`
118 if test -n "$result"; then
119 canon_targets="$canon_targets $result"
121 # Permit unrecognized target names, like "all".
122 canon_targets="$canon_targets $targ"
127 # See which specific instantiations we need.
133 default_osabi=ELFOSABI_NONE
138 for targ in $target $canon_targets; do
139 if test "$targ" = "all"; then
146 . ${srcdir}/configure.tgt
148 if test "$targ_obj" = "UNKNOWN"; then
149 AC_MSG_ERROR("unsupported target $targ")
151 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
152 if test "$targ_extra_obj" != ""; then
153 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
155 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
156 if test "$targ_big_endian" = "true" \
157 -o "$targ_extra_big_endian" = "true"; then
160 if test "$targ_big_endian" = "false" \
161 -o "$targ_extra_big_endian" = "false"; then
165 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
166 if test "$targ_big_endian" = "true" \
167 -o "$targ_extra_big_endian" = "true"; then
170 if test "$targ_big_endian" = "false" \
171 -o "$targ_extra_big_endian" = "false"; then
176 if test "$target" = "$targ"; then
177 default_machine=$targ_machine
178 default_size=$targ_size
179 default_big_endian=$targ_big_endian
180 default_osabi=$targ_osabi
182 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
183 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
184 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
185 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
186 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
192 # Remove any duplicates.
194 for t in $targetobjs; do
202 if test -n "$targ_32_little"; then
203 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
204 [Define to support 32-bit little-endian targets])
206 if test -n "$targ_32_big"; then
207 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
208 [Define to support 32-bit big-endian targets])
210 if test -n "$targ_64_little"; then
211 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
212 [Define to support 64-bit little-endian targets])
214 if test -n "$targ_64_big"; then
215 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
216 [Define to support 64-bit big-endian targets])
219 if test -n "$all_targets"; then
220 TARGETOBJS='$(ALL_TARGETOBJS)'
222 TARGETOBJS="$targetobjs"
226 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
227 [Default machine code])
228 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
229 [Default size (32 or 64)])
230 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
231 [Default big endian (true or false)])
232 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
233 [Default OSABI code])
244 ZW_GNU_GETTEXT_SISTER_DIR
251 AM_CONDITIONAL(NATIVE_LINKER,
252 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
253 AM_CONDITIONAL(GCC, test "$GCC" = yes)
255 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
256 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
258 dnl Some architectures do not support taking pointers of functions
259 dnl defined in shared libraries except in -fPIC mode. We need to
260 dnl tell the unittest framework if we're compiling for one of those
261 dnl targets, so it doesn't try to run the tests that do that.
262 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
270 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
271 dnl only available in gcc 4.1.
272 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
274 #if !defined __GNUC__
276 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
279 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
281 dnl Whether we can test -mcmodel=medium.
282 AM_CONDITIONAL(MCMODEL_MEDIUM,
283 [test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
285 dnl Test for __thread support.
286 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
287 [AC_COMPILE_IFELSE([__thread int i = 1;],
288 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
290 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
292 dnl On GNU/Linux TLS in static programs only works when using glibc
294 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
296 #include <features.h>
297 #if !defined __GLIBC__
299 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
302 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
304 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
306 dnl Test for #pragma omp threadprivate
307 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
308 [save_CFLAGS="$CFLAGS"
309 CFLAGS="$CFLAGS -fopenmp"
313 #pragma omp threadprivate (i)
314 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
315 CFLAGS="$save_CFLAGS"])
316 if test "$gold_cv_c_threadprivate" = "yes"; then
317 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
318 [Define if compiler supports #pragma omp threadprivate])
320 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
322 dnl Test for the -ftls-dialect=gnu2 option.
323 save_CFLAGS="$CFLAGS"
324 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
325 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
326 CFLAGS="$save_CFLAGS"
327 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
329 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
330 dnl only with glibc 2.9 or later.
331 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
333 #include <features.h>
334 #if !defined __GLIBC__
336 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
339 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
341 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
343 dnl Check whether the compiler supports constructor priorities in
344 dnl attributes, which were added in gcc 4.3.
345 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
346 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
347 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
349 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
351 dnl Test for the -frandom-seed option.
352 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
353 [save_CFLAGS="$CFLAGS"
354 CFLAGS="$CFLAGS -frandom-seed=foo"
355 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
356 [gold_cv_c_random_seed=no])
357 CFLAGS="$save_CFLAGS"])
358 if test "$gold_cv_c_random_seed" = "yes"; then
359 # In Makefile, '$@' will be expanded to be the name of the file
360 # being built, providing a unique seed for each file.
361 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
363 AC_SUBST(RANDOM_SEED_CFLAGS)
365 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
367 AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11],
369 #include <features.h>
370 #if !defined __GLIBC__
372 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
375 ], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])])
377 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes")
381 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
382 AC_SUBST(WARN_CXXFLAGS)
384 dnl Force support for large files by default. This may need to be
385 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
386 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
389 AC_CHECK_FUNCS(chsize)
390 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
392 # Link in zlib if we can. This allows us to write compressed sections.
393 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
394 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
396 dnl We have to check these in C, not C++, because autoconf generates
397 dnl tests which have no type information, and current glibc provides
398 dnl multiple declarations of functions like basename when compiling
400 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
404 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
405 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
406 AC_CHECK_HEADERS(byteswap.h)
407 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
408 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
410 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
411 # at link time with some versions of GCC.
412 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
413 [gold_cv_unordered_map_rehash],
414 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
415 #include <tr1/unordered_map>
416 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
417 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
418 if test "$gold_cv_unordered_map_rehash" = "yes"; then
419 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
420 [Define if ::std::tr1::unordered_map::rehash is usable])
423 # gcc 4.3.0 doesn't recognize the printf attribute on a template
424 # function. Check for that. This is gcc bug 35546. This test can
425 # probably be removed after the bug has been fixed for a while.
426 AC_CACHE_CHECK([whether we can use attributes with template functions],
427 [gold_cv_template_attribute],
429 template<typename T> extern void foo(const char*, ...)
430 __attribute__ ((__format__ (__printf__, 1, 2)));
431 template<typename T> void foo(const char* format, ...) {}
432 void bar() { foo<int>("%s\n", "foo"); }
433 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
434 if test "$gold_cv_template_attribute" = "yes"; then
435 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
436 [Define if attributes work on C++ templates])
439 dnl Check if the system has struct stat::st_mtim.
440 AC_CACHE_CHECK([for struct stat::st_mtim.],
441 [gold_cv_stat_st_mtim],
442 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
443 #include <sys/stat.h>
444 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
445 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
446 if test "$gold_cv_stat_st_mtim" = "yes"; then
447 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
448 [Define if struct stat has a field st_mtim with timespec for mtime])
455 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)