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") | |
55 | ||
193a53d9 ILT |
56 | AC_ARG_ENABLE([targets], |
57 | [ --enable-targets alternative target configurations], | |
58 | [case "${enableval}" in | |
59 | yes | "") | |
60 | AC_MSG_ERROR([--enable-targets option must specify target names or 'all']) | |
61 | ;; | |
62 | no) | |
63 | enable_targets= | |
64 | ;; | |
65 | *) | |
66 | enable_targets=$enableval | |
67 | ;; | |
68 | esac], | |
69 | [# For now, enable all targets by default | |
70 | enable_targets=all | |
71 | ]) | |
72 | ||
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" | |
79 | else | |
80 | # Permit unrecognized target names, like "all". | |
81 | canon_targets="$canon_targets $targ" | |
82 | fi | |
83 | done | |
84 | fi | |
85 | ||
86 | # See which specific instantiations we need. | |
6df6da4a ILT |
87 | targetobjs= |
88 | all_targets= | |
fbfba508 ILT |
89 | default_machine= |
90 | default_size= | |
91 | default_big_endian= | |
92 | targ_32_little= | |
93 | targ_32_big= | |
94 | targ_64_little= | |
95 | targ_64_big= | |
193a53d9 | 96 | for targ in $target $canon_targets; do |
193a53d9 ILT |
97 | if test "$targ" = "all"; then |
98 | targ_32_little=yes | |
99 | targ_32_big=yes | |
100 | targ_64_little=yes | |
101 | targ_64_big=yes | |
6df6da4a | 102 | all_targets=yes |
193a53d9 | 103 | else |
fbfba508 ILT |
104 | . ${srcdir}/configure.tgt |
105 | ||
106 | if test "$targ_obj" = "UNKNOWN"; then | |
6df6da4a | 107 | AC_MSG_ERROR("unsupported target $targ") |
fbfba508 ILT |
108 | else |
109 | targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)" | |
110 | if test "$targ_size" = "32"; then | |
111 | if test "$targ_big_endian" = "false"; then | |
112 | targ_32_little=yes | |
113 | elif test "$targ_big_endian" = "true"; then | |
114 | targ_32_big=yes | |
115 | else | |
116 | AC_MSG_ERROR("bad configure.tgt endian $targ_big_endian") | |
117 | fi | |
118 | elif test "$targ_size" = "64"; then | |
119 | if test "$targ_big_endian" = "false"; then | |
120 | targ_64_little=yes | |
121 | elif test "$targ_big_endian" = "true"; then | |
122 | targ_64_big=yes | |
123 | else | |
124 | AC_MSG_ERROR("bad configure.tgt endian $targ_big_endian") | |
125 | fi | |
126 | else | |
127 | AC_MSG_ERROR("bad configure.tgt size $targ_size") | |
128 | fi | |
129 | ||
130 | if test "$target" = "$targ"; then | |
131 | default_machine=$targ_machine | |
132 | default_size=$targ_size | |
133 | default_big_endian=$targ_big_endian | |
134 | fi | |
135 | fi | |
193a53d9 ILT |
136 | fi |
137 | done | |
138 | ||
139 | if test -n "$targ_32_little"; then | |
140 | AC_DEFINE(HAVE_TARGET_32_LITTLE, 1, | |
141 | [Define to support 32-bit little-endian targets]) | |
142 | fi | |
143 | if test -n "$targ_32_big"; then | |
144 | AC_DEFINE(HAVE_TARGET_32_BIG, 1, | |
145 | [Define to support 32-bit big-endian targets]) | |
146 | fi | |
147 | if test -n "$targ_64_little"; then | |
148 | AC_DEFINE(HAVE_TARGET_64_LITTLE, 1, | |
149 | [Define to support 64-bit little-endian targets]) | |
150 | fi | |
151 | if test -n "$targ_64_big"; then | |
152 | AC_DEFINE(HAVE_TARGET_64_BIG, 1, | |
153 | [Define to support 64-bit big-endian targets]) | |
154 | fi | |
155 | ||
6df6da4a ILT |
156 | if test -n "$all_targets"; then |
157 | TARGETOBJS='$(ALL_TARGETOBJS)' | |
158 | else | |
159 | TARGETOBJS="$targetobjs" | |
160 | fi | |
161 | AC_SUBST(TARGETOBJS) | |
162 | ||
fbfba508 ILT |
163 | AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine, |
164 | [Default machine code]) | |
165 | AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size, | |
166 | [Default size (32 or 64)]) | |
167 | AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian, | |
168 | [Default big endian (true or false)]) | |
169 | ||
bae7f79e ILT |
170 | AC_PROG_CC |
171 | AC_PROG_CXX | |
dbe717ef | 172 | AC_PROG_YACC |
5a6f7e2d | 173 | AC_PROG_RANLIB |
bae7f79e | 174 | AC_PROG_INSTALL |
537b5f51 | 175 | AC_PROG_LN_S |
fa99aa09 ILT |
176 | |
177 | AC_GNU_SOURCE | |
178 | ||
bae7f79e ILT |
179 | ZW_GNU_GETTEXT_SISTER_DIR |
180 | AM_PO_SUBDIRS | |
181 | ||
92e059d8 ILT |
182 | AC_C_BIGENDIAN |
183 | ||
bae7f79e ILT |
184 | AC_EXEEXT |
185 | ||
537b5f51 ILT |
186 | AM_CONDITIONAL(NATIVE_LINKER, |
187 | test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias") | |
188 | AM_CONDITIONAL(GCC, test "$GCC" = yes) | |
09124467 ILT |
189 | AM_CONDITIONAL(OBJDUMP_AND_CPPFILT, |
190 | [objdump --help >/dev/null && c++filt --help >/dev/null]) | |
537b5f51 | 191 | |
63402fe4 ILT |
192 | dnl Some architectures do not support taking pointers of functions |
193 | dnl defined in shared libraries except in -fPIC mode. We need to | |
194 | dnl tell the unittest framework if we're compiling for one of those | |
195 | dnl targets, so it doesn't try to run the tests that do that. | |
196 | AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [ | |
197 | case $target_cpu in | |
198 | i?86) true;; | |
199 | x86_64) false;; | |
200 | *) true;; | |
201 | esac]) | |
202 | ||
6eee141f | 203 | dnl Test for __thread support. |
097ec620 ILT |
204 | AC_CACHE_CHECK([for thread support], [gold_cv_c_thread], |
205 | [AC_COMPILE_IFELSE([__thread int i = 1;], | |
206 | [gold_cv_c_thread=yes], [gold_cv_c_thread=no])]) | |
207 | ||
208 | AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes") | |
209 | ||
210 | dnl On GNU/Linux TLS in static programs only works when using glibc | |
211 | dnl 2.4 or later. | |
212 | AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24], | |
213 | [AC_COMPILE_IFELSE([ | |
214 | #include <features.h> | |
215 | #if !defined __GLIBC__ | |
216 | error | |
217 | #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4) | |
218 | error | |
219 | #endif | |
220 | ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])]) | |
221 | ||
222 | AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes") | |
6eee141f | 223 | |
bae7f79e ILT |
224 | AM_BINUTILS_WARNINGS |
225 | ||
226 | WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'` | |
227 | AC_SUBST(WARN_CXXFLAGS) | |
228 | ||
229 | dnl Force support for large files by default. This may need to be | |
230 | dnl host dependent. If build == host, we can check getconf LFS_CFLAGS. | |
494e05f4 ILT |
231 | LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" |
232 | AC_SUBST(LFS_CFLAGS) | |
bae7f79e | 233 | |
82dcae9d ILT |
234 | AC_REPLACE_FUNCS(pread) |
235 | ||
9a0910c3 ILT |
236 | # Link in zlib if we can. This allows us to write compressed sections. |
237 | AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)]) | |
238 | ||
54dc6425 | 239 | AC_LANG_PUSH(C++) |
d288e464 | 240 | |
54dc6425 ILT |
241 | AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map) |
242 | AC_CHECK_HEADERS(ext/hash_map ext/hash_set) | |
e44fcf3b | 243 | AC_CHECK_FUNCS(mallinfo) |
d288e464 ILT |
244 | |
245 | dnl Test whether the compiler can specify a member templates to call. | |
097ec620 ILT |
246 | AC_CACHE_CHECK([template member calls], [gold_cv_c_membertemplates], |
247 | [AC_COMPILE_IFELSE([ | |
d288e464 ILT |
248 | class c { public: template<int i> void fn(); }; |
249 | template<int i> void foo(c cv) { cv.fn<i>(); } | |
250 | template void foo<1>(c cv);], | |
097ec620 ILT |
251 | [gold_cv_c_membertemplates=yes], [gold_cv_c_membertemplates=no])]) |
252 | ||
253 | if test "$gold_cv_c_membertemplates" = "yes"; then | |
254 | AC_DEFINE(HAVE_MEMBER_TEMPLATE_SPECIFICATIONS, [], | |
255 | [Whether the C++ compiler can call a template member with no arguments]) | |
256 | fi | |
d288e464 | 257 | |
54dc6425 ILT |
258 | AC_LANG_POP(C++) |
259 | ||
bae7f79e ILT |
260 | AM_MAINTAINER_MODE |
261 | ||
5a6f7e2d | 262 | AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in) |