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([targets],
57 [ --enable-targets alternative target configurations],
58 [case "${enableval}" in
60 AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
66 enable_targets=$enableval
69 [# For now, enable all targets by default
73 # Canonicalize the enabled targets.
74 if test -n "$enable_targets"; then
75 for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
76 result=`$ac_config_sub $targ 2>/dev/null`
77 if test -n "$result"; then
78 canon_targets="$canon_targets $result"
80 # Permit unrecognized target names, like "all".
81 canon_targets="$canon_targets $targ"
86 # See which specific instantiations we need.
96 for targ in $target $canon_targets; do
97 if test "$targ" = "all"; then
104 . ${srcdir}/configure.tgt
106 if test "$targ_obj" = "UNKNOWN"; then
107 AC_MSG_ERROR("unsupported target $targ")
109 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
110 if test "$targ_extra_obj" != ""; then
111 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
113 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
114 if test "$targ_big_endian" = "true" \
115 -o "$targ_extra_big_endian" = "true"; then
118 if test "$targ_big_endian" = "false" \
119 -o "$targ_extra_big_endian" = "false"; then
123 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
124 if test "$targ_big_endian" = "true" \
125 -o "$targ_extra_big_endian" = "true"; then
128 if test "$targ_big_endian" = "false" \
129 -o "$targ_extra_big_endian" = "false"; then
134 if test "$target" = "$targ"; then
135 default_machine=$targ_machine
136 default_size=$targ_size
137 default_big_endian=$targ_big_endian
143 if test -n "$targ_32_little"; then
144 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
145 [Define to support 32-bit little-endian targets])
147 if test -n "$targ_32_big"; then
148 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
149 [Define to support 32-bit big-endian targets])
151 if test -n "$targ_64_little"; then
152 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
153 [Define to support 64-bit little-endian targets])
155 if test -n "$targ_64_big"; then
156 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
157 [Define to support 64-bit big-endian targets])
160 if test -n "$all_targets"; then
161 TARGETOBJS='$(ALL_TARGETOBJS)'
163 TARGETOBJS="$targetobjs"
167 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
168 [Default machine code])
169 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
170 [Default size (32 or 64)])
171 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
172 [Default big endian (true or false)])
183 ZW_GNU_GETTEXT_SISTER_DIR
190 AM_CONDITIONAL(NATIVE_LINKER,
191 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
192 AM_CONDITIONAL(GCC, test "$GCC" = yes)
194 dnl Some architectures do not support taking pointers of functions
195 dnl defined in shared libraries except in -fPIC mode. We need to
196 dnl tell the unittest framework if we're compiling for one of those
197 dnl targets, so it doesn't try to run the tests that do that.
198 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
206 dnl Test for __thread support.
207 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
208 [AC_COMPILE_IFELSE([__thread int i = 1;],
209 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
211 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
213 dnl On GNU/Linux TLS in static programs only works when using glibc
215 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
217 #include <features.h>
218 #if !defined __GLIBC__
220 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
223 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
225 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
227 dnl Test for #pragma omp threadprivate
228 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
229 [save_CFLAGS="$CFLAGS"
230 CFLAGS="$CFLAGS -fopenmp"
234 #pragma omp threadprivate (i)
235 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
236 CFLAGS="$save_CFLAGS"])
237 if test "$gold_cv_c_threadprivate" = "yes"; then
238 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
239 [Define if compiler supports #pragma omp threadprivate])
241 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
243 dnl Test for the -ftls-dialect=gnu2 option.
244 save_CFLAGS="$CFLAGS"
245 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
246 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
247 CFLAGS="$save_CFLAGS"
248 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
250 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
251 dnl only with glibc 2.5 or later.
252 AC_CACHE_CHECK([for glibc >= 2.5], [gold_cv_lib_glibc25],
254 #include <features.h>
255 #if !defined __GLIBC__
257 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 5)
260 ], [gold_cv_lib_glibc25=yes], [gold_cv_lib_glibc25=no])])
262 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc25" = "yes")
264 dnl Check whether the compiler supports constructor priorities in
265 dnl attributes, which were added in gcc 4.3.
266 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
267 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
268 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
270 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
274 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
275 AC_SUBST(WARN_CXXFLAGS)
277 dnl Force support for large files by default. This may need to be
278 dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
279 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
282 AC_REPLACE_FUNCS(pread)
284 # Link in zlib if we can. This allows us to write compressed sections.
285 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
286 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
290 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
291 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
292 AC_CHECK_FUNCS(mallinfo)
294 # gcc 4.3.0 doesn't recognize the printf attribute on a template
295 # function. Check for that. This is gcc bug 35546. This test can
296 # probably be removed after the bug has been fixed for a while.
297 AC_CACHE_CHECK([whether we can use attributes with template functions],
298 [gold_cv_template_attribute],
300 template<typename T> extern void foo(const char*, ...)
301 __attribute__ ((__format__ (__printf__, 1, 2)));
302 template<typename T> void foo(const char* format, ...) {}
303 void bar() { foo<int>("%s\n", "foo"); }
304 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
305 if test "$gold_cv_template_attribute" = "yes"; then
306 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
307 [Define if attributes work on C++ templates])
314 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)