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 Whether we can test -mcmodel=medium.
225 AM_CONDITIONAL(MCMODEL_MEDIUM, [test "$target_cpu" = "x86_64"])
227 dnl Test for __thread support.
228 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
229 [AC_COMPILE_IFELSE([__thread int i = 1;],
230 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
232 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
234 dnl On GNU/Linux TLS in static programs only works when using glibc
236 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
238 #include <features.h>
239 #if !defined __GLIBC__
241 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
244 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
246 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
248 dnl Test for #pragma omp threadprivate
249 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
250 [save_CFLAGS="$CFLAGS"
251 CFLAGS="$CFLAGS -fopenmp"
255 #pragma omp threadprivate (i)
256 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
257 CFLAGS="$save_CFLAGS"])
258 if test "$gold_cv_c_threadprivate" = "yes"; then
259 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
260 [Define if compiler supports #pragma omp threadprivate])
262 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
264 dnl Test for the -ftls-dialect=gnu2 option.
265 save_CFLAGS="$CFLAGS"
266 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
267 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
268 CFLAGS="$save_CFLAGS"
269 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
271 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
272 dnl only with glibc 2.9 or later.
273 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
275 #include <features.h>
276 #if !defined __GLIBC__
278 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
281 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
283 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
285 dnl Check whether the compiler supports constructor priorities in
286 dnl attributes, which were added in gcc 4.3.
287 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
288 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
289 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
291 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
293 dnl Test for the -frandom-seed option.
294 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
295 [save_CFLAGS="$CFLAGS"
296 CFLAGS="$CFLAGS -frandom-seed=foo"
297 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
298 [gold_cv_c_random_seed=no])
299 CFLAGS="$save_CFLAGS"])
300 if test "$gold_cv_c_random_seed" = "yes"; then
301 # In Makefile, '$@' will be expanded to be the name of the file
302 # being built, providing a unique seed for each file.
303 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
305 AC_SUBST(RANDOM_SEED_CFLAGS)
309 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
310 AC_SUBST(WARN_CXXFLAGS)
312 dnl Force support for large files by default. This may need to be
313 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
314 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
317 AC_CHECK_FUNCS(chsize)
318 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
320 # Link in zlib if we can. This allows us to write compressed sections.
321 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
322 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
324 dnl We have to check these in C, not C++, because autoconf generates
325 dnl tests which have no type information, and current glibc provides
326 dnl multiple declarations of functions like basename when compiling
328 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
332 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
333 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
334 AC_CHECK_HEADERS(byteswap.h)
335 AC_CHECK_FUNCS(mallinfo posix_fallocate)
337 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
338 # at link time with some versions of GCC.
339 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
340 [gold_cv_unordered_map_rehash],
341 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
342 #include <tr1/unordered_map>
343 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
344 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
345 if test "$gold_cv_unordered_map_rehash" = "yes"; then
346 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
347 [Define if ::std::tr1::unordered_map::rehash is usable])
350 # gcc 4.3.0 doesn't recognize the printf attribute on a template
351 # function. Check for that. This is gcc bug 35546. This test can
352 # probably be removed after the bug has been fixed for a while.
353 AC_CACHE_CHECK([whether we can use attributes with template functions],
354 [gold_cv_template_attribute],
356 template<typename T> extern void foo(const char*, ...)
357 __attribute__ ((__format__ (__printf__, 1, 2)));
358 template<typename T> void foo(const char* format, ...) {}
359 void bar() { foo<int>("%s\n", "foo"); }
360 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
361 if test "$gold_cv_template_attribute" = "yes"; then
362 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
363 [Define if attributes work on C++ templates])
370 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)