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.
110 for targ in $target $canon_targets; do
111 if test "$targ" = "all"; then
118 . ${srcdir}/configure.tgt
120 if test "$targ_obj" = "UNKNOWN"; then
121 AC_MSG_ERROR("unsupported target $targ")
123 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
124 if test "$targ_extra_obj" != ""; then
125 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
127 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
128 if test "$targ_big_endian" = "true" \
129 -o "$targ_extra_big_endian" = "true"; then
132 if test "$targ_big_endian" = "false" \
133 -o "$targ_extra_big_endian" = "false"; then
137 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
138 if test "$targ_big_endian" = "true" \
139 -o "$targ_extra_big_endian" = "true"; then
142 if test "$targ_big_endian" = "false" \
143 -o "$targ_extra_big_endian" = "false"; then
148 if test "$target" = "$targ"; then
149 default_machine=$targ_machine
150 default_size=$targ_size
151 default_big_endian=$targ_big_endian
157 if test -n "$targ_32_little"; then
158 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
159 [Define to support 32-bit little-endian targets])
161 if test -n "$targ_32_big"; then
162 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
163 [Define to support 32-bit big-endian targets])
165 if test -n "$targ_64_little"; then
166 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
167 [Define to support 64-bit little-endian targets])
169 if test -n "$targ_64_big"; then
170 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
171 [Define to support 64-bit big-endian targets])
174 if test -n "$all_targets"; then
175 TARGETOBJS='$(ALL_TARGETOBJS)'
177 TARGETOBJS="$targetobjs"
181 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
182 [Default machine code])
183 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
184 [Default size (32 or 64)])
185 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
186 [Default big endian (true or false)])
197 ZW_GNU_GETTEXT_SISTER_DIR
204 AM_CONDITIONAL(NATIVE_LINKER,
205 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
206 AM_CONDITIONAL(GCC, test "$GCC" = yes)
208 dnl Some architectures do not support taking pointers of functions
209 dnl defined in shared libraries except in -fPIC mode. We need to
210 dnl tell the unittest framework if we're compiling for one of those
211 dnl targets, so it doesn't try to run the tests that do that.
212 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
220 dnl Test for __thread support.
221 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
222 [AC_COMPILE_IFELSE([__thread int i = 1;],
223 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
225 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
227 dnl On GNU/Linux TLS in static programs only works when using glibc
229 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
231 #include <features.h>
232 #if !defined __GLIBC__
234 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
237 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
239 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
241 dnl Test for #pragma omp threadprivate
242 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
243 [save_CFLAGS="$CFLAGS"
244 CFLAGS="$CFLAGS -fopenmp"
248 #pragma omp threadprivate (i)
249 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
250 CFLAGS="$save_CFLAGS"])
251 if test "$gold_cv_c_threadprivate" = "yes"; then
252 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
253 [Define if compiler supports #pragma omp threadprivate])
255 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
257 dnl Test for the -ftls-dialect=gnu2 option.
258 save_CFLAGS="$CFLAGS"
259 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
260 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
261 CFLAGS="$save_CFLAGS"
262 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
264 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
265 dnl only with glibc 2.9 or later.
266 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
268 #include <features.h>
269 #if !defined __GLIBC__
271 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
274 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
276 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
278 dnl Check whether the compiler supports constructor priorities in
279 dnl attributes, which were added in gcc 4.3.
280 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
281 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
282 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
284 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
286 dnl Test for the -frandom-seed option.
287 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
288 [save_CFLAGS="$CFLAGS"
289 CFLAGS="$CFLAGS -frandom-seed=foo"
290 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
291 [gold_cv_c_random_seed=no])
292 CFLAGS="$save_CFLAGS"])
293 if test "$gold_cv_c_random_seed" = "yes"; then
294 # In Makefile, '$@' will be expanded to be the name of the file
295 # being built, providing a unique seed for each file.
296 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
298 AC_SUBST(RANDOM_SEED_CFLAGS)
302 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
303 AC_SUBST(WARN_CXXFLAGS)
305 dnl Force support for large files by default. This may need to be
306 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
307 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
310 AC_REPLACE_FUNCS(pread)
312 # Link in zlib if we can. This allows us to write compressed sections.
313 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
314 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
318 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
319 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
320 AC_CHECK_FUNCS(mallinfo)
322 # gcc 4.3.0 doesn't recognize the printf attribute on a template
323 # function. Check for that. This is gcc bug 35546. This test can
324 # probably be removed after the bug has been fixed for a while.
325 AC_CACHE_CHECK([whether we can use attributes with template functions],
326 [gold_cv_template_attribute],
328 template<typename T> extern void foo(const char*, ...)
329 __attribute__ ((__format__ (__printf__, 1, 2)));
330 template<typename T> void foo(const char* format, ...) {}
331 void bar() { foo<int>("%s\n", "foo"); }
332 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
333 if test "$gold_cv_template_attribute" = "yes"; then
334 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
335 [Define if attributes work on C++ templates])
342 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)