1dnl
2dnl This file contains details for non-native builds.
3dnl
4
5AC_DEFUN([GLIBCXX_CROSSCONFIG],[
6# Base decisions on target environment.
7case "${host}" in
8  arm*-*-symbianelf*)
9    # This is a freestanding configuration; there is nothing to do here.
10    ;;
11
12  avr*-*-*)
13    AC_DEFINE(HAVE_ACOSF)
14    AC_DEFINE(HAVE_ASINF)
15    AC_DEFINE(HAVE_ATAN2F)
16    AC_DEFINE(HAVE_ATANF)
17    AC_DEFINE(HAVE_CEILF)
18    AC_DEFINE(HAVE_COSF)
19    AC_DEFINE(HAVE_COSHF)
20    AC_DEFINE(HAVE_EXPF)
21    AC_DEFINE(HAVE_FABSF)
22    AC_DEFINE(HAVE_FLOORF)
23    AC_DEFINE(HAVE_FMODF)
24    AC_DEFINE(HAVE_FREXPF)
25    AC_DEFINE(HAVE_SQRTF)
26    AC_DEFINE(HAVE_HYPOTF)
27    AC_DEFINE(HAVE_LDEXPF)
28    AC_DEFINE(HAVE_LOG10F)
29    AC_DEFINE(HAVE_LOGF)
30    AC_DEFINE(HAVE_MODFF)
31    AC_DEFINE(HAVE_POWF)
32    AC_DEFINE(HAVE_SINF)
33    AC_DEFINE(HAVE_SINHF)
34    AC_DEFINE(HAVE_TANF)
35    AC_DEFINE(HAVE_TANHF)
36    ;;
37
38  mips*-sde-elf*)
39    # These definitions are for the SDE C library rather than newlib.
40    SECTION_FLAGS='-ffunction-sections -fdata-sections'
41    AC_SUBST(SECTION_FLAGS)
42    GLIBCXX_CHECK_COMPILER_FEATURES
43    GLIBCXX_CHECK_LINKER_FEATURES
44    GLIBCXX_CHECK_MATH_SUPPORT
45    GLIBCXX_CHECK_STDLIB_SUPPORT
46
47    AC_DEFINE(HAVE_FINITE)
48    AC_DEFINE(HAVE_HYPOT)
49    AC_DEFINE(HAVE_ISNAN)
50    AC_DEFINE(HAVE_ISINF)
51
52    AC_DEFINE(HAVE_LDEXPF)
53    AC_DEFINE(HAVE_MODF)
54    AC_DEFINE(HAVE_SQRTF)
55    ;;
56
57  *-aix*)
58    GLIBCXX_CHECK_LINKER_FEATURES
59    GLIBCXX_CHECK_MATH_SUPPORT
60    GLIBCXX_CHECK_STDLIB_SUPPORT
61    AC_DEFINE(_GLIBCXX_USE_DEV_RANDOM)
62    AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1)
63    # We don't yet support AIX's TLS ABI.
64    #GCC_CHECK_TLS
65    AM_ICONV
66    ;;
67
68  *-darwin*)
69    # Darwin versions vary, but the linker should work in a cross environment,
70    # so we just check for all the features here.
71    # Check for available headers.
72
73    # Don't call GLIBCXX_CHECK_LINKER_FEATURES, Darwin doesn't have a GNU ld
74    GLIBCXX_CHECK_MATH_SUPPORT
75    GLIBCXX_CHECK_STDLIB_SUPPORT
76    ;;
77
78  *djgpp)
79    # GLIBCXX_CHECK_MATH_SUPPORT
80    AC_DEFINE(HAVE_ISINF)
81    AC_DEFINE(HAVE_ISNAN)
82    AC_DEFINE(HAVE_FINITE)
83    AC_DEFINE(HAVE_SINCOS)
84    AC_DEFINE(HAVE_HYPOT)
85    ;;
86
87  *-freebsd*)
88    SECTION_FLAGS='-ffunction-sections -fdata-sections'
89    AC_SUBST(SECTION_FLAGS)
90    GLIBCXX_CHECK_LINKER_FEATURES
91    AC_DEFINE(HAVE_SETENV)
92    AC_DEFINE(HAVE_FINITEF)
93    AC_DEFINE(HAVE_FINITE)
94    AC_DEFINE(HAVE_FREXPF)
95    AC_DEFINE(HAVE_HYPOT)
96    AC_DEFINE(HAVE_HYPOTF)
97    AC_DEFINE(HAVE_ISINF)
98    AC_DEFINE(HAVE_ISNAN)
99    AC_DEFINE(HAVE_ISNANF)
100
101    AC_DEFINE(HAVE_ACOSF)
102    AC_DEFINE(HAVE_ASINF)
103    AC_DEFINE(HAVE_ATAN2F)
104    AC_DEFINE(HAVE_ATANF)
105    AC_DEFINE(HAVE_CEILF)
106    AC_DEFINE(HAVE_COSF)
107    AC_DEFINE(HAVE_COSHF)
108    AC_DEFINE(HAVE_EXPF)
109    AC_DEFINE(HAVE_FABSF)
110    AC_DEFINE(HAVE_FLOORF)
111    AC_DEFINE(HAVE_FMODF)
112    AC_DEFINE(HAVE_FREXPF)
113    AC_DEFINE(HAVE_LDEXPF)
114    AC_DEFINE(HAVE_LOG10F)
115    AC_DEFINE(HAVE_LOGF)
116    AC_DEFINE(HAVE_MODFF)
117    AC_DEFINE(HAVE_POWF)
118    AC_DEFINE(HAVE_SINF)
119    AC_DEFINE(HAVE_SINHF)
120    AC_DEFINE(HAVE_SQRTF)
121    AC_DEFINE(HAVE_TANF)
122    AC_DEFINE(HAVE_TANHF)
123    if test x"long_double_math_on_this_cpu" = x"yes"; then
124      AC_DEFINE(HAVE_FINITEL)
125      AC_DEFINE(HAVE_ISINFL)
126      AC_DEFINE(HAVE_ISNANL)
127    fi
128    AC_CHECK_FUNCS(__cxa_thread_atexit)
129    AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc)
130    AC_CHECK_FUNCS(timespec_get)
131    AC_CHECK_FUNCS(sockatmark)
132    ;;
133
134  *-fuchsia*)
135    SECTION_FLAGS='-ffunction-sections -fdata-sections'
136    AC_SUBST(SECTION_FLAGS)
137    ;;
138
139  *-hpux*)
140    SECTION_FLAGS='-ffunction-sections -fdata-sections'
141    AC_SUBST(SECTION_FLAGS)
142    GLIBCXX_CHECK_LINKER_FEATURES
143
144    # GLIBCXX_CHECK_MATH_SUPPORT
145    AC_DEFINE(HAVE_ISNAN)
146    AC_DEFINE(HAVE_HYPOT)
147    AC_DEFINE(HAVE_ACOSF)
148    AC_DEFINE(HAVE_ASINF)
149    AC_DEFINE(HAVE_ATANF)
150    AC_DEFINE(HAVE_COSF)
151    AC_DEFINE(HAVE_COSHF)
152    AC_DEFINE(HAVE_SINF)
153    AC_DEFINE(HAVE_SINHF)
154    AC_DEFINE(HAVE_TANF)
155    AC_DEFINE(HAVE_TANHF)
156    AC_DEFINE(HAVE_EXPF)
157    AC_DEFINE(HAVE_ATAN2F)
158    AC_DEFINE(HAVE_FABSF)
159    AC_DEFINE(HAVE_FMODF)
160    AC_DEFINE(HAVE_FREXPF)
161    AC_DEFINE(HAVE_LOGF)
162    AC_DEFINE(HAVE_LOG10F)
163    AC_DEFINE(HAVE_MODF)
164    AC_DEFINE(HAVE_POWF)
165    AC_DEFINE(HAVE_SQRTF)
166
167    # GLIBCXX_CHECK_STDLIB_SUPPORT
168    AC_DEFINE(HAVE_STRTOLD)
169
170    GCC_CHECK_TLS
171    case "$target" in
172      *-hpux10*)
173	AC_DEFINE(HAVE_ISINF)
174	AC_DEFINE(HAVE_ISINFF)
175	AC_DEFINE(HAVE_ISNANF)
176	AC_DEFINE(HAVE_FINITE)
177	AC_DEFINE(HAVE_FINITEF)
178	;;
179    esac
180    ;;
181  *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-cygwin* | *-solaris*)
182    GLIBCXX_CHECK_COMPILER_FEATURES
183    GLIBCXX_CHECK_LINKER_FEATURES
184    GLIBCXX_CHECK_MATH_SUPPORT
185    GLIBCXX_CHECK_STDLIB_SUPPORT
186    AC_DEFINE(_GLIBCXX_USE_DEV_RANDOM)
187    AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1)
188    GCC_CHECK_TLS
189    AC_CHECK_FUNCS(__cxa_thread_atexit_impl)
190    AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc)
191    AC_CHECK_FUNCS(timespec_get)
192    AC_CHECK_FUNCS(sockatmark)
193    AM_ICONV
194    ;;
195  *-mingw32*)
196    GLIBCXX_CHECK_LINKER_FEATURES
197    GLIBCXX_CHECK_MATH_SUPPORT
198    GLIBCXX_CHECK_STDLIB_SUPPORT
199    AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc)
200    AC_CHECK_FUNCS(_wfopen)
201    ;;
202  *-netbsd* | *-openbsd*)
203    SECTION_FLAGS='-ffunction-sections -fdata-sections'
204    AC_SUBST(SECTION_FLAGS)
205    GLIBCXX_CHECK_LINKER_FEATURES
206    AC_DEFINE(HAVE_FINITEF)
207    AC_DEFINE(HAVE_FINITE)
208    AC_DEFINE(HAVE_FREXPF)
209    AC_DEFINE(HAVE_HYPOTF)
210    AC_DEFINE(HAVE_ISINF)
211    AC_DEFINE(HAVE_ISINFF)
212    AC_DEFINE(HAVE_ISNAN)
213    AC_DEFINE(HAVE_ISNANF)
214    if test x"long_double_math_on_this_cpu" = x"yes"; then
215      AC_DEFINE(HAVE_FINITEL)
216      AC_DEFINE(HAVE_ISINFL)
217      AC_DEFINE(HAVE_ISNANL)
218    fi
219    AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc)
220    AC_CHECK_FUNCS(timespec_get)
221    AC_CHECK_FUNCS(sockatmark)
222    ;;
223  *-qnx6.1* | *-qnx6.2*)
224    SECTION_FLAGS='-ffunction-sections -fdata-sections'
225    AC_SUBST(SECTION_FLAGS)
226    GLIBCXX_CHECK_LINKER_FEATURES
227    AC_DEFINE(HAVE_COSF)
228    AC_DEFINE(HAVE_COSL)
229    AC_DEFINE(HAVE_COSHF)
230    AC_DEFINE(HAVE_COSHL)
231    AC_DEFINE(HAVE_LOGF)
232    AC_DEFINE(HAVE_LOGL)
233    AC_DEFINE(HAVE_LOG10F)
234    AC_DEFINE(HAVE_LOG10L)
235    AC_DEFINE(HAVE_SINF)
236    AC_DEFINE(HAVE_SINL)
237    AC_DEFINE(HAVE_SINHF)
238    AC_DEFINE(HAVE_SINHL)
239    ;;
240  *-rtems*)
241    GLIBCXX_CHECK_COMPILER_FEATURES
242    GLIBCXX_CHECK_LINKER_FEATURES
243    GLIBCXX_CHECK_MATH_SUPPORT
244    GLIBCXX_CHECK_STDLIB_SUPPORT
245    ;;
246  *-tpf)
247    SECTION_FLAGS='-ffunction-sections -fdata-sections'
248    SECTION_LDFLAGS='-Wl,--gc-sections $SECTION_LDFLAGS'
249    AC_SUBST(SECTION_FLAGS)
250    AC_DEFINE(HAVE_FINITE)
251    AC_DEFINE(HAVE_FINITEF)
252    AC_DEFINE(HAVE_FREXPF)
253    AC_DEFINE(HAVE_HYPOTF)
254    AC_DEFINE(HAVE_ISINF)
255    AC_DEFINE(HAVE_ISINFF)
256    AC_DEFINE(HAVE_ISNAN)
257    AC_DEFINE(HAVE_ISNANF)
258    AC_DEFINE(HAVE_SINCOS)
259    AC_DEFINE(HAVE_SINCOSF)
260    if test x"long_double_math_on_this_cpu" = x"yes"; then
261      AC_DEFINE(HAVE_FINITEL)
262      AC_DEFINE(HAVE_HYPOTL)
263      AC_DEFINE(HAVE_ISINFL)
264      AC_DEFINE(HAVE_ISNANL)
265    fi
266    ;;
267  *-*vms*)
268    # Check for available headers.
269    # Don't call GLIBCXX_CHECK_LINKER_FEATURES, VMS doesn't have a GNU ld
270    GLIBCXX_CHECK_MATH_SUPPORT
271    GLIBCXX_CHECK_STDLIB_SUPPORT
272    ;;
273  *-vxworks)
274    AC_DEFINE(HAVE_ACOSF)
275    AC_DEFINE(HAVE_ASINF)
276    AC_DEFINE(HAVE_ATAN2F)
277    AC_DEFINE(HAVE_ATANF)
278    AC_DEFINE(HAVE_CEILF)
279    AC_DEFINE(HAVE_COSF)
280    AC_DEFINE(HAVE_COSHF)
281    AC_DEFINE(HAVE_EXPF)
282    AC_DEFINE(HAVE_FABSF)
283    AC_DEFINE(HAVE_FLOORF)
284    AC_DEFINE(HAVE_FMODF)
285    AC_DEFINE(HAVE_HYPOT)
286    AC_DEFINE(HAVE_LOG10F)
287    AC_DEFINE(HAVE_LOGF)
288    AC_DEFINE(HAVE_POWF)
289    AC_DEFINE(HAVE_SINF)
290    AC_DEFINE(HAVE_SINHF)
291    AC_DEFINE(HAVE_SQRTF)
292    AC_DEFINE(HAVE_TANF)
293    AC_DEFINE(HAVE_TANHF)
294
295dnl # Different versions and execution modes implement different
296dnl # subsets of these functions.  Instead of hard-coding, test for C
297dnl # declarations in headers.  The C primitives could be defined as
298dnl # macros, in which case the tests might fail, and we might have to
299dnl # switch to more elaborate tests.
300    GLIBCXX_CHECK_MATH_DECLS([
301      acosl asinl atan2l atanl ceill cosl coshl expl fabsl floorl fmodl
302      frexpl ldexpl log10l logl modfl powl sinl sinhl sqrtl tanl tanhl])
303dnl # sincosl is the only one missing here, compared with the *l
304dnl # functions in the list guarded by
305dnl # long_double_math_on_this_cpu in configure.ac, right after
306dnl # the expansion of the present macro.
307    ;;
308  *)
309    AC_MSG_ERROR([No support for this host/target combination.])
310   ;;
311esac
312])
313
314
315dnl
316dnl Check to see if the (math function) argument passed is
317dnl declared when using the c compiler
318dnl
319dnl Define HAVE_CARGF etc if "cargf" is declared
320dnl
321dnl argument 1 is name of function to check
322dnl
323dnl ASSUMES argument is a math function
324dnl
325dnl GLIBCXX_CHECK_MATH_DECL
326AC_DEFUN([GLIBCXX_CHECK_MATH_DECL], [
327  AC_CACHE_CHECK([for $1 declaration],
328    [glibcxx_cv_func_$1_use], [
329      AC_LANG_SAVE
330      AC_LANG_C
331      AC_TRY_COMPILE([
332#include <math.h>
333#ifdef HAVE_IEEEFP_H
334# include <ieeefp.h>
335#endif
336#undef $1
337], [
338  void (*f)(void) = (void (*)(void))$1;
339], [glibcxx_cv_func_$1_use=yes
340], [glibcxx_cv_func_$1_use=no])])
341  if test "x$glibcxx_cv_func_$1_use" = xyes; then
342    AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]))
343  fi
344])
345
346dnl
347dnl Check to see whether multiple math functions are
348dnl declared when using the c compiler
349dnl
350dnl Define HAVE_CARGF HAVE_POWL etc if "cargf" and "powl"
351dnl are declared
352dnl
353dnl argument 1 is a word list naming function to check
354dnl
355dnl ASSUMES arguments are math functions
356dnl
357dnl GLIBCXX_CHECK_MATH_DECLS
358AC_DEFUN([GLIBCXX_CHECK_MATH_DECLS], [
359  m4_foreach_w([glibcxx_func], [$1], [
360    GLIBCXX_CHECK_MATH_DECL(glibcxx_func)
361  ])
362])
363