blob: 4b416fe5aabc7fdc82c2b7a95c6bfebefdfbdc10 [file] [log] [blame]
Jean-Marc Valine05aaf22011-04-29 19:48:42 -04001dnl Process this file with autoconf to produce a configure script. -*-m4-*-
Jean-Marc Valina0cbeca2010-07-08 11:27:20 -04002
Ron2f2f9d62013-05-11 02:05:24 +09303dnl The package_version file will be automatically synced to the git revision
4dnl by the update_version script when configured in the repository, but will
5dnl remain constant in tarball releases unless it is manually edited.
6m4_define([CURRENT_VERSION],
Roncfe8e2b2013-07-13 17:23:04 +09307 m4_esyscmd([ ./update_version 2>/dev/null || true
8 if test -e package_version; then
Ron918acd12013-05-18 16:11:18 +09309 . ./package_version
10 printf "$PACKAGE_VERSION"
11 else
12 printf "unknown"
13 fi ]))
Jean-Marc Valina0cbeca2010-07-08 11:27:20 -040014
Ron2f2f9d62013-05-11 02:05:24 +093015AC_INIT([opus],[CURRENT_VERSION],[opus@xiph.org])
16
17AC_CONFIG_SRCDIR(src/opus_encoder.c)
Ron50b395b2013-05-20 12:31:48 +093018AC_CONFIG_MACRO_DIR([m4])
Jean-Marc Valin381c7062011-03-21 13:53:40 -040019
Ralph Giles5ccc1242011-07-29 00:55:56 -070020dnl enable silent rules on automake 1.11 and later
21m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
22
Ralph Giles3164fcf2012-05-18 11:47:58 -070023# For libtool.
Ralph Giles59c5a822012-08-16 11:39:56 -070024dnl Please update these for releases.
Jean-Marc Valin352786c2017-06-19 16:30:38 -040025OPUS_LT_CURRENT=6
Jean-Marc Valindefbc372017-06-26 14:04:09 -040026OPUS_LT_REVISION=1
Jean-Marc Valin352786c2017-06-19 16:30:38 -040027OPUS_LT_AGE=6
Jean-Marc Valina0cbeca2010-07-08 11:27:20 -040028
Jean-Marc Valine05aaf22011-04-29 19:48:42 -040029AC_SUBST(OPUS_LT_CURRENT)
30AC_SUBST(OPUS_LT_REVISION)
31AC_SUBST(OPUS_LT_AGE)
Jean-Marc Valine05aaf22011-04-29 19:48:42 -040032
Ron2f2f9d62013-05-11 02:05:24 +093033AM_INIT_AUTOMAKE([no-define])
Ralph Giles14454c42012-11-14 12:42:19 -080034AM_MAINTAINER_MODE([enable])
Jean-Marc Valine05aaf22011-04-29 19:48:42 -040035
36AC_CANONICAL_HOST
Gregory Maxwell417679c2012-08-09 08:39:15 -040037AC_MINGW32
Jean-Marc Valine05aaf22011-04-29 19:48:42 -040038AM_PROG_LIBTOOL
Ralph Giles2852cb12011-08-02 11:43:43 -070039AM_PROG_CC_C_O
Jean-Marc Valine05aaf22011-04-29 19:48:42 -040040
41AC_PROG_CC_C99
Jean-Marc Valina0cbeca2010-07-08 11:27:20 -040042AC_C_CONST
43AC_C_INLINE
Gregory Maxwell8ecba1a2012-05-14 01:58:05 -040044
Timothy B. Terriberry39386e02013-11-18 13:30:13 -050045AM_PROG_AS
46
Ron5bac4f22013-06-29 02:06:53 +093047AC_DEFINE([OPUS_BUILD], [], [This is a build of OPUS])
48
Gregory Maxwell8ecba1a2012-05-14 01:58:05 -040049#Use a hacked up version of autoconf's AC_C_RESTRICT because it's not
50#strong enough a test to detect old buggy versions of GCC (e.g. 2.95.3)
Ron5bac4f22013-06-29 02:06:53 +093051#Note: Both this and the test for variable-size arrays below are also
52# done by AC_PROG_CC_C99, but not thoroughly enough apparently.
Gregory Maxwell8ecba1a2012-05-14 01:58:05 -040053AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict,
54 [ac_cv_c_restrict=no
55 # The order here caters to the fact that C++ does not require restrict.
56 for ac_kw in __restrict __restrict__ _Restrict restrict; do
57 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
58 [[typedef int * int_ptr;
Timothy B. Terriberry39386e02013-11-18 13:30:13 -050059 int foo (int_ptr $ac_kw ip, int * $ac_kw baz[]) {
60 return ip[0];
Gregory Maxwell8ecba1a2012-05-14 01:58:05 -040061 }]],
62 [[int s[1];
Timothy B. Terriberry39386e02013-11-18 13:30:13 -050063 int * $ac_kw t = s;
64 t[0] = 0;
65 return foo(t, (void *)0)]])],
Gregory Maxwell8ecba1a2012-05-14 01:58:05 -040066 [ac_cv_c_restrict=$ac_kw])
67 test "$ac_cv_c_restrict" != no && break
68 done
69 ])
Ron5bac4f22013-06-29 02:06:53 +093070
71AH_VERBATIM([restrict],
Gregory Maxwell8ecba1a2012-05-14 01:58:05 -040072[/* Define to the equivalent of the C99 'restrict' keyword, or to
73 nothing if this is not supported. Do not define if restrict is
74 supported directly. */
75#undef restrict
76/* Work around a bug in Sun C++: it does not support _Restrict or
77 __restrict__, even though the corresponding Sun C compiler ends up with
78 "#define restrict _Restrict" or "#define restrict __restrict__" in the
79 previous line. Perhaps some future version of Sun C++ will work with
80 restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
81#if defined __SUNPRO_CC && !defined __RESTRICT
82# define _Restrict
83# define __restrict__
84#endif])
Ron5bac4f22013-06-29 02:06:53 +093085
86case $ac_cv_c_restrict in
Gregory Maxwell8ecba1a2012-05-14 01:58:05 -040087 restrict) ;;
88 no) AC_DEFINE([restrict], []) ;;
89 *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
Ron5bac4f22013-06-29 02:06:53 +093090esac
Jean-Marc Valin381c7062011-03-21 13:53:40 -040091
Jean-Marc Valine05aaf22011-04-29 19:48:42 -040092AC_MSG_CHECKING(for C99 variable-size arrays)
Ron5bac4f22013-06-29 02:06:53 +093093AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
94 [[static int x; char a[++x]; a[sizeof a - 1] = 0; int N; return a[0];]])],
95 [ has_var_arrays=yes
96 use_alloca="no (using var arrays)"
97 AC_DEFINE([VAR_ARRAYS], [1], [Use C99 variable-size arrays])
98 ],[
99 has_var_arrays=no
100 ])
101AC_MSG_RESULT([$has_var_arrays])
Jean-Marc Valina0cbeca2010-07-08 11:27:20 -0400102
Ron5bac4f22013-06-29 02:06:53 +0930103AS_IF([test "$has_var_arrays" = "no"],
104 [
105 AC_CHECK_HEADERS([alloca.h])
106 AC_MSG_CHECKING(for alloca)
107 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <alloca.h>]],
108 [[int foo=10; int *array = alloca(foo);]])],
109 [ use_alloca=yes;
110 AC_DEFINE([USE_ALLOCA], [], [Make use of alloca])
111 ],[
112 use_alloca=no
113 ])
114 AC_MSG_RESULT([$use_alloca])
115 ])
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400116
Ron5bac4f22013-06-29 02:06:53 +0930117LT_LIB_M
118
119AC_ARG_ENABLE([fixed-point],
120 [AS_HELP_STRING([--enable-fixed-point],
121 [compile without floating point (for machines without a fast enough FPU)])],,
122 [enable_fixed_point=no])
123
124AS_IF([test "$enable_fixed_point" = "yes"],[
125 enable_float="no"
126 AC_DEFINE([FIXED_POINT], [1], [Compile as fixed-point (for machines without a fast enough FPU)])
127 PC_BUILD="fixed-point"
128],[
129 enable_float="yes";
130 PC_BUILD="floating-point"
Ron5bac4f22013-06-29 02:06:53 +0930131])
132
133AM_CONDITIONAL([FIXED_POINT], [test "$enable_fixed_point" = "yes"])
134
135AC_ARG_ENABLE([fixed-point-debug],
136 [AS_HELP_STRING([--enable-fixed-point-debug], [debug fixed-point implementation])],,
137 [enable_fixed_point_debug=no])
138
139AS_IF([test "$enable_fixed_point_debug" = "yes"],[
140 AC_DEFINE([FIXED_DEBUG], [1], [Debug fixed-point implementation])
141])
142
Jean-Marc Valind814c5d2013-11-04 12:26:50 -0500143AC_ARG_ENABLE([float_api],
144 [AS_HELP_STRING([--disable-float-api],
145 [compile without the floating point API (for machines with no float library)])],,
146 [enable_float_api=yes])
147
148AM_CONDITIONAL([DISABLE_FLOAT_API], [test "$enable_float_api" = "no"])
149
150AS_IF([test "$enable_float_api" = "no"],[
151 AC_DEFINE([DISABLE_FLOAT_API], [1], [Do not build the float API])
152])
153
Ron5bac4f22013-06-29 02:06:53 +0930154AC_ARG_ENABLE([custom-modes],
155 [AS_HELP_STRING([--enable-custom-modes], [enable non-Opus modes, e.g. 44.1 kHz & 2^n frames])],,
156 [enable_custom_modes=no])
157
158AS_IF([test "$enable_custom_modes" = "yes"],[
159 AC_DEFINE([CUSTOM_MODES], [1], [Custom modes])
160 PC_BUILD="$PC_BUILD, custom modes"
Ron5bac4f22013-06-29 02:06:53 +0930161])
162
163AM_CONDITIONAL([CUSTOM_MODES], [test "$enable_custom_modes" = "yes"])
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400164
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400165has_float_approx=no
166#case "$host_cpu" in
167#i[[3456]]86 | x86_64 | powerpc64 | powerpc32 | ia64)
168# has_float_approx=yes
169# ;;
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500170#esac
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400171
Ron5bac4f22013-06-29 02:06:53 +0930172AC_ARG_ENABLE([float-approx],
173 [AS_HELP_STRING([--enable-float-approx], [enable fast approximations for floating point])],
174 [if test "$enable_float_approx" = "yes"; then
175 AC_WARN([Floating point approximations are not supported on all platforms.])
176 fi
177 ],
178 [enable_float_approx=$has_float_approx])
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400179
Ron5bac4f22013-06-29 02:06:53 +0930180AS_IF([test "$enable_float_approx" = "yes"],[
181 AC_DEFINE([FLOAT_APPROX], [1], [Float approximations])
182])
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400183
Ron5bac4f22013-06-29 02:06:53 +0930184AC_ARG_ENABLE([asm],
Jean-Marc Valin17dcb272013-12-03 13:31:24 -0500185 [AS_HELP_STRING([--disable-asm], [Disable assembly optimizations])],,
186 [enable_asm=yes])
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400187
Ron5bac4f22013-06-29 02:06:53 +0930188AC_ARG_ENABLE([rtcd],
189 [AS_HELP_STRING([--disable-rtcd], [Disable run-time CPU capabilities detection])],,
190 [enable_rtcd=yes])
191
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800192AC_ARG_ENABLE([intrinsics],
Jonathan Lennox92f9c822015-11-20 23:03:51 -0500193 [AS_HELP_STRING([--disable-intrinsics], [Disable intrinsics optimizations])],,
Jonathan Lennox6d279022015-11-20 23:03:01 -0500194 [enable_intrinsics=yes])
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800195
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500196rtcd_support=no
197cpu_arm=no
198
199AS_IF([test x"${enable_asm}" = x"yes"],[
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600200 inline_optimization="No inline ASM for your platform, please send patches"
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500201 case $host_cpu in
202 arm*)
203 dnl Currently we only have asm for fixed-point
204 AS_IF([test "$enable_float" != "yes"],[
205 cpu_arm=yes
206 AC_DEFINE([OPUS_ARM_ASM], [], [Make use of ARM asm optimization])
207 AS_GCC_INLINE_ASSEMBLY(
208 [inline_optimization="ARM"],
209 [inline_optimization="disabled"]
210 )
211 AS_ASM_ARM_EDSP([OPUS_ARM_INLINE_EDSP=1],[OPUS_ARM_INLINE_EDSP=0])
212 AS_ASM_ARM_MEDIA([OPUS_ARM_INLINE_MEDIA=1],
213 [OPUS_ARM_INLINE_MEDIA=0])
214 AS_ASM_ARM_NEON([OPUS_ARM_INLINE_NEON=1],[OPUS_ARM_INLINE_NEON=0])
215 AS_IF([test x"$inline_optimization" = x"ARM"],[
216 AM_CONDITIONAL([OPUS_ARM_INLINE_ASM],[true])
217 AC_DEFINE([OPUS_ARM_INLINE_ASM], 1,
218 [Use generic ARMv4 inline asm optimizations])
219 AS_IF([test x"$OPUS_ARM_INLINE_EDSP" = x"1"],[
220 AC_DEFINE([OPUS_ARM_INLINE_EDSP], [1],
221 [Use ARMv5E inline asm optimizations])
222 inline_optimization="$inline_optimization (EDSP)"
223 ])
224 AS_IF([test x"$OPUS_ARM_INLINE_MEDIA" = x"1"],[
225 AC_DEFINE([OPUS_ARM_INLINE_MEDIA], [1],
226 [Use ARMv6 inline asm optimizations])
227 inline_optimization="$inline_optimization (Media)"
228 ])
229 AS_IF([test x"$OPUS_ARM_INLINE_NEON" = x"1"],[
230 AC_DEFINE([OPUS_ARM_INLINE_NEON], 1,
231 [Use ARM NEON inline asm optimizations])
232 inline_optimization="$inline_optimization (NEON)"
233 ])
234 ])
235 dnl We need Perl to translate RVCT-syntax asm to gas syntax.
236 AC_CHECK_PROG([HAVE_PERL], perl, yes, no)
237 AS_IF([test x"$HAVE_PERL" = x"yes"],[
238 AM_CONDITIONAL([OPUS_ARM_EXTERNAL_ASM],[true])
239 asm_optimization="ARM"
240 AS_IF([test x"$OPUS_ARM_INLINE_EDSP" = x"1"], [
241 OPUS_ARM_PRESUME_EDSP=1
242 OPUS_ARM_MAY_HAVE_EDSP=1
243 ],
244 [
245 OPUS_ARM_PRESUME_EDSP=0
246 OPUS_ARM_MAY_HAVE_EDSP=0
247 ])
248 AS_IF([test x"$OPUS_ARM_INLINE_MEDIA" = x"1"], [
249 OPUS_ARM_PRESUME_MEDIA=1
250 OPUS_ARM_MAY_HAVE_MEDIA=1
251 ],
252 [
253 OPUS_ARM_PRESUME_MEDIA=0
254 OPUS_ARM_MAY_HAVE_MEDIA=0
255 ])
256 AS_IF([test x"$OPUS_ARM_INLINE_NEON" = x"1"], [
257 OPUS_ARM_PRESUME_NEON=1
258 OPUS_ARM_MAY_HAVE_NEON=1
259 ],
260 [
261 OPUS_ARM_PRESUME_NEON=0
262 OPUS_ARM_MAY_HAVE_NEON=0
263 ])
264 AS_IF([test x"$enable_rtcd" = x"yes"],[
265 AS_IF([test x"$OPUS_ARM_MAY_HAVE_EDSP" != x"1"],[
266 AC_MSG_NOTICE(
267 [Trying to force-enable armv5e EDSP instructions...])
268 AS_ASM_ARM_EDSP_FORCE([OPUS_ARM_MAY_HAVE_EDSP=1])
269 ])
270 AS_IF([test x"$OPUS_ARM_MAY_HAVE_MEDIA" != x"1"],[
271 AC_MSG_NOTICE(
272 [Trying to force-enable ARMv6 media instructions...])
273 AS_ASM_ARM_MEDIA_FORCE([OPUS_ARM_MAY_HAVE_MEDIA=1])
274 ])
275 AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON" != x"1"],[
276 AC_MSG_NOTICE(
277 [Trying to force-enable NEON instructions...])
278 AS_ASM_ARM_NEON_FORCE([OPUS_ARM_MAY_HAVE_NEON=1])
279 ])
280 ])
281 rtcd_support=
282 AS_IF([test x"$OPUS_ARM_MAY_HAVE_EDSP" = x"1"],[
283 AC_DEFINE(OPUS_ARM_MAY_HAVE_EDSP, 1,
284 [Define if assembler supports EDSP instructions])
285 AS_IF([test x"$OPUS_ARM_PRESUME_EDSP" = x"1"],[
286 AC_DEFINE(OPUS_ARM_PRESUME_EDSP, 1,
287 [Define if binary requires EDSP instruction support])
288 asm_optimization="$asm_optimization (EDSP)"
289 ],
290 [rtcd_support="$rtcd_support (EDSP)"]
291 )
292 ])
293 AC_SUBST(OPUS_ARM_MAY_HAVE_EDSP)
294 AS_IF([test x"$OPUS_ARM_MAY_HAVE_MEDIA" = x"1"],[
295 AC_DEFINE(OPUS_ARM_MAY_HAVE_MEDIA, 1,
296 [Define if assembler supports ARMv6 media instructions])
297 AS_IF([test x"$OPUS_ARM_PRESUME_MEDIA" = x"1"],[
298 AC_DEFINE(OPUS_ARM_PRESUME_MEDIA, 1,
299 [Define if binary requires ARMv6 media instruction support])
300 asm_optimization="$asm_optimization (Media)"
301 ],
302 [rtcd_support="$rtcd_support (Media)"]
303 )
304 ])
305 AC_SUBST(OPUS_ARM_MAY_HAVE_MEDIA)
306 AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON" = x"1"],[
307 AC_DEFINE(OPUS_ARM_MAY_HAVE_NEON, 1,
308 [Define if compiler supports NEON instructions])
309 AS_IF([test x"$OPUS_ARM_PRESUME_NEON" = x"1"], [
310 AC_DEFINE(OPUS_ARM_PRESUME_NEON, 1,
311 [Define if binary requires NEON instruction support])
312 asm_optimization="$asm_optimization (NEON)"
313 ],
314 [rtcd_support="$rtcd_support (NEON)"]
315 )
316 ])
317 AC_SUBST(OPUS_ARM_MAY_HAVE_NEON)
318 dnl Make sure turning on RTCD gets us at least one
319 dnl instruction set.
320 AS_IF([test x"$rtcd_support" != x""],
321 [rtcd_support=ARM"$rtcd_support"],
322 [rtcd_support="no"]
323 )
Martin Storsjo76e831d2014-03-19 21:36:39 +0200324 AC_MSG_CHECKING([for apple style tools])
325 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
326#ifndef __APPLE__
327#error 1
328#endif],[])],
329 [AC_MSG_RESULT([yes]); ARM2GNU_PARAMS="--apple"],
330 [AC_MSG_RESULT([no]); ARM2GNU_PARAMS=""])
331 AC_SUBST(ARM2GNU_PARAMS)
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500332 ],
333 [
334 AC_MSG_WARN(
335 [*** ARM assembly requires perl -- disabling optimizations])
336 asm_optimization="(missing perl dependency for ARM)"
337 ])
338 ])
339 ;;
340 esac
341],[
342 inline_optimization="disabled"
343 asm_optimization="disabled"
344])
345
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500346AM_CONDITIONAL([OPUS_ARM_INLINE_ASM],
Peter Korsgaard253e15f2013-12-08 11:05:41 +0100347 [test x"${inline_optimization%% *}" = x"ARM"])
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500348AM_CONDITIONAL([OPUS_ARM_EXTERNAL_ASM],
Peter Korsgaard253e15f2013-12-08 11:05:41 +0100349 [test x"${asm_optimization%% *}" = x"ARM"])
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500350
Jonathan Lennoxcb0875e2015-08-03 17:04:26 -0400351AM_CONDITIONAL([HAVE_SSE], [false])
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800352AM_CONDITIONAL([HAVE_SSE2], [false])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400353AM_CONDITIONAL([HAVE_SSE4_1], [false])
Radu Velea16321522015-10-27 12:21:36 +0200354AM_CONDITIONAL([HAVE_AVX], [false])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400355
Jonathan Lennoxcb0875e2015-08-03 17:04:26 -0400356m4_define([DEFAULT_X86_SSE_CFLAGS], [-msse])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400357m4_define([DEFAULT_X86_SSE2_CFLAGS], [-msse2])
358m4_define([DEFAULT_X86_SSE4_1_CFLAGS], [-msse4.1])
Radu Velea16321522015-10-27 12:21:36 +0200359m4_define([DEFAULT_X86_AVX_CFLAGS], [-mavx])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400360m4_define([DEFAULT_ARM_NEON_INTR_CFLAGS], [-mfpu=neon])
361# With GCC on ARM32 softfp architectures (e.g. Android, or older Ubuntu) you need to specify
362# -mfloat-abi=softfp for -mfpu=neon to work. However, on ARM32 hardfp architectures (e.g. newer Ubuntu),
363# this option will break things.
364
365# As a heuristic, if host matches arm*eabi* but not arm*hf*, it's probably soft-float.
366m4_define([DEFAULT_ARM_NEON_SOFTFP_INTR_CFLAGS], [-mfpu=neon -mfloat-abi=softfp])
367
368AS_CASE([$host],
Timothy B. Terriberry096f5d32016-06-18 10:05:57 -0700369 [arm*hf*], [AS_VAR_SET([RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS], "DEFAULT_ARM_NEON_INTR_CFLAGS")],
370 [arm*eabi*], [AS_VAR_SET([RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS], "DEFAULT_ARM_NEON_SOFTFP_INTR_CFLAGS")],
371 [AS_VAR_SET([RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS], "DEFAULT_ARM_NEON_INTR_CFLAGS")])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400372
Jonathan Lennoxcb0875e2015-08-03 17:04:26 -0400373AC_ARG_VAR([X86_SSE_CFLAGS], [C compiler flags to compile SSE intrinsics @<:@default=]DEFAULT_X86_SSE_CFLAGS[@:>@])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400374AC_ARG_VAR([X86_SSE2_CFLAGS], [C compiler flags to compile SSE2 intrinsics @<:@default=]DEFAULT_X86_SSE2_CFLAGS[@:>@])
375AC_ARG_VAR([X86_SSE4_1_CFLAGS], [C compiler flags to compile SSE4.1 intrinsics @<:@default=]DEFAULT_X86_SSE4_1_CFLAGS[@:>@])
Radu Velea16321522015-10-27 12:21:36 +0200376AC_ARG_VAR([X86_AVX_CFLAGS], [C compiler flags to compile AVX intrinsics @<:@default=]DEFAULT_X86_AVX_CFLAGS[@:>@])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400377AC_ARG_VAR([ARM_NEON_INTR_CFLAGS], [C compiler flags to compile ARM NEON intrinsics @<:@default=]DEFAULT_ARM_NEON_INTR_CFLAGS / DEFAULT_ARM_NEON_SOFTFP_INTR_CFLAGS[@:>@])
378
Jonathan Lennoxcb0875e2015-08-03 17:04:26 -0400379AS_VAR_SET_IF([X86_SSE_CFLAGS], [], [AS_VAR_SET([X86_SSE_CFLAGS], "DEFAULT_X86_SSE_CFLAGS")])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400380AS_VAR_SET_IF([X86_SSE2_CFLAGS], [], [AS_VAR_SET([X86_SSE2_CFLAGS], "DEFAULT_X86_SSE2_CFLAGS")])
381AS_VAR_SET_IF([X86_SSE4_1_CFLAGS], [], [AS_VAR_SET([X86_SSE4_1_CFLAGS], "DEFAULT_X86_SSE4_1_CFLAGS")])
Radu Velea16321522015-10-27 12:21:36 +0200382AS_VAR_SET_IF([X86_AVX_CFLAGS], [], [AS_VAR_SET([X86_AVX_CFLAGS], "DEFAULT_X86_AVX_CFLAGS")])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400383AS_VAR_SET_IF([ARM_NEON_INTR_CFLAGS], [], [AS_VAR_SET([ARM_NEON_INTR_CFLAGS], ["$RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS"])])
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600384
Viswanath Puttaguntaf48abe82015-05-15 12:42:19 -0500385AC_DEFUN([OPUS_PATH_NE10],
386 [
387 AC_ARG_WITH(NE10,
388 AC_HELP_STRING([--with-NE10=PFX],[Prefix where libNE10 is installed (optional)]),
389 NE10_prefix="$withval", NE10_prefix="")
390 AC_ARG_WITH(NE10-libraries,
391 AC_HELP_STRING([--with-NE10-libraries=DIR],
392 [Directory where libNE10 library is installed (optional)]),
393 NE10_libraries="$withval", NE10_libraries="")
394 AC_ARG_WITH(NE10-includes,
395 AC_HELP_STRING([--with-NE10-includes=DIR],
396 [Directory where libNE10 header files are installed (optional)]),
397 NE10_includes="$withval", NE10_includes="")
398
399 if test "x$NE10_libraries" != "x" ; then
400 NE10_LIBS="-L$NE10_libraries"
401 elif test "x$NE10_prefix" = "xno" || test "x$NE10_prefix" = "xyes" ; then
402 NE10_LIBS=""
403 elif test "x$NE10_prefix" != "x" ; then
404 NE10_LIBS="-L$NE10_prefix/lib"
405 elif test "x$prefix" != "xNONE" ; then
406 NE10_LIBS="-L$prefix/lib"
407 fi
408
409 if test "x$NE10_prefix" != "xno" ; then
410 NE10_LIBS="$NE10_LIBS -lNE10"
411 fi
412
413 if test "x$NE10_includes" != "x" ; then
414 NE10_CFLAGS="-I$NE10_includes"
415 elif test "x$NE10_prefix" = "xno" || test "x$NE10_prefix" = "xyes" ; then
416 NE10_CFLAGS=""
Alexander Kochetkovec29ffd2017-09-11 13:45:01 +0300417 elif test "x$NE10_prefix" != "x" ; then
Viswanath Puttaguntaf48abe82015-05-15 12:42:19 -0500418 NE10_CFLAGS="-I$NE10_prefix/include"
419 elif test "x$prefix" != "xNONE"; then
420 NE10_CFLAGS="-I$prefix/include"
421 fi
422
423 AC_MSG_CHECKING(for NE10)
Jean-Marc Valin80052fe2016-11-01 18:41:23 -0400424 save_CFLAGS="$CFLAGS"; CFLAGS="$CFLAGS $NE10_CFLAGS"
425 save_LIBS="$LIBS"; LIBS="$LIBS $NE10_LIBS $LIBM"
Viswanath Puttaguntaf48abe82015-05-15 12:42:19 -0500426 AC_LINK_IFELSE(
427 [
428 AC_LANG_PROGRAM(
Michael Bradshawc930cc52017-01-27 16:07:26 -0800429 [[#include <NE10_dsp.h>
Viswanath Puttaguntaf48abe82015-05-15 12:42:19 -0500430 ]],
431 [[
432 ne10_fft_cfg_float32_t cfg;
433 cfg = ne10_fft_alloc_c2c_float32_neon(480);
434 ]]
435 )
436 ],[
437 HAVE_ARM_NE10=1
438 AC_MSG_RESULT([yes])
439 ],[
440 HAVE_ARM_NE10=0
441 AC_MSG_RESULT([no])
442 NE10_CFLAGS=""
443 NE10_LIBS=""
444 ]
445 )
446 CFLAGS="$save_CFLAGS"; LIBS="$save_LIBS"
447 #Now we know if libNE10 is installed or not
448 AS_IF([test x"$HAVE_ARM_NE10" = x"1"],
449 [
450 AC_DEFINE([HAVE_ARM_NE10], 1, [NE10 library is installed on host. Make sure it is on target!])
451 AC_SUBST(HAVE_ARM_NE10)
452 AC_SUBST(NE10_CFLAGS)
453 AC_SUBST(NE10_LIBS)
Timothy B. Terriberry57842da2015-10-16 13:02:24 -0700454 ]
Viswanath Puttaguntaf48abe82015-05-15 12:42:19 -0500455 )
456 ]
457)
458
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800459AS_IF([test x"$enable_intrinsics" = x"yes"],[
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400460 intrinsics_support=""
461 AS_CASE([$host_cpu],
Jonathan Lennox920ff712015-11-20 23:02:56 -0500462 [arm*|aarch64*],
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400463 [
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600464 cpu_arm=yes
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400465 OPUS_CHECK_INTRINSICS(
466 [ARM Neon],
467 [$ARM_NEON_INTR_CFLAGS],
468 [OPUS_ARM_MAY_HAVE_NEON_INTR],
469 [OPUS_ARM_PRESUME_NEON_INTR],
470 [[#include <arm_neon.h>
471 ]],
472 [[
473 static float32x4_t A0, A1, SUMM;
474 SUMM = vmlaq_f32(SUMM, A0, A1);
Jonathan Lennoxdc92dab2016-05-31 15:52:36 -0400475 return (int)vgetq_lane_f32(SUMM, 0);
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400476 ]]
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600477 )
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400478 AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON_INTR" = x"1" && test x"$OPUS_ARM_PRESUME_NEON_INTR" != x"1"],
479 [
480 OPUS_ARM_NEON_INTR_CFLAGS="$ARM_NEON_INTR_CFLAGS"
481 AC_SUBST([OPUS_ARM_NEON_INTR_CFLAGS])
482 ]
483 )
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600484
Viswanath Puttaguntaba8713c2015-05-15 12:42:25 -0500485 AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON_INTR" = x"1"],
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600486 [
Jonathan Lennox92f9c822015-11-20 23:03:51 -0500487 AC_DEFINE([OPUS_ARM_MAY_HAVE_NEON_INTR], 1, [Compiler supports ARMv7/Aarch64 Neon Intrinsics])
Jonathan Lennox87c670d2015-11-20 23:03:56 -0500488 intrinsics_support="$intrinsics_support (NEON)"
Viswanath Puttaguntaba8713c2015-05-15 12:42:25 -0500489
Jonathan Lennox87c670d2015-11-20 23:03:56 -0500490 AS_IF([test x"$enable_rtcd" != x"no" && test x"$OPUS_ARM_PRESUME_NEON_INTR" != x"1"],
491 [AS_IF([test x"$rtcd_support" = x"no"],
492 [rtcd_support="ARM (NEON Intrinsics)"],
493 [rtcd_support="$rtcd_support (NEON Intrinsics)"])])
Viswanath Puttaguntaba8713c2015-05-15 12:42:25 -0500494
495 AS_IF([test x"$OPUS_ARM_PRESUME_NEON_INTR" = x"1"],
496 [AC_DEFINE([OPUS_ARM_PRESUME_NEON_INTR], 1, [Define if binary requires NEON intrinsics support])])
497
498 OPUS_PATH_NE10()
499 AS_IF([test x"$NE10_LIBS" != x""],
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600500 [
Viswanath Puttaguntaba8713c2015-05-15 12:42:25 -0500501 intrinsics_support="$intrinsics_support (NE10)"
502 AS_IF([test x"enable_rtcd" != x"" \
503 && test x"$OPUS_ARM_PRESUME_NEON_INTR" != x"1"],
Timothy B. Terriberry57842da2015-10-16 13:02:24 -0700504 [rtcd_support="$rtcd_support (NE10)"])
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600505 ])
Viswanath Puttaguntaba8713c2015-05-15 12:42:25 -0500506
Jonathan Lennox87973602015-11-20 23:03:57 -0500507 OPUS_CHECK_INTRINSICS(
508 [Aarch64 Neon],
509 [$ARM_NEON_INTR_CFLAGS],
510 [OPUS_ARM_MAY_HAVE_AARCH64_NEON_INTR],
511 [OPUS_ARM_PRESUME_AARCH64_NEON_INTR],
512 [[#include <arm_neon.h>
513 ]],
514 [[
515 static int32_t IN;
516 static int16_t OUT;
517 OUT = vqmovns_s32(IN);
518 ]]
519 )
520
521 AS_IF([test x"$OPUS_ARM_PRESUME_AARCH64_NEON_INTR" = x"1"],
522 [
523 AC_DEFINE([OPUS_ARM_PRESUME_AARCH64_NEON_INTR], 1, [Define if binary requires Aarch64 Neon Intrinsics])
524 intrinsics_support="$intrinsics_support (NEON [Aarch64])"
525 ])
526
Viswanath Puttaguntaba8713c2015-05-15 12:42:25 -0500527 AS_IF([test x"$intrinsics_support" = x""],
528 [intrinsics_support=no],
Jonathan Lennox87c670d2015-11-20 23:03:56 -0500529 [intrinsics_support="ARM$intrinsics_support"])
Viswanath Puttaguntaba8713c2015-05-15 12:42:25 -0500530 ],
531 [
532 AC_MSG_WARN([Compiler does not support ARM intrinsics])
533 intrinsics_support=no
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600534 ])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400535 ],
536 [i?86|x86_64],
537 [
538 OPUS_CHECK_INTRINSICS(
Jonathan Lennoxcb0875e2015-08-03 17:04:26 -0400539 [SSE],
540 [$X86_SSE_CFLAGS],
541 [OPUS_X86_MAY_HAVE_SSE],
542 [OPUS_X86_PRESUME_SSE],
543 [[#include <xmmintrin.h>
Jonathan Lennoxdc92dab2016-05-31 15:52:36 -0400544 #include <time.h>
Jonathan Lennoxcb0875e2015-08-03 17:04:26 -0400545 ]],
546 [[
Jonathan Lennoxdc92dab2016-05-31 15:52:36 -0400547 __m128 mtest;
548 mtest = _mm_set1_ps((float)time(NULL));
549 mtest = _mm_mul_ps(mtest, mtest);
550 return _mm_cvtss_si32(mtest);
Jonathan Lennoxcb0875e2015-08-03 17:04:26 -0400551 ]]
552 )
553 AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE" = x"1" && test x"$OPUS_X86_PRESUME_SSE" != x"1"],
554 [
555 OPUS_X86_SSE_CFLAGS="$X86_SSE_CFLAGS"
556 AC_SUBST([OPUS_X86_SSE_CFLAGS])
557 ]
558 )
559 OPUS_CHECK_INTRINSICS(
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400560 [SSE2],
561 [$X86_SSE2_CFLAGS],
562 [OPUS_X86_MAY_HAVE_SSE2],
563 [OPUS_X86_PRESUME_SSE2],
564 [[#include <emmintrin.h>
Jonathan Lennoxdc92dab2016-05-31 15:52:36 -0400565 #include <time.h>
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400566 ]],
567 [[
Jonathan Lennoxdc92dab2016-05-31 15:52:36 -0400568 __m128i mtest;
569 mtest = _mm_set1_epi32((int)time(NULL));
570 mtest = _mm_mul_epu32(mtest, mtest);
571 return _mm_cvtsi128_si32(mtest);
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400572 ]]
573 )
574 AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1" && test x"$OPUS_X86_PRESUME_SSE2" != x"1"],
575 [
576 OPUS_X86_SSE2_CFLAGS="$X86_SSE2_CFLAGS"
577 AC_SUBST([OPUS_X86_SSE2_CFLAGS])
578 ]
579 )
580 OPUS_CHECK_INTRINSICS(
581 [SSE4.1],
582 [$X86_SSE4_1_CFLAGS],
583 [OPUS_X86_MAY_HAVE_SSE4_1],
584 [OPUS_X86_PRESUME_SSE4_1],
585 [[#include <smmintrin.h>
Jonathan Lennoxdc92dab2016-05-31 15:52:36 -0400586 #include <time.h>
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400587 ]],
588 [[
Jonathan Lennoxdc92dab2016-05-31 15:52:36 -0400589 __m128i mtest;
590 mtest = _mm_set1_epi32((int)time(NULL));
591 mtest = _mm_mul_epi32(mtest, mtest);
592 return _mm_cvtsi128_si32(mtest);
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400593 ]]
594 )
595 AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1" && test x"$OPUS_X86_PRESUME_SSE4_1" != x"1"],
596 [
597 OPUS_X86_SSE4_1_CFLAGS="$X86_SSE4_1_CFLAGS"
598 AC_SUBST([OPUS_X86_SSE4_1_CFLAGS])
599 ]
600 )
Radu Velea16321522015-10-27 12:21:36 +0200601 OPUS_CHECK_INTRINSICS(
602 [AVX],
603 [$X86_AVX_CFLAGS],
604 [OPUS_X86_MAY_HAVE_AVX],
605 [OPUS_X86_PRESUME_AVX],
606 [[#include <immintrin.h>
Jonathan Lennoxdc92dab2016-05-31 15:52:36 -0400607 #include <time.h>
Radu Velea16321522015-10-27 12:21:36 +0200608 ]],
609 [[
Jonathan Lennoxdc92dab2016-05-31 15:52:36 -0400610 __m256 mtest;
611 mtest = _mm256_set1_ps((float)time(NULL));
612 mtest = _mm256_addsub_ps(mtest, mtest);
613 return _mm_cvtss_si32(_mm256_extractf128_ps(mtest, 0));
Radu Velea16321522015-10-27 12:21:36 +0200614 ]]
615 )
616 AS_IF([test x"$OPUS_X86_MAY_HAVE_AVX" = x"1" && test x"$OPUS_X86_PRESUME_AVX" != x"1"],
617 [
618 OPUS_X86_AVX_CFLAGS="$X86_AVX_CFLAGS"
619 AC_SUBST([OPUS_X86_AVX_CFLAGS])
620 ]
621 )
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400622 AS_IF([test x"$rtcd_support" = x"no"], [rtcd_support=""])
Jonathan Lennoxcb0875e2015-08-03 17:04:26 -0400623 AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE" = x"1"],
624 [
625 AC_DEFINE([OPUS_X86_MAY_HAVE_SSE], 1, [Compiler supports X86 SSE Intrinsics])
626 intrinsics_support="$intrinsics_support SSE"
627
628 AS_IF([test x"$OPUS_X86_PRESUME_SSE" = x"1"],
629 [AC_DEFINE([OPUS_X86_PRESUME_SSE], 1, [Define if binary requires SSE intrinsics support])],
630 [rtcd_support="$rtcd_support SSE"])
631 ],
632 [
633 AC_MSG_WARN([Compiler does not support SSE intrinsics])
634 ])
635
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400636 AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1"],
637 [
638 AC_DEFINE([OPUS_X86_MAY_HAVE_SSE2], 1, [Compiler supports X86 SSE2 Intrinsics])
639 intrinsics_support="$intrinsics_support SSE2"
640
641 AS_IF([test x"$OPUS_X86_PRESUME_SSE2" = x"1"],
642 [AC_DEFINE([OPUS_X86_PRESUME_SSE2], 1, [Define if binary requires SSE2 intrinsics support])],
643 [rtcd_support="$rtcd_support SSE2"])
644 ],
645 [
646 AC_MSG_WARN([Compiler does not support SSE2 intrinsics])
647 ])
648
649 AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1"],
650 [
651 AC_DEFINE([OPUS_X86_MAY_HAVE_SSE4_1], 1, [Compiler supports X86 SSE4.1 Intrinsics])
652 intrinsics_support="$intrinsics_support SSE4.1"
653
654 AS_IF([test x"$OPUS_X86_PRESUME_SSE4_1" = x"1"],
655 [AC_DEFINE([OPUS_X86_PRESUME_SSE4_1], 1, [Define if binary requires SSE4.1 intrinsics support])],
656 [rtcd_support="$rtcd_support SSE4.1"])
657 ],
658 [
659 AC_MSG_WARN([Compiler does not support SSE4.1 intrinsics])
660 ])
Radu Velea16321522015-10-27 12:21:36 +0200661 AS_IF([test x"$OPUS_X86_MAY_HAVE_AVX" = x"1"],
662 [
663 AC_DEFINE([OPUS_X86_MAY_HAVE_AVX], 1, [Compiler supports X86 AVX Intrinsics])
664 intrinsics_support="$intrinsics_support AVX"
665
666 AS_IF([test x"$OPUS_X86_PRESUME_AVX" = x"1"],
667 [AC_DEFINE([OPUS_X86_PRESUME_AVX], 1, [Define if binary requires AVX intrinsics support])],
668 [rtcd_support="$rtcd_support AVX"])
669 ],
670 [
671 AC_MSG_WARN([Compiler does not support AVX intrinsics])
672 ])
673
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400674 AS_IF([test x"$intrinsics_support" = x""],
675 [intrinsics_support=no],
676 [intrinsics_support="x86$intrinsics_support"]
677 )
678 AS_IF([test x"$rtcd_support" = x""],
679 [rtcd_support=no],
680 [rtcd_support="x86$rtcd_support"],
681 )
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400682
683 AS_IF([test x"$enable_rtcd" = x"yes" && test x"$rtcd_support" != x""],[
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800684 get_cpuid_by_asm="no"
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400685 AC_MSG_CHECKING([How to get X86 CPU Info])
Ron7424bb02014-12-20 19:46:20 +1030686 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800687 #include <stdio.h>
Ron7424bb02014-12-20 19:46:20 +1030688 ]],[[
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800689 unsigned int CPUInfo0;
690 unsigned int CPUInfo1;
691 unsigned int CPUInfo2;
692 unsigned int CPUInfo3;
693 unsigned int InfoType;
694 __asm__ __volatile__ (
Jonathan Lennoxee6ec632015-08-03 17:04:22 -0400695 "cpuid":
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800696 "=a" (CPUInfo0),
697 "=b" (CPUInfo1),
698 "=c" (CPUInfo2),
699 "=d" (CPUInfo3) :
700 "a" (InfoType), "c" (0)
701 );
Ron7424bb02014-12-20 19:46:20 +1030702 ]])],
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800703 [get_cpuid_by_asm="yes"
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400704 AC_MSG_RESULT([Inline Assembly])
Timothy B. Terriberry096f5d32016-06-18 10:05:57 -0700705 AC_DEFINE([CPU_INFO_BY_ASM], [1], [Get CPU Info by asm method])],
Ron7424bb02014-12-20 19:46:20 +1030706 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800707 #include <cpuid.h>
Ron7424bb02014-12-20 19:46:20 +1030708 ]],[[
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800709 unsigned int CPUInfo0;
710 unsigned int CPUInfo1;
711 unsigned int CPUInfo2;
712 unsigned int CPUInfo3;
713 unsigned int InfoType;
714 __get_cpuid(InfoType, &CPUInfo0, &CPUInfo1, &CPUInfo2, &CPUInfo3);
Ron7424bb02014-12-20 19:46:20 +1030715 ]])],
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400716 [AC_MSG_RESULT([C method])
Timothy B. Terriberry096f5d32016-06-18 10:05:57 -0700717 AC_DEFINE([CPU_INFO_BY_C], [1], [Get CPU Info by c method])],
Mark Harrisaef47562017-01-18 00:13:37 -0800718 [AC_MSG_ERROR([no supported Get CPU Info method, please disable run-time CPU capabilities detection or intrinsics])])])])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400719 ],
720 [
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600721 AC_MSG_WARN([No intrinsics support for your architecture])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400722 intrinsics_support="no"
723 ])
724],
725[
726 intrinsics_support="no"
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800727])
Viswanath Puttagunta0b0a2b42014-12-19 17:25:55 -0600728
729AM_CONDITIONAL([CPU_ARM], [test "$cpu_arm" = "yes"])
Jonathan Lennox8cb14872015-11-20 23:02:55 -0500730AM_CONDITIONAL([HAVE_ARM_NEON_INTR],
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400731 [test x"$OPUS_ARM_MAY_HAVE_NEON_INTR" = x"1"])
Viswanath Puttaguntaf48abe82015-05-15 12:42:19 -0500732AM_CONDITIONAL([HAVE_ARM_NE10],
733 [test x"$HAVE_ARM_NE10" = x"1"])
Jonathan Lennoxcb0875e2015-08-03 17:04:26 -0400734AM_CONDITIONAL([HAVE_SSE],
735 [test x"$OPUS_X86_MAY_HAVE_SSE" = x"1"])
Jonathan Lennoxb4aa5dc2015-08-03 17:04:20 -0400736AM_CONDITIONAL([HAVE_SSE2],
737 [test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1"])
738AM_CONDITIONAL([HAVE_SSE4_1],
739 [test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1"])
Radu Velea16321522015-10-27 12:21:36 +0200740AM_CONDITIONAL([HAVE_AVX],
741 [test x"$OPUS_X86_MAY_HAVE_AVX" = x"1"])
xiangmingzhuc95c9a02014-04-30 15:48:07 +0800742
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500743AS_IF([test x"$enable_rtcd" = x"yes"],[
744 AS_IF([test x"$rtcd_support" != x"no"],[
745 AC_DEFINE([OPUS_HAVE_RTCD], [1],
746 [Use run-time CPU capabilities detection])
747 OPUS_HAVE_RTCD=1
748 AC_SUBST(OPUS_HAVE_RTCD)
Ron5bac4f22013-06-29 02:06:53 +0930749 ])
750],[
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500751 rtcd_support="disabled"
Ron5bac4f22013-06-29 02:06:53 +0930752])
Aurélien Zanellicd4c8242013-05-31 15:07:00 +0200753
Ron5bac4f22013-06-29 02:06:53 +0930754AC_ARG_ENABLE([assertions],
755 [AS_HELP_STRING([--enable-assertions],[enable additional software error checking])],,
756 [enable_assertions=no])
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400757
Ron5bac4f22013-06-29 02:06:53 +0930758AS_IF([test "$enable_assertions" = "yes"], [
759 AC_DEFINE([ENABLE_ASSERTIONS], [1], [Assertions])
760])
Jean-Marc Valinf334c822011-08-11 16:21:58 -0400761
Jean-Marc Valinef203132018-03-22 17:40:35 -0400762AC_ARG_ENABLE([hardening],
763 [AS_HELP_STRING([--enable-hardening],[enable run-time checks that are cheap and safe for use in production])],,
764 [enable_hardening=no])
765
766AS_IF([test "$enable_hardening" = "yes"], [
767 AC_DEFINE([ENABLE_HARDENING], [1], [Hardening])
768])
769
Ron5bac4f22013-06-29 02:06:53 +0930770AC_ARG_ENABLE([fuzzing],
771 [AS_HELP_STRING([--enable-fuzzing],[causes the encoder to make random decisions])],,
772 [enable_fuzzing=no])
773
774AS_IF([test "$enable_fuzzing" = "yes"], [
775 AC_DEFINE([FUZZING], [1], [Fuzzing])
776])
777
Felicia Lim32b302c2017-01-18 14:47:26 -0800778AC_ARG_ENABLE([check-asm],
779 [AS_HELP_STRING([--enable-check-asm],
780 [enable bit-exactness checks between optimized and c implementations])],,
781 [enable_check_asm=no])
782
783AS_IF([test "$enable_check_asm" = "yes"], [
784 AC_DEFINE([OPUS_CHECK_ASM], [1], [Run bit-exactness checks between optimized and c implementations])
785])
786
Michael Graczyk39256682016-05-02 21:42:18 -0700787AC_ARG_ENABLE([ambisonics],
788 [AS_HELP_STRING([--enable-ambisonics],[enable experimental ambisonic encoding and decoding support])],,
789 [enable_ambisonics=no])
790
791AS_IF([test "$enable_ambisonics" = "yes"], [
792 AC_DEFINE([ENABLE_EXPERIMENTAL_AMBISONICS], [1], [Ambisonics Support])
793])
794
Ralph Giles35d4fb72011-09-06 23:18:00 -0700795AC_ARG_ENABLE([doc],
Ron5bac4f22013-06-29 02:06:53 +0930796 [AS_HELP_STRING([--disable-doc], [Do not build API documentation])],,
797 [enable_doc=yes])
Ralph Giles35d4fb72011-09-06 23:18:00 -0700798
Ron5bac4f22013-06-29 02:06:53 +0930799AS_IF([test "$enable_doc" = "yes"], [
800 AC_CHECK_PROG(HAVE_DOXYGEN, [doxygen], [yes], [no])
Ralph Giles76fa9392016-10-27 10:23:29 -0700801 AC_CHECK_PROG(HAVE_DOT, [dot], [yes], [no])
Ron5bac4f22013-06-29 02:06:53 +0930802],[
803 HAVE_DOXYGEN=no
804])
805
806AM_CONDITIONAL([HAVE_DOXYGEN], [test "$HAVE_DOXYGEN" = "yes"])
807
Aurélien Zanellifaec6732013-05-26 22:08:02 +0200808AC_ARG_ENABLE([extra-programs],
Ron5bac4f22013-06-29 02:06:53 +0930809 [AS_HELP_STRING([--disable-extra-programs], [Do not build extra programs (demo and tests)])],,
810 [enable_extra_programs=yes])
811
812AM_CONDITIONAL([EXTRA_PROGRAMS], [test "$enable_extra_programs" = "yes"])
813
Aurélien Zanellifaec6732013-05-26 22:08:02 +0200814
Jean-Marc Valind8b1fd42017-10-29 00:58:23 -0400815AC_ARG_ENABLE([rfc8251],
816 AS_HELP_STRING([--disable-rfc8251], [Disable bitstream fixes from RFC 8251]),,
817 [enable_rfc8251=yes])
Jean-Marc Valin12fb15f2016-08-31 01:57:18 -0400818
Jean-Marc Valind8b1fd42017-10-29 00:58:23 -0400819AS_IF([test "$enable_rfc8251" = "no"], [
820 AC_DEFINE([DISABLE_UPDATE_DRAFT], [1], [Disable bitstream fixes from RFC 8251])
Jean-Marc Valin12fb15f2016-08-31 01:57:18 -0400821])
822
823
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400824saved_CFLAGS="$CFLAGS"
825CFLAGS="$CFLAGS -fvisibility=hidden"
Gregory Maxwelle53ebd62011-10-21 14:21:53 -0400826AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
Ron5bac4f22013-06-29 02:06:53 +0930827AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
828 [ AC_MSG_RESULT([yes]) ],
829 [ AC_MSG_RESULT([no])
830 CFLAGS="$saved_CFLAGS"
831 ])
Gregory Maxwell6c83b0b2012-05-14 00:30:34 -0400832
Jean-Marc Valin76d966f2018-02-22 14:51:52 -0500833on_x86=no
834case "$host_cpu" in
835i[[3456]]86 | x86_64)
836 on_x86=yes
837 ;;
838esac
839
Jean-Marc Valine1c07702018-03-02 15:08:21 -0500840on_windows=no
841case $host in
842*cygwin*|*mingw*)
843 on_windows=yes
844 ;;
845esac
846
Jean-Marc Valin76d966f2018-02-22 14:51:52 -0500847dnl Enable stack-protector-all only on x86 where it's well supported.
848dnl on some platforms it causes crashes. Hopefully the OS's default's
849dnl include this on platforms that work but have been missed here.
850AC_ARG_ENABLE([stack-protector],
851 [AS_HELP_STRING([--disable-stack-protector],[Disable compiler stack hardening])],,
852 [
Jean-Marc Valine1c07702018-03-02 15:08:21 -0500853 AS_IF([test "$ac_cv_c_compiler_gnu" = "yes" && test "$on_x86" = "yes" && test "$on_windows" = "no"],
Jean-Marc Valin76d966f2018-02-22 14:51:52 -0500854 [enable_stack_protector=yes],[enable_stack_protector=no])
855 ])
856
857AS_IF([test "$enable_stack_protector" = "yes"],
858 [
859 saved_CFLAGS="$CFLAGS"
860 CFLAGS="$CFLAGS -fstack-protector-strong"
861 AC_MSG_CHECKING([if ${CC} supports -fstack-protector-strong])
862 AC_LINK_IFELSE([AC_LANG_PROGRAM([],[[char foo;]])],
863 [ AC_MSG_RESULT([yes]) ],
864 [
865 AC_MSG_RESULT([no])
866 enable_stack_protector=no
867 CFLAGS="$saved_CFLAGS"
868 ])
869 ])
870
Jean-Marc Valin610c14c2018-02-22 17:18:57 -0500871AS_IF([test x$ac_cv_c_compiler_gnu = xyes],
872 [AX_ADD_FORTIFY_SOURCE]
873)
874
Gregory Maxwell6c83b0b2012-05-14 00:30:34 -0400875CFLAGS="$CFLAGS -W"
876
Ralph Giles99e8a932013-03-12 22:57:00 -0700877warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes"
Gregory Maxwell6c83b0b2012-05-14 00:30:34 -0400878saved_CFLAGS="$CFLAGS"
Ralph Giles42f39c52013-03-11 10:59:13 -0700879CFLAGS="$CFLAGS $warn_CFLAGS"
880AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
Ron5bac4f22013-06-29 02:06:53 +0930881AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
882 [ AC_MSG_RESULT([yes]) ],
883 [ AC_MSG_RESULT([no])
884 CFLAGS="$saved_CFLAGS"
885 ])
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400886
Ron5bac4f22013-06-29 02:06:53 +0930887saved_LIBS="$LIBS"
888LIBS="$LIBS $LIBM"
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400889AC_CHECK_FUNCS([lrintf])
890AC_CHECK_FUNCS([lrint])
Ron5bac4f22013-06-29 02:06:53 +0930891LIBS="$saved_LIBS"
892
Ralph Gilesc19bc342011-10-28 07:14:58 -0700893AC_CHECK_FUNCS([__malloc_hook])
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400894
Ralph Gilesd47ddfb2012-09-16 23:09:21 -0700895AC_SUBST([PC_BUILD])
Ralph Gilesd47ddfb2012-09-16 23:09:21 -0700896
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500897AC_CONFIG_FILES([
898 Makefile
899 opus.pc
900 opus-uninstalled.pc
901 celt/arm/armopts.s
902 doc/Makefile
903 doc/Doxyfile
904])
Ron2f2f9d62013-05-11 02:05:24 +0930905AC_CONFIG_HEADERS([config.h])
Ronc40d5002012-09-19 07:56:17 +0930906
907AC_OUTPUT
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400908
Ron4a7bb1f2013-06-09 00:57:02 +0930909AC_MSG_NOTICE([
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400910------------------------------------------------------------------------
Ron2f2f9d62013-05-11 02:05:24 +0930911 $PACKAGE_NAME $PACKAGE_VERSION: Automatic configuration OK.
912
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400913 Compiler support:
914
915 C99 var arrays: ................ ${has_var_arrays}
916 C99 lrintf: .................... ${ac_cv_func_lrintf}
Ron5bac4f22013-06-29 02:06:53 +0930917 Use alloca: .................... ${use_alloca}
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500918
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400919 General configuration:
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500920
Ron5bac4f22013-06-29 02:06:53 +0930921 Floating point support: ........ ${enable_float}
922 Fast float approximations: ..... ${enable_float_approx}
923 Fixed point debugging: ......... ${enable_fixed_point_debug}
Timothy B. Terriberry39386e02013-11-18 13:30:13 -0500924 Inline Assembly Optimizations: . ${inline_optimization}
925 External Assembly Optimizations: ${asm_optimization}
Ralph Giles9f7e7c82017-10-23 12:50:14 -0700926 Intrinsics Optimizations: ...... ${intrinsics_support}
Aurélien Zanellicd4c8242013-05-31 15:07:00 +0200927 Run-time CPU detection: ........ ${rtcd_support}
Ron5bac4f22013-06-29 02:06:53 +0930928 Custom modes: .................. ${enable_custom_modes}
929 Assertion checking: ............ ${enable_assertions}
Jean-Marc Valinef203132018-03-22 17:40:35 -0400930 Hardening: ..................... ${enable_hardening}
Ron5bac4f22013-06-29 02:06:53 +0930931 Fuzzing: ....................... ${enable_fuzzing}
Felicia Lim32b302c2017-01-18 14:47:26 -0800932 Check ASM: ..................... ${enable_check_asm}
933 Ambisonics support: ............ ${enable_ambisonics}
Ralph Giles35d4fb72011-09-06 23:18:00 -0700934
Ron5bac4f22013-06-29 02:06:53 +0930935 API documentation: ............. ${enable_doc}
936 Extra programs: ................ ${enable_extra_programs}
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400937------------------------------------------------------------------------
Ron4a7bb1f2013-06-09 00:57:02 +0930938
939 Type "make; make install" to compile and install
940 Type "make check" to run the test suite
Jean-Marc Valine05aaf22011-04-29 19:48:42 -0400941])
942