configure.ac 33.2 KB
Newer Older
1
dnl Process this file with autoconf to produce a configure script. -*-m4-*-
Jean-Marc Valin's avatar
Jean-Marc Valin committed
2

Ron's avatar
Ron committed
3
4
5
6
dnl The package_version file will be automatically synced to the git revision
dnl by the update_version script when configured in the repository, but will
dnl remain constant in tarball releases unless it is manually edited.
m4_define([CURRENT_VERSION],
7
8
          m4_esyscmd([ ./update_version 2>/dev/null || true
                       if test -e package_version; then
Ron's avatar
Ron committed
9
10
11
12
13
                           . ./package_version
                           printf "$PACKAGE_VERSION"
                       else
                           printf "unknown"
                       fi ]))
Jean-Marc Valin's avatar
Jean-Marc Valin committed
14

Ron's avatar
Ron committed
15
16
17
AC_INIT([opus],[CURRENT_VERSION],[opus@xiph.org])

AC_CONFIG_SRCDIR(src/opus_encoder.c)
Ron's avatar
Ron committed
18
AC_CONFIG_MACRO_DIR([m4])
19

20
21
22
dnl enable silent rules on automake 1.11 and later
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

23
# For libtool.
24
dnl Please update these for releases.
Jean-Marc Valin's avatar
Jean-Marc Valin committed
25
OPUS_LT_CURRENT=8
Jean-Marc Valin's avatar
Jean-Marc Valin committed
26
OPUS_LT_REVISION=0
Jean-Marc Valin's avatar
Jean-Marc Valin committed
27
OPUS_LT_AGE=8
Jean-Marc Valin's avatar
Jean-Marc Valin committed
28

29
30
31
32
AC_SUBST(OPUS_LT_CURRENT)
AC_SUBST(OPUS_LT_REVISION)
AC_SUBST(OPUS_LT_AGE)

Ron's avatar
Ron committed
33
AM_INIT_AUTOMAKE([no-define])
34
AM_MAINTAINER_MODE([enable])
35
36

AC_CANONICAL_HOST
37
AC_MINGW32
38
AM_PROG_LIBTOOL
39
AM_PROG_CC_C_O
40
41

AC_PROG_CC_C99
Jean-Marc Valin's avatar
Jean-Marc Valin committed
42
43
AC_C_CONST
AC_C_INLINE
44

45
46
AM_PROG_AS

Ron's avatar
Ron committed
47
48
AC_DEFINE([OPUS_BUILD], [], [This is a build of OPUS])

49
50
#Use a hacked up version of autoconf's AC_C_RESTRICT because it's not
#strong enough a test to detect old buggy versions of GCC (e.g. 2.95.3)
Ron's avatar
Ron committed
51
52
#Note: Both this and the test for variable-size arrays below are also
#      done by AC_PROG_CC_C99, but not thoroughly enough apparently.
53
54
55
56
57
58
AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict,
  [ac_cv_c_restrict=no
   # The order here caters to the fact that C++ does not require restrict.
   for ac_kw in __restrict __restrict__ _Restrict restrict; do
     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
      [[typedef int * int_ptr;
59
60
        int foo (int_ptr $ac_kw ip, int * $ac_kw baz[]) {
        return ip[0];
61
62
       }]],
      [[int s[1];
63
64
65
        int * $ac_kw t = s;
        t[0] = 0;
        return foo(t, (void *)0)]])],
66
67
68
69
      [ac_cv_c_restrict=$ac_kw])
     test "$ac_cv_c_restrict" != no && break
   done
  ])
Ron's avatar
Ron committed
70
71

