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
159 if test -n "$targ_32_little"; then
160 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
161 [Define to support 32-bit little-endian targets])
163 if test -n "$targ_32_big"; then
164 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
165 [Define to support 32-bit big-endian targets])
167 if test -n "$targ_64_little"; then
168 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
169 [Define to support 64-bit little-endian targets])
171 if test -n "$targ_64_big"; then
172 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
173 [Define to support 64-bit big-endian targets])
176 if test -n "$all_targets"; then
177 TARGETOBJS='$(ALL_TARGETOBJS)'
179 TARGETOBJS="$targetobjs"
183 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
184 [Default machine code])
185 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
186 [Default size (32 or 64)])
187 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
188 [Default big endian (true or false)])
189 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
190 [Default OSABI code])
201 ZW_GNU_GETTEXT_SISTER_DIR
208 AM_CONDITIONAL(NATIVE_LINKER,
209 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
210 AM_CONDITIONAL(GCC, test "$GCC" = yes)
212 dnl Some architectures do not support taking pointers of functions
213 dnl defined in shared libraries except in -fPIC mode. We need to
214 dnl tell the unittest framework if we're compiling for one of those
215 dnl targets, so it doesn't try to run the tests that do that.
216 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
224 dnl Test for __thread support.
225 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
226 [AC_COMPILE_IFELSE([__thread int i = 1;],
227 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
229 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
231 dnl On GNU/Linux TLS in static programs only works when using glibc
233 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
235 #include <features.h>
236 #if !defined __GLIBC__
238 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
241 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
243 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
245 dnl Test for #pragma omp threadprivate
246 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
247 [save_CFLAGS="$CFLAGS"
248 CFLAGS="$CFLAGS -fopenmp"
252 #pragma omp threadprivate (i)
253 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
254 CFLAGS="$save_CFLAGS"])
255 if test "$gold_cv_c_threadprivate" = "yes"; then
256 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
257 [Define if compiler supports #pragma omp threadprivate])
259 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
261 dnl Test for the -ftls-dialect=gnu2 option.
262 save_CFLAGS="$CFLAGS"
263 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
264 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
265 CFLAGS="$save_CFLAGS"
266 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
268 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
269 dnl only with glibc 2.9 or later.
270 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
272 #include <features.h>
273 #if !defined __GLIBC__
275 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
278 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
280 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
282 dnl Check whether the compiler supports constructor priorities in
283 dnl attributes, which were added in gcc 4.3.
284 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
285 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
286 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
288 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
290 dnl Test for the -frandom-seed option.
291 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
292 [save_CFLAGS="$CFLAGS"
293 CFLAGS="$CFLAGS -frandom-seed=foo"
294 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
295 [gold_cv_c_random_seed=no])
296 CFLAGS="$save_CFLAGS"])
297 if test "$gold_cv_c_random_seed" = "yes"; then
298 # In Makefile, '$@' will be expanded to be the name of the file
299 # being built, providing a unique seed for each file.
300 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
302 AC_SUBST(RANDOM_SEED_CFLAGS)
306 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
307 AC_SUBST(WARN_CXXFLAGS)
309 dnl Force support for large files by default. This may need to be
310 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
311 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
314 AC_CHECK_FUNCS(chsize)
315 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
317 # Link in zlib if we can. This allows us to write compressed sections.
318 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
319 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
323 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
324 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
325 AC_CHECK_HEADERS(byteswap.h)
326 AC_CHECK_FUNCS(mallinfo posix_fallocate)
327 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
329 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
330 # at link time with some versions of GCC.
331 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
332 [gold_cv_unordered_map_rehash],
333 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
334 #include <tr1/unordered_map>
335 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
336 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
337 if test "$gold_cv_unordered_map_rehash" = "yes"; then
338 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
339 [Define if ::std::tr1::unordered_map::rehash is usable])
342 # gcc 4.3.0 doesn't recognize the printf attribute on a template
343 # function. Check for that. This is gcc bug 35546. This test can
344 # probably be removed after the bug has been fixed for a while.
345 AC_CACHE_CHECK([whether we can use attributes with template functions],
346 [gold_cv_template_attribute],
348 template<typename T> extern void foo(const char*, ...)
349 __attribute__ ((__format__ (__printf__, 1, 2)));
350 template<typename T> void foo(const char* format, ...) {}
351 void bar() { foo<int>("%s\n", "foo"); }
352 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
353 if test "$gold_cv_template_attribute" = "yes"; then
354 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
355 [Define if attributes work on C++ templates])
362 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)