2009-03-23 Ian Lance Taylor <iant@google.com>
[platform/upstream/binutils.git] / gold / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2
3 AC_PREREQ(2.59)
4
5 AC_INIT(gold, 0.1)
6 AC_CONFIG_SRCDIR(gold.cc)
7
8 AC_CANONICAL_TARGET
9
10 AM_INIT_AUTOMAKE
11
12 AM_CONFIG_HEADER(config.h:config.in)
13
14 AC_ARG_WITH(sysroot,
15 [  --with-sysroot[=DIR]    search for usr/lib et al within DIR],
16 [sysroot=$withval], [sysroot=no])
17
18 if test "$sysroot" = "yes"; then
19   sysroot='${exec_prefix}/${target_alias}/sys-root'
20 elif test "$sysroot" = "no"; then
21   sysroot=
22 fi
23
24 sysroot_relocatable=0
25 if test -n "$sysroot"; then
26   case "sysroot" in
27     "${prefix}" | "${prefix}/"* | \
28     "${exec_prefix}" | "${exec_prefix}/"* | \
29     '${prefix}' | '${prefix}/'*| \
30     '${exec_prefix}' | '${exec_prefix}/'*)
31       sysroot_relocatable=1
32       ;;
33   esac
34 fi
35
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])
40
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 ;;
46   no) threads=no ;;
47   *) threads=yes ;;
48  esac],
49 [threads=no])
50 if test "$threads" = "yes"; then
51   AC_DEFINE(ENABLE_THREADS, 1,
52             [Define to do multi-threaded linking])
53 fi
54 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
55
56 AC_ARG_ENABLE([plugins],
57 [  --enable-plugins        linker plugins],
58 [case "${enableval}" in
59   yes | "") plugins=yes ;;
60   no) plugins=no ;;
61   *) plugins=yes ;;
62  esac],
63 [plugins=no])
64 if test "$plugins" = "yes"; then
65   AC_DEFINE(ENABLE_PLUGINS, 1,
66             [Define to enable linker plugins])
67 fi
68 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
69
70 AC_ARG_ENABLE([targets],
71 [  --enable-targets        alternative target configurations],
72 [case "${enableval}" in
73   yes | "")
74     AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
75     ;;
76   no)
77     enable_targets=
78     ;;
79   *)
80     enable_targets=$enableval
81     ;;
82 esac],
83 [# For now, enable all targets by default
84  enable_targets=all
85 ])
86
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"
93     else
94       # Permit unrecognized target names, like "all".
95       canon_targets="$canon_targets $targ"
96     fi
97   done
98 fi
99
100 # See which specific instantiations we need.
101 targetobjs=
102 all_targets=
103 default_machine=
104 default_size=
105 default_big_endian=
106 default_osabi=ELFOSABI_NONE
107 targ_32_little=
108 targ_32_big=
109 targ_64_little=
110 targ_64_big=
111 for targ in $target $canon_targets; do
112   if test "$targ" = "all"; then
113     targ_32_little=yes
114     targ_32_big=yes
115     targ_64_little=yes
116     targ_64_big=yes
117     all_targets=yes
118   else
119     . ${srcdir}/configure.tgt
120
121     if test "$targ_obj" = "UNKNOWN"; then
122       AC_MSG_ERROR("unsupported target $targ")
123     else
124       targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
125       if test "$targ_extra_obj" != ""; then
126         targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
127       fi
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
131               targ_32_big=yes
132           fi
133           if test "$targ_big_endian" = "false" \
134               -o "$targ_extra_big_endian" = "false"; then
135               targ_32_little=yes
136           fi
137       fi
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
141               targ_64_big=yes
142           fi
143           if test "$targ_big_endian" = "false" \
144               -o "$targ_extra_big_endian" = "false"; then
145               targ_64_little=yes
146           fi
147       fi
148
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
154       fi
155     fi
156   fi
157 done
158
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])
162 fi
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])
166 fi
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])
170 fi
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])
174 fi
175
176 if test -n "$all_targets"; then
177   TARGETOBJS='$(ALL_TARGETOBJS)'
178 else
179   TARGETOBJS="$targetobjs"
180 fi
181 AC_SUBST(TARGETOBJS)
182
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])
191
192 AC_PROG_CC
193 AC_PROG_CXX
194 AC_PROG_YACC
195 AC_PROG_RANLIB
196 AC_PROG_INSTALL
197 AC_PROG_LN_S
198
199 AC_GNU_SOURCE
200
201 ZW_GNU_GETTEXT_SISTER_DIR
202 AM_PO_SUBDIRS
203
204 AC_C_BIGENDIAN
205
206 AC_EXEEXT
207
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)
211
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, [
217   case $target_cpu in
218     i?86) true;;
219     x86_64) false;;
220     sparc64) false;;
221     *) true;;
222   esac])
223
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])])
228
229 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
230
231 dnl On GNU/Linux TLS in static programs only works when using glibc
232 dnl 2.4 or later.
233 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
234 [AC_COMPILE_IFELSE([
235 #include <features.h>
236 #if !defined __GLIBC__
237 error
238 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
239 error
240 #endif
241 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
242
243 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
244
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"
249 AC_COMPILE_IFELSE([
250 #include <omp.h>
251 int i;
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])
258 fi
259 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
260
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")
267
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],
271 [AC_COMPILE_IFELSE([
272 #include <features.h>
273 #if !defined __GLIBC__
274 error
275 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
276 error
277 #endif
278 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
279
280 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
281
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])])
287
288 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
289
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=\$@
301 fi
302 AC_SUBST(RANDOM_SEED_CFLAGS)
303
304 AM_BINUTILS_WARNINGS
305
306 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
307 AC_SUBST(WARN_CXXFLAGS)
308
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"
312 AC_SUBST(LFS_CFLAGS)
313
314 AC_CHECK_FUNCS(chsize)
315 AC_REPLACE_FUNCS(pread ftruncate)
316
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")
320
321 AC_LANG_PUSH(C++)
322
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
328 # gcc 4.3.0 doesn't recognize the printf attribute on a template
329 # function.  Check for that.  This is gcc bug 35546.  This test can
330 # probably be removed after the bug has been fixed for a while.
331 AC_CACHE_CHECK([whether we can use attributes with template functions],
332 [gold_cv_template_attribute],
333 [AC_COMPILE_IFELSE([
334 template<typename T> extern void foo(const char*, ...)
335   __attribute__ ((__format__ (__printf__, 1, 2)));
336 template<typename T> void foo(const char* format, ...) {}
337 void bar() { foo<int>("%s\n", "foo"); }
338 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
339 if test "$gold_cv_template_attribute" = "yes"; then
340   AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
341             [Define if attributes work on C++ templates])
342 fi
343
344 AC_LANG_POP(C++)
345
346 AM_MAINTAINER_MODE
347
348 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)