AH_VERBATIM([restrict],
72
73
74
75
76
77
78
79
80
81
82
83
84
[/* Define to the equivalent of the C99 'restrict' keyword, or to
   nothing if this is not supported.  Do not define if restrict is
   supported directly.  */
#undef restrict
/* Work around a bug in Sun C++: it does not support _Restrict or
   __restrict__, even though the corresponding Sun C compiler ends up with
   "#define restrict _Restrict" or "#define restrict __restrict__" in the
   previous line.  Perhaps some future version of Sun C++ will work with
   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
#if defined __SUNPRO_CC && !defined __RESTRICT
# define _Restrict
# define __restrict__
#endif])
Ron's avatar
Ron committed
85
86

case $ac_cv_c_restrict in
87
88
89
   restrict) ;;
   no) AC_DEFINE([restrict], []) ;;
   *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
Ron's avatar
Ron committed
90
esac
91
92

AC_MSG_CHECKING(for C99 variable-size arrays)
Ron's avatar
Ron committed
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
                   [[static int x; char a[++x]; a[sizeof a - 1] = 0; int N; return a[0];]])],
    [ has_var_arrays=yes
      use_alloca="no (using var arrays)"
      AC_DEFINE([VAR_ARRAYS], [1], [Use C99 variable-size arrays])
    ],[
      has_var_arrays=no
    ])
AC_MSG_RESULT([$has_var_arrays])

AS_IF([test "$has_var_arrays" = "no"],
  [
   AC_CHECK_HEADERS([alloca.h])
   AC_MSG_CHECKING(for alloca)
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <alloca.h>]],
                                      [[int foo=10; int *array = alloca(foo);]])],
     [ use_alloca=yes;
       AC_DEFINE([USE_ALLOCA], [], [Make use of alloca])
     ],[
       use_alloca=no
     ])
   AC_MSG_RESULT([$use_alloca])
  ])

LT_LIB_M

AC_ARG_ENABLE([fixed-point],
    [AS_HELP_STRING([--enable-fixed-point],
                    [compile without floating point (for machines without a fast enough FPU)])],,
    [enable_fixed_point=no])

AS_IF([test "$enable_fixed_point" = "yes"],[
  enable_float="no"
  AC_DEFINE([FIXED_POINT], [1], [Compile as fixed-point (for machines without a fast enough FPU)])
  PC_BUILD="fixed-point"
],[
  enable_float="yes";
  PC_BUILD="floating-point"
])

AM_CONDITIONAL([FIXED_POINT], [test "$enable_fixed_point" = "yes"])

AC_ARG_ENABLE([fixed-point-debug],
    [AS_HELP_STRING([--enable-fixed-point-debug], [debug fixed-point implementation])],,
    [enable_fixed_point_debug=no])

AS_IF([test "$enable_fixed_point_debug" = "yes"],[
  AC_DEFINE([FIXED_DEBUG], [1], [Debug fixed-point implementation])
])

143
144
145
146
147
148
149
150
151
152
153
AC_ARG_ENABLE([float_api],
    [AS_HELP_STRING([--disable-float-api],
                    [compile without the floating point API (for machines with no float library)])],,
    [enable_float_api=yes])

AM_CONDITIONAL([DISABLE_FLOAT_API], [test "$enable_float_api" = "no"])

AS_IF([test "$enable_float_api" = "no"],[
  AC_DEFINE([DISABLE_FLOAT_API], [1], [Do not build the float API])
])

Ron's avatar
Ron committed
154
155
156
157
158
159
160
161
162
163
AC_ARG_ENABLE([custom-modes],
    [AS_HELP_STRING([--enable-custom-modes], [enable non-Opus modes, e.g. 44.1 kHz & 2^n frames])],,
    [enable_custom_modes=no])

AS_IF([test "$enable_custom_modes" = "yes"],[
  AC_DEFINE([CUSTOM_MODES], [1], [Custom modes])
  PC_BUILD="$PC_BUILD, custom modes"
])

AM_CONDITIONAL([CUSTOM_MODES], [test "$enable_custom_modes" = "yes"])
164
165
166
167
168
169

has_float_approx=no
#case "$host_cpu" in
#i[[3456]]86 | x86_64 | powerpc64 | powerpc32 | ia64)
#  has_float_approx=yes
#  ;;
170
#esac
171

Ron's avatar
Ron committed
172
173
174
175
176
177
178
179
180
181
182
183
184
AC_ARG_ENABLE([float-approx],
    [AS_HELP_STRING([--enable-float-approx], [enable fast approximations for floating point])],
    [if test "$enable_float_approx" = "yes"; then
       AC_WARN([Floating point approximations are not supported on all platforms.])
     fi
    ],
    [enable_float_approx=$has_float_approx])

AS_IF([test "$enable_float_approx" = "yes"],[
  AC_DEFINE([FLOAT_APPROX], [1], [Float approximations])
])

AC_ARG_ENABLE([asm],
185
186
    [AS_HELP_STRING([--disable-asm], [Disable assembly optimizations])],,
    [enable_asm=yes])
187

188
189
190
191
AC_ARG_ENABLE([rtcd],
    [AS_HELP_STRING([--disable-rtcd], [Disable run-time CPU capabilities detection])],,
    [enable_rtcd=yes])

192
AC_ARG_ENABLE([intrinsics],
193
    [AS_HELP_STRING([--disable-intrinsics], [Disable intrinsics optimizations])],,
194
    [enable_intrinsics=yes])
195

196
rtcd_support=no
197
cpu_arm=no
Ron's avatar
Ron committed
198

199
AS_IF([test x"${enable_asm}" = x"yes"],[
200
    inline_optimization="No inline ASM for your platform, please send patches"
201
    case $host_cpu in
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
      arm*)
        dnl Currently we only have asm for fixed-point
        AS_IF([test "$enable_float" != "yes"],[
            cpu_arm=yes
            AC_DEFINE([OPUS_ARM_ASM], [],  [Make use of ARM asm optimization])
            AS_GCC_INLINE_ASSEMBLY(
                [inline_optimization="ARM"],
                [inline_optimization="disabled"]
            )
            AS_ASM_ARM_EDSP([OPUS_ARM_INLINE_EDSP=1],[OPUS_ARM_INLINE_EDSP=0])
            AS_ASM_ARM_MEDIA([OPUS_ARM_INLINE_MEDIA=1],
                [OPUS_ARM_INLINE_MEDIA=0])
            AS_ASM_ARM_NEON([OPUS_ARM_INLINE_NEON=1],[OPUS_ARM_INLINE_NEON=0])
            AS_IF([test x"$inline_optimization" = x"ARM"],[
                AM_CONDITIONAL([OPUS_ARM_INLINE_ASM],[true])
                AC_DEFINE([OPUS_ARM_INLINE_ASM], 1,
                    [Use generic ARMv4 inline asm optimizations])
                AS_IF([test x"$OPUS_ARM_INLINE_EDSP" = x"1"],[
                    AC_DEFINE([OPUS_ARM_INLINE_EDSP], [1],
                        [Use ARMv5E inline asm optimizations])
                    inline_optimization="$inline_optimization (EDSP)"
                ])
                AS_IF([test x"$OPUS_ARM_INLINE_MEDIA" = x"1"],[
                    AC_DEFINE([OPUS_ARM_INLINE_MEDIA], [1],
                        [Use ARMv6 inline asm optimizations])
                    inline_optimization="$inline_optimization (Media)"
                ])
                AS_IF([test x"$OPUS_ARM_INLINE_NEON" = x"1"],[
                    AC_DEFINE([OPUS_ARM_INLINE_NEON], 1,
                        [Use ARM NEON inline asm optimizations])
                    inline_optimization="$inline_optimization (NEON)"
                ])
            ])
            dnl We need Perl to translate RVCT-syntax asm to gas syntax.
            AC_CHECK_PROG([HAVE_PERL], perl, yes, no)
            AS_IF([test x"$HAVE_PERL" = x"yes"],[
                AM_CONDITIONAL([OPUS_ARM_EXTERNAL_ASM],[true])
                asm_optimization="ARM"
                AS_IF([test x"$OPUS_ARM_INLINE_EDSP" = x"1"], [
                    OPUS_ARM_PRESUME_EDSP=1
                    OPUS_ARM_MAY_HAVE_EDSP=1
                ],
                [
                    OPUS_ARM_PRESUME_EDSP=0
                    OPUS_ARM_MAY_HAVE_EDSP=0
                ])
                AS_IF([test x"$OPUS_ARM_INLINE_MEDIA" = x"1"], [
                    OPUS_ARM_PRESUME_MEDIA=1
                    OPUS_ARM_MAY_HAVE_MEDIA=1
                ],
                [
                    OPUS_ARM_PRESUME_MEDIA=0
                    OPUS_ARM_MAY_HAVE_MEDIA=0
                ])
                AS_IF([test x"$OPUS_ARM_INLINE_NEON" = x"1"], [
                    OPUS_ARM_PRESUME_NEON=1
                    OPUS_ARM_MAY_HAVE_NEON=1
                ],
                [
                    OPUS_ARM_PRESUME_NEON=0
                    OPUS_ARM_MAY_HAVE_NEON=0
                ])
                AS_IF([test x"$enable_rtcd" = x"yes"],[
                    AS_IF([test x"$OPUS_ARM_MAY_HAVE_EDSP" != x"1"],[
                        AC_MSG_NOTICE(
                          [Trying to force-enable armv5e EDSP instructions...])
                        AS_ASM_ARM_EDSP_FORCE([OPUS_ARM_MAY_HAVE_EDSP=1])
                    ])
                    AS_IF([test x"$OPUS_ARM_MAY_HAVE_MEDIA" != x"1"],[
                        AC_MSG_NOTICE(
                          [Trying to force-enable ARMv6 media instructions...])
                        AS_ASM_ARM_MEDIA_FORCE([OPUS_ARM_MAY_HAVE_MEDIA=1])
                    ])
                    AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON" != x"1"],[
                        AC_MSG_NOTICE(
                          [Trying to force-enable NEON instructions...])
                        AS_ASM_ARM_NEON_FORCE([OPUS_ARM_MAY_HAVE_NEON=1])
                    ])
                ])
                rtcd_support=
                AS_IF([test x"$OPUS_ARM_MAY_HAVE_EDSP" = x"1"],[
                    AC_DEFINE(OPUS_ARM_MAY_HAVE_EDSP, 1,
                        [Define if assembler supports EDSP instructions])
                    AS_IF([test x"$OPUS_ARM_PRESUME_EDSP" = x"1"],[
                        AC_DEFINE(OPUS_ARM_PRESUME_EDSP, 1,
                          [Define if binary requires EDSP instruction support])
                        asm_optimization="$asm_optimization (EDSP)"
                    ],
                        [rtcd_support="$rtcd_support (EDSP)"]
                    )
                ])
                AC_SUBST(OPUS_ARM_MAY_HAVE_EDSP)
                AS_IF([test x"$OPUS_ARM_MAY_HAVE_MEDIA" = x"1"],[
                    AC_DEFINE(OPUS_ARM_MAY_HAVE_MEDIA, 1,
                      [Define if assembler supports ARMv6 media instructions])
                    AS_IF([test x"$OPUS_ARM_PRESUME_MEDIA" = x"1"],[
                        AC_DEFINE(OPUS_ARM_PRESUME_MEDIA, 1,
                          [Define if binary requires ARMv6 media instruction support])
                        asm_optimization="$asm_optimization (Media)"
                    ],
                        [rtcd_support="$rtcd_support (Media)"]
                    )
                ])
                AC_SUBST(OPUS_ARM_MAY_HAVE_MEDIA)
                AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON" = x"1"],[
                    AC_DEFINE(OPUS_ARM_MAY_HAVE_NEON, 1,
                      [Define if compiler supports NEON instructions])
                    AS_IF([test x"$OPUS_ARM_PRESUME_NEON" = x"1"], [
                        AC_DEFINE(OPUS_ARM_PRESUME_NEON, 1,
                          [Define if binary requires NEON instruction support])
                        asm_optimization="$asm_optimization (NEON)"
                    ],
                        [rtcd_support="$rtcd_support (NEON)"]
                    )
                ])
                AC_SUBST(OPUS_ARM_MAY_HAVE_NEON)
                dnl Make sure turning on RTCD gets us at least one
                dnl instruction set.
                AS_IF([test x"$rtcd_support" != x""],
                    [rtcd_support=ARM"$rtcd_support"],
                    [rtcd_support="no"]
                )
324
325
326
327
328
329
330
331
                AC_MSG_CHECKING([for apple style tools])
                AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
#ifndef __APPLE__
#error 1
#endif],[])],
                    [AC_MSG_RESULT([yes]); ARM2GNU_PARAMS="--apple"],
                    [AC_MSG_RESULT([no]); ARM2GNU_PARAMS=""])
                AC_SUBST(ARM2GNU_PARAMS)
332
333
334
335
336
337
338
            ],
            [
                AC_MSG_WARN(
                  [*** ARM assembly requires perl -- disabling optimizations])
                asm_optimization="(missing perl dependency for ARM)"
            ])
        ])
339
340
        ;;
    esac
Ron's avatar
Ron committed
341
],[
342
343
   inline_optimization="disabled"
   asm_optimization="disabled"
Ron's avatar
Ron committed
344
345
])

346
AM_CONDITIONAL([OPUS_ARM_INLINE_ASM],
347
    [test x"${inline_optimization%% *}" = x"ARM"])
348
AM_CONDITIONAL([OPUS_ARM_EXTERNAL_ASM],
349
    [test x"${asm_optimization%% *}" = x"ARM"])
350

351
AM_CONDITIONAL([HAVE_SSE], [false])
352
AM_CONDITIONAL([HAVE_SSE2], [false])
353
AM_CONDITIONAL([HAVE_SSE4_1], [false])
Radu Velea's avatar
Radu Velea committed
354
AM_CONDITIONAL([HAVE_AVX], [false])
355

356
m4_define([DEFAULT_X86_SSE_CFLAGS], [-msse])
357
358
m4_define([DEFAULT_X86_SSE2_CFLAGS], [-msse2])
m4_define([DEFAULT_X86_SSE4_1_CFLAGS], [-msse4.1])
Radu Velea's avatar
Radu Velea committed
359
m4_define([DEFAULT_X86_AVX_CFLAGS], [-mavx])
360
361
362
363
364
365
366
367
368
m4_define([DEFAULT_ARM_NEON_INTR_CFLAGS], [-mfpu=neon])
# With GCC on ARM32 softfp architectures (e.g. Android, or older Ubuntu) you need to specify
# -mfloat-abi=softfp for -mfpu=neon to work.  However, on ARM32 hardfp architectures (e.g. newer Ubuntu),
# this option will break things.

# As a heuristic, if host matches arm*eabi* but not arm*hf*, it's probably soft-float.
m4_define([DEFAULT_ARM_NEON_SOFTFP_INTR_CFLAGS], [-mfpu=neon -mfloat-abi=softfp])

AS_CASE([$host],
369
370
371
        [arm*hf*], [AS_VAR_SET([RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS], "DEFAULT_ARM_NEON_INTR_CFLAGS")],
        [arm*eabi*], [AS_VAR_SET([RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS], "DEFAULT_ARM_NEON_SOFTFP_INTR_CFLAGS")],
        [AS_VAR_SET([RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS], "DEFAULT_ARM_NEON_INTR_CFLAGS")])
372

373
AC_ARG_VAR([X86_SSE_CFLAGS], [C compiler flags to compile SSE intrinsics @<:@default=]DEFAULT_X86_SSE_CFLAGS[@:>@])
374
375
AC_ARG_VAR([X86_SSE2_CFLAGS], [C compiler flags to compile SSE2 intrinsics @<:@default=]DEFAULT_X86_SSE2_CFLAGS[@:>@])
AC_ARG_VAR([X86_SSE4_1_CFLAGS], [C compiler flags to compile SSE4.1 intrinsics @<:@default=]DEFAULT_X86_SSE4_1_CFLAGS[@:>@])
Radu Velea's avatar
Radu Velea committed
376
AC_ARG_VAR([X86_AVX_CFLAGS], [C compiler flags to compile AVX intrinsics @<:@default=]DEFAULT_X86_AVX_CFLAGS[@:>@])
377
378
AC_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[@:>@])

379
AS_VAR_SET_IF([X86_SSE_CFLAGS], [], [AS_VAR_SET([X86_SSE_CFLAGS], "DEFAULT_X86_SSE_CFLAGS")])
380
381
AS_VAR_SET_IF([X86_SSE2_CFLAGS], [], [AS_VAR_SET([X86_SSE2_CFLAGS], "DEFAULT_X86_SSE2_CFLAGS")])
AS_VAR_SET_IF([X86_SSE4_1_CFLAGS], [], [AS_VAR_SET([X86_SSE4_1_CFLAGS], "DEFAULT_X86_SSE4_1_CFLAGS")])
Radu Velea's avatar
Radu Velea committed
382
AS_VAR_SET_IF([X86_AVX_CFLAGS], [], [AS_VAR_SET([X86_AVX_CFLAGS], "DEFAULT_X86_AVX_CFLAGS")])
383
AS_VAR_SET_IF([ARM_NEON_INTR_CFLAGS], [], [AS_VAR_SET([ARM_NEON_INTR_CFLAGS], ["$RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS"])])
384

385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
AC_DEFUN([OPUS_PATH_NE10],
   [
      AC_ARG_WITH(NE10,
                  AC_HELP_STRING([--with-NE10=PFX],[Prefix where libNE10 is installed (optional)]),
                  NE10_prefix="$withval", NE10_prefix="")
      AC_ARG_WITH(NE10-libraries,
                  AC_HELP_STRING([--with-NE10-libraries=DIR],
                        [Directory where libNE10 library is installed (optional)]),
                  NE10_libraries="$withval", NE10_libraries="")
      AC_ARG_WITH(NE10-includes,
                  AC_HELP_STRING([--with-NE10-includes=DIR],
                                 [Directory where libNE10 header files are installed (optional)]),
                  NE10_includes="$withval", NE10_includes="")

      if test "x$NE10_libraries" != "x" ; then
         NE10_LIBS="-L$NE10_libraries"
      elif test "x$NE10_prefix" = "xno" || test "x$NE10_prefix" = "xyes" ; then
         NE10_LIBS=""
      elif test "x$NE10_prefix" != "x" ; then
         NE10_LIBS="-L$NE10_prefix/lib"
      elif test "x$prefix" != "xNONE" ; then
         NE10_LIBS="-L$prefix/lib"
      fi

      if test "x$NE10_prefix" != "xno" ; then
         NE10_LIBS="$NE10_LIBS -lNE10"
      fi

      if test "x$NE10_includes" != "x" ; then
         NE10_CFLAGS="-I$NE10_includes"
      elif test "x$NE10_prefix" = "xno" || test "x$NE10_prefix" = "xyes" ; then
         NE10_CFLAGS=""
417
      elif test "x$NE10_prefix" != "x" ; then
418
419
420
421
422
423
         NE10_CFLAGS="-I$NE10_prefix/include"
      elif test "x$prefix" != "xNONE"; then
         NE10_CFLAGS="-I$prefix/include"
      fi

      AC_MSG_CHECKING(for NE10)
Jean-Marc Valin's avatar
Jean-Marc Valin committed
424
425
      save_CFLAGS="$CFLAGS"; CFLAGS="$CFLAGS $NE10_CFLAGS"
      save_LIBS="$LIBS"; LIBS="$LIBS $NE10_LIBS $LIBM"
426
427
428
      AC_LINK_IFELSE(
         [
            AC_LANG_PROGRAM(
429
               [[#include <NE10_dsp.h>
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
               ]],
               [[
                  ne10_fft_cfg_float32_t cfg;
                  cfg = ne10_fft_alloc_c2c_float32_neon(480);
               ]]
            )
         ],[
            HAVE_ARM_NE10=1
            AC_MSG_RESULT([yes])
         ],[
            HAVE_ARM_NE10=0
            AC_MSG_RESULT([no])
            NE10_CFLAGS=""
            NE10_LIBS=""
         ]
      )
      CFLAGS="$save_CFLAGS"; LIBS="$save_LIBS"
      #Now we know if libNE10 is installed or not
      AS_IF([test x"$HAVE_ARM_NE10" = x"1"],
         [
            AC_DEFINE([HAVE_ARM_NE10], 1, [NE10 library is installed on host. Make sure it is on target!])
            AC_SUBST(HAVE_ARM_NE10)
            AC_SUBST(NE10_CFLAGS)
            AC_SUBST(NE10_LIBS)
454
         ]
455
456
457
458
      )
   ]
)

459
AS_IF([test x"$enable_intrinsics" = x"yes"],[
460
461
   intrinsics_support=""
   AS_CASE([$host_cpu],
462
   [arm*|aarch64*],
463
   [
464
      cpu_arm=yes
465
466
467
468
469
470
471
472
473
474
      OPUS_CHECK_INTRINSICS(
         [ARM Neon],
         [$ARM_NEON_INTR_CFLAGS],
         [OPUS_ARM_MAY_HAVE_NEON_INTR],
         [OPUS_ARM_PRESUME_NEON_INTR],
         [[#include <arm_neon.h>
         ]],
         [[
            static float32x4_t A0, A1, SUMM;
            SUMM = vmlaq_f32(SUMM, A0, A1);
475
            return (int)vgetq_lane_f32(SUMM, 0);
476
477
478
479
480
481
482
         ]]
      )
      AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON_INTR" = x"1" && test x"$OPUS_ARM_PRESUME_NEON_INTR" != x"1"],
          [
             OPUS_ARM_NEON_INTR_CFLAGS="$ARM_NEON_INTR_CFLAGS"
             AC_SUBST([OPUS_ARM_NEON_INTR_CFLAGS])
          ]
483
484
      )

485
      AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON_INTR" = x"1"],
486
      [
487
         AC_DEFINE([OPUS_ARM_MAY_HAVE_NEON_INTR], 1, [Compiler supports ARMv7/Aarch64 Neon Intrinsics])
488
         intrinsics_support="$intrinsics_support (NEON)"
489

490
491
492
493
         AS_IF([test x"$enable_rtcd" != x"no" && test x"$OPUS_ARM_PRESUME_NEON_INTR" != x"1"],
            [AS_IF([test x"$rtcd_support" = x"no"],
               [rtcd_support="ARM (NEON Intrinsics)"],
               [rtcd_support="$rtcd_support (NEON Intrinsics)"])])
494

495
496
         AS_IF([test x"$OPUS_ARM_PRESUME_NEON_INTR" = x"1"],
            [AC_DEFINE([OPUS_ARM_PRESUME_NEON_INTR], 1, [Define if binary requires NEON intrinsics support])])
497

498
499
         OPUS_PATH_NE10()
         AS_IF([test x"$NE10_LIBS" != x""],
500
         [
501
502
503
              intrinsics_support="$intrinsics_support (NE10)"
              AS_IF([test x"enable_rtcd" != x"" \
               && test x"$OPUS_ARM_PRESUME_NEON_INTR" != x"1"],
504
                 [rtcd_support="$rtcd_support (NE10)"])
505
         ])
506

507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
         OPUS_CHECK_INTRINSICS(
            [Aarch64 Neon],
            [$ARM_NEON_INTR_CFLAGS],
            [OPUS_ARM_MAY_HAVE_AARCH64_NEON_INTR],
            [OPUS_ARM_PRESUME_AARCH64_NEON_INTR],
            [[#include <arm_neon.h>
            ]],
            [[
               static int32_t IN;
               static int16_t OUT;
               OUT = vqmovns_s32(IN);
            ]]
         )

         AS_IF([test x"$OPUS_ARM_PRESUME_AARCH64_NEON_INTR" = x"1"],
         [
            AC_DEFINE([OPUS_ARM_PRESUME_AARCH64_NEON_INTR], 1, [Define if binary requires Aarch64 Neon Intrinsics])
            intrinsics_support="$intrinsics_support (NEON [Aarch64])"
         ])

527
528
         AS_IF([test x"$intrinsics_support" = x""],
            [intrinsics_support=no],
529
            [intrinsics_support="ARM$intrinsics_support"])
530
531
532
533
      ],
      [
         AC_MSG_WARN([Compiler does not support ARM intrinsics])
         intrinsics_support=no
534
      ])
535
536
537
   ],
   [i?86|x86_64],
   [
538
539
540
541
542
543
      OPUS_CHECK_INTRINSICS(
         [SSE],
         [$X86_SSE_CFLAGS],
         [OPUS_X86_MAY_HAVE_SSE],
         [OPUS_X86_PRESUME_SSE],
         [[#include <xmmintrin.h>
544
           #include <time.h>
545
546
         ]],
         [[
547
548
549
550
             __m128 mtest;
             mtest = _mm_set1_ps((float)time(NULL));
             mtest = _mm_mul_ps(mtest, mtest);
             return _mm_cvtss_si32(mtest);
551
552
553
554
555
556
557
558
         ]]
      )
      AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE" = x"1" && test x"$OPUS_X86_PRESUME_SSE" != x"1"],
          [
             OPUS_X86_SSE_CFLAGS="$X86_SSE_CFLAGS"
             AC_SUBST([OPUS_X86_SSE_CFLAGS])
          ]
      )
559
560
561
562
563
564
      OPUS_CHECK_INTRINSICS(
         [SSE2],
         [$X86_SSE2_CFLAGS],
         [OPUS_X86_MAY_HAVE_SSE2],
         [OPUS_X86_PRESUME_SSE2],
         [[#include <emmintrin.h>
565
           #include <time.h>
566
567
         ]],
         [[
568
569
570
571
            __m128i mtest;
            mtest = _mm_set1_epi32((int)time(NULL));
            mtest = _mm_mul_epu32(mtest, mtest);
            return _mm_cvtsi128_si32(mtest);
572
573
574
575
576
577
578
579
580
581
582
583
584
585
         ]]
      )
      AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1" && test x"$OPUS_X86_PRESUME_SSE2" != x"1"],
          [
             OPUS_X86_SSE2_CFLAGS="$X86_SSE2_CFLAGS"
             AC_SUBST([OPUS_X86_SSE2_CFLAGS])
          ]
      )
      OPUS_CHECK_INTRINSICS(
         [SSE4.1],
         [$X86_SSE4_1_CFLAGS],
         [OPUS_X86_MAY_HAVE_SSE4_1],
         [OPUS_X86_PRESUME_SSE4_1],
         [[#include <smmintrin.h>
586
           #include <time.h>
587
588
         ]],
         [[
589
590
591
592
            __m128i mtest;
            mtest = _mm_set1_epi32((int)time(NULL));
            mtest = _mm_mul_epi32(mtest, mtest);
            return _mm_cvtsi128_si32(mtest);
593
594
595
596
597
598
599
600
         ]]
      )
      AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1" && test x"$OPUS_X86_PRESUME_SSE4_1" != x"1"],
          [
             OPUS_X86_SSE4_1_CFLAGS="$X86_SSE4_1_CFLAGS"
             AC_SUBST([OPUS_X86_SSE4_1_CFLAGS])
          ]
      )
Radu Velea's avatar
Radu Velea committed
601
602
603
604
605
606
      OPUS_CHECK_INTRINSICS(
         [AVX],
         [$X86_AVX_CFLAGS],
         [OPUS_X86_MAY_HAVE_AVX],
         [OPUS_X86_PRESUME_AVX],
         [[#include <immintrin.h>
607
           #include <time.h>
Radu Velea's avatar
Radu Velea committed
608
609
         ]],
         [[
610
611
612
613
             __m256 mtest;
             mtest = _mm256_set1_ps((float)time(NULL));
             mtest = _mm256_addsub_ps(mtest, mtest);
             return _mm_cvtss_si32(_mm256_extractf128_ps(mtest, 0));
Radu Velea's avatar
Radu Velea committed
614
615
616
617
618
619
620
621
         ]]
      )
      AS_IF([test x"$OPUS_X86_MAY_HAVE_AVX" = x"1" && test x"$OPUS_X86_PRESUME_AVX" != x"1"],
          [
             OPUS_X86_AVX_CFLAGS="$X86_AVX_CFLAGS"
             AC_SUBST([OPUS_X86_AVX_CFLAGS])
          ]
      )
622
         AS_IF([test x"$rtcd_support" = x"no"], [rtcd_support=""])
623
624
625
626
627
628
629
630
631
632
633
634
635
         AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE" = x"1"],
         [
            AC_DEFINE([OPUS_X86_MAY_HAVE_SSE], 1, [Compiler supports X86 SSE Intrinsics])
            intrinsics_support="$intrinsics_support SSE"

            AS_IF([test x"$OPUS_X86_PRESUME_SSE" = x"1"],
               [AC_DEFINE([OPUS_X86_PRESUME_SSE], 1, [Define if binary requires SSE intrinsics support])],
               [rtcd_support="$rtcd_support SSE"])
         ],
         [
            AC_MSG_WARN([Compiler does not support SSE intrinsics])
         ])

636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
         AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1"],
         [
            AC_DEFINE([OPUS_X86_MAY_HAVE_SSE2], 1, [Compiler supports X86 SSE2 Intrinsics])
            intrinsics_support="$intrinsics_support SSE2"

            AS_IF([test x"$OPUS_X86_PRESUME_SSE2" = x"1"],
               [AC_DEFINE([OPUS_X86_PRESUME_SSE2], 1, [Define if binary requires SSE2 intrinsics support])],
               [rtcd_support="$rtcd_support SSE2"])
         ],
         [
            AC_MSG_WARN([Compiler does not support SSE2 intrinsics])
         ])

         AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1"],
         [
            AC_DEFINE([OPUS_X86_MAY_HAVE_SSE4_1], 1, [Compiler supports X86 SSE4.1 Intrinsics])
            intrinsics_support="$intrinsics_support SSE4.1"

            AS_IF([test x"$OPUS_X86_PRESUME_SSE4_1" = x"1"],
               [AC_DEFINE([OPUS_X86_PRESUME_SSE4_1], 1, [Define if binary requires SSE4.1 intrinsics support])],
               [rtcd_support="$rtcd_support SSE4.1"])
         ],
         [
            AC_MSG_WARN([Compiler does not support SSE4.1 intrinsics])
         ])
Radu Velea's avatar
Radu Velea committed
661
662
663
664
665
666
667
668
669
670
671
672
673
         AS_IF([test x"$OPUS_X86_MAY_HAVE_AVX" = x"1"],
         [
            AC_DEFINE([OPUS_X86_MAY_HAVE_AVX], 1, [Compiler supports X86 AVX Intrinsics])
            intrinsics_support="$intrinsics_support AVX"

            AS_IF([test x"$OPUS_X86_PRESUME_AVX" = x"1"],
               [AC_DEFINE([OPUS_X86_PRESUME_AVX], 1, [Define if binary requires AVX intrinsics support])],
               [rtcd_support="$rtcd_support AVX"])
         ],
         [
            AC_MSG_WARN([Compiler does not support AVX intrinsics])
         ])

674
675
676
677
678
679
680
681
682
683
         AS_IF([test x"$intrinsics_support" = x""],
            [intrinsics_support=no],
            [intrinsics_support="x86$intrinsics_support"]
         )
         AS_IF([test x"$rtcd_support" = x""],
            [rtcd_support=no],
            [rtcd_support="x86$rtcd_support"],
        )

    AS_IF([test x"$enable_rtcd" = x"yes" && test x"$rtcd_support" != x""],[
684
            get_cpuid_by_asm="no"
685
            AC_MSG_CHECKING([How to get X86 CPU Info])
Ron's avatar
Ron committed
686
            AC_LINK_IFELSE([AC_LANG_PROGRAM([[
687
                 #include <stdio.h>
Ron's avatar
Ron committed
688
            ]],[[
689
690
691
692
693
694
                 unsigned int CPUInfo0;
                 unsigned int CPUInfo1;
                 unsigned int CPUInfo2;
                 unsigned int CPUInfo3;
                 unsigned int InfoType;
                 __asm__ __volatile__ (
695
                 "cpuid":
696
697
698
699
700
701
                 "=a" (CPUInfo0),
                 "=b" (CPUInfo1),
                 "=c" (CPUInfo2),
                 "=d" (CPUInfo3) :
                 "a" (InfoType), "c" (0)
                );
Ron's avatar
Ron committed
702
            ]])],
703
            [get_cpuid_by_asm="yes"
704
             AC_MSG_RESULT([Inline Assembly])
705
                 AC_DEFINE([CPU_INFO_BY_ASM], [1], [Get CPU Info by asm method])],
Ron's avatar
Ron committed
706
             [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
707
                 #include <cpuid.h>
Ron's avatar
Ron committed
708
            ]],[[
709
710
711
712
713
714
                 unsigned int CPUInfo0;
                 unsigned int CPUInfo1;
                 unsigned int CPUInfo2;
                 unsigned int CPUInfo3;
                 unsigned int InfoType;
                 __get_cpuid(InfoType, &CPUInfo0, &CPUInfo1, &CPUInfo2, &CPUInfo3);
Ron's avatar
Ron committed
715
            ]])],
716
            [AC_MSG_RESULT([C method])
717
                 AC_DEFINE([CPU_INFO_BY_C], [1], [Get CPU Info by c method])],
Mark Harris's avatar
Mark Harris committed
718
            [AC_MSG_ERROR([no supported Get CPU Info method, please disable run-time CPU capabilities detection or intrinsics])])])])
719
720
   ],
   [
721
      AC_MSG_WARN([No intrinsics support for your architecture])
722
723
724
725
726
      intrinsics_support="no"
   ])
],
[
   intrinsics_support="no"
727
728
])

729
AM_CONDITIONAL([CPU_ARM], [test "$cpu_arm" = "yes"])
730
AM_CONDITIONAL([HAVE_ARM_NEON_INTR],
731
    [test x"$OPUS_ARM_MAY_HAVE_NEON_INTR" = x"1"])
732
733
AM_CONDITIONAL([HAVE_ARM_NE10],
    [test x"$HAVE_ARM_NE10" = x"1"])
734
735
AM_CONDITIONAL([HAVE_SSE],
    [test x"$OPUS_X86_MAY_HAVE_SSE" = x"1"])
736
737
738
739
AM_CONDITIONAL([HAVE_SSE2],
    [test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1"])
AM_CONDITIONAL([HAVE_SSE4_1],
    [test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1"])
Radu Velea's avatar
Radu Velea committed
740
741
AM_CONDITIONAL([HAVE_AVX],
    [test x"$OPUS_X86_MAY_HAVE_AVX" = x"1"])
742

743
744
745
746
747
748
AS_IF([test x"$enable_rtcd" = x"yes"],[
    AS_IF([test x"$rtcd_support" != x"no"],[
        AC_DEFINE([OPUS_HAVE_RTCD], [1],
            [Use run-time CPU capabilities detection])
        OPUS_HAVE_RTCD=1
        AC_SUBST(OPUS_HAVE_RTCD)
Ron's avatar
Ron committed
749
750
    ])
],[
751
    rtcd_support="disabled"
Ron's avatar
Ron committed
752
753
754
755
756
757
758
759
760
761
])

AC_ARG_ENABLE([assertions],
    [AS_HELP_STRING([--enable-assertions],[enable additional software error checking])],,
    [enable_assertions=no])

AS_IF([test "$enable_assertions" = "yes"], [
  AC_DEFINE([ENABLE_ASSERTIONS], [1], [Assertions])
])

Jean-Marc Valin's avatar
Jean-Marc Valin committed
762
AC_ARG_ENABLE([hardening],
Jean-Marc Valin's avatar
Jean-Marc Valin committed
763
    [AS_HELP_STRING([--disable-hardening],[disable run-time checks that are cheap and safe for use in production])],,
Jean-Marc Valin's avatar
Jean-Marc Valin committed
764
    [enable_hardening=yes])
Jean-Marc Valin's avatar
Jean-Marc Valin committed
765
766
767
768
769

AS_IF([test "$enable_hardening" = "yes"], [
  AC_DEFINE([ENABLE_HARDENING], [1], [Hardening])
])

Ron's avatar
Ron committed
770
AC_ARG_ENABLE([fuzzing],
Jean-Marc Valin's avatar
Jean-Marc Valin committed
771
	      [AS_HELP_STRING([--enable-fuzzing],[causes the encoder to make random decisions (do not use in production)])],,
Ron's avatar
Ron committed
772
773
774
775
776
777
    [enable_fuzzing=no])

AS_IF([test "$enable_fuzzing" = "yes"], [
  AC_DEFINE([FUZZING], [1], [Fuzzing])
])

Felicia Lim's avatar
Felicia Lim committed
778
779
780
781
782
783
784
785
786
AC_ARG_ENABLE([check-asm],
    [AS_HELP_STRING([--enable-check-asm],
                    [enable bit-exactness checks between optimized and c implementations])],,
    [enable_check_asm=no])

AS_IF([test "$enable_check_asm" = "yes"], [
  AC_DEFINE([OPUS_CHECK_ASM], [1], [Run bit-exactness checks between optimized and c implementations])
])

787
AC_ARG_ENABLE([doc],
Ron's avatar
Ron committed
788
789
790
791
792
    [AS_HELP_STRING([--disable-doc], [Do not build API documentation])],,
    [enable_doc=yes])

AS_IF([test "$enable_doc" = "yes"], [
  AC_CHECK_PROG(HAVE_DOXYGEN, [doxygen], [yes], [no])
793
  AC_CHECK_PROG(HAVE_DOT, [dot], [yes], [no])
Ron's avatar
Ron committed
794
795
796
797
798
799
],[
  HAVE_DOXYGEN=no
])

AM_CONDITIONAL([HAVE_DOXYGEN], [test "$HAVE_DOXYGEN" = "yes"])

800
AC_ARG_ENABLE([extra-programs],
Ron's avatar
Ron committed
801
802
803
804
805
    [AS_HELP_STRING([--disable-extra-programs], [Do not build extra programs (demo and tests)])],,
    [enable_extra_programs=yes])

AM_CONDITIONAL([EXTRA_PROGRAMS], [test "$enable_extra_programs" = "yes"])

806

807
808
809
AC_ARG_ENABLE([rfc8251],
	      AS_HELP_STRING([--disable-rfc8251], [Disable bitstream fixes from RFC 8251]),,
  [enable_rfc8251=yes])
810

811
812
AS_IF([test "$enable_rfc8251" = "no"], [
       AC_DEFINE([DISABLE_UPDATE_DRAFT], [1], [Disable bitstream fixes from RFC 8251])
813
814
815
])


816
817
saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fvisibility=hidden"
818
AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
Ron's avatar
Ron committed
819
820
821
822
823
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
    [ AC_MSG_RESULT([yes]) ],
    [ AC_MSG_RESULT([no])
      CFLAGS="$saved_CFLAGS"
    ])
824

825
826
827
828
829
830
831
on_x86=no
case "$host_cpu" in
i[[3456]]86 | x86_64)
  on_x86=yes
  ;;
esac

832
833
834
835
836
837
838
on_windows=no
case $host in
*cygwin*|*mingw*)
  on_windows=yes
  ;;
esac

839
840
841
842
843
844
dnl Enable stack-protector-all only on x86 where it's well supported.
dnl on some platforms it causes crashes. Hopefully the OS's default's
dnl include this on platforms that work but have been missed here.
AC_ARG_ENABLE([stack-protector],
    [AS_HELP_STRING([--disable-stack-protector],[Disable compiler stack hardening])],,
    [
845
      AS_IF([test "$ac_cv_c_compiler_gnu" = "yes" && test "$on_x86" = "yes" && test "$on_windows" = "no"],
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
            [enable_stack_protector=yes],[enable_stack_protector=no])
    ])

AS_IF([test "$enable_stack_protector" = "yes"],
 [
  saved_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -fstack-protector-strong"
  AC_MSG_CHECKING([if ${CC} supports -fstack-protector-strong])
  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[[char foo;]])],
    [ AC_MSG_RESULT([yes]) ],
    [
      AC_MSG_RESULT([no])
      enable_stack_protector=no
      CFLAGS="$saved_CFLAGS"
    ])
 ])

863
864
865
866
AS_IF([test x$ac_cv_c_compiler_gnu = xyes],
    [AX_ADD_FORTIFY_SOURCE]
)

867
868
CFLAGS="$CFLAGS -W"

869
warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes"
870
saved_CFLAGS="$CFLAGS"
871
872
CFLAGS="$CFLAGS $warn_CFLAGS"
AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
Ron's avatar
Ron committed
873
874
875
876
877
878
879
880
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
    [ AC_MSG_RESULT([yes]) ],
    [ AC_MSG_RESULT([no])
      CFLAGS="$saved_CFLAGS"
    ])

saved_LIBS="$LIBS"
LIBS="$LIBS $LIBM"
881
882
AC_CHECK_FUNCS([lrintf])
AC_CHECK_FUNCS([lrint])
Ron's avatar
Ron committed
883
LIBS="$saved_LIBS"
884

Ron's avatar
Ron committed
885
AC_CHECK_FUNCS([__malloc_hook])
886

887
888
AC_SUBST([PC_BUILD])

889
890
891
892
893
894
895
896
AC_CONFIG_FILES([
    Makefile
    opus.pc
    opus-uninstalled.pc
    celt/arm/armopts.s
    doc/Makefile
    doc/Doxyfile
])
Ron's avatar
Ron committed
897
AC_CONFIG_HEADERS([config.h])
898
899

AC_OUTPUT
900

901
AC_MSG_NOTICE([
902
------------------------------------------------------------------------
Ron's avatar
Ron committed
903
904
  $PACKAGE_NAME $PACKAGE_VERSION:  Automatic configuration OK.

905
906
907
908
    Compiler support:

      C99 var arrays: ................ ${has_var_arrays}
      C99 lrintf: .................... ${ac_cv_func_lrintf}
Ron's avatar
Ron committed
909
      Use alloca: .................... ${use_alloca}
910

911
    General configuration:
912

Ron's avatar
Ron committed
913
914
915
      Floating point support: ........ ${enable_float}
      Fast float approximations: ..... ${enable_float_approx}
      Fixed point debugging: ......... ${enable_fixed_point_debug}
916
917
      Inline Assembly Optimizations: . ${inline_optimization}
      External Assembly Optimizations: ${asm_optimization}
Ralph Giles's avatar
Ralph Giles committed
918
      Intrinsics Optimizations: ...... ${intrinsics_support}
919
      Run-time CPU detection: ........ ${rtcd_support}
Ron's avatar
Ron committed
920
921
      Custom modes: .................. ${enable_custom_modes}
      Assertion checking: ............ ${enable_assertions}
Jean-Marc Valin's avatar
Jean-Marc Valin committed
922
      Hardening: ..................... ${enable_hardening}
Ron's avatar
Ron committed
923
      Fuzzing: ....................... ${enable_fuzzing}
Felicia Lim's avatar
Felicia Lim committed
924
      Check ASM: ..................... ${enable_check_asm}
925

Ron's avatar
Ron committed
926
927
      API documentation: ............. ${enable_doc}
      Extra programs: ................ ${enable_extra_programs}
928
------------------------------------------------------------------------
929
930
931

 Type "make; make install" to compile and install
 Type "make check" to run the test suite
932
])
933