]>
Commit | Line | Data |
---|---|---|
bae7f79e | 1 | dnl Process this file with autoconf to produce a configure script. |
5bf135a7 | 2 | dnl |
219d1afa | 3 | dnl Copyright (C) 2006-2018 Free Software Foundation, Inc. |
5bf135a7 NC |
4 | dnl |
5 | dnl This file is free software; you can redistribute it and/or modify | |
6 | dnl it under the terms of the GNU General Public License as published by | |
7 | dnl the Free Software Foundation; either version 3 of the License, or | |
8 | dnl (at your option) any later version. | |
2b64b551 | 9 | dnl |
5bf135a7 NC |
10 | dnl This program is distributed in the hope that it will be useful, |
11 | dnl but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | dnl GNU General Public License for more details. | |
2b64b551 | 14 | dnl |
5bf135a7 NC |
15 | dnl You should have received a copy of the GNU General Public License |
16 | dnl along with this program; see the file COPYING3. If not see | |
17 | dnl <http://www.gnu.org/licenses/>. | |
18 | dnl | |
bae7f79e | 19 | |
8486ee48 ILT |
20 | AC_INIT(gold, 0.1) |
21 | AC_CONFIG_SRCDIR(gold.cc) | |
bae7f79e ILT |
22 | |
23 | AC_CANONICAL_TARGET | |
24 | ||
6ea55b82 | 25 | AM_INIT_AUTOMAKE([no-dist parallel-tests]) |
bae7f79e ILT |
26 | |
27 | AM_CONFIG_HEADER(config.h:config.in) | |
28 | ||
24538276 CC |
29 | AC_USE_SYSTEM_EXTENSIONS |
30 | ||
df7b86aa NC |
31 | # PR 14072 |
32 | AH_VERBATIM([00_CONFIG_H_CHECK], | |
33 | [/* Check that config.h is #included before system headers | |
34 | (this works only for glibc, but that should be enough). */ | |
0a6f1bf2 | 35 | #if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__) |
df7b86aa NC |
36 | # error config.h must be #included before system headers |
37 | #endif | |
38 | #define __CONFIG_H__ 1]) | |
39 | ||
ad2d6943 ILT |
40 | AC_ARG_WITH(sysroot, |
41 | [ --with-sysroot[=DIR] search for usr/lib et al within DIR], | |
42 | [sysroot=$withval], [sysroot=no]) | |
43 | ||
44 | if test "$sysroot" = "yes"; then | |
45 | sysroot='${exec_prefix}/${target_alias}/sys-root' | |
46 | elif test "$sysroot" = "no"; then | |
47 | sysroot= | |
48 | fi | |
49 | ||
50 | sysroot_relocatable=0 | |
51 | if test -n "$sysroot"; then | |
7a34932b | 52 | case "$sysroot" in |
ad2d6943 ILT |
53 | "${prefix}" | "${prefix}/"* | \ |
54 | "${exec_prefix}" | "${exec_prefix}/"* | \ | |
55 | '${prefix}' | '${prefix}/'*| \ | |
56 | '${exec_prefix}' | '${exec_prefix}/'*) | |
57 | sysroot_relocatable=1 | |
58 | ;; | |
59 | esac | |
60 | fi | |
61 | ||
62 | AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot", | |
63 | [System root for target files]) | |
64 | AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable, | |
65 | [Whether the system root can be relocated]) | |
66 | ||
4fda8867 NC |
67 | dnl "install_as_default" is true if the linker to be installed as the |
68 | dnl default linker, ld. | |
69 | dnl "installed_linker" is the installed gold linker name. | |
c7791212 | 70 | |
f2a6224b | 71 | installed_linker=ld.gold |
c7791212 NC |
72 | AC_ARG_ENABLE(gold, |
73 | [[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]], | |
74 | [case "${enableval}" in | |
f2a6224b L |
75 | default) |
76 | install_as_default=yes | |
77 | ;; | |
78 | yes) | |
79 | if test x${enable_ld} = xno; then | |
c7791212 NC |
80 | install_as_default=yes |
81 | fi | |
4fda8867 NC |
82 | ;; |
83 | esac], | |
f2a6224b | 84 | [install_as_default=no]) |
4fda8867 NC |
85 | AC_SUBST(install_as_default) |
86 | AC_SUBST(installed_linker) | |
87 | ||
24538276 | 88 | AC_PLUGINS |
89fc3421 CC |
89 | if test "$plugins" = "yes"; then |
90 | AC_DEFINE(ENABLE_PLUGINS, 1, | |
91 | [Define to enable linker plugins]) | |
92 | fi | |
93 | AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes") | |
fe9a4c12 | 94 | |
6b1edb94 L |
95 | # Decide if -z relro should be enabled in ELF linker by default. |
96 | ac_default_ld_z_relro=unset | |
97 | # Provide a configure time option to override our default. | |
98 | AC_ARG_ENABLE(relro, | |
99 | AS_HELP_STRING([--enable-relro], | |
100 | [enable -z relro in ELF linker by default]), | |
101 | [case "${enableval}" in | |
102 | yes) ac_default_ld_z_relro=1 ;; | |
103 | no) ac_default_ld_z_relro=0 ;; | |
104 | esac])dnl | |
105 | if test "${ac_default_ld_z_relro}" = unset; then | |
106 | ac_default_ld_z_relro=1 | |
107 | fi | |
108 | AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_RELRO, | |
109 | $ac_default_ld_z_relro, | |
110 | [Define to 1 if you want to enable -z relro in ELF linker by default.]) | |
111 | ||
193a53d9 ILT |
112 | AC_ARG_ENABLE([targets], |
113 | [ --enable-targets alternative target configurations], | |
114 | [case "${enableval}" in | |
115 | yes | "") | |
116 | AC_MSG_ERROR([--enable-targets option must specify target names or 'all']) | |
117 | ;; | |
118 | no) | |
119 | enable_targets= | |
120 | ;; | |
121 | *) | |
122 | enable_targets=$enableval | |
123 | ;; | |
124 | esac], | |
125 | [# For now, enable all targets by default | |
126 | enable_targets=all | |
127 | ]) | |
128 | ||
129 | # Canonicalize the enabled targets. | |
130 | if test -n "$enable_targets"; then | |
131 | for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do | |
132 | result=`$ac_config_sub $targ 2>/dev/null` | |
133 | if test -n "$result"; then | |
134 | canon_targets="$canon_targets $result" | |
135 | else | |
136 | # Permit unrecognized target names, like "all". | |
137 | canon_targets="$canon_targets $targ" | |
138 | fi | |
139 | done | |
140 | fi | |
141 | ||
2760f24c RG |
142 | # Decide which "--hash-style" to use by default |
143 | # Provide a configure time option to override our default. | |
144 | AC_ARG_ENABLE([default-hash-style], | |
145 | AS_HELP_STRING([--enable-default-hash-style={sysv,gnu,both}], | |
146 | [use this default hash style]), | |
147 | [case "${enable_default_hash_style}" in | |
148 | sysv | gnu | both) ;; | |
149 | *) AC_MSG_ERROR([bad value ${enable_default_hash_style} for enable-default-hash-style option]) ;; | |
150 | esac], | |
151 | [case "${target}" in | |
152 | # Enable gnu hash only on GNU targets, but not mips | |
153 | mips*-*-*) enable_default_hash_style=sysv ;; | |
154 | *-*-gnu* | *-*-linux* | *-*-nacl*) enable_default_hash_style=both ;; | |
155 | *) enable_default_hash_style=sysv ;; | |
156 | esac]) | |
157 | ||
158 | AC_DEFINE_UNQUOTED([DEFAULT_HASH_STYLE], | |
159 | ["${enable_default_hash_style}"], | |
160 | [Set the default --hash-style value]) | |
161 | ||
193a53d9 | 162 | # See which specific instantiations we need. |
6df6da4a ILT |
163 | targetobjs= |
164 | all_targets= | |
fbfba508 ILT |
165 | default_machine= |
166 | default_size= | |
167 | default_big_endian= | |
36959681 | 168 | default_osabi=ELFOSABI_NONE |
fbfba508 ILT |
169 | targ_32_little= |
170 | targ_32_big= | |
171 | targ_64_little= | |
172 | targ_64_big= | |
193a53d9 | 173 | for targ in $target $canon_targets; do |
193a53d9 ILT |
174 | if test "$targ" = "all"; then |
175 | targ_32_little=yes | |
176 | targ_32_big=yes | |
177 | targ_64_little=yes | |
178 | targ_64_big=yes | |
6df6da4a | 179 | all_targets=yes |
193a53d9 | 180 | else |
fbfba508 ILT |
181 | . ${srcdir}/configure.tgt |
182 | ||
183 | if test "$targ_obj" = "UNKNOWN"; then | |
6df6da4a | 184 | AC_MSG_ERROR("unsupported target $targ") |
fbfba508 ILT |
185 | else |
186 | targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)" | |
60b2b4e7 ILT |
187 | if test "$targ_extra_obj" != ""; then |
188 | targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)" | |
189 | fi | |
f5314dd5 DM |
190 | if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then |
191 | if test "$targ_big_endian" = "true" \ | |
192 | -o "$targ_extra_big_endian" = "true"; then | |
193 | targ_32_big=yes | |
194 | fi | |
195 | if test "$targ_big_endian" = "false" \ | |
196 | -o "$targ_extra_big_endian" = "false"; then | |
197 | targ_32_little=yes | |
198 | fi | |
199 | fi | |
200 | if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then | |
201 | if test "$targ_big_endian" = "true" \ | |
202 | -o "$targ_extra_big_endian" = "true"; then | |
203 | targ_64_big=yes | |
204 | fi | |
205 | if test "$targ_big_endian" = "false" \ | |
206 | -o "$targ_extra_big_endian" = "false"; then | |
207 | targ_64_little=yes | |
208 | fi | |
fbfba508 ILT |
209 | fi |
210 | ||
211 | if test "$target" = "$targ"; then | |
212 | default_machine=$targ_machine | |
213 | default_size=$targ_size | |
214 | default_big_endian=$targ_big_endian | |
36959681 | 215 | default_osabi=$targ_osabi |
364c7fa5 | 216 | |
053a4d68 | 217 | AM_CONDITIONAL(DEFAULT_TARGET_AARCH64, test "$targ_obj" = "aarch64") |
364c7fa5 ILT |
218 | AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm") |
219 | AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386") | |
220 | AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc") | |
221 | AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc") | |
e79a4bad | 222 | AM_CONDITIONAL(DEFAULT_TARGET_S390, test "$targ_obj" = "s390") |
4fc1b9d4 L |
223 | target_x86_64=no |
224 | target_x32=no | |
225 | if test "$targ_obj" = "x86_64"; then | |
226 | case "$target" in | |
227 | x86_64*-linux-gnux32) | |
228 | target_x32=yes | |
be66981e | 229 | default_size=32 |
4fc1b9d4 L |
230 | ;; |
231 | *) | |
232 | target_x86_64=yes | |
233 | ;; | |
234 | esac | |
235 | fi | |
236 | AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$target_x86_64" = "yes") | |
237 | AM_CONDITIONAL(DEFAULT_TARGET_X32, test "$target_x32" = "yes") | |
ad961eab L |
238 | AM_CONDITIONAL(DEFAULT_TARGET_X86_64_OR_X32, |
239 | test "$target_x86_64" = "yes" -o "$target_x32" = "yes") | |
5c0b3823 | 240 | AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx") |
9810d34d | 241 | AM_CONDITIONAL(DEFAULT_TARGET_MIPS, test "$targ_obj" = "mips") |
9df9de2c CC |
242 | DEFAULT_TARGET=${targ_obj} |
243 | AC_SUBST(DEFAULT_TARGET) | |
fbfba508 ILT |
244 | fi |
245 | fi | |
193a53d9 ILT |
246 | fi |
247 | done | |
248 | ||
6cfaf60b | 249 | # Remove any duplicates. |
9109c078 ILT |
250 | to="" |
251 | for t in $targetobjs; do | |
252 | case " $to " in | |
253 | *" $t "*) ;; | |
254 | *) to="$to $t" ;; | |
255 | esac | |
256 | done | |
257 | targetobjs=$to | |
6cfaf60b | 258 | |
193a53d9 ILT |
259 | if test -n "$targ_32_little"; then |
260 | AC_DEFINE(HAVE_TARGET_32_LITTLE, 1, | |
261 | [Define to support 32-bit little-endian targets]) | |
262 | fi | |
263 | if test -n "$targ_32_big"; then | |
264 | AC_DEFINE(HAVE_TARGET_32_BIG, 1, | |
265 | [Define to support 32-bit big-endian targets]) | |
266 | fi | |
267 | if test -n "$targ_64_little"; then | |
268 | AC_DEFINE(HAVE_TARGET_64_LITTLE, 1, | |
269 | [Define to support 64-bit little-endian targets]) | |
270 | fi | |
271 | if test -n "$targ_64_big"; then | |
272 | AC_DEFINE(HAVE_TARGET_64_BIG, 1, | |
273 | [Define to support 64-bit big-endian targets]) | |
274 | fi | |
275 | ||
6df6da4a ILT |
276 | if test -n "$all_targets"; then |
277 | TARGETOBJS='$(ALL_TARGETOBJS)' | |
278 | else | |
279 | TARGETOBJS="$targetobjs" | |
280 | fi | |
281 | AC_SUBST(TARGETOBJS) | |
282 | ||
fbfba508 ILT |
283 | AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine, |
284 | [Default machine code]) | |
285 | AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size, | |
286 | [Default size (32 or 64)]) | |
287 | AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian, | |
288 | [Default big endian (true or false)]) | |
36959681 ILT |
289 | AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi, |
290 | [Default OSABI code]) | |
fbfba508 | 291 | |
3f3cddf1 ILT |
292 | AC_ARG_WITH(lib-path, |
293 | [ --with-lib-path=dir1:dir2... set default LIB_PATH], | |
294 | [case "$withval" in | |
295 | yes) LIB_PATH='"/lib:/usr/lib"' ;; | |
296 | no) LIB_PATH='""' ;; | |
297 | *) LIB_PATH='"'"$withval"'"' ;; | |
298 | esac], | |
299 | [LIB_PATH='"::DEFAULT::"']) | |
300 | AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH, | |
301 | [Default library search path]) | |
302 | if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then | |
303 | AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker]) | |
304 | fi | |
305 | ||
ebb300b2 CC |
306 | AC_CHECK_TOOL(NM, nm) |
307 | ||
bae7f79e ILT |
308 | AC_PROG_CC |
309 | AC_PROG_CXX | |
dbe717ef | 310 | AC_PROG_YACC |
5a6f7e2d | 311 | AC_PROG_RANLIB |
bae7f79e | 312 | AC_PROG_INSTALL |
537b5f51 | 313 | AC_PROG_LN_S |
fa99aa09 ILT |
314 | |
315 | AC_GNU_SOURCE | |
316 | ||
bae7f79e ILT |
317 | ZW_GNU_GETTEXT_SISTER_DIR |
318 | AM_PO_SUBDIRS | |
319 | ||
92e059d8 ILT |
320 | AC_C_BIGENDIAN |
321 | ||
bae7f79e ILT |
322 | AC_EXEEXT |
323 | ||
537b5f51 ILT |
324 | AM_CONDITIONAL(NATIVE_LINKER, |
325 | test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias") | |
326 | AM_CONDITIONAL(GCC, test "$GCC" = yes) | |
327 | ||
eb373049 ILT |
328 | AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER, |
329 | test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias") | |
330 | ||
328c7c2f ILT |
331 | dnl Test for whether static linking is supported. Some systems do not |
332 | dnl install static libraries. This only affects the set of tests that | |
333 | dnl we run. | |
334 | AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static], | |
dd7af074 | 335 | [LDFLAGS_hold=$LDFLAGS |
328c7c2f | 336 | LDFLAGS="$LDFLAGS -static" |
dd7af074 | 337 | AC_LINK_IFELSE([ |
328c7c2f | 338 | AC_LANG_PROGRAM([[void f() { }]])], |
dd7af074 ILT |
339 | [gold_cv_lib_static=yes], [gold_cv_lib_static=no]) |
340 | LDFLAGS=$LDFLAGS_hold]) | |
328c7c2f ILT |
341 | AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes") |
342 | ||
63402fe4 ILT |
343 | dnl Some architectures do not support taking pointers of functions |
344 | dnl defined in shared libraries except in -fPIC mode. We need to | |
345 | dnl tell the unittest framework if we're compiling for one of those | |
346 | dnl targets, so it doesn't try to run the tests that do that. | |
347 | AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [ | |
348 | case $target_cpu in | |
864a1b56 | 349 | powerpc*) false;; |
63402fe4 | 350 | x86_64) false;; |
11936fb1 | 351 | sparc64) false;; |
e79a4bad | 352 | s390x) false;; |
63402fe4 ILT |
353 | *) true;; |
354 | esac]) | |
355 | ||
084e2665 ILT |
356 | dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is |
357 | dnl only available in gcc 4.1. | |
358 | AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41], | |
d0ac1c44 | 359 | [AC_COMPILE_IFELSE([AC_LANG_SOURCE([ |
084e2665 ILT |
360 | #if !defined __GNUC__ |
361 | error | |
362 | #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) | |
363 | error | |
364 | #endif | |
d0ac1c44 | 365 | ])], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])]) |
084e2665 | 366 | |
24482ca0 L |
367 | save_CFLAGS="$CFLAGS" |
368 | CFLAGS="$CFLAGS -mcmodel=medium" | |
d0ac1c44 | 369 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_mcmodel_medium=yes], [have_mcmodel_medium=no]) |
24482ca0 | 370 | CFLAGS="$save_CFLAGS" |
8a5e3e08 | 371 | dnl Whether we can test -mcmodel=medium. |
084e2665 | 372 | AM_CONDITIONAL(MCMODEL_MEDIUM, |
24482ca0 | 373 | [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"]) |
8a5e3e08 | 374 | |
2b64b551 RM |
375 | AC_CACHE_CHECK([whether $CC supports -fmerge-constants], |
376 | [gold_cv_merge_constants], [ | |
377 | save_CFLAGS="$CFLAGS" | |
378 | CFLAGS="$CFLAGS -fmerge-constants" | |
d0ac1c44 | 379 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([const char *s = "foo";])], |
2500c017 CC |
380 | [gold_cv_merge_constants=yes], |
381 | [gold_cv_merge_constants=no]) | |
2b64b551 RM |
382 | CFLAGS="$save_CFLAGS"]) |
383 | AC_SUBST([MERGE_CONSTANTS_FLAG]) | |
384 | AS_IF([test "$gold_cv_merge_constants" = yes], | |
385 | [MERGE_CONSTANTS_FLAG=-fmerge-constants], | |
386 | [MERGE_CONSTANTS_FLAG=]) | |
387 | ||
6eee141f | 388 | dnl Test for __thread support. |
097ec620 | 389 | AC_CACHE_CHECK([for thread support], [gold_cv_c_thread], |
d0ac1c44 | 390 | [AC_COMPILE_IFELSE([AC_LANG_SOURCE([__thread int i = 1;])], |
097ec620 ILT |
391 | [gold_cv_c_thread=yes], [gold_cv_c_thread=no])]) |
392 | ||
393 | AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes") | |
394 | ||
395 | dnl On GNU/Linux TLS in static programs only works when using glibc | |
396 | dnl 2.4 or later. | |
397 | AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24], | |
d0ac1c44 | 398 | [AC_COMPILE_IFELSE([AC_LANG_SOURCE([ |
097ec620 ILT |
399 | #include <features.h> |
400 | #if !defined __GLIBC__ | |
401 | error | |
402 | #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4) | |
403 | error | |
404 | #endif | |
d0ac1c44 | 405 | ])], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])]) |
097ec620 ILT |
406 | |
407 | AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes") | |
6eee141f | 408 | |
155a0dd7 ILT |
409 | dnl Test for #pragma omp threadprivate |
410 | AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate], | |
411 | [save_CFLAGS="$CFLAGS" | |
412 | CFLAGS="$CFLAGS -fopenmp" | |
d0ac1c44 | 413 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([ |
155a0dd7 ILT |
414 | #include <omp.h> |
415 | int i; | |
416 | #pragma omp threadprivate (i) | |
d0ac1c44 | 417 | ])], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no]) |
155a0dd7 ILT |
418 | CFLAGS="$save_CFLAGS"]) |
419 | if test "$gold_cv_c_threadprivate" = "yes"; then | |
420 | AC_DEFINE(HAVE_OMP_SUPPORT, 1, | |
421 | [Define if compiler supports #pragma omp threadprivate]) | |
422 | fi | |
423 | AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes") | |
424 | ||
c2b45e22 | 425 | dnl Test for the -ftls-dialect=gnu2 option. |
13323c49 RM |
426 | dnl Use -Werror in case of compilers that make unknown -m options warnings. |
427 | dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS | |
428 | dnl gets set later by default Autoconf magic to include -Werror. (We are | |
429 | dnl assuming here that there is no compiler that groks -mtls-dialect=gnu2 | |
430 | dnl but does not grok -Werror.) | |
c2b45e22 | 431 | save_CFLAGS="$CFLAGS" |
13323c49 | 432 | CFLAGS="$CFLAGS -Werror -fpic -mtls-dialect=gnu2" |
d0ac1c44 | 433 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([ |
63887f3d L |
434 | __thread int i; |
435 | void foo (void) | |
436 | { | |
437 | i = 10; | |
438 | } | |
d0ac1c44 | 439 | ])], [have_tls_gnu2=yes], [have_tls_gnu2=no]) |
c2b45e22 CC |
440 | CFLAGS="$save_CFLAGS" |
441 | AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes") | |
442 | ||
443 | dnl On GNU/Linux TLS descriptors are supported by the dynamic loader | |
b0074644 ILT |
444 | dnl only with glibc 2.9 or later. |
445 | AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29], | |
d0ac1c44 | 446 | [AC_COMPILE_IFELSE([AC_LANG_SOURCE([ |
c2b45e22 CC |
447 | #include <features.h> |
448 | #if !defined __GLIBC__ | |
449 | error | |
b0074644 | 450 | #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9) |
c2b45e22 CC |
451 | error |
452 | #endif | |
d0ac1c44 | 453 | ])], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])]) |
c2b45e22 | 454 | |
b0074644 | 455 | AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes") |
c2b45e22 | 456 | |
1d1f116d CD |
457 | dnl Test for the -frandom-seed option. |
458 | AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed], | |
459 | [save_CFLAGS="$CFLAGS" | |
460 | CFLAGS="$CFLAGS -frandom-seed=foo" | |
d0ac1c44 | 461 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [gold_cv_c_random_seed=yes], |
1d1f116d CD |
462 | [gold_cv_c_random_seed=no]) |
463 | CFLAGS="$save_CFLAGS"]) | |
464 | if test "$gold_cv_c_random_seed" = "yes"; then | |
465 | # In Makefile, '$@' will be expanded to be the name of the file | |
466 | # being built, providing a unique seed for each file. | |
467 | RANDOM_SEED_CFLAGS=-frandom-seed=\$@ | |
468 | fi | |
469 | AC_SUBST(RANDOM_SEED_CFLAGS) | |
470 | ||
7223e9ca | 471 | dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc |
d0773f31 | 472 | dnl 2.11 or later, and by binutils 2.20.1 or later. |
ebb300b2 CC |
473 | AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc], |
474 | [save_LDFLAGS="$LDFLAGS" | |
475 | LDFLAGS="$LDFLAGS -static" | |
476 | AC_LINK_IFELSE([AC_LANG_PROGRAM([[ | |
7223e9ca ILT |
477 | #include <features.h> |
478 | #if !defined __GLIBC__ | |
479 | error | |
480 | #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11) | |
481 | error | |
482 | #endif | |
ebb300b2 CC |
483 | void func (void) { } |
484 | void invoke (void); | |
485 | __asm__(".type invoke, %gnu_indirect_function"); | |
486 | typedef void (*funcptr) (void); | |
487 | funcptr dispatch (void) __asm__ ("invoke"); | |
488 | funcptr dispatch (void) { return &func; }]], | |
489 | [[invoke();]]) | |
490 | ], [ | |
491 | if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then | |
492 | gold_cv_lib_glibc_ifunc=both | |
493 | else | |
494 | gold_cv_lib_glibc_ifunc=dyn | |
495 | fi], [gold_cv_lib_glibc_ifunc=no]) | |
496 | LDFLAGS="$save_LDFLAGS"]) | |
7223e9ca | 497 | |
ebb300b2 CC |
498 | AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no") |
499 | AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both") | |
7223e9ca | 500 | |
bae7f79e ILT |
501 | AM_BINUTILS_WARNINGS |
502 | ||
2ea97941 | 503 | WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'` |
bae7f79e ILT |
504 | AC_SUBST(WARN_CXXFLAGS) |
505 | ||
dc87f620 ILT |
506 | AC_ARG_WITH(gold-ldflags, |
507 | [ --with-gold-ldflags=FLAGS additional link flags for gold], | |
508 | [if test "$withval" = "no" -o "$withval" = "yes"; then | |
509 | GOLD_LDFLAGS= | |
510 | else | |
511 | GOLD_LDFLAGS=$withval | |
512 | fi], | |
513 | [GOLD_LDFLAGS=]) | |
514 | AC_SUBST(GOLD_LDFLAGS) | |
515 | ||
516 | AC_ARG_WITH(gold-ldadd, | |
517 | [ --with-gold-ldadd=LIBS additional libraries for gold], | |
518 | [if test "$withval" = "no" -o "$withval" = "yes"; then | |
519 | GOLD_LDADD= | |
520 | else | |
521 | GOLD_LDADD=$withval | |
522 | fi], | |
523 | [GOLD_LDADD=]) | |
524 | AC_SUBST(GOLD_LDADD) | |
525 | ||
bae7f79e ILT |
526 | dnl Force support for large files by default. This may need to be |
527 | dnl host dependent. If build == host, we can check getconf LFS_CFLAGS. | |
494e05f4 ILT |
528 | LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" |
529 | AC_SUBST(LFS_CFLAGS) | |
bae7f79e | 530 | |
88597d34 ILT |
531 | AC_CHECK_HEADERS(sys/mman.h) |
532 | AC_CHECK_FUNCS(chsize mmap) | |
533 | AC_REPLACE_FUNCS(pread ftruncate ffsll) | |
534 | ||
535 | AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove], | |
536 | [AC_LINK_IFELSE([ | |
537 | AC_LANG_PROGRAM([[ | |
538 | #include <sys/mman.h> | |
539 | void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); } | |
540 | ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])]) | |
541 | if test "$gold_cv_lib_mremap_maymove" = "yes"; then | |
542 | AC_DEFINE(HAVE_MREMAP, 1, | |
543 | [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support]) | |
544 | else | |
545 | AC_LIBOBJ(mremap) | |
546 | fi | |
82dcae9d | 547 | |
9a0910c3 | 548 | # Link in zlib if we can. This allows us to write compressed sections. |
ae2eea65 | 549 | AM_ZLIB |
9a0910c3 | 550 | |
c8dc28bc CC |
551 | AC_ARG_ENABLE([threads], |
552 | [[ --enable-threads[=ARG] multi-threaded linking [ARG={auto,yes,no}]]], | |
553 | [case "${enableval}" in | |
554 | yes | "") threads=yes ;; | |
555 | no) threads=no ;; | |
556 | auto) threads=auto ;; | |
557 | *) threads=yes ;; | |
558 | esac], | |
559 | [threads=auto]) | |
560 | ||
561 | if test "$threads" = "yes"; then | |
562 | AX_PTHREAD([threads=yes], AC_MSG_ERROR([pthread not found])) | |
563 | elif test "$threads" = "auto"; then | |
564 | AX_PTHREAD([threads=yes], [threads=no]) | |
565 | fi | |
566 | ||
567 | if test "$threads" = "yes"; then | |
568 | AC_DEFINE(ENABLE_THREADS, 1, | |
569 | [Define to do multi-threaded linking]) | |
570 | fi | |
571 | AM_CONDITIONAL(THREADS, test "$threads" = "yes") | |
572 | ||
0639a6f6 ILT |
573 | dnl We have to check these in C, not C++, because autoconf generates |
574 | dnl tests which have no type information, and current glibc provides | |
575 | dnl multiple declarations of functions like basename when compiling | |
576 | dnl with C++. | |
577 | AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp]) | |
578 | ||
ae447ddd CC |
579 | dnl Check if gcc supports the -gpubnames option. |
580 | dnl Use -Werror in case of compilers that make unknown -g options warnings. | |
581 | dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS | |
582 | dnl gets set later by default Autoconf magic to include -Werror. (We are | |
583 | dnl assuming here that there is no compiler that groks -gpubnames | |
584 | dnl but does not grok -Werror.) | |
585 | save_CFLAGS="$CFLAGS" | |
586 | CFLAGS="$CFLAGS -Werror -gpubnames" | |
d0ac1c44 | 587 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_pubnames=yes], [have_pubnames=no]) |
ae447ddd CC |
588 | CFLAGS="$save_CFLAGS" |
589 | AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes") | |
590 | ||
591 | dnl Check if gcc supports the -fno-use-linker-plugin option. | |
592 | save_CFLAGS="$CFLAGS" | |
593 | CFLAGS="$CFLAGS -Werror -fno-use-linker-plugin" | |
d0ac1c44 | 594 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [have_no_use_linker_plugin=yes], [have_no_use_linker_plugin=no]) |
ae447ddd CC |
595 | CFLAGS="$save_CFLAGS" |
596 | AM_CONDITIONAL(HAVE_NO_USE_LINKER_PLUGIN, test "$have_no_use_linker_plugin" = "yes") | |
597 | ||
54dc6425 | 598 | AC_LANG_PUSH(C++) |
d288e464 | 599 | |
8356f2d0 | 600 | AC_CHECK_HEADERS(unordered_set unordered_map) |
54dc6425 ILT |
601 | AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map) |
602 | AC_CHECK_HEADERS(ext/hash_map ext/hash_set) | |
15d5fa16 | 603 | AC_CHECK_HEADERS(byteswap.h) |
0bf402d5 ILT |
604 | |
605 | dnl When plugins enabled dynamic loader interface is required. Check headers | |
6632e8cc | 606 | dnl which may provide this interface. Add the necessary library to link. |
0bf402d5 | 607 | AC_CHECK_HEADERS(windows.h) |
6632e8cc CC |
608 | AC_CHECK_HEADERS(dlfcn.h) |
609 | AC_SEARCH_LIBS(dlopen, [dl dld]) | |
610 | case "$ac_cv_search_dlopen" in | |
611 | no*) DLOPEN_LIBS="";; | |
612 | *) DLOPEN_LIBS="$ac_cv_search_dlopen";; | |
613 | esac | |
0bf402d5 ILT |
614 | AC_SUBST(DLOPEN_LIBS) |
615 | ||
7c0640fa | 616 | AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times) |
3d857b98 | 617 | AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem]) |
d288e464 | 618 | |
40fde488 CD |
619 | # Use of ::std::tr1::unordered_map::rehash causes undefined symbols |
620 | # at link time with some versions of GCC. | |
621 | AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.], | |
622 | [gold_cv_unordered_map_rehash], | |
623 | [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ | |
624 | #include <tr1/unordered_map> | |
625 | void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); } | |
626 | ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])]) | |
627 | if test "$gold_cv_unordered_map_rehash" = "yes"; then | |
628 | AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1, | |
629 | [Define if ::std::tr1::unordered_map::rehash is usable]) | |
630 | fi | |
631 | ||
81c82a68 ILT |
632 | # Use of tr1/unordered_map with off_t as a key is not supported on GCC |
633 | # 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type. | |
634 | AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined], | |
635 | [gold_cv_hash_off_t], | |
636 | [CXXFLAGS_hold=$CXXFLAGS | |
637 | CXXFLAGS="$CXXFLAGS $LFS_CFLAGS" | |
d0ac1c44 | 638 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([ |
81c82a68 ILT |
639 | #include <sys/types.h> |
640 | #include <tr1/unordered_map> | |
641 | std::tr1::hash<off_t> h; | |
d0ac1c44 | 642 | ])], |
81c82a68 ILT |
643 | [gold_cv_hash_off_t=yes], |
644 | [gold_cv_hash_off_t=no]) | |
26e4ef59 | 645 | CXXFLAGS=$CXXFLAGS_hold]) |
81c82a68 ILT |
646 | if test "$gold_cv_hash_off_t" = "yes"; then |
647 | AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1, | |
648 | [Define if std::tr1::hash<off_t> is usable]) | |
649 | fi | |
650 | ||
04bf7072 ILT |
651 | # gcc 4.3.0 doesn't recognize the printf attribute on a template |
652 | # function. Check for that. This is gcc bug 35546. This test can | |
653 | # probably be removed after the bug has been fixed for a while. | |
654 | AC_CACHE_CHECK([whether we can use attributes with template functions], | |
655 | [gold_cv_template_attribute], | |
d0ac1c44 | 656 | [AC_COMPILE_IFELSE([AC_LANG_SOURCE([ |
04bf7072 ILT |
657 | template<typename T> extern void foo(const char*, ...) |
658 | __attribute__ ((__format__ (__printf__, 1, 2))); | |
659 | template<typename T> void foo(const char* format, ...) {} | |
660 | void bar() { foo<int>("%s\n", "foo"); } | |
d0ac1c44 | 661 | ])], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])]) |
04bf7072 ILT |
662 | if test "$gold_cv_template_attribute" = "yes"; then |
663 | AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1, | |
664 | [Define if attributes work on C++ templates]) | |
665 | fi | |
666 | ||
5d329b7d ILT |
667 | dnl Check if the system has struct stat::st_mtim. |
668 | AC_CACHE_CHECK([for struct stat::st_mtim.], | |
669 | [gold_cv_stat_st_mtim], | |
670 | [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ | |
671 | #include <sys/stat.h> | |
672 | long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);} | |
673 | ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])]) | |
674 | if test "$gold_cv_stat_st_mtim" = "yes"; then | |
675 | AC_DEFINE(HAVE_STAT_ST_MTIM, 1, | |
676 | [Define if struct stat has a field st_mtim with timespec for mtime]) | |
677 | fi | |
678 | ||
54dc6425 ILT |
679 | AC_LANG_POP(C++) |
680 | ||
58797674 | 681 | AC_CHECK_HEADERS(locale.h) |
44350750 NC |
682 | AC_CHECK_FUNCS(setlocale) |
683 | AM_LC_MESSAGES | |
684 | ||
bae7f79e ILT |
685 | AM_MAINTAINER_MODE |
686 | ||
5a6f7e2d | 687 | AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in) |