Commit | Line | Data |
---|---|---|
bae7f79e ILT |
1 | dnl Process this file with autoconf to produce a configure script. |
2 | ||
3 | AC_PREREQ(2.59) | |
8486ee48 ILT |
4 | |
5 | AC_INIT(gold, 0.1) | |
6 | AC_CONFIG_SRCDIR(gold.cc) | |
bae7f79e ILT |
7 | |
8 | AC_CANONICAL_TARGET | |
9 | ||
8486ee48 | 10 | AM_INIT_AUTOMAKE |
bae7f79e ILT |
11 | |
12 | AM_CONFIG_HEADER(config.h:config.in) | |
13 | ||
ad2d6943 ILT |
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 | ||
fe9a4c12 ILT |
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") | |
89fc3421 CC |
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") | |
fe9a4c12 | 69 | |
193a53d9 ILT |
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. | |
6df6da4a ILT |
101 | targetobjs= |
102 | all_targets= | |
fbfba508 ILT |
103 | default_machine= |
104 | default_size= | |
105 | default_big_endian= | |
36959681 | 106 | default_osabi=ELFOSABI_NONE |
fbfba508 ILT |
107 | targ_32_little= |
108 | targ_32_big= | |
109 | targ_64_little= | |
110 | targ_64_big= | |
193a53d9 | 111 | for targ in $target $canon_targets; do |
193a53d9 ILT |
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 | |
6df6da4a | 117 | all_targets=yes |
193a53d9 | 118 | else |
fbfba508 ILT |
119 | . ${srcdir}/configure.tgt |
120 | ||
121 | if test "$targ_obj" = "UNKNOWN"; then | |
6df6da4a | 122 | AC_MSG_ERROR("unsupported target $targ") |
fbfba508 ILT |
123 | else |
124 | targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)" | |
60b2b4e7 ILT |
125 | if test "$targ_extra_obj" != ""; then |
126 | targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)" | |
127 | fi | |
f5314dd5 DM |
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 | |
fbfba508 ILT |
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 | |
36959681 | 153 | default_osabi=$targ_osabi |
fbfba508 ILT |
154 | fi |
155 | fi | |
193a53d9 ILT |
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 | ||
6df6da4a ILT |
176 | if test -n "$all_targets"; then |
177 | TARGETOBJS='$(ALL_TARGETOBJS)' | |
178 | else | |
179 | TARGETOBJS="$targetobjs" | |
180 | fi | |
181 | AC_SUBST(TARGETOBJS) | |
182 | ||
fbfba508 ILT |
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)]) | |
36959681 ILT |
189 | AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi, |
190 | [Default OSABI code]) | |
fbfba508 | 191 | |
bae7f79e ILT |
192 | AC_PROG_CC |
193 | AC_PROG_CXX | |
dbe717ef | 194 | AC_PROG_YACC |
5a6f7e2d | 195 | AC_PROG_RANLIB |
bae7f79e | 196 | AC_PROG_INSTALL |
537b5f51 | 197 | AC_PROG_LN_S |
fa99aa09 ILT |
198 | |
199 | AC_GNU_SOURCE | |
200 | ||
bae7f79e ILT |
201 | ZW_GNU_GETTEXT_SISTER_DIR |
202 | AM_PO_SUBDIRS | |
203 | ||
92e059d8 ILT |
204 | AC_C_BIGENDIAN |
205 | ||
bae7f79e ILT |
206 | AC_EXEEXT |
207 | ||
537b5f51 ILT |
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 | ||
63402fe4 ILT |
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;; | |
11936fb1 | 220 | sparc64) false;; |
63402fe4 ILT |
221 | *) true;; |
222 | esac]) | |
223 | ||
8a5e3e08 ILT |
224 | dnl Whether we can test -mcmodel=medium. |
225 | AM_CONDITIONAL(MCMODEL_MEDIUM, [test "$target_cpu" = "x86_64"]) | |
226 | ||
6eee141f | 227 | dnl Test for __thread support. |
097ec620 ILT |
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])]) | |
231 | ||
232 | AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes") | |
233 | ||
234 | dnl On GNU/Linux TLS in static programs only works when using glibc | |
235 | dnl 2.4 or later. | |
236 | AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24], | |
237 | [AC_COMPILE_IFELSE([ | |
238 | #include <features.h> | |
239 | #if !defined __GLIBC__ | |
240 | error | |
241 | #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4) | |
242 | error | |
243 | #endif | |
244 | ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])]) | |
245 | ||
246 | AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes") | |
6eee141f | 247 | |
155a0dd7 ILT |
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" | |
252 | AC_COMPILE_IFELSE([ | |
253 | #include <omp.h> | |
254 | int i; | |
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]) | |
261 | fi | |
262 | AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes") | |
263 | ||
c2b45e22 CC |
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") | |
270 | ||
271 | dnl On GNU/Linux TLS descriptors are supported by the dynamic loader | |
b0074644 ILT |
272 | dnl only with glibc 2.9 or later. |
273 | AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29], | |
c2b45e22 CC |
274 | [AC_COMPILE_IFELSE([ |
275 | #include <features.h> | |
276 | #if !defined __GLIBC__ | |
277 | error | |
b0074644 | 278 | #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9) |
c2b45e22 CC |
279 | error |
280 | #endif | |
b0074644 | 281 | ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])]) |
c2b45e22 | 282 | |
b0074644 | 283 | AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes") |
c2b45e22 | 284 | |
2fd32231 ILT |
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])]) | |
290 | ||
291 | AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes") | |
292 | ||
1d1f116d CD |
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=\$@ | |
304 | fi | |
305 | AC_SUBST(RANDOM_SEED_CFLAGS) | |
306 | ||
bae7f79e ILT |
307 | AM_BINUTILS_WARNINGS |
308 | ||
309 | WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'` | |
310 | AC_SUBST(WARN_CXXFLAGS) | |
311 | ||
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. | |
494e05f4 ILT |
314 | LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" |
315 | AC_SUBST(LFS_CFLAGS) | |
bae7f79e | 316 | |
9201d894 | 317 | AC_CHECK_FUNCS(chsize) |
fd03461a | 318 | AC_REPLACE_FUNCS(pread ftruncate mremap ffsll) |
82dcae9d | 319 | |
9a0910c3 ILT |
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)]) | |
7fcd0256 | 322 | AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no") |
9a0910c3 | 323 | |
0639a6f6 ILT |
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 | |
327 | dnl with C++. | |
328 | AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp]) | |
329 | ||
54dc6425 | 330 | AC_LANG_PUSH(C++) |
d288e464 | 331 | |
54dc6425 ILT |
332 | AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map) |
333 | AC_CHECK_HEADERS(ext/hash_map ext/hash_set) | |
15d5fa16 | 334 | AC_CHECK_HEADERS(byteswap.h) |
9201d894 | 335 | AC_CHECK_FUNCS(mallinfo posix_fallocate) |
3d857b98 | 336 | AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem]) |
d288e464 | 337 | |
40fde488 CD |
338 | # Use of ::std::tr1::unordered_map::rehash causes undefined symbols |
339 | # at link time with some versions of GCC. | |
340 | AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.], | |
341 | [gold_cv_unordered_map_rehash], | |
342 | [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ | |
343 | #include <tr1/unordered_map> | |
344 | void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); } | |
345 | ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])]) | |
346 | if test "$gold_cv_unordered_map_rehash" = "yes"; then | |
347 | AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1, | |
348 | [Define if ::std::tr1::unordered_map::rehash is usable]) | |
349 | fi | |
350 | ||
04bf7072 ILT |
351 | # gcc 4.3.0 doesn't recognize the printf attribute on a template |
352 | # function. Check for that. This is gcc bug 35546. This test can | |
353 | # probably be removed after the bug has been fixed for a while. | |
354 | AC_CACHE_CHECK([whether we can use attributes with template functions], | |
355 | [gold_cv_template_attribute], | |
356 | [AC_COMPILE_IFELSE([ | |
357 | template<typename T> extern void foo(const char*, ...) | |
358 | __attribute__ ((__format__ (__printf__, 1, 2))); | |
359 | template<typename T> void foo(const char* format, ...) {} | |
360 | void bar() { foo<int>("%s\n", "foo"); } | |
361 | ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])]) | |
362 | if test "$gold_cv_template_attribute" = "yes"; then | |
363 | AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1, | |
364 | [Define if attributes work on C++ templates]) | |
365 | fi | |
366 | ||
54dc6425 ILT |
367 | AC_LANG_POP(C++) |
368 | ||
bae7f79e ILT |
369 | AM_MAINTAINER_MODE |
370 | ||
5a6f7e2d | 371 | AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in) |