1 dnl Process this file with autoconf to produce a configure script.
6 AC_CONFIG_SRCDIR(gold.cc)
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 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 ;;
50 if test "$threads" = "yes"; then
51 AC_DEFINE(ENABLE_THREADS, 1,
52 [Define to do multi-threaded linking])
54 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
56 AC_ARG_ENABLE([plugins],
57 [ --enable-plugins linker plugins],
58 [case "${enableval}" in
59 yes | "") plugins=yes ;;
64 if test "$plugins" = "yes"; then
65 AC_DEFINE(ENABLE_PLUGINS, 1,
66 [Define to enable linker plugins])
68 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
70 AC_ARG_ENABLE([targets],
71 [ --enable-targets alternative target configurations],
72 [case "${enableval}" in
74 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
80 enable_targets=$enableval
83 [# For now, enable all targets by default
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"
94 # Permit unrecognized target names, like "all".
95 canon_targets="$canon_targets $targ"
100 # See which specific instantiations we need.
106 default_osabi=ELFOSABI_NONE
111 for targ in $target $canon_targets; do
112 if test "$targ" = "all"; then
119 . ${srcdir}/configure.tgt
121 if test "$targ_obj" = "UNKNOWN"; then
122 AC_MSG_ERROR("unsupported target $targ")
124 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
125 if test "$targ_extra_obj" != ""; then
126 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
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
133 if test "$targ_big_endian" = "false" \
134 -o "$targ_extra_big_endian" = "false"; then
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
143 if test "$targ_big_endian" = "false" \
144 -o "$targ_extra_big_endian" = "false"; then
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
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")
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])
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])
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])
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])
182 if test -n "$all_targets"; then
183 TARGETOBJS='$(ALL_TARGETOBJS)'
185 TARGETOBJS="$targetobjs"
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])
207 ZW_GNU_GETTEXT_SISTER_DIR
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)
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, [
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],
234 #if !defined __GNUC__
236 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
239 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
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"])
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])])
250 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
252 dnl On GNU/Linux TLS in static programs only works when using glibc
254 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
256 #include <features.h>
257 #if !defined __GLIBC__
259 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
262 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
264 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
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"
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])
280 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
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")
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],
293 #include <features.h>
294 #if !defined __GLIBC__
296 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
299 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
301 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
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])])
309 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
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=\$@
323 AC_SUBST(RANDOM_SEED_CFLAGS)
327 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
328 AC_SUBST(WARN_CXXFLAGS)
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"
335 AC_CHECK_FUNCS(chsize)
336 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
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")
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
346 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
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])
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])
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],
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])
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])
401 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)