1 dnl Process this file with autoconf to produce a configure script.
6 AC_CONFIG_SRCDIR(gold.cc)
10 AM_INIT_AUTOMAKE([no-dist])
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 dnl Some architectures do not support taking pointers of functions
256 dnl defined in shared libraries except in -fPIC mode. We need to
257 dnl tell the unittest framework if we're compiling for one of those
258 dnl targets, so it doesn't try to run the tests that do that.
259 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
267 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
268 dnl only available in gcc 4.1.
269 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
271 #if !defined __GNUC__
273 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
276 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
278 dnl Whether we can test -mcmodel=medium.
279 AM_CONDITIONAL(MCMODEL_MEDIUM,
280 [test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
282 dnl Test for __thread support.
283 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
284 [AC_COMPILE_IFELSE([__thread int i = 1;],
285 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
287 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
289 dnl On GNU/Linux TLS in static programs only works when using glibc
291 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
293 #include <features.h>
294 #if !defined __GLIBC__
296 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
299 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
301 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
303 dnl Test for #pragma omp threadprivate
304 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
305 [save_CFLAGS="$CFLAGS"
306 CFLAGS="$CFLAGS -fopenmp"
310 #pragma omp threadprivate (i)
311 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
312 CFLAGS="$save_CFLAGS"])
313 if test "$gold_cv_c_threadprivate" = "yes"; then
314 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
315 [Define if compiler supports #pragma omp threadprivate])
317 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
319 dnl Test for the -ftls-dialect=gnu2 option.
320 save_CFLAGS="$CFLAGS"
321 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
322 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
323 CFLAGS="$save_CFLAGS"
324 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
326 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
327 dnl only with glibc 2.9 or later.
328 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
330 #include <features.h>
331 #if !defined __GLIBC__
333 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
336 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
338 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
340 dnl Check whether the compiler supports constructor priorities in
341 dnl attributes, which were added in gcc 4.3.
342 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
343 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
344 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
346 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
348 dnl Test for the -frandom-seed option.
349 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
350 [save_CFLAGS="$CFLAGS"
351 CFLAGS="$CFLAGS -frandom-seed=foo"
352 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
353 [gold_cv_c_random_seed=no])
354 CFLAGS="$save_CFLAGS"])
355 if test "$gold_cv_c_random_seed" = "yes"; then
356 # In Makefile, '$@' will be expanded to be the name of the file
357 # being built, providing a unique seed for each file.
358 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
360 AC_SUBST(RANDOM_SEED_CFLAGS)
364 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
365 AC_SUBST(WARN_CXXFLAGS)
367 dnl Force support for large files by default. This may need to be
368 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
369 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
372 AC_CHECK_FUNCS(chsize)
373 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
375 # Link in zlib if we can. This allows us to write compressed sections.
376 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
377 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
379 dnl We have to check these in C, not C++, because autoconf generates
380 dnl tests which have no type information, and current glibc provides
381 dnl multiple declarations of functions like basename when compiling
383 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
387 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
388 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
389 AC_CHECK_HEADERS(byteswap.h)
390 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
391 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
393 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
394 # at link time with some versions of GCC.
395 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
396 [gold_cv_unordered_map_rehash],
397 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
398 #include <tr1/unordered_map>
399 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
400 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
401 if test "$gold_cv_unordered_map_rehash" = "yes"; then
402 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
403 [Define if ::std::tr1::unordered_map::rehash is usable])
406 # gcc 4.3.0 doesn't recognize the printf attribute on a template
407 # function. Check for that. This is gcc bug 35546. This test can
408 # probably be removed after the bug has been fixed for a while.
409 AC_CACHE_CHECK([whether we can use attributes with template functions],
410 [gold_cv_template_attribute],
412 template<typename T> extern void foo(const char*, ...)
413 __attribute__ ((__format__ (__printf__, 1, 2)));
414 template<typename T> void foo(const char* format, ...) {}
415 void bar() { foo<int>("%s\n", "foo"); }
416 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
417 if test "$gold_cv_template_attribute" = "yes"; then
418 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
419 [Define if attributes work on C++ templates])
422 dnl Check if the system has struct stat::st_mtim.
423 AC_CACHE_CHECK([for struct stat::st_mtim.],
424 [gold_cv_stat_st_mtim],
425 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
426 #include <sys/stat.h>
427 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
428 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
429 if test "$gold_cv_stat_st_mtim" = "yes"; then
430 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
431 [Define if struct stat has a field st_mtim with timespec for mtime])
438 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)