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 Whether we can test -mcmodel=medium.
231 AM_CONDITIONAL(MCMODEL_MEDIUM, [test "$target_cpu" = "x86_64"])
233 dnl Test for __thread support.
234 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
235 [AC_COMPILE_IFELSE([__thread int i = 1;],
236 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
238 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
240 dnl On GNU/Linux TLS in static programs only works when using glibc
242 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
244 #include <features.h>
245 #if !defined __GLIBC__
247 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
250 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
252 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
254 dnl Test for #pragma omp threadprivate
255 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
256 [save_CFLAGS="$CFLAGS"
257 CFLAGS="$CFLAGS -fopenmp"
261 #pragma omp threadprivate (i)
262 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
263 CFLAGS="$save_CFLAGS"])
264 if test "$gold_cv_c_threadprivate" = "yes"; then
265 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
266 [Define if compiler supports #pragma omp threadprivate])
268 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
270 dnl Test for the -ftls-dialect=gnu2 option.
271 save_CFLAGS="$CFLAGS"
272 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
273 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
274 CFLAGS="$save_CFLAGS"
275 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
277 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
278 dnl only with glibc 2.9 or later.
279 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
281 #include <features.h>
282 #if !defined __GLIBC__
284 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
287 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
289 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
291 dnl Check whether the compiler supports constructor priorities in
292 dnl attributes, which were added in gcc 4.3.
293 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
294 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
295 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
297 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
299 dnl Test for the -frandom-seed option.
300 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
301 [save_CFLAGS="$CFLAGS"
302 CFLAGS="$CFLAGS -frandom-seed=foo"
303 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
304 [gold_cv_c_random_seed=no])
305 CFLAGS="$save_CFLAGS"])
306 if test "$gold_cv_c_random_seed" = "yes"; then
307 # In Makefile, '$@' will be expanded to be the name of the file
308 # being built, providing a unique seed for each file.
309 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
311 AC_SUBST(RANDOM_SEED_CFLAGS)
315 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
316 AC_SUBST(WARN_CXXFLAGS)
318 dnl Force support for large files by default. This may need to be
319 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
320 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
323 AC_CHECK_FUNCS(chsize)
324 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
326 # Link in zlib if we can. This allows us to write compressed sections.
327 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
328 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
330 dnl We have to check these in C, not C++, because autoconf generates
331 dnl tests which have no type information, and current glibc provides
332 dnl multiple declarations of functions like basename when compiling
334 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
338 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
339 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
340 AC_CHECK_HEADERS(byteswap.h)
341 AC_CHECK_FUNCS(mallinfo posix_fallocate readv)
342 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
344 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
345 # at link time with some versions of GCC.
346 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
347 [gold_cv_unordered_map_rehash],
348 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
349 #include <tr1/unordered_map>
350 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
351 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
352 if test "$gold_cv_unordered_map_rehash" = "yes"; then
353 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
354 [Define if ::std::tr1::unordered_map::rehash is usable])
357 # gcc 4.3.0 doesn't recognize the printf attribute on a template
358 # function. Check for that. This is gcc bug 35546. This test can
359 # probably be removed after the bug has been fixed for a while.
360 AC_CACHE_CHECK([whether we can use attributes with template functions],
361 [gold_cv_template_attribute],
363 template<typename T> extern void foo(const char*, ...)
364 __attribute__ ((__format__ (__printf__, 1, 2)));
365 template<typename T> void foo(const char* format, ...) {}
366 void bar() { foo<int>("%s\n", "foo"); }
367 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
368 if test "$gold_cv_template_attribute" = "yes"; then
369 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
370 [Define if attributes work on C++ templates])
373 dnl Check if the system has struct stat::st_mtim.
374 AC_CACHE_CHECK([for struct stat::st_mtim.],
375 [gold_cv_stat_st_mtim],
376 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
377 #include <sys/stat.h>
378 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
379 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
380 if test "$gold_cv_stat_st_mtim" = "yes"; then
381 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
382 [Define if struct stat has a field st_mtim with timespec for mtime])
389 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)