eb280147398c667b883352c52732fe3f5cf38b58
[speexdsp.git] / configure.ac
1 dnl Process this file with autoconf to produce a configure script. -*-m4-*-
2
3 AC_INIT([speexdsp],[1.2.0],[speex-dev@xiph.org])
4
5 AC_CONFIG_SRCDIR([libspeexdsp/preprocess.c])
6 AC_CONFIG_MACRO_DIR([m4])
7
8 dnl enable silent rules on automake 1.11 and later
9 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
10
11
12 SPEEXDSP_LT_CURRENT=6
13 SPEEXDSP_LT_REVISION=1
14 SPEEXDSP_LT_AGE=5
15
16
17 AC_SUBST(SPEEXDSP_LT_CURRENT)
18 AC_SUBST(SPEEXDSP_LT_REVISION)
19 AC_SUBST(SPEEXDSP_LT_AGE)
20
21 AM_INIT_AUTOMAKE([foreign no-define])
22 AM_MAINTAINER_MODE([enable])
23
24 AC_CANONICAL_HOST
25 AC_LIBTOOL_WIN32_DLL
26 AM_PROG_LIBTOOL
27
28 AC_C_BIGENDIAN
29 AC_C_CONST
30 AC_C_INLINE
31 AC_C_RESTRICT
32
33
34 AC_MSG_CHECKING(for C99 variable-size arrays)
35 AC_TRY_COMPILE( , [
36 int foo;
37 foo = 10;
38 int array[foo];
39 ],
40 [has_var_arrays=yes;AC_DEFINE([VAR_ARRAYS], [], [Use C99 variable-size arrays])
41 ],
42 has_var_arrays=no
43 )
44 AC_MSG_RESULT($has_var_arrays)
45
46 AC_CHECK_HEADERS([alloca.h getopt.h])
47 AC_MSG_CHECKING(for alloca)
48 AC_TRY_COMPILE( [
49 #ifdef HAVE_ALLOCA_H
50 # include <alloca.h>
51 #endif
52 #include <stdlib.h>
53 ], [
54 int foo=10;
55 int *array = alloca(foo);
56 ],
57 [
58 has_alloca=yes;
59 if test x$has_var_arrays = "xno" ; then
60 AC_DEFINE([USE_ALLOCA], [], [Make use of alloca])
61 fi
62 ],
63 has_alloca=no
64 )
65 AC_MSG_RESULT($has_alloca)
66
67 AC_MSG_CHECKING(for SSE in current arch/CFLAGS)
68 AC_LINK_IFELSE([
69 AC_LANG_PROGRAM([[
70 #include <xmmintrin.h>
71 __m128 testfunc(float *a, float *b) {
72   return _mm_add_ps(_mm_loadu_ps(a), _mm_loadu_ps(b));
73 }
74 ]])],
75 [
76 has_sse=yes
77 ],
78 [
79 has_sse=no
80 ]
81 )
82 AC_MSG_RESULT($has_sse)
83
84 AC_MSG_CHECKING(for SSE2 in current arch/CFLAGS)
85 AC_LINK_IFELSE([
86 AC_LANG_PROGRAM([[
87 #include <emmintrin.h>
88 __m128d testfunc(double *a, double *b) {
89   return _mm_add_pd(_mm_loadu_pd(a), _mm_loadu_pd(b));
90 }
91 ]])],
92 [
93 has_sse2=yes
94 ],
95 [
96 has_sse2=no
97 ]
98 )
99 AC_MSG_RESULT($has_sse2)
100
101 AC_MSG_CHECKING(for NEON in current arch/CFLAGS)
102 AC_LINK_IFELSE([
103 AC_LANG_PROGRAM([[
104 #include <arm_neon.h>
105 int32x4_t testfunc(int16_t *a, int16_t *b) {
106       return vmull_s16(vld1_s16(a), vld1_s16(b));
107 }
108 ]])],
109 [
110 has_neon=yes
111 ],
112 [
113 has_neon=no
114 ]
115 )
116 AC_MSG_RESULT($has_neon)
117
118 SAVE_CFLAGS="$CFLAGS"
119 CFLAGS="$CFLAGS -fvisibility=hidden"
120 AC_MSG_CHECKING(for ELF visibility)
121 AC_COMPILE_IFELSE([
122 AC_LANG_PROGRAM([[
123 #pragma GCC visibility push(hidden)
124 __attribute__((visibility("default")))
125 int var=10;
126 ]])],
127 [
128 has_visibility=yes
129 AC_DEFINE([EXPORT], [__attribute__((visibility("default")))], [Symbol visibility prefix])
130 ],
131 [
132 has_visibility=no
133 AC_DEFINE([EXPORT], [], [Symbol visibility prefix])
134 CFLAGS="$SAVE_CFLAGS"
135 ]
136 )
137 AC_MSG_RESULT($has_visibility)
138
139 AC_CHECK_HEADERS(sys/soundcard.h sys/audioio.h)
140
141 AC_SUBST(src)
142
143 LT_LIB_M
144
145
146 AC_ARG_ENABLE(valgrind, [  --enable-valgrind       Enable valgrind extra checks],
147 [if test "$enableval" = yes; then
148   AC_DEFINE([ENABLE_VALGRIND], , [Enable valgrind extra checks])
149 fi])
150
151 AC_ARG_ENABLE(sse, [  --enable-sse            Enable SSE support], [
152 if test "x$enableval" != xno; then
153 has_sse=yes
154 has_sse2=yes
155 CFLAGS="$CFLAGS -O3 -msse -msse2"
156 else
157 has_sse=no
158 has_sse2=no
159 fi
160 ])
161
162 AC_ARG_ENABLE(neon, [  --enable-neon           Enable NEON support], [
163 if test "x$enableval" != xno; then
164 has_neon=yes
165 AS_CASE(["$host"],
166   [arm*], [CFLAGS="$CFLAGS -O3 -march=armv7-a -mfpu=neon"]
167 )
168 else
169 has_neon=no
170 fi
171 ])
172
173
174 FFT=smallft
175
176 AC_ARG_ENABLE(fixed-point, [  --enable-fixed-point    Compile as fixed-point],
177 [if test "$enableval" = yes; then
178   FFT=kiss
179   has_sse=no
180   AC_DEFINE([FIXED_POINT], , [Compile as fixed-point])
181 else
182   AC_DEFINE([FLOATING_POINT], , [Compile as floating-point])
183 fi],
184 AC_DEFINE([FLOATING_POINT], , [Compile as floating-point]))
185
186 if test "$has_sse" = yes; then
187   AC_DEFINE([USE_SSE], , [Enable SSE support])
188 fi
189
190 if test "$has_neon" = yes; then
191   AC_DEFINE([USE_NEON], , [Enable NEON support])
192 fi
193
194 if test "$has_sse2" = yes; then
195   AC_DEFINE([USE_SSE2], , [Enable SSE2 support])
196 fi
197
198 AC_ARG_ENABLE(float-api, [  --disable-float-api     Disable the floating-point API],
199 [if test "$enableval" = no; then
200   AC_DEFINE([DISABLE_FLOAT_API], , [Disable all parts of the API that are using floats])
201 fi])
202
203 AC_ARG_ENABLE(examples, [  --disable-examples      Do not build example programs, only the library])
204 if test "$enableval" != no; then
205   AM_CONDITIONAL([BUILD_EXAMPLES], true)
206 else
207   AM_CONDITIONAL([BUILD_EXAMPLES], false)
208 fi
209
210 AC_ARG_ENABLE(arm4-asm, [  --enable-arm4-asm       Make use of ARM4 assembly optimizations],
211 [if test "$enableval" = yes; then
212   AC_DEFINE([ARM4_ASM], , [Make use of ARM4 assembly optimizations])
213 fi])
214
215 AC_ARG_ENABLE(arm5e-asm, [  --enable-arm5e-asm      Make use of ARM5E assembly optimizations],
216 [if test "$enableval" = yes; then
217   AC_DEFINE([ARM5E_ASM], , [Make use of ARM5E assembly optimizations])
218 fi])
219
220 AC_ARG_ENABLE(blackfin-asm, [  --enable-blackfin-asm   Make use of Blackfin assembly optimizations],
221 [if test "$enableval" = yes; then
222   AC_DEFINE([BFIN_ASM], , [Make use of Blackfin assembly optimizations])
223 fi])
224 case $host_os in
225   uclinux) LDFLAGS="-Wl,-elf2flt=-s100000 $LDFLAGS";;
226 esac
227
228 AC_ARG_ENABLE(fixed-point-debug, [  --enable-fixed-point-debug  Debug fixed-point implementation],
229 [if test "$enableval" = yes; then
230   AC_DEFINE([FIXED_DEBUG], , [Debug fixed-point implementation])
231 fi])
232
233 AC_ARG_ENABLE(resample-full-sinc-table, [  --enable-resample-full-sinc-table Resample full SINC table (no interpolation)],
234 [if test "$enableval" = yes; then
235   AC_DEFINE([RESAMPLE_FULL_SINC_TABLE], , [Resample with full SINC table (no interpolation)])
236 fi])
237
238 AC_ARG_ENABLE(ti-c55x, [  --enable-ti-c55x        Enable support for TI C55X DSP],
239 [if test "$enableval" = yes; then
240   has_char16=yes;
241   AC_DEFINE([TI_C55X], , [Enable support for TI C55X DSP])
242 fi])
243
244 AC_ARG_WITH([fft], [AS_HELP_STRING([--with-fft=choice],[use an alternate FFT implementation. The available choices are
245 kiss (default fixed point), smallft (default floating point), gpl-fftw3 and proprietary-intel-mkl])],
246 [FFT=$withval]
247 )
248
249 FFT_PKGCONFIG=
250 AS_CASE([$FFT],
251  [kiss], [
252   AC_DEFINE([USE_KISS_FFT], [], [Use KISS Fast Fourier Transform])
253  ],
254  [smallft], [
255   AC_DEFINE([USE_SMALLFT], [], [Use FFT from OggVorbis])
256  ],
257  [gpl-fftw3], [
258   AC_DEFINE([USE_GPL_FFTW3], [], [Use FFTW3 for FFT])
259   PKG_CHECK_MODULES([FFT], [fftw3f])
260  ],
261  [proprietary-intel-mkl], [
262   AC_DEFINE([USE_INTEL_MKL], [], [Use Intel Math Kernel Library for FFT])
263   AC_MSG_CHECKING(for valid MKL)
264   AC_LINK_IFELSE([
265    AC_LANG_PROGRAM([[
266 #include <mkl.h>
267 void func() {
268   DFTI_DESCRIPTOR_HANDLE h;
269   MKL_LONG result=DftiCreateDescriptor(&h, DFTI_SINGLE, DFTI_REAL, 0);
270 }]])],
271    [AC_MSG_RESULT(yes)],
272    [AC_MSG_FAILURE([Failed to compile MKL test program. Make sure you set CFLAGS to include the include directory and set LDFLAGS to include the library directory and all necesarry libraries.])]
273   )
274  ],
275  [AC_MSG_FAILURE([Unknown FFT $FFT specified for --with-fft])]
276 )
277 AM_CONDITIONAL(BUILD_KISS_FFT, [test "$FFT" = "kiss"])
278 AM_CONDITIONAL(BUILD_SMALLFT, [test "$FFT" = "smallft"])
279 AC_SUBST(FFT_PKGCONFIG)
280
281
282 AC_CHECK_SIZEOF([int16_t])
283 AC_CHECK_SIZEOF([uint16_t])
284 AC_CHECK_SIZEOF([u_int16_t])
285 AC_CHECK_SIZEOF([int32_t])
286 AC_CHECK_SIZEOF([uint32_t])
287 AC_CHECK_SIZEOF([u_int32_t])
288 AC_CHECK_SIZEOF([short])
289 AC_CHECK_SIZEOF([int])
290 AC_CHECK_SIZEOF([long])
291
292 AS_IF([test "$has_char16" = "yes"],
293   [
294    SIZEOF16=1
295    SIZEOF32=2
296   ],[
297    SIZEOF16=2
298    SIZEOF32=4
299   ])
300
301 case $SIZEOF16 in
302     $ac_cv_sizeof_int16_t) SIZE16="int16_t";;
303     $ac_cv_sizeof_short) SIZE16="short";;
304     $ac_cv_sizeof_int) SIZE16="int";;
305 esac
306
307 case $SIZEOF16 in
308     $ac_cv_sizeof_uint16_t) USIZE16="uint16_t";;
309     $ac_cv_sizeof_u_int16_t) USIZE16="u_int16_t";;
310     $ac_cv_sizeof_short) USIZE16="unsigned short";;
311     $ac_cv_sizeof_int) USIZE16="unsigned int";;
312 esac
313
314 case $SIZEOF32 in
315     $ac_cv_sizeof_int32_t) SIZE32="int32_t";;
316     $ac_cv_sizeof_int) SIZE32="int";;
317     $ac_cv_sizeof_long) SIZE32="long";;
318     $ac_cv_sizeof_short) SIZE32="short";;
319 esac
320
321 case $SIZEOF32 in
322     $ac_cv_sizeof_uint32_t) USIZE32="uint32_t";;
323     $ac_cv_sizeof_u_int32_t) USIZE32="u_int32_t";;
324     $ac_cv_sizeof_short) USIZE32="unsigned short";;
325     $ac_cv_sizeof_int) USIZE32="unsigned int";;
326     $ac_cv_sizeof_long) USIZE32="unsigned long";;
327 esac
328
329 AS_IF([test -z "$SIZE16"],[AC_MSG_ERROR([No 16 bit type found on this platform!])])
330 AS_IF([test -z "$SIZE32"],[AC_MSG_ERROR([No 32 bit type found on this platform!])])
331 AS_IF([test -z "$USIZE16"],[AC_MSG_ERROR([No unsigned 16 bit type found on this platform!])])
332 AS_IF([test -z "$USIZE32"],[AC_MSG_ERROR([No unsigned 32 bit type found on this platform!])])
333
334 AC_SUBST([SIZE16])
335 AC_SUBST([USIZE16])
336 AC_SUBST([SIZE32])
337 AC_SUBST([USIZE32])
338
339 AS_IF([test "$ac_cv_header_stdint_h" = "yes"],    [INCLUDE_STDINT="#include <stdint.h>"],
340       [test "$ac_cv_header_inttypes_h" = "yes"],  [INCLUDE_STDINT="#include <inttypes.h>"],
341       [test "$ac_cv_header_sys_types_h" = "yes"], [INCLUDE_STDINT="#include <sys/types.h>"])
342
343 AC_SUBST([INCLUDE_STDINT])
344
345 AC_CONFIG_FILES([
346            Makefile libspeexdsp/Makefile doc/Makefile SpeexDSP.spec
347            include/Makefile include/speex/Makefile speexdsp.pc
348            win32/Makefile win32/libspeexdsp/Makefile
349            symbian/Makefile
350
351            win32/VS2003/Makefile
352            win32/VS2003/libspeexdsp/Makefile
353            win32/VS2003/tests/Makefile
354
355            win32/VS2005/Makefile
356            win32/VS2005/libspeexdsp/Makefile
357            win32/VS2005/tests/Makefile
358
359            win32/VS2008/Makefile
360            win32/VS2008/libspeexdsp/Makefile
361            win32/VS2008/tests/Makefile
362            include/speex/speexdsp_config_types.h ti/Makefile
363            ti/speex_C54_test/Makefile ti/speex_C55_test/Makefile
364            ti/speex_C64_test/Makefile ])
365
366 AC_CONFIG_HEADERS([config.h])
367
368 AC_OUTPUT
369
370 echo "Type \"make; make install\" to compile and install Speex";