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 # Remove any duplicates.
166 targetobjs=`echo $targetobjs | tr ' ' '\n' | sort | uniq | tr '\n' ' '`
168 if test -n "$targ_32_little"; then
169 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
170 [Define to support 32-bit little-endian targets])
172 if test -n "$targ_32_big"; then
173 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
174 [Define to support 32-bit big-endian targets])
176 if test -n "$targ_64_little"; then
177 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
178 [Define to support 64-bit little-endian targets])
180 if test -n "$targ_64_big"; then
181 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
182 [Define to support 64-bit big-endian targets])
185 if test -n "$all_targets"; then
186 TARGETOBJS='$(ALL_TARGETOBJS)'
188 TARGETOBJS="$targetobjs"
192 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
193 [Default machine code])
194 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
195 [Default size (32 or 64)])
196 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
197 [Default big endian (true or false)])
198 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
199 [Default OSABI code])
210 ZW_GNU_GETTEXT_SISTER_DIR
217 AM_CONDITIONAL(NATIVE_LINKER,
218 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
219 AM_CONDITIONAL(GCC, test "$GCC" = yes)
221 dnl Some architectures do not support taking pointers of functions
222 dnl defined in shared libraries except in -fPIC mode. We need to
223 dnl tell the unittest framework if we're compiling for one of those
224 dnl targets, so it doesn't try to run the tests that do that.
225 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
233 dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
234 dnl only available in gcc 4.1.
235 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
237 #if !defined __GNUC__
239 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
242 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
244 dnl Whether we can test -mcmodel=medium.
245 AM_CONDITIONAL(MCMODEL_MEDIUM,
246 [test "$target_cpu" = "x86_64" -a "$gold_cv_prog_gcc41" = "yes"])
248 dnl Test for __thread support.
249 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
250 [AC_COMPILE_IFELSE([__thread int i = 1;],
251 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
253 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
255 dnl On GNU/Linux TLS in static programs only works when using glibc
257 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
259 #include <features.h>
260 #if !defined __GLIBC__
262 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
265 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
267 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
269 dnl Test for #pragma omp threadprivate
270 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
271 [save_CFLAGS="$CFLAGS"
272 CFLAGS="$CFLAGS -fopenmp"
276 #pragma omp threadprivate (i)
277 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
278 CFLAGS="$save_CFLAGS"])
279 if test "$gold_cv_c_threadprivate" = "yes"; then
280 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
281 [Define if compiler supports #pragma omp threadprivate])
283 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
285 dnl Test for the -ftls-dialect=gnu2 option.
286 save_CFLAGS="$CFLAGS"
287 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
288 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
289 CFLAGS="$save_CFLAGS"
290 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
292 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
293 dnl only with glibc 2.9 or later.
294 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
296 #include <features.h>
297 #if !defined __GLIBC__
299 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
302 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
304 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
306 dnl Check whether the compiler supports constructor priorities in
307 dnl attributes, which were added in gcc 4.3.
308 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
309 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
310 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
312 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
314 dnl Test for the -frandom-seed option.
315 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
316 [save_CFLAGS="$CFLAGS"
317 CFLAGS="$CFLAGS -frandom-seed=foo"
318 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
319 [gold_cv_c_random_seed=no])
320 CFLAGS="$save_CFLAGS"])
321 if test "$gold_cv_c_random_seed" = "yes"; then
322 # In Makefile, '$@' will be expanded to be the name of the file
323 # being built, providing a unique seed for each file.
324 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
326 AC_SUBST(RANDOM_SEED_CFLAGS)
330 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
331 AC_SUBST(WARN_CXXFLAGS)
333 dnl Force support for large files by default. This may need to be
334 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
335 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
338 AC_CHECK_FUNCS(chsize)
339 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
341 # Link in zlib if we can. This allows us to write compressed sections.
342 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
343 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
345 dnl We have to check these in C, not C++, because autoconf generates
346 dnl tests which have no type information, and current glibc provides
347 dnl multiple declarations of functions like basename when compiling
349 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
353 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
354 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
355 AC_CHECK_HEADERS(byteswap.h)
356 AC_CHECK_FUNCS(mallinfo posix_fallocate readv sysconf times)
357 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
359 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
360 # at link time with some versions of GCC.
361 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
362 [gold_cv_unordered_map_rehash],
363 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
364 #include <tr1/unordered_map>
365 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
366 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
367 if test "$gold_cv_unordered_map_rehash" = "yes"; then
368 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
369 [Define if ::std::tr1::unordered_map::rehash is usable])
372 # gcc 4.3.0 doesn't recognize the printf attribute on a template
373 # function. Check for that. This is gcc bug 35546. This test can
374 # probably be removed after the bug has been fixed for a while.
375 AC_CACHE_CHECK([whether we can use attributes with template functions],
376 [gold_cv_template_attribute],
378 template<typename T> extern void foo(const char*, ...)
379 __attribute__ ((__format__ (__printf__, 1, 2)));
380 template<typename T> void foo(const char* format, ...) {}
381 void bar() { foo<int>("%s\n", "foo"); }
382 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
383 if test "$gold_cv_template_attribute" = "yes"; then
384 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
385 [Define if attributes work on C++ templates])
388 dnl Check if the system has struct stat::st_mtim.
389 AC_CACHE_CHECK([for struct stat::st_mtim.],
390 [gold_cv_stat_st_mtim],
391 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
392 #include <sys/stat.h>
393 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
394 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
395 if test "$gold_cv_stat_st_mtim" = "yes"; then
396 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
397 [Define if struct stat has a field st_mtim with timespec for mtime])
404 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)