Add plugin functionality for link-time optimization (LTO).
[external/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 targ_32_little=
107 targ_32_big=
108 targ_64_little=
109 targ_64_big=
110 for targ in $target $canon_targets; do
111   if test "$targ" = "all"; then
112     targ_32_little=yes
113     targ_32_big=yes
114     targ_64_little=yes
115     targ_64_big=yes
116     all_targets=yes
117   else
118     . ${srcdir}/configure.tgt
119
120     if test "$targ_obj" = "UNKNOWN"; then
121       AC_MSG_ERROR("unsupported target $targ")
122     else
123       targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
124       if test "$targ_extra_obj" != ""; then
125         targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
126       fi
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
130               targ_32_big=yes
131           fi
132           if test "$targ_big_endian" = "false" \
133               -o "$targ_extra_big_endian" = "false"; then
134               targ_32_little=yes
135           fi
136       fi
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
140               targ_64_big=yes
141           fi
142           if test "$targ_big_endian" = "false" \
143               -o "$targ_extra_big_endian" = "false"; then
144               targ_64_little=yes
145           fi
146       fi
147
148       if test "$target" = "$targ"; then
149         default_machine=$targ_machine
150         default_size=$targ_size
151         default_big_endian=$targ_big_endian
152       fi
153     fi
154   fi
155 done
156
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])
160 fi
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])
164 fi
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])
168 fi
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])
172 fi
173
174 if test -n "$all_targets"; then
175   TARGETOBJS='$(ALL_TARGETOBJS)'
176 else
177   TARGETOBJS="$targetobjs"
178 fi
179 AC_SUBST(TARGETOBJS)
180
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)])
187
188 AC_PROG_CC
189 AC_PROG_CXX
190 AC_PROG_YACC
191 AC_PROG_RANLIB
192 AC_PROG_INSTALL
193 AC_PROG_LN_S
194
195 AC_GNU_SOURCE
196
197 ZW_GNU_GETTEXT_SISTER_DIR
198 AM_PO_SUBDIRS
199
200 AC_C_BIGENDIAN
201
202 AC_EXEEXT
203
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)
207
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, [
213   case $target_cpu in
214     i?86) true;;
215     x86_64) false;;
216     sparc64) false;;
217     *) true;;
218   esac])
219
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])])
224
225 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
226
227 dnl On GNU/Linux TLS in static programs only works when using glibc
228 dnl 2.4 or later.
229 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
230 [AC_COMPILE_IFELSE([
231 #include <features.h>
232 #if !defined __GLIBC__
233 error
234 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
235 error
236 #endif
237 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
238
239 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
240
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"
245 AC_COMPILE_IFELSE([
246 #include <omp.h>
247 int i;
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])
254 fi
255 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
256
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")
263
264 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
265 dnl only with glibc 2.5 or later.
266 AC_CACHE_CHECK([for glibc >= 2.5], [gold_cv_lib_glibc25],
267 [AC_COMPILE_IFELSE([
268 #include <features.h>
269 #if !defined __GLIBC__
270 error
271 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 5)
272 error
273 #endif
274 ], [gold_cv_lib_glibc25=yes], [gold_cv_lib_glibc25=no])])
275
276 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc25" = "yes")
277
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])])
283
284 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
285
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=\$@
297 fi
298 AC_SUBST(RANDOM_SEED_CFLAGS)
299
300 AM_BINUTILS_WARNINGS
301
302 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
303 AC_SUBST(WARN_CXXFLAGS)
304
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"
308 AC_SUBST(LFS_CFLAGS)
309
310 AC_REPLACE_FUNCS(pread)
311
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")
315
316 AC_LANG_PUSH(C++)
317
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)
321
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],
327 [AC_COMPILE_IFELSE([
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])
336 fi
337
338 AC_LANG_POP(C++)
339
340 AM_MAINTAINER_MODE
341
342 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)