1*a58d3d2aSXin Lidnl Process this file with autoconf to produce a configure script. -*-m4-*- 2*a58d3d2aSXin Li 3*a58d3d2aSXin Lidnl The package_version file will be automatically synced to the git revision 4*a58d3d2aSXin Lidnl by the update_version script when configured in the repository, but will 5*a58d3d2aSXin Lidnl remain constant in tarball releases unless it is manually edited. 6*a58d3d2aSXin Lim4_define([CURRENT_VERSION], 7*a58d3d2aSXin Li m4_esyscmd([ ./update_version 2>/dev/null || true 8*a58d3d2aSXin Li if test -e package_version; then 9*a58d3d2aSXin Li . ./package_version 10*a58d3d2aSXin Li printf "$PACKAGE_VERSION" 11*a58d3d2aSXin Li else 12*a58d3d2aSXin Li printf "unknown" 13*a58d3d2aSXin Li fi ])) 14*a58d3d2aSXin Li 15*a58d3d2aSXin LiAC_INIT([opus],[CURRENT_VERSION],[[email protected]]) 16*a58d3d2aSXin Li 17*a58d3d2aSXin LiAC_CONFIG_SRCDIR(src/opus_encoder.c) 18*a58d3d2aSXin LiAC_CONFIG_MACRO_DIR([m4]) 19*a58d3d2aSXin Li 20*a58d3d2aSXin Lidnl enable silent rules on automake 1.11 and later 21*a58d3d2aSXin Lim4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) 22*a58d3d2aSXin Li 23*a58d3d2aSXin Li# For libtool. 24*a58d3d2aSXin Lidnl Please update these for releases. 25*a58d3d2aSXin LiOPUS_LT_CURRENT=10 26*a58d3d2aSXin LiOPUS_LT_REVISION=0 27*a58d3d2aSXin LiOPUS_LT_AGE=10 28*a58d3d2aSXin Li 29*a58d3d2aSXin LiAC_SUBST(OPUS_LT_CURRENT) 30*a58d3d2aSXin LiAC_SUBST(OPUS_LT_REVISION) 31*a58d3d2aSXin LiAC_SUBST(OPUS_LT_AGE) 32*a58d3d2aSXin Li 33*a58d3d2aSXin LiAM_INIT_AUTOMAKE([no-define]) 34*a58d3d2aSXin LiAM_MAINTAINER_MODE([enable]) 35*a58d3d2aSXin Li 36*a58d3d2aSXin LiAC_CANONICAL_HOST 37*a58d3d2aSXin LiAC_MINGW32 38*a58d3d2aSXin LiAM_PROG_LIBTOOL 39*a58d3d2aSXin LiAM_PROG_CC_C_O 40*a58d3d2aSXin Li 41*a58d3d2aSXin LiAC_PROG_CC_C99 42*a58d3d2aSXin LiAC_C_CONST 43*a58d3d2aSXin LiAC_C_INLINE 44*a58d3d2aSXin Li 45*a58d3d2aSXin LiAM_PROG_AS 46*a58d3d2aSXin Li 47*a58d3d2aSXin LiAC_DEFINE([OPUS_BUILD], [], [This is a build of OPUS]) 48*a58d3d2aSXin Li 49*a58d3d2aSXin Li#Use a hacked up version of autoconf's AC_C_RESTRICT because it's not 50*a58d3d2aSXin Li#strong enough a test to detect old buggy versions of GCC (e.g. 2.95.3) 51*a58d3d2aSXin Li#Note: Both this and the test for variable-size arrays below are also 52*a58d3d2aSXin Li# done by AC_PROG_CC_C99, but not thoroughly enough apparently. 53*a58d3d2aSXin LiAC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict, 54*a58d3d2aSXin Li [ac_cv_c_restrict=no 55*a58d3d2aSXin Li # The order here caters to the fact that C++ does not require restrict. 56*a58d3d2aSXin Li for ac_kw in __restrict __restrict__ _Restrict restrict; do 57*a58d3d2aSXin Li AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 58*a58d3d2aSXin Li [[typedef int * int_ptr; 59*a58d3d2aSXin Li int foo (int_ptr $ac_kw ip, int * $ac_kw baz[]) { 60*a58d3d2aSXin Li return ip[0]; 61*a58d3d2aSXin Li }]], 62*a58d3d2aSXin Li [[int s[1]; 63*a58d3d2aSXin Li int * $ac_kw t = s; 64*a58d3d2aSXin Li t[0] = 0; 65*a58d3d2aSXin Li return foo(t, (void *)0)]])], 66*a58d3d2aSXin Li [ac_cv_c_restrict=$ac_kw]) 67*a58d3d2aSXin Li test "$ac_cv_c_restrict" != no && break 68*a58d3d2aSXin Li done 69*a58d3d2aSXin Li ]) 70*a58d3d2aSXin Li 71*a58d3d2aSXin LiAH_VERBATIM([restrict], 72*a58d3d2aSXin Li[/* Define to the equivalent of the C99 'restrict' keyword, or to 73*a58d3d2aSXin Li nothing if this is not supported. Do not define if restrict is 74*a58d3d2aSXin Li supported directly. */ 75*a58d3d2aSXin Li#undef restrict 76*a58d3d2aSXin Li/* Work around a bug in Sun C++: it does not support _Restrict or 77*a58d3d2aSXin Li __restrict__, even though the corresponding Sun C compiler ends up with 78*a58d3d2aSXin Li "#define restrict _Restrict" or "#define restrict __restrict__" in the 79*a58d3d2aSXin Li previous line. Perhaps some future version of Sun C++ will work with 80*a58d3d2aSXin Li restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ 81*a58d3d2aSXin Li#if defined __SUNPRO_CC && !defined __RESTRICT 82*a58d3d2aSXin Li# define _Restrict 83*a58d3d2aSXin Li# define __restrict__ 84*a58d3d2aSXin Li#endif]) 85*a58d3d2aSXin Li 86*a58d3d2aSXin Licase $ac_cv_c_restrict in 87*a58d3d2aSXin Li restrict) ;; 88*a58d3d2aSXin Li no) AC_DEFINE([restrict], []) ;; 89*a58d3d2aSXin Li *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; 90*a58d3d2aSXin Liesac 91*a58d3d2aSXin Li 92*a58d3d2aSXin LiAC_MSG_CHECKING(for C99 variable-size arrays) 93*a58d3d2aSXin LiAC_COMPILE_IFELSE([AC_LANG_PROGRAM([], 94*a58d3d2aSXin Li [[static int x; char a[++x]; a[sizeof a - 1] = 0; int N; return a[0];]])], 95*a58d3d2aSXin Li [ has_var_arrays=yes 96*a58d3d2aSXin Li use_alloca="no (using var arrays)" 97*a58d3d2aSXin Li AC_DEFINE([VAR_ARRAYS], [1], [Use C99 variable-size arrays]) 98*a58d3d2aSXin Li ],[ 99*a58d3d2aSXin Li has_var_arrays=no 100*a58d3d2aSXin Li ]) 101*a58d3d2aSXin LiAC_MSG_RESULT([$has_var_arrays]) 102*a58d3d2aSXin Li 103*a58d3d2aSXin LiAS_IF([test "$has_var_arrays" = "no"], 104*a58d3d2aSXin Li [ 105*a58d3d2aSXin Li AC_CHECK_HEADERS([alloca.h]) 106*a58d3d2aSXin Li AC_MSG_CHECKING(for alloca) 107*a58d3d2aSXin Li AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <alloca.h>]], 108*a58d3d2aSXin Li [[int foo=10; int *array = alloca(foo);]])], 109*a58d3d2aSXin Li [ use_alloca=yes; 110*a58d3d2aSXin Li AC_DEFINE([USE_ALLOCA], [], [Make use of alloca]) 111*a58d3d2aSXin Li ],[ 112*a58d3d2aSXin Li use_alloca=no 113*a58d3d2aSXin Li ]) 114*a58d3d2aSXin Li AC_MSG_RESULT([$use_alloca]) 115*a58d3d2aSXin Li ]) 116*a58d3d2aSXin Li 117*a58d3d2aSXin LiLT_LIB_M 118*a58d3d2aSXin Li 119*a58d3d2aSXin LiAC_ARG_ENABLE([fixed-point], 120*a58d3d2aSXin Li [AS_HELP_STRING([--enable-fixed-point], 121*a58d3d2aSXin Li [compile without floating point (for machines without a fast enough FPU)])],, 122*a58d3d2aSXin Li [enable_fixed_point=no]) 123*a58d3d2aSXin Li 124*a58d3d2aSXin LiAS_IF([test "$enable_fixed_point" = "yes"],[ 125*a58d3d2aSXin Li enable_float="no" 126*a58d3d2aSXin Li AC_DEFINE([FIXED_POINT], [1], [Compile as fixed-point (for machines without a fast enough FPU)]) 127*a58d3d2aSXin Li PC_BUILD="fixed-point" 128*a58d3d2aSXin Li],[ 129*a58d3d2aSXin Li enable_float="yes"; 130*a58d3d2aSXin Li PC_BUILD="floating-point" 131*a58d3d2aSXin Li]) 132*a58d3d2aSXin Li 133*a58d3d2aSXin LiAM_CONDITIONAL([FIXED_POINT], [test "$enable_fixed_point" = "yes"]) 134*a58d3d2aSXin Li 135*a58d3d2aSXin LiAC_ARG_ENABLE([fixed-point-debug], 136*a58d3d2aSXin Li [AS_HELP_STRING([--enable-fixed-point-debug], [debug fixed-point implementation])],, 137*a58d3d2aSXin Li [enable_fixed_point_debug=no]) 138*a58d3d2aSXin Li 139*a58d3d2aSXin LiAS_IF([test "$enable_fixed_point_debug" = "yes"],[ 140*a58d3d2aSXin Li AC_DEFINE([FIXED_DEBUG], [1], [Debug fixed-point implementation]) 141*a58d3d2aSXin Li]) 142*a58d3d2aSXin Li 143*a58d3d2aSXin LiAC_ARG_ENABLE([float_api], 144*a58d3d2aSXin Li [AS_HELP_STRING([--disable-float-api], 145*a58d3d2aSXin Li [compile without the floating point API (for machines with no float library)])],, 146*a58d3d2aSXin Li [enable_float_api=yes]) 147*a58d3d2aSXin Li 148*a58d3d2aSXin LiAM_CONDITIONAL([DISABLE_FLOAT_API], [test "$enable_float_api" = "no"]) 149*a58d3d2aSXin Li 150*a58d3d2aSXin LiAS_IF([test "$enable_float_api" = "no"],[ 151*a58d3d2aSXin Li AC_DEFINE([DISABLE_FLOAT_API], [1], [Do not build the float API]) 152*a58d3d2aSXin Li]) 153*a58d3d2aSXin Li 154*a58d3d2aSXin LiAC_ARG_ENABLE([custom-modes], 155*a58d3d2aSXin Li [AS_HELP_STRING([--enable-custom-modes], [enable non-Opus modes, e.g. 44.1 kHz & 2^n frames])],, 156*a58d3d2aSXin Li [enable_custom_modes=no]) 157*a58d3d2aSXin Li 158*a58d3d2aSXin LiAS_IF([test "$enable_custom_modes" = "yes"],[ 159*a58d3d2aSXin Li AC_DEFINE([CUSTOM_MODES], [1], [Custom modes]) 160*a58d3d2aSXin Li PC_BUILD="$PC_BUILD, custom modes" 161*a58d3d2aSXin Li]) 162*a58d3d2aSXin Li 163*a58d3d2aSXin LiAM_CONDITIONAL([CUSTOM_MODES], [test "$enable_custom_modes" = "yes"]) 164*a58d3d2aSXin Li 165*a58d3d2aSXin LiAC_ARG_ENABLE([dred], 166*a58d3d2aSXin Li [AS_HELP_STRING([--enable-dred], [Use Deep REDundancy (DRED)])],, 167*a58d3d2aSXin Li [enable_dred=no]) 168*a58d3d2aSXin Li 169*a58d3d2aSXin LiAS_IF([test "$enable_dred" = "yes"],[ 170*a58d3d2aSXin Li AC_DEFINE([ENABLE_DRED], [1], [DRED]) 171*a58d3d2aSXin Li]) 172*a58d3d2aSXin LiAM_CONDITIONAL([ENABLE_DRED], [test "$enable_dred" = "yes"]) 173*a58d3d2aSXin Li 174*a58d3d2aSXin LiAC_ARG_ENABLE([deep-plc], 175*a58d3d2aSXin Li [AS_HELP_STRING([--enable-deep-plc], [Use deep PLC for SILK])],, 176*a58d3d2aSXin Li [enable_deep_plc=no]) 177*a58d3d2aSXin Li 178*a58d3d2aSXin LiAS_IF([test "$enable_deep_plc" = "yes" || test "$enable_dred" = "yes" || test "$enable_osce" = "yes" || test "$enable_osce_training_data" = "yes"],[ 179*a58d3d2aSXin Li AC_DEFINE([ENABLE_DEEP_PLC], [1], [Deep PLC]) 180*a58d3d2aSXin Li]) 181*a58d3d2aSXin LiAM_CONDITIONAL([ENABLE_DEEP_PLC], [test "$enable_deep_plc" = "yes" || test "$enable_dred" = "yes" || test "$enable_osce" = "yes" || test "$enable_osce_training_data" = "yes"]) 182*a58d3d2aSXin Li 183*a58d3d2aSXin LiAC_ARG_ENABLE([lossgen], 184*a58d3d2aSXin Li [AS_HELP_STRING([--enable-lossgen], [Build opus_demo with packet loss simulator])],, 185*a58d3d2aSXin Li [enable_lossgen=no]) 186*a58d3d2aSXin Li 187*a58d3d2aSXin LiAS_IF([test "$enable_lossgen" = "yes"],[ 188*a58d3d2aSXin Li AC_DEFINE([ENABLE_LOSSGEN], [1], [LOSSGEN]) 189*a58d3d2aSXin Li]) 190*a58d3d2aSXin LiAM_CONDITIONAL([ENABLE_LOSSGEN], [test "$enable_lossgen" = "yes"]) 191*a58d3d2aSXin Li 192*a58d3d2aSXin Lihas_float_approx=no 193*a58d3d2aSXin Licase "$host_cpu" in 194*a58d3d2aSXin Lii[[3456]]86 | x86_64 | arm* | aarch64* | powerpc64 | powerpc32 | ia64) 195*a58d3d2aSXin Li has_float_approx=yes 196*a58d3d2aSXin Li ;; 197*a58d3d2aSXin Liesac 198*a58d3d2aSXin Li 199*a58d3d2aSXin LiAC_ARG_ENABLE([float-approx], 200*a58d3d2aSXin Li [AS_HELP_STRING([--enable-float-approx], [enable fast approximations for floating point])], 201*a58d3d2aSXin Li [if test "$enable_float_approx" = "yes"; then 202*a58d3d2aSXin Li AC_WARN([Floating point approximations are not supported on all platforms.]) 203*a58d3d2aSXin Li fi 204*a58d3d2aSXin Li ], 205*a58d3d2aSXin Li [enable_float_approx=$has_float_approx]) 206*a58d3d2aSXin Li 207*a58d3d2aSXin LiAS_IF([test "$enable_float_approx" = "yes"],[ 208*a58d3d2aSXin Li AC_DEFINE([FLOAT_APPROX], [1], [Float approximations]) 209*a58d3d2aSXin Li]) 210*a58d3d2aSXin Li 211*a58d3d2aSXin LiAC_ARG_ENABLE([asm], 212*a58d3d2aSXin Li [AS_HELP_STRING([--disable-asm], [Disable assembly optimizations])],, 213*a58d3d2aSXin Li [enable_asm=yes]) 214*a58d3d2aSXin Li 215*a58d3d2aSXin LiAC_ARG_ENABLE([rtcd], 216*a58d3d2aSXin Li [AS_HELP_STRING([--disable-rtcd], [Disable run-time CPU capabilities detection])],, 217*a58d3d2aSXin Li [enable_rtcd=yes]) 218*a58d3d2aSXin Li 219*a58d3d2aSXin LiAC_ARG_ENABLE([intrinsics], 220*a58d3d2aSXin Li [AS_HELP_STRING([--disable-intrinsics], [Disable intrinsics optimizations])],, 221*a58d3d2aSXin Li [enable_intrinsics=yes]) 222*a58d3d2aSXin Li 223*a58d3d2aSXin Lirtcd_support=no 224*a58d3d2aSXin Licpu_arm=no 225*a58d3d2aSXin Licpu_x86=no 226*a58d3d2aSXin Li 227*a58d3d2aSXin LiAS_IF([test x"${enable_asm}" = x"yes"],[ 228*a58d3d2aSXin Li inline_optimization="No inline ASM for your platform, please send patches" 229*a58d3d2aSXin Li case $host_cpu in 230*a58d3d2aSXin Li arm*) 231*a58d3d2aSXin Li dnl Currently we only have asm for fixed-point 232*a58d3d2aSXin Li #AS_IF([test "$enable_float" != "yes"],[ 233*a58d3d2aSXin Li cpu_arm=yes 234*a58d3d2aSXin Li AC_DEFINE([OPUS_ARM_ASM], [], [Make use of ARM asm optimization]) 235*a58d3d2aSXin Li AS_GCC_INLINE_ASSEMBLY( 236*a58d3d2aSXin Li [inline_optimization="ARM"], 237*a58d3d2aSXin Li [inline_optimization="disabled"] 238*a58d3d2aSXin Li ) 239*a58d3d2aSXin Li AS_ASM_ARM_EDSP([OPUS_ARM_INLINE_EDSP=1],[OPUS_ARM_INLINE_EDSP=0]) 240*a58d3d2aSXin Li AS_ASM_ARM_MEDIA([OPUS_ARM_INLINE_MEDIA=1], 241*a58d3d2aSXin Li [OPUS_ARM_INLINE_MEDIA=0]) 242*a58d3d2aSXin Li AS_ASM_ARM_NEON([OPUS_ARM_INLINE_NEON=1],[OPUS_ARM_INLINE_NEON=0]) 243*a58d3d2aSXin Li AS_IF([test x"$inline_optimization" = x"ARM"],[ 244*a58d3d2aSXin Li AM_CONDITIONAL([OPUS_ARM_INLINE_ASM],[true]) 245*a58d3d2aSXin Li AC_DEFINE([OPUS_ARM_INLINE_ASM], 1, 246*a58d3d2aSXin Li [Use generic ARMv4 inline asm optimizations]) 247*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_INLINE_EDSP" = x"1"],[ 248*a58d3d2aSXin Li AC_DEFINE([OPUS_ARM_INLINE_EDSP], [1], 249*a58d3d2aSXin Li [Use ARMv5E inline asm optimizations]) 250*a58d3d2aSXin Li inline_optimization="$inline_optimization (EDSP)" 251*a58d3d2aSXin Li ]) 252*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_INLINE_MEDIA" = x"1"],[ 253*a58d3d2aSXin Li AC_DEFINE([OPUS_ARM_INLINE_MEDIA], [1], 254*a58d3d2aSXin Li [Use ARMv6 inline asm optimizations]) 255*a58d3d2aSXin Li inline_optimization="$inline_optimization (Media)" 256*a58d3d2aSXin Li ]) 257*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_INLINE_NEON" = x"1"],[ 258*a58d3d2aSXin Li AC_DEFINE([OPUS_ARM_INLINE_NEON], 1, 259*a58d3d2aSXin Li [Use ARM NEON inline asm optimizations]) 260*a58d3d2aSXin Li inline_optimization="$inline_optimization (NEON)" 261*a58d3d2aSXin Li ]) 262*a58d3d2aSXin Li ]) 263*a58d3d2aSXin Li dnl We need Perl to translate RVCT-syntax asm to gas syntax. 264*a58d3d2aSXin Li AC_CHECK_PROG([HAVE_PERL], perl, yes, no) 265*a58d3d2aSXin Li AS_IF([test x"$HAVE_PERL" = x"yes"],[ 266*a58d3d2aSXin Li AM_CONDITIONAL([OPUS_ARM_EXTERNAL_ASM],[true]) 267*a58d3d2aSXin Li asm_optimization="ARM" 268*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_INLINE_EDSP" = x"1"], [ 269*a58d3d2aSXin Li OPUS_ARM_PRESUME_EDSP=1 270*a58d3d2aSXin Li OPUS_ARM_MAY_HAVE_EDSP=1 271*a58d3d2aSXin Li ], 272*a58d3d2aSXin Li [ 273*a58d3d2aSXin Li OPUS_ARM_PRESUME_EDSP=0 274*a58d3d2aSXin Li OPUS_ARM_MAY_HAVE_EDSP=0 275*a58d3d2aSXin Li ]) 276*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_INLINE_MEDIA" = x"1"], [ 277*a58d3d2aSXin Li OPUS_ARM_PRESUME_MEDIA=1 278*a58d3d2aSXin Li OPUS_ARM_MAY_HAVE_MEDIA=1 279*a58d3d2aSXin Li ], 280*a58d3d2aSXin Li [ 281*a58d3d2aSXin Li OPUS_ARM_PRESUME_MEDIA=0 282*a58d3d2aSXin Li OPUS_ARM_MAY_HAVE_MEDIA=0 283*a58d3d2aSXin Li ]) 284*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_INLINE_NEON" = x"1"], [ 285*a58d3d2aSXin Li OPUS_ARM_PRESUME_NEON=1 286*a58d3d2aSXin Li OPUS_ARM_MAY_HAVE_NEON=1 287*a58d3d2aSXin Li ], 288*a58d3d2aSXin Li [ 289*a58d3d2aSXin Li OPUS_ARM_PRESUME_NEON=0 290*a58d3d2aSXin Li OPUS_ARM_MAY_HAVE_NEON=0 291*a58d3d2aSXin Li ]) 292*a58d3d2aSXin Li AS_IF([test x"$enable_rtcd" = x"yes"],[ 293*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_EDSP" != x"1"],[ 294*a58d3d2aSXin Li AC_MSG_NOTICE( 295*a58d3d2aSXin Li [Trying to force-enable armv5e EDSP instructions...]) 296*a58d3d2aSXin Li AS_ASM_ARM_EDSP_FORCE([OPUS_ARM_MAY_HAVE_EDSP=1]) 297*a58d3d2aSXin Li ]) 298*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_MEDIA" != x"1"],[ 299*a58d3d2aSXin Li AC_MSG_NOTICE( 300*a58d3d2aSXin Li [Trying to force-enable ARMv6 media instructions...]) 301*a58d3d2aSXin Li AS_ASM_ARM_MEDIA_FORCE([OPUS_ARM_MAY_HAVE_MEDIA=1]) 302*a58d3d2aSXin Li ]) 303*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON" != x"1"],[ 304*a58d3d2aSXin Li AC_MSG_NOTICE( 305*a58d3d2aSXin Li [Trying to force-enable NEON instructions...]) 306*a58d3d2aSXin Li AS_ASM_ARM_NEON_FORCE([OPUS_ARM_MAY_HAVE_NEON=1]) 307*a58d3d2aSXin Li ]) 308*a58d3d2aSXin Li ]) 309*a58d3d2aSXin Li rtcd_support= 310*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_EDSP" = x"1"],[ 311*a58d3d2aSXin Li AC_DEFINE(OPUS_ARM_MAY_HAVE_EDSP, 1, 312*a58d3d2aSXin Li [Define if assembler supports EDSP instructions]) 313*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_PRESUME_EDSP" = x"1"],[ 314*a58d3d2aSXin Li AC_DEFINE(OPUS_ARM_PRESUME_EDSP, 1, 315*a58d3d2aSXin Li [Define if binary requires EDSP instruction support]) 316*a58d3d2aSXin Li asm_optimization="$asm_optimization (EDSP)" 317*a58d3d2aSXin Li ], 318*a58d3d2aSXin Li [rtcd_support="$rtcd_support (EDSP)"] 319*a58d3d2aSXin Li ) 320*a58d3d2aSXin Li ]) 321*a58d3d2aSXin Li AC_SUBST(OPUS_ARM_MAY_HAVE_EDSP) 322*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_MEDIA" = x"1"],[ 323*a58d3d2aSXin Li AC_DEFINE(OPUS_ARM_MAY_HAVE_MEDIA, 1, 324*a58d3d2aSXin Li [Define if assembler supports ARMv6 media instructions]) 325*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_PRESUME_MEDIA" = x"1"],[ 326*a58d3d2aSXin Li AC_DEFINE(OPUS_ARM_PRESUME_MEDIA, 1, 327*a58d3d2aSXin Li [Define if binary requires ARMv6 media instruction support]) 328*a58d3d2aSXin Li asm_optimization="$asm_optimization (Media)" 329*a58d3d2aSXin Li ], 330*a58d3d2aSXin Li [rtcd_support="$rtcd_support (Media)"] 331*a58d3d2aSXin Li ) 332*a58d3d2aSXin Li ]) 333*a58d3d2aSXin Li AC_SUBST(OPUS_ARM_MAY_HAVE_MEDIA) 334*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON" = x"1"],[ 335*a58d3d2aSXin Li AC_DEFINE(OPUS_ARM_MAY_HAVE_NEON, 1, 336*a58d3d2aSXin Li [Define if compiler supports NEON instructions]) 337*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_PRESUME_NEON" = x"1"], [ 338*a58d3d2aSXin Li AC_DEFINE(OPUS_ARM_PRESUME_NEON, 1, 339*a58d3d2aSXin Li [Define if binary requires NEON instruction support]) 340*a58d3d2aSXin Li asm_optimization="$asm_optimization (NEON)" 341*a58d3d2aSXin Li ], 342*a58d3d2aSXin Li [rtcd_support="$rtcd_support (NEON)"] 343*a58d3d2aSXin Li ) 344*a58d3d2aSXin Li ]) 345*a58d3d2aSXin Li AC_SUBST(OPUS_ARM_MAY_HAVE_NEON) 346*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_DOTPROD" = x"1"],[ 347*a58d3d2aSXin Li AC_DEFINE(OPUS_ARM_MAY_HAVE_DOTPROD, 1, 348*a58d3d2aSXin Li [Define if compiler supports DOTPROD instructions]) 349*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_PRESUME_DOTPROD" = x"1"], [ 350*a58d3d2aSXin Li AC_DEFINE(OPUS_ARM_PRESUME_DOTPROD, 1, 351*a58d3d2aSXin Li [Define if binary requires DOTPROD instruction support]) 352*a58d3d2aSXin Li asm_optimization="$asm_optimization (DOTPROD)" 353*a58d3d2aSXin Li ], 354*a58d3d2aSXin Li [rtcd_support="$rtcd_support (DOTPROD)"] 355*a58d3d2aSXin Li ) 356*a58d3d2aSXin Li ]) 357*a58d3d2aSXin Li AC_SUBST(OPUS_ARM_MAY_HAVE_DOTPROD) 358*a58d3d2aSXin Li dnl Make sure turning on RTCD gets us at least one 359*a58d3d2aSXin Li dnl instruction set. 360*a58d3d2aSXin Li AS_IF([test x"$rtcd_support" != x""], 361*a58d3d2aSXin Li [rtcd_support=ARM"$rtcd_support"], 362*a58d3d2aSXin Li [rtcd_support="no"] 363*a58d3d2aSXin Li ) 364*a58d3d2aSXin Li AC_MSG_CHECKING([for apple style tools]) 365*a58d3d2aSXin Li AC_PREPROC_IFELSE([AC_LANG_PROGRAM([ 366*a58d3d2aSXin Li#ifndef __APPLE__ 367*a58d3d2aSXin Li#error 1 368*a58d3d2aSXin Li#endif],[])], 369*a58d3d2aSXin Li [AC_MSG_RESULT([yes]); ARM2GNU_PARAMS="--apple"], 370*a58d3d2aSXin Li [AC_MSG_RESULT([no]); ARM2GNU_PARAMS=""]) 371*a58d3d2aSXin Li AC_SUBST(ARM2GNU_PARAMS) 372*a58d3d2aSXin Li ], 373*a58d3d2aSXin Li [ 374*a58d3d2aSXin Li AC_MSG_WARN( 375*a58d3d2aSXin Li [*** ARM assembly requires perl -- disabling optimizations]) 376*a58d3d2aSXin Li asm_optimization="(missing perl dependency for ARM)" 377*a58d3d2aSXin Li ]) 378*a58d3d2aSXin Li #]) 379*a58d3d2aSXin Li ;; 380*a58d3d2aSXin Li esac 381*a58d3d2aSXin Li],[ 382*a58d3d2aSXin Li inline_optimization="disabled" 383*a58d3d2aSXin Li asm_optimization="disabled" 384*a58d3d2aSXin Li]) 385*a58d3d2aSXin Li 386*a58d3d2aSXin LiAM_CONDITIONAL([OPUS_ARM_INLINE_ASM], 387*a58d3d2aSXin Li [test x"${inline_optimization%% *}" = x"ARM"]) 388*a58d3d2aSXin LiAM_CONDITIONAL([OPUS_ARM_EXTERNAL_ASM], 389*a58d3d2aSXin Li [test x"${asm_optimization%% *}" = x"ARM"]) 390*a58d3d2aSXin Li 391*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_SSE], [false]) 392*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_SSE2], [false]) 393*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_SSE4_1], [false]) 394*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_AVX2], [false]) 395*a58d3d2aSXin Li 396*a58d3d2aSXin Lim4_define([DEFAULT_X86_SSE_CFLAGS], [-msse]) 397*a58d3d2aSXin Lim4_define([DEFAULT_X86_SSE2_CFLAGS], [-msse2]) 398*a58d3d2aSXin Lim4_define([DEFAULT_X86_SSE4_1_CFLAGS], [-msse4.1]) 399*a58d3d2aSXin Lim4_define([DEFAULT_X86_AVX2_CFLAGS], [-mavx -mfma -mavx2]) 400*a58d3d2aSXin Lim4_define([DEFAULT_ARM_NEON_INTR_CFLAGS], [-mfpu=neon]) 401*a58d3d2aSXin Lim4_define([DEFAULT_ARM_DOTPROD_INTR_CFLAGS], ["-march=armv8.2-a+dotprod"]) 402*a58d3d2aSXin Li# With GCC on ARM32 softfp architectures (e.g. Android, or older Ubuntu) you need to specify 403*a58d3d2aSXin Li# -mfloat-abi=softfp for -mfpu=neon to work. However, on ARM32 hardfp architectures (e.g. newer Ubuntu), 404*a58d3d2aSXin Li# this option will break things. 405*a58d3d2aSXin Li 406*a58d3d2aSXin Li# As a heuristic, if host matches arm*eabi* but not arm*hf*, it's probably soft-float. 407*a58d3d2aSXin Lim4_define([DEFAULT_ARM_NEON_SOFTFP_INTR_CFLAGS], [-mfpu=neon -mfloat-abi=softfp]) 408*a58d3d2aSXin Li 409*a58d3d2aSXin LiAS_CASE([$host], 410*a58d3d2aSXin Li [arm*hf*], [AS_VAR_SET([RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS], "DEFAULT_ARM_NEON_INTR_CFLAGS")], 411*a58d3d2aSXin Li [arm*eabi*], [AS_VAR_SET([RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS], "DEFAULT_ARM_NEON_SOFTFP_INTR_CFLAGS")], 412*a58d3d2aSXin Li [AS_VAR_SET([RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS], "DEFAULT_ARM_NEON_INTR_CFLAGS")]) 413*a58d3d2aSXin Li 414*a58d3d2aSXin LiAC_ARG_VAR([X86_SSE_CFLAGS], [C compiler flags to compile SSE intrinsics @<:@default=]DEFAULT_X86_SSE_CFLAGS[@:>@]) 415*a58d3d2aSXin LiAC_ARG_VAR([X86_SSE2_CFLAGS], [C compiler flags to compile SSE2 intrinsics @<:@default=]DEFAULT_X86_SSE2_CFLAGS[@:>@]) 416*a58d3d2aSXin LiAC_ARG_VAR([X86_SSE4_1_CFLAGS], [C compiler flags to compile SSE4.1 intrinsics @<:@default=]DEFAULT_X86_SSE4_1_CFLAGS[@:>@]) 417*a58d3d2aSXin LiAC_ARG_VAR([X86_AVX2_CFLAGS], [C compiler flags to compile AVX2 intrinsics @<:@default=]DEFAULT_X86_AVX2_CFLAGS[@:>@]) 418*a58d3d2aSXin LiAC_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[@:>@]) 419*a58d3d2aSXin LiAC_ARG_VAR([ARM_DOTPROD_INTR_CFLAGS], [C compiler flags to compile ARM DOTPROD intrinsics @<:@default=]DEFAULT_ARM_DOTPROD_INTR_CFLAGS[@:>@]) 420*a58d3d2aSXin Li 421*a58d3d2aSXin LiAS_VAR_SET_IF([X86_SSE_CFLAGS], [], [AS_VAR_SET([X86_SSE_CFLAGS], "DEFAULT_X86_SSE_CFLAGS")]) 422*a58d3d2aSXin LiAS_VAR_SET_IF([X86_SSE2_CFLAGS], [], [AS_VAR_SET([X86_SSE2_CFLAGS], "DEFAULT_X86_SSE2_CFLAGS")]) 423*a58d3d2aSXin LiAS_VAR_SET_IF([X86_SSE4_1_CFLAGS], [], [AS_VAR_SET([X86_SSE4_1_CFLAGS], "DEFAULT_X86_SSE4_1_CFLAGS")]) 424*a58d3d2aSXin LiAS_VAR_SET_IF([X86_AVX2_CFLAGS], [], [AS_VAR_SET([X86_AVX2_CFLAGS], "DEFAULT_X86_AVX2_CFLAGS")]) 425*a58d3d2aSXin LiAS_VAR_SET_IF([ARM_NEON_INTR_CFLAGS], [], [AS_VAR_SET([ARM_NEON_INTR_CFLAGS], ["$RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS"])]) 426*a58d3d2aSXin LiAS_VAR_SET_IF([ARM_DOTPROD_INTR_CFLAGS], [], [AS_VAR_SET([ARM_DOTPROD_INTR_CFLAGS], ["DEFAULT_ARM_DOTPROD_INTR_CFLAGS"])]) 427*a58d3d2aSXin Li 428*a58d3d2aSXin LiAC_DEFUN([OPUS_PATH_NE10], 429*a58d3d2aSXin Li [ 430*a58d3d2aSXin Li AC_ARG_WITH(NE10, 431*a58d3d2aSXin Li AC_HELP_STRING([--with-NE10=PFX],[Prefix where libNE10 is installed (optional)]), 432*a58d3d2aSXin Li NE10_prefix="$withval", NE10_prefix="") 433*a58d3d2aSXin Li AC_ARG_WITH(NE10-libraries, 434*a58d3d2aSXin Li AC_HELP_STRING([--with-NE10-libraries=DIR], 435*a58d3d2aSXin Li [Directory where libNE10 library is installed (optional)]), 436*a58d3d2aSXin Li NE10_libraries="$withval", NE10_libraries="") 437*a58d3d2aSXin Li AC_ARG_WITH(NE10-includes, 438*a58d3d2aSXin Li AC_HELP_STRING([--with-NE10-includes=DIR], 439*a58d3d2aSXin Li [Directory where libNE10 header files are installed (optional)]), 440*a58d3d2aSXin Li NE10_includes="$withval", NE10_includes="") 441*a58d3d2aSXin Li 442*a58d3d2aSXin Li if test "x$NE10_libraries" != "x" ; then 443*a58d3d2aSXin Li NE10_LIBS="-L$NE10_libraries" 444*a58d3d2aSXin Li elif test "x$NE10_prefix" = "xno" || test "x$NE10_prefix" = "xyes" ; then 445*a58d3d2aSXin Li NE10_LIBS="" 446*a58d3d2aSXin Li elif test "x$NE10_prefix" != "x" ; then 447*a58d3d2aSXin Li NE10_LIBS="-L$NE10_prefix/lib" 448*a58d3d2aSXin Li elif test "x$prefix" != "xNONE" ; then 449*a58d3d2aSXin Li NE10_LIBS="-L$prefix/lib" 450*a58d3d2aSXin Li fi 451*a58d3d2aSXin Li 452*a58d3d2aSXin Li if test "x$NE10_prefix" != "xno" ; then 453*a58d3d2aSXin Li NE10_LIBS="$NE10_LIBS -lNE10" 454*a58d3d2aSXin Li fi 455*a58d3d2aSXin Li 456*a58d3d2aSXin Li if test "x$NE10_includes" != "x" ; then 457*a58d3d2aSXin Li NE10_CFLAGS="-I$NE10_includes" 458*a58d3d2aSXin Li elif test "x$NE10_prefix" = "xno" || test "x$NE10_prefix" = "xyes" ; then 459*a58d3d2aSXin Li NE10_CFLAGS="" 460*a58d3d2aSXin Li elif test "x$NE10_prefix" != "x" ; then 461*a58d3d2aSXin Li NE10_CFLAGS="-I$NE10_prefix/include" 462*a58d3d2aSXin Li elif test "x$prefix" != "xNONE"; then 463*a58d3d2aSXin Li NE10_CFLAGS="-I$prefix/include" 464*a58d3d2aSXin Li fi 465*a58d3d2aSXin Li 466*a58d3d2aSXin Li AC_MSG_CHECKING(for NE10) 467*a58d3d2aSXin Li save_CFLAGS="$CFLAGS"; CFLAGS="$CFLAGS $NE10_CFLAGS" 468*a58d3d2aSXin Li save_LIBS="$LIBS"; LIBS="$LIBS $NE10_LIBS $LIBM" 469*a58d3d2aSXin Li AC_LINK_IFELSE( 470*a58d3d2aSXin Li [ 471*a58d3d2aSXin Li AC_LANG_PROGRAM( 472*a58d3d2aSXin Li [[#include <NE10_dsp.h> 473*a58d3d2aSXin Li ]], 474*a58d3d2aSXin Li [[ 475*a58d3d2aSXin Li ne10_fft_cfg_float32_t cfg; 476*a58d3d2aSXin Li cfg = ne10_fft_alloc_c2c_float32_neon(480); 477*a58d3d2aSXin Li ]] 478*a58d3d2aSXin Li ) 479*a58d3d2aSXin Li ],[ 480*a58d3d2aSXin Li HAVE_ARM_NE10=1 481*a58d3d2aSXin Li AC_MSG_RESULT([yes]) 482*a58d3d2aSXin Li ],[ 483*a58d3d2aSXin Li HAVE_ARM_NE10=0 484*a58d3d2aSXin Li AC_MSG_RESULT([no]) 485*a58d3d2aSXin Li NE10_CFLAGS="" 486*a58d3d2aSXin Li NE10_LIBS="" 487*a58d3d2aSXin Li ] 488*a58d3d2aSXin Li ) 489*a58d3d2aSXin Li CFLAGS="$save_CFLAGS"; LIBS="$save_LIBS" 490*a58d3d2aSXin Li #Now we know if libNE10 is installed or not 491*a58d3d2aSXin Li AS_IF([test x"$HAVE_ARM_NE10" = x"1"], 492*a58d3d2aSXin Li [ 493*a58d3d2aSXin Li AC_DEFINE([HAVE_ARM_NE10], 1, [NE10 library is installed on host. Make sure it is on target!]) 494*a58d3d2aSXin Li AC_SUBST(HAVE_ARM_NE10) 495*a58d3d2aSXin Li AC_SUBST(NE10_CFLAGS) 496*a58d3d2aSXin Li AC_SUBST(NE10_LIBS) 497*a58d3d2aSXin Li ] 498*a58d3d2aSXin Li ) 499*a58d3d2aSXin Li ] 500*a58d3d2aSXin Li) 501*a58d3d2aSXin Li 502*a58d3d2aSXin LiAS_IF([test x"$enable_intrinsics" = x"yes"],[ 503*a58d3d2aSXin Li intrinsics_support="" 504*a58d3d2aSXin Li AS_CASE([$host_cpu], 505*a58d3d2aSXin Li [arm*|aarch64*], 506*a58d3d2aSXin Li [ 507*a58d3d2aSXin Li cpu_arm=yes 508*a58d3d2aSXin Li OPUS_CHECK_INTRINSICS( 509*a58d3d2aSXin Li [ARM Neon], 510*a58d3d2aSXin Li [$ARM_NEON_INTR_CFLAGS], 511*a58d3d2aSXin Li [OPUS_ARM_MAY_HAVE_NEON_INTR], 512*a58d3d2aSXin Li [OPUS_ARM_PRESUME_NEON_INTR], 513*a58d3d2aSXin Li [[#include <arm_neon.h> 514*a58d3d2aSXin Li ]], 515*a58d3d2aSXin Li [[ 516*a58d3d2aSXin Li static float32x4_t A0, A1, SUMM; 517*a58d3d2aSXin Li SUMM = vmlaq_f32(SUMM, A0, A1); 518*a58d3d2aSXin Li return (int)vgetq_lane_f32(SUMM, 0); 519*a58d3d2aSXin Li ]] 520*a58d3d2aSXin Li ) 521*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON_INTR" = x"1" && test x"$OPUS_ARM_PRESUME_NEON_INTR" != x"1"], 522*a58d3d2aSXin Li [ 523*a58d3d2aSXin Li OPUS_ARM_NEON_INTR_CFLAGS="$ARM_NEON_INTR_CFLAGS" 524*a58d3d2aSXin Li AC_SUBST([OPUS_ARM_NEON_INTR_CFLAGS]) 525*a58d3d2aSXin Li ] 526*a58d3d2aSXin Li ) 527*a58d3d2aSXin Li 528*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON_INTR" = x"1"], 529*a58d3d2aSXin Li [ 530*a58d3d2aSXin Li AC_DEFINE([OPUS_ARM_MAY_HAVE_NEON_INTR], 1, [Compiler supports ARMv7/Aarch64 Neon Intrinsics]) 531*a58d3d2aSXin Li intrinsics_support="$intrinsics_support (NEON)" 532*a58d3d2aSXin Li 533*a58d3d2aSXin Li AS_IF([test x"$enable_rtcd" != x"no" && test x"$OPUS_ARM_PRESUME_NEON_INTR" != x"1"], 534*a58d3d2aSXin Li [AS_IF([test x"$rtcd_support" = x"no"], 535*a58d3d2aSXin Li [rtcd_support="ARM (NEON Intrinsics)"], 536*a58d3d2aSXin Li [rtcd_support="$rtcd_support (NEON Intrinsics)"])]) 537*a58d3d2aSXin Li 538*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_PRESUME_NEON_INTR" = x"1"], 539*a58d3d2aSXin Li [AC_DEFINE([OPUS_ARM_PRESUME_NEON_INTR], 1, [Define if binary requires NEON intrinsics support])]) 540*a58d3d2aSXin Li 541*a58d3d2aSXin Li OPUS_PATH_NE10() 542*a58d3d2aSXin Li AS_IF([test x"$NE10_LIBS" != x""], 543*a58d3d2aSXin Li [ 544*a58d3d2aSXin Li intrinsics_support="$intrinsics_support (NE10)" 545*a58d3d2aSXin Li AS_IF([test x"enable_rtcd" != x"" \ 546*a58d3d2aSXin Li && test x"$OPUS_ARM_PRESUME_NEON_INTR" != x"1"], 547*a58d3d2aSXin Li [rtcd_support="$rtcd_support (NE10)"]) 548*a58d3d2aSXin Li ]) 549*a58d3d2aSXin Li 550*a58d3d2aSXin Li OPUS_CHECK_INTRINSICS( 551*a58d3d2aSXin Li [Aarch64 Neon], 552*a58d3d2aSXin Li [$ARM_NEON_INTR_CFLAGS], 553*a58d3d2aSXin Li [OPUS_ARM_MAY_HAVE_AARCH64_NEON_INTR], 554*a58d3d2aSXin Li [OPUS_ARM_PRESUME_AARCH64_NEON_INTR], 555*a58d3d2aSXin Li [[#include <arm_neon.h> 556*a58d3d2aSXin Li ]], 557*a58d3d2aSXin Li [[ 558*a58d3d2aSXin Li static int32_t IN; 559*a58d3d2aSXin Li static int16_t OUT; 560*a58d3d2aSXin Li OUT = vqmovns_s32(IN); 561*a58d3d2aSXin Li ]] 562*a58d3d2aSXin Li ) 563*a58d3d2aSXin Li 564*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_PRESUME_AARCH64_NEON_INTR" = x"1"], 565*a58d3d2aSXin Li [ 566*a58d3d2aSXin Li AC_DEFINE([OPUS_ARM_PRESUME_AARCH64_NEON_INTR], 1, [Define if binary requires Aarch64 Neon Intrinsics]) 567*a58d3d2aSXin Li intrinsics_support="$intrinsics_support (NEON [Aarch64])" 568*a58d3d2aSXin Li ]) 569*a58d3d2aSXin Li 570*a58d3d2aSXin Li OPUS_CHECK_INTRINSICS( 571*a58d3d2aSXin Li [Aarch64 dotprod], 572*a58d3d2aSXin Li [$ARM_DOTPROD_INTR_CFLAGS], 573*a58d3d2aSXin Li [OPUS_ARM_MAY_HAVE_DOTPROD], 574*a58d3d2aSXin Li [OPUS_ARM_PRESUME_DOTPROD], 575*a58d3d2aSXin Li [[#include <arm_neon.h> 576*a58d3d2aSXin Li ]], 577*a58d3d2aSXin Li [[ 578*a58d3d2aSXin Li static int32x4_t acc; 579*a58d3d2aSXin Li static int8x16_t a, b; 580*a58d3d2aSXin Li acc = vdotq_s32(acc, a, b); 581*a58d3d2aSXin Li ]] 582*a58d3d2aSXin Li ) 583*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_DOTPROD" = x"1" && test x"$OPUS_ARM_PRESUME_DOTPROD" != x"1"], 584*a58d3d2aSXin Li [ 585*a58d3d2aSXin Li OPUS_ARM_DOTPROD_INTR_CFLAGS="$ARM_NEON_DOTPROD_CFLAGS" 586*a58d3d2aSXin Li AC_SUBST([OPUS_ARM_DOTPROD_INTR_CFLAGS]) 587*a58d3d2aSXin Li ] 588*a58d3d2aSXin Li ) 589*a58d3d2aSXin Li 590*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_MAY_HAVE_DOTPROD" = x"1"], 591*a58d3d2aSXin Li [ 592*a58d3d2aSXin Li AC_DEFINE([OPUS_ARM_MAY_HAVE_DOTPROD], 1, [Compiler supports Aarch64 DOTPROD Intrinsics]) 593*a58d3d2aSXin Li intrinsics_support="$intrinsics_support (DOTPROD)" 594*a58d3d2aSXin Li 595*a58d3d2aSXin Li AS_IF([test x"$OPUS_ARM_PRESUME_DOTPROD" = x"1"], 596*a58d3d2aSXin Li [ 597*a58d3d2aSXin Li AC_DEFINE([OPUS_ARM_PRESUME_DOTPROD], 1, [Define if binary requires Aarch64 dotprod Intrinsics]) 598*a58d3d2aSXin Li intrinsics_support="$intrinsics_support (DOTPROD [Aarch64])" 599*a58d3d2aSXin Li ]) 600*a58d3d2aSXin Li 601*a58d3d2aSXin Li AS_IF([test x"$enable_rtcd" != x"no" && test x"$OPUS_ARM_PRESUME_DOTPROD" != x"1"], 602*a58d3d2aSXin Li [AS_IF([test x"$rtcd_support" = x"no"], 603*a58d3d2aSXin Li [rtcd_support="ARM (DOTPROD Intrinsics)"], 604*a58d3d2aSXin Li [rtcd_support="$rtcd_support (DOTPROD Intrinsics)"])]) 605*a58d3d2aSXin Li 606*a58d3d2aSXin Li ] 607*a58d3d2aSXin Li ) 608*a58d3d2aSXin Li 609*a58d3d2aSXin Li 610*a58d3d2aSXin Li AS_IF([test x"$intrinsics_support" = x""], 611*a58d3d2aSXin Li [intrinsics_support=no], 612*a58d3d2aSXin Li [intrinsics_support="ARM$intrinsics_support"]) 613*a58d3d2aSXin Li ], 614*a58d3d2aSXin Li [ 615*a58d3d2aSXin Li AC_MSG_WARN([Compiler does not support ARM intrinsics]) 616*a58d3d2aSXin Li intrinsics_support=no 617*a58d3d2aSXin Li ]) 618*a58d3d2aSXin Li ], 619*a58d3d2aSXin Li [i?86|x86_64], 620*a58d3d2aSXin Li [ 621*a58d3d2aSXin Li cpu_x86=yes 622*a58d3d2aSXin Li OPUS_CHECK_INTRINSICS( 623*a58d3d2aSXin Li [SSE], 624*a58d3d2aSXin Li [$X86_SSE_CFLAGS], 625*a58d3d2aSXin Li [OPUS_X86_MAY_HAVE_SSE], 626*a58d3d2aSXin Li [OPUS_X86_PRESUME_SSE], 627*a58d3d2aSXin Li [[#include <xmmintrin.h> 628*a58d3d2aSXin Li #include <time.h> 629*a58d3d2aSXin Li ]], 630*a58d3d2aSXin Li [[ 631*a58d3d2aSXin Li __m128 mtest; 632*a58d3d2aSXin Li mtest = _mm_set1_ps((float)time(NULL)); 633*a58d3d2aSXin Li mtest = _mm_mul_ps(mtest, mtest); 634*a58d3d2aSXin Li return _mm_cvtss_si32(mtest); 635*a58d3d2aSXin Li ]] 636*a58d3d2aSXin Li ) 637*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE" = x"1" && test x"$OPUS_X86_PRESUME_SSE" != x"1"], 638*a58d3d2aSXin Li [ 639*a58d3d2aSXin Li OPUS_X86_SSE_CFLAGS="$X86_SSE_CFLAGS" 640*a58d3d2aSXin Li AC_SUBST([OPUS_X86_SSE_CFLAGS]) 641*a58d3d2aSXin Li ] 642*a58d3d2aSXin Li ) 643*a58d3d2aSXin Li OPUS_CHECK_INTRINSICS( 644*a58d3d2aSXin Li [SSE2], 645*a58d3d2aSXin Li [$X86_SSE2_CFLAGS], 646*a58d3d2aSXin Li [OPUS_X86_MAY_HAVE_SSE2], 647*a58d3d2aSXin Li [OPUS_X86_PRESUME_SSE2], 648*a58d3d2aSXin Li [[#include <emmintrin.h> 649*a58d3d2aSXin Li #include <time.h> 650*a58d3d2aSXin Li ]], 651*a58d3d2aSXin Li [[ 652*a58d3d2aSXin Li __m128i mtest; 653*a58d3d2aSXin Li mtest = _mm_set1_epi32((int)time(NULL)); 654*a58d3d2aSXin Li mtest = _mm_mul_epu32(mtest, mtest); 655*a58d3d2aSXin Li return _mm_cvtsi128_si32(mtest); 656*a58d3d2aSXin Li ]] 657*a58d3d2aSXin Li ) 658*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1" && test x"$OPUS_X86_PRESUME_SSE2" != x"1"], 659*a58d3d2aSXin Li [ 660*a58d3d2aSXin Li OPUS_X86_SSE2_CFLAGS="$X86_SSE2_CFLAGS" 661*a58d3d2aSXin Li AC_SUBST([OPUS_X86_SSE2_CFLAGS]) 662*a58d3d2aSXin Li ] 663*a58d3d2aSXin Li ) 664*a58d3d2aSXin Li OPUS_CHECK_INTRINSICS( 665*a58d3d2aSXin Li [SSE4.1], 666*a58d3d2aSXin Li [$X86_SSE4_1_CFLAGS], 667*a58d3d2aSXin Li [OPUS_X86_MAY_HAVE_SSE4_1], 668*a58d3d2aSXin Li [OPUS_X86_PRESUME_SSE4_1], 669*a58d3d2aSXin Li [[#include <smmintrin.h> 670*a58d3d2aSXin Li #include <time.h> 671*a58d3d2aSXin Li ]], 672*a58d3d2aSXin Li [[ 673*a58d3d2aSXin Li __m128i mtest; 674*a58d3d2aSXin Li mtest = _mm_set1_epi32((int)time(NULL)); 675*a58d3d2aSXin Li mtest = _mm_mul_epi32(mtest, mtest); 676*a58d3d2aSXin Li return _mm_cvtsi128_si32(mtest); 677*a58d3d2aSXin Li ]] 678*a58d3d2aSXin Li ) 679*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1" && test x"$OPUS_X86_PRESUME_SSE4_1" != x"1"], 680*a58d3d2aSXin Li [ 681*a58d3d2aSXin Li OPUS_X86_SSE4_1_CFLAGS="$X86_SSE4_1_CFLAGS" 682*a58d3d2aSXin Li AC_SUBST([OPUS_X86_SSE4_1_CFLAGS]) 683*a58d3d2aSXin Li ] 684*a58d3d2aSXin Li ) 685*a58d3d2aSXin Li OPUS_CHECK_INTRINSICS( 686*a58d3d2aSXin Li [AVX2], 687*a58d3d2aSXin Li [$X86_AVX2_CFLAGS], 688*a58d3d2aSXin Li [OPUS_X86_MAY_HAVE_AVX2], 689*a58d3d2aSXin Li [OPUS_X86_PRESUME_AVX2], 690*a58d3d2aSXin Li [[#include <immintrin.h> 691*a58d3d2aSXin Li #include <time.h> 692*a58d3d2aSXin Li ]], 693*a58d3d2aSXin Li [[ 694*a58d3d2aSXin Li unsigned char utest[[16]] = {1}; 695*a58d3d2aSXin Li __m256 mtest; 696*a58d3d2aSXin Li __m256i mtest1; 697*a58d3d2aSXin Li __m256i mtest2; 698*a58d3d2aSXin Li mtest = _mm256_set1_ps((float)time(NULL)); 699*a58d3d2aSXin Li mtest = _mm256_fmadd_ps(mtest, mtest, mtest); 700*a58d3d2aSXin Li mtest1 = _mm256_set_m128i(_mm_loadu_si64(utest), _mm_loadu_si64(utest)); 701*a58d3d2aSXin Li mtest2 = 702*a58d3d2aSXin Li _mm256_cvtepi16_epi32(_mm_loadu_si128((__m128i_u *)utest)); 703*a58d3d2aSXin Li return _mm256_extract_epi16(_mm256_xor_si256( 704*a58d3d2aSXin Li _mm256_xor_si256(mtest1, mtest2), _mm256_cvttps_epi32(mtest)), 0); 705*a58d3d2aSXin Li ]] 706*a58d3d2aSXin Li ) 707*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_MAY_HAVE_AVX2" = x"1" && test x"$OPUS_X86_PRESUME_AVX2" != x"1"], 708*a58d3d2aSXin Li [ 709*a58d3d2aSXin Li OPUS_X86_AVX2_CFLAGS="$X86_AVX2_CFLAGS" 710*a58d3d2aSXin Li AC_SUBST([OPUS_X86_AVX2_CFLAGS]) 711*a58d3d2aSXin Li ] 712*a58d3d2aSXin Li ) 713*a58d3d2aSXin Li AS_IF([test x"$rtcd_support" = x"no"], [rtcd_support=""]) 714*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE" = x"1"], 715*a58d3d2aSXin Li [ 716*a58d3d2aSXin Li AC_DEFINE([OPUS_X86_MAY_HAVE_SSE], 1, [Compiler supports X86 SSE Intrinsics]) 717*a58d3d2aSXin Li intrinsics_support="$intrinsics_support SSE" 718*a58d3d2aSXin Li 719*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_PRESUME_SSE" = x"1"], 720*a58d3d2aSXin Li [AC_DEFINE([OPUS_X86_PRESUME_SSE], 1, [Define if binary requires SSE intrinsics support])], 721*a58d3d2aSXin Li [rtcd_support="$rtcd_support SSE"]) 722*a58d3d2aSXin Li ], 723*a58d3d2aSXin Li [ 724*a58d3d2aSXin Li AC_MSG_WARN([Compiler does not support SSE intrinsics]) 725*a58d3d2aSXin Li ]) 726*a58d3d2aSXin Li 727*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1"], 728*a58d3d2aSXin Li [ 729*a58d3d2aSXin Li AC_DEFINE([OPUS_X86_MAY_HAVE_SSE2], 1, [Compiler supports X86 SSE2 Intrinsics]) 730*a58d3d2aSXin Li intrinsics_support="$intrinsics_support SSE2" 731*a58d3d2aSXin Li 732*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_PRESUME_SSE2" = x"1"], 733*a58d3d2aSXin Li [AC_DEFINE([OPUS_X86_PRESUME_SSE2], 1, [Define if binary requires SSE2 intrinsics support])], 734*a58d3d2aSXin Li [rtcd_support="$rtcd_support SSE2"]) 735*a58d3d2aSXin Li ], 736*a58d3d2aSXin Li [ 737*a58d3d2aSXin Li AC_MSG_WARN([Compiler does not support SSE2 intrinsics]) 738*a58d3d2aSXin Li ]) 739*a58d3d2aSXin Li 740*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1"], 741*a58d3d2aSXin Li [ 742*a58d3d2aSXin Li AC_DEFINE([OPUS_X86_MAY_HAVE_SSE4_1], 1, [Compiler supports X86 SSE4.1 Intrinsics]) 743*a58d3d2aSXin Li intrinsics_support="$intrinsics_support SSE4.1" 744*a58d3d2aSXin Li 745*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_PRESUME_SSE4_1" = x"1"], 746*a58d3d2aSXin Li [AC_DEFINE([OPUS_X86_PRESUME_SSE4_1], 1, [Define if binary requires SSE4.1 intrinsics support])], 747*a58d3d2aSXin Li [rtcd_support="$rtcd_support SSE4.1"]) 748*a58d3d2aSXin Li ], 749*a58d3d2aSXin Li [ 750*a58d3d2aSXin Li AC_MSG_WARN([Compiler does not support SSE4.1 intrinsics]) 751*a58d3d2aSXin Li ]) 752*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_MAY_HAVE_AVX2" = x"1"], 753*a58d3d2aSXin Li [ 754*a58d3d2aSXin Li AC_DEFINE([OPUS_X86_MAY_HAVE_AVX2], 1, [Compiler supports X86 AVX2 Intrinsics]) 755*a58d3d2aSXin Li intrinsics_support="$intrinsics_support AVX2" 756*a58d3d2aSXin Li 757*a58d3d2aSXin Li AS_IF([test x"$OPUS_X86_PRESUME_AVX2" = x"1"], 758*a58d3d2aSXin Li [AC_DEFINE([OPUS_X86_PRESUME_AVX2], 1, [Define if binary requires AVX2 intrinsics support])], 759*a58d3d2aSXin Li [rtcd_support="$rtcd_support AVX2"]) 760*a58d3d2aSXin Li ], 761*a58d3d2aSXin Li [ 762*a58d3d2aSXin Li AC_MSG_WARN([Compiler does not support AVX2 intrinsics]) 763*a58d3d2aSXin Li ]) 764*a58d3d2aSXin Li 765*a58d3d2aSXin Li AS_IF([test x"$intrinsics_support" = x""], 766*a58d3d2aSXin Li [intrinsics_support=no], 767*a58d3d2aSXin Li [intrinsics_support="x86$intrinsics_support"] 768*a58d3d2aSXin Li ) 769*a58d3d2aSXin Li AS_IF([test x"$rtcd_support" = x""], 770*a58d3d2aSXin Li [rtcd_support=no], 771*a58d3d2aSXin Li [rtcd_support="x86$rtcd_support"], 772*a58d3d2aSXin Li ) 773*a58d3d2aSXin Li 774*a58d3d2aSXin Li AS_IF([test x"$enable_rtcd" = x"yes" && test x"$rtcd_support" != x""],[ 775*a58d3d2aSXin Li get_cpuid_by_asm="no" 776*a58d3d2aSXin Li AC_MSG_CHECKING([How to get X86 CPU Info]) 777*a58d3d2aSXin Li AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 778*a58d3d2aSXin Li #include <stdio.h> 779*a58d3d2aSXin Li ]],[[ 780*a58d3d2aSXin Li unsigned int CPUInfo0; 781*a58d3d2aSXin Li unsigned int CPUInfo1; 782*a58d3d2aSXin Li unsigned int CPUInfo2; 783*a58d3d2aSXin Li unsigned int CPUInfo3; 784*a58d3d2aSXin Li unsigned int InfoType; 785*a58d3d2aSXin Li #if defined(__i386__) && defined(__PIC__) 786*a58d3d2aSXin Li __asm__ __volatile__ ( 787*a58d3d2aSXin Li "xchg %%ebx, %1\n" 788*a58d3d2aSXin Li "cpuid\n" 789*a58d3d2aSXin Li "xchg %%ebx, %1\n": 790*a58d3d2aSXin Li "=a" (CPUInfo0), 791*a58d3d2aSXin Li "=r" (CPUInfo1), 792*a58d3d2aSXin Li "=c" (CPUInfo2), 793*a58d3d2aSXin Li "=d" (CPUInfo3) : 794*a58d3d2aSXin Li "a" (InfoType), "c" (0) 795*a58d3d2aSXin Li ); 796*a58d3d2aSXin Li #else 797*a58d3d2aSXin Li __asm__ __volatile__ ( 798*a58d3d2aSXin Li "cpuid": 799*a58d3d2aSXin Li "=a" (CPUInfo0), 800*a58d3d2aSXin Li "=b" (CPUInfo1), 801*a58d3d2aSXin Li "=c" (CPUInfo2), 802*a58d3d2aSXin Li "=d" (CPUInfo3) : 803*a58d3d2aSXin Li "a" (InfoType), "c" (0) 804*a58d3d2aSXin Li ); 805*a58d3d2aSXin Li #endif 806*a58d3d2aSXin Li ]])], 807*a58d3d2aSXin Li [get_cpuid_by_asm="yes" 808*a58d3d2aSXin Li AC_MSG_RESULT([Inline Assembly]) 809*a58d3d2aSXin Li AC_DEFINE([CPU_INFO_BY_ASM], [1], [Get CPU Info by asm method])], 810*a58d3d2aSXin Li [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 811*a58d3d2aSXin Li #include <cpuid.h> 812*a58d3d2aSXin Li ]],[[ 813*a58d3d2aSXin Li unsigned int CPUInfo0; 814*a58d3d2aSXin Li unsigned int CPUInfo1; 815*a58d3d2aSXin Li unsigned int CPUInfo2; 816*a58d3d2aSXin Li unsigned int CPUInfo3; 817*a58d3d2aSXin Li unsigned int InfoType; 818*a58d3d2aSXin Li __get_cpuid_count(InfoType, 0, &CPUInfo0, &CPUInfo1, &CPUInfo2, &CPUInfo3); 819*a58d3d2aSXin Li ]])], 820*a58d3d2aSXin Li [AC_MSG_RESULT([C method]) 821*a58d3d2aSXin Li AC_DEFINE([CPU_INFO_BY_C], [1], [Get CPU Info by c method])], 822*a58d3d2aSXin Li [AC_MSG_ERROR([no supported Get CPU Info method, please disable run-time CPU capabilities detection or intrinsics])])])]) 823*a58d3d2aSXin Li ], 824*a58d3d2aSXin Li [ 825*a58d3d2aSXin Li AC_MSG_WARN([No intrinsics support for your architecture]) 826*a58d3d2aSXin Li intrinsics_support="no" 827*a58d3d2aSXin Li ]) 828*a58d3d2aSXin Li], 829*a58d3d2aSXin Li[ 830*a58d3d2aSXin Li intrinsics_support="no" 831*a58d3d2aSXin Li]) 832*a58d3d2aSXin Li 833*a58d3d2aSXin LiAM_CONDITIONAL([CPU_ARM], [test "$cpu_arm" = "yes"]) 834*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_ARM_DOTPROD], 835*a58d3d2aSXin Li [test x"$OPUS_ARM_MAY_HAVE_DOTPROD" = x"1"]) 836*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_ARM_NEON_INTR], 837*a58d3d2aSXin Li [test x"$OPUS_ARM_MAY_HAVE_NEON_INTR" = x"1"]) 838*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_ARM_NE10], 839*a58d3d2aSXin Li [test x"$HAVE_ARM_NE10" = x"1"]) 840*a58d3d2aSXin LiAM_CONDITIONAL([CPU_X86], [test "$cpu_x86" = "yes"]) 841*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_SSE], 842*a58d3d2aSXin Li [test x"$OPUS_X86_MAY_HAVE_SSE" = x"1"]) 843*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_SSE2], 844*a58d3d2aSXin Li [test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1"]) 845*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_SSE4_1], 846*a58d3d2aSXin Li [test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1"]) 847*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_AVX2], 848*a58d3d2aSXin Li [test x"$OPUS_X86_MAY_HAVE_AVX2" = x"1"]) 849*a58d3d2aSXin Li 850*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_RTCD], 851*a58d3d2aSXin Li [test x"$enable_rtcd" = x"yes" -a x"$rtcd_support" != x"no"]) 852*a58d3d2aSXin LiAS_IF([test x"$enable_rtcd" = x"yes"],[ 853*a58d3d2aSXin Li AS_IF([test x"$rtcd_support" != x"no"],[ 854*a58d3d2aSXin Li AC_DEFINE([OPUS_HAVE_RTCD], [1], 855*a58d3d2aSXin Li [Use run-time CPU capabilities detection]) 856*a58d3d2aSXin Li OPUS_HAVE_RTCD=1 857*a58d3d2aSXin Li AC_SUBST(OPUS_HAVE_RTCD) 858*a58d3d2aSXin Li ]) 859*a58d3d2aSXin Li],[ 860*a58d3d2aSXin Li rtcd_support="disabled" 861*a58d3d2aSXin Li]) 862*a58d3d2aSXin Li 863*a58d3d2aSXin LiAC_ARG_ENABLE([assertions], 864*a58d3d2aSXin Li [AS_HELP_STRING([--enable-assertions],[enable additional software error checking])],, 865*a58d3d2aSXin Li [enable_assertions=no]) 866*a58d3d2aSXin Li 867*a58d3d2aSXin LiAS_IF([test "$enable_assertions" = "yes"], [ 868*a58d3d2aSXin Li AC_DEFINE([ENABLE_ASSERTIONS], [1], [Assertions]) 869*a58d3d2aSXin Li]) 870*a58d3d2aSXin Li 871*a58d3d2aSXin LiAC_ARG_ENABLE([hardening], 872*a58d3d2aSXin Li [AS_HELP_STRING([--disable-hardening],[disable run-time checks that are cheap and safe for use in production])],, 873*a58d3d2aSXin Li [enable_hardening=yes]) 874*a58d3d2aSXin Li 875*a58d3d2aSXin LiAS_IF([test "$enable_hardening" = "yes"], [ 876*a58d3d2aSXin Li AC_DEFINE([ENABLE_HARDENING], [1], [Hardening]) 877*a58d3d2aSXin Li]) 878*a58d3d2aSXin Li 879*a58d3d2aSXin LiAC_ARG_ENABLE([fuzzing], 880*a58d3d2aSXin Li [AS_HELP_STRING([--enable-fuzzing],[causes the encoder to make random decisions (do not use in production)])],, 881*a58d3d2aSXin Li [enable_fuzzing=no]) 882*a58d3d2aSXin Li 883*a58d3d2aSXin LiAS_IF([test "$enable_fuzzing" = "yes"], [ 884*a58d3d2aSXin Li AC_DEFINE([FUZZING], [1], [Fuzzing]) 885*a58d3d2aSXin Li]) 886*a58d3d2aSXin Li 887*a58d3d2aSXin LiAC_ARG_ENABLE([check-asm], 888*a58d3d2aSXin Li [AS_HELP_STRING([--enable-check-asm], 889*a58d3d2aSXin Li [enable bit-exactness checks between optimized and c implementations])],, 890*a58d3d2aSXin Li [enable_check_asm=no]) 891*a58d3d2aSXin Li 892*a58d3d2aSXin LiAS_IF([test "$enable_check_asm" = "yes"], [ 893*a58d3d2aSXin Li AC_DEFINE([OPUS_CHECK_ASM], [1], [Run bit-exactness checks between optimized and c implementations]) 894*a58d3d2aSXin Li]) 895*a58d3d2aSXin Li 896*a58d3d2aSXin LiAC_ARG_ENABLE([doc], 897*a58d3d2aSXin Li [AS_HELP_STRING([--disable-doc], [Do not build API documentation])],, 898*a58d3d2aSXin Li [enable_doc=yes]) 899*a58d3d2aSXin Li 900*a58d3d2aSXin LiAS_IF([test "$enable_doc" = "yes"], [ 901*a58d3d2aSXin Li AC_CHECK_PROG(HAVE_DOXYGEN, [doxygen], [yes], [no]) 902*a58d3d2aSXin Li AC_CHECK_PROG(HAVE_DOT, [dot], [yes], [no]) 903*a58d3d2aSXin Li],[ 904*a58d3d2aSXin Li HAVE_DOXYGEN=no 905*a58d3d2aSXin Li]) 906*a58d3d2aSXin Li 907*a58d3d2aSXin LiAC_ARG_ENABLE([dot-product], 908*a58d3d2aSXin Li AS_HELP_STRING([--disable-dot-product], [Disable dot product implementation]),, 909*a58d3d2aSXin Li enable_dot_product=yes) 910*a58d3d2aSXin Li 911*a58d3d2aSXin LiAS_IF([test "$enable_dot_product" = "no"], [ 912*a58d3d2aSXin Li AC_DEFINE([DISABLE_DOT_PROD], [1], [Disable dot product instructions]) 913*a58d3d2aSXin Li]) 914*a58d3d2aSXin Li 915*a58d3d2aSXin LiAC_ARG_ENABLE([dnn-debug-float], 916*a58d3d2aSXin Li AS_HELP_STRING([--enable-dnn-debug-float], [Use floating-point DNN computation everywhere]),, 917*a58d3d2aSXin Li enable_dnn_debug_float=no) 918*a58d3d2aSXin Li 919*a58d3d2aSXin LiAS_IF([test "$enable_dnn_debug_float" = "no"], [ 920*a58d3d2aSXin Li AC_DEFINE([DISABLE_DEBUG_FLOAT], [1], [Disable DNN debug float]) 921*a58d3d2aSXin Li]) 922*a58d3d2aSXin Li 923*a58d3d2aSXin LiAC_ARG_ENABLE([osce-training-data], 924*a58d3d2aSXin Li AS_HELP_STRING([--enable-osce-training-data], [enables feature output for SILK enhancement]),, 925*a58d3d2aSXin Li [enable_osc_training_data=no] 926*a58d3d2aSXin Li) 927*a58d3d2aSXin Li 928*a58d3d2aSXin LiAS_IF([test "$enable_osce_training_data" = "yes"], [ 929*a58d3d2aSXin Li AC_DEFINE([ENABLE_OSCE_TRAINING_DATA], [1], [Enable dumping of OSCE training data]) 930*a58d3d2aSXin Li]) 931*a58d3d2aSXin Li 932*a58d3d2aSXin LiAC_MSG_CHECKING([argument osce training data]) 933*a58d3d2aSXin LiAS_IF([test "$enable_osce_training_data" = "yes"], [ 934*a58d3d2aSXin Li AC_MSG_RESULT([yes]) 935*a58d3d2aSXin Li], [AC_MSG_RESULT([no])]) 936*a58d3d2aSXin Li 937*a58d3d2aSXin LiAC_ARG_ENABLE([osce], 938*a58d3d2aSXin Li AS_HELP_STRING([--enable-osce], [enables speech coding enhancement]),, 939*a58d3d2aSXin Li [enable_osce=no] 940*a58d3d2aSXin Li) 941*a58d3d2aSXin Li 942*a58d3d2aSXin LiAS_IF([test "$enable_osce" = "yes" || test "$enable_osce_training_data" = "yes"], [ 943*a58d3d2aSXin Li AC_DEFINE([ENABLE_OSCE], [1], [Enable Opus Speech Coding Enhancement]) 944*a58d3d2aSXin Li]) 945*a58d3d2aSXin Li 946*a58d3d2aSXin LiAM_CONDITIONAL([ENABLE_OSCE], [test "$enable_osce" = "yes" || test "$enable_osce_training_data" = "yes"]) 947*a58d3d2aSXin Li 948*a58d3d2aSXin LiAM_CONDITIONAL([HAVE_DOXYGEN], [test "$HAVE_DOXYGEN" = "yes"]) 949*a58d3d2aSXin Li 950*a58d3d2aSXin LiAC_ARG_ENABLE([extra-programs], 951*a58d3d2aSXin Li [AS_HELP_STRING([--disable-extra-programs], [Do not build extra programs (demo and tests)])],, 952*a58d3d2aSXin Li [enable_extra_programs=yes]) 953*a58d3d2aSXin Li 954*a58d3d2aSXin LiAM_CONDITIONAL([EXTRA_PROGRAMS], [test "$enable_extra_programs" = "yes"]) 955*a58d3d2aSXin Li 956*a58d3d2aSXin Li 957*a58d3d2aSXin LiAC_ARG_ENABLE([rfc8251], 958*a58d3d2aSXin Li AS_HELP_STRING([--disable-rfc8251], [Disable bitstream fixes from RFC 8251]),, 959*a58d3d2aSXin Li [enable_rfc8251=yes]) 960*a58d3d2aSXin Li 961*a58d3d2aSXin LiAS_IF([test "$enable_rfc8251" = "no"], [ 962*a58d3d2aSXin Li AC_DEFINE([DISABLE_UPDATE_DRAFT], [1], [Disable bitstream fixes from RFC 8251]) 963*a58d3d2aSXin Li]) 964*a58d3d2aSXin Li 965*a58d3d2aSXin Li 966*a58d3d2aSXin Lisaved_CFLAGS="$CFLAGS" 967*a58d3d2aSXin LiCFLAGS="$CFLAGS -fvisibility=hidden" 968*a58d3d2aSXin LiAC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden]) 969*a58d3d2aSXin LiAC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], 970*a58d3d2aSXin Li [ AC_MSG_RESULT([yes]) ], 971*a58d3d2aSXin Li [ AC_MSG_RESULT([no]) 972*a58d3d2aSXin Li CFLAGS="$saved_CFLAGS" 973*a58d3d2aSXin Li ]) 974*a58d3d2aSXin Li 975*a58d3d2aSXin Lion_x86=no 976*a58d3d2aSXin Licase "$host_cpu" in 977*a58d3d2aSXin Lii[[3456]]86 | x86_64) 978*a58d3d2aSXin Li on_x86=yes 979*a58d3d2aSXin Li ;; 980*a58d3d2aSXin Liesac 981*a58d3d2aSXin Li 982*a58d3d2aSXin Lion_windows=no 983*a58d3d2aSXin Licase $host in 984*a58d3d2aSXin Li*cygwin*|*mingw*) 985*a58d3d2aSXin Li on_windows=yes 986*a58d3d2aSXin Li ;; 987*a58d3d2aSXin Liesac 988*a58d3d2aSXin Li 989*a58d3d2aSXin Lidnl Enable stack-protector-all only on x86 where it's well supported. 990*a58d3d2aSXin Lidnl on some platforms it causes crashes. Hopefully the OS's default's 991*a58d3d2aSXin Lidnl include this on platforms that work but have been missed here. 992*a58d3d2aSXin LiAC_ARG_ENABLE([stack-protector], 993*a58d3d2aSXin Li [AS_HELP_STRING([--disable-stack-protector],[Disable compiler stack hardening])],, 994*a58d3d2aSXin Li [ 995*a58d3d2aSXin Li AS_IF([test "$ac_cv_c_compiler_gnu" = "yes" && test "$on_x86" = "yes" && test "$on_windows" = "no"], 996*a58d3d2aSXin Li [enable_stack_protector=yes],[enable_stack_protector=no]) 997*a58d3d2aSXin Li ]) 998*a58d3d2aSXin Li 999*a58d3d2aSXin LiAS_IF([test "$enable_stack_protector" = "yes"], 1000*a58d3d2aSXin Li [ 1001*a58d3d2aSXin Li saved_CFLAGS="$CFLAGS" 1002*a58d3d2aSXin Li CFLAGS="$CFLAGS -fstack-protector-strong" 1003*a58d3d2aSXin Li AC_MSG_CHECKING([if ${CC} supports -fstack-protector-strong]) 1004*a58d3d2aSXin Li AC_LINK_IFELSE([AC_LANG_PROGRAM([],[[char foo;]])], 1005*a58d3d2aSXin Li [ AC_MSG_RESULT([yes]) ], 1006*a58d3d2aSXin Li [ 1007*a58d3d2aSXin Li AC_MSG_RESULT([no]) 1008*a58d3d2aSXin Li enable_stack_protector=no 1009*a58d3d2aSXin Li CFLAGS="$saved_CFLAGS" 1010*a58d3d2aSXin Li ]) 1011*a58d3d2aSXin Li ]) 1012*a58d3d2aSXin Li 1013*a58d3d2aSXin LiAS_IF([test x$ac_cv_c_compiler_gnu = xyes], 1014*a58d3d2aSXin Li [AX_ADD_FORTIFY_SOURCE] 1015*a58d3d2aSXin Li) 1016*a58d3d2aSXin Li 1017*a58d3d2aSXin LiCFLAGS="$CFLAGS -W" 1018*a58d3d2aSXin Li 1019*a58d3d2aSXin Liwarn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes" 1020*a58d3d2aSXin Lisaved_CFLAGS="$CFLAGS" 1021*a58d3d2aSXin LiCFLAGS="$CFLAGS $warn_CFLAGS" 1022*a58d3d2aSXin LiAC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}]) 1023*a58d3d2aSXin LiAC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], 1024*a58d3d2aSXin Li [ AC_MSG_RESULT([yes]) ], 1025*a58d3d2aSXin Li [ AC_MSG_RESULT([no]) 1026*a58d3d2aSXin Li CFLAGS="$saved_CFLAGS" 1027*a58d3d2aSXin Li ]) 1028*a58d3d2aSXin Li 1029*a58d3d2aSXin Lisaved_LIBS="$LIBS" 1030*a58d3d2aSXin LiLIBS="$LIBS $LIBM" 1031*a58d3d2aSXin LiAC_CHECK_FUNCS([lrintf]) 1032*a58d3d2aSXin LiAC_CHECK_FUNCS([lrint]) 1033*a58d3d2aSXin LiLIBS="$saved_LIBS" 1034*a58d3d2aSXin Li 1035*a58d3d2aSXin LiAC_CHECK_FUNCS([__malloc_hook]) 1036*a58d3d2aSXin Li 1037*a58d3d2aSXin LiAC_SUBST([PC_BUILD]) 1038*a58d3d2aSXin Li 1039*a58d3d2aSXin LiAC_CONFIG_FILES([ 1040*a58d3d2aSXin Li Makefile 1041*a58d3d2aSXin Li opus.pc 1042*a58d3d2aSXin Li opus-uninstalled.pc 1043*a58d3d2aSXin Li celt/arm/armopts.s 1044*a58d3d2aSXin Li doc/Makefile 1045*a58d3d2aSXin Li doc/Doxyfile 1046*a58d3d2aSXin Li]) 1047*a58d3d2aSXin LiAC_CONFIG_HEADERS([config.h]) 1048*a58d3d2aSXin Li 1049*a58d3d2aSXin LiAC_OUTPUT 1050*a58d3d2aSXin Li 1051*a58d3d2aSXin LiAC_MSG_NOTICE([ 1052*a58d3d2aSXin Li------------------------------------------------------------------------ 1053*a58d3d2aSXin Li $PACKAGE_NAME $PACKAGE_VERSION: Automatic configuration OK. 1054*a58d3d2aSXin Li 1055*a58d3d2aSXin Li Compiler support: 1056*a58d3d2aSXin Li 1057*a58d3d2aSXin Li C99 var arrays: ................ ${has_var_arrays} 1058*a58d3d2aSXin Li C99 lrintf: .................... ${ac_cv_func_lrintf} 1059*a58d3d2aSXin Li Use alloca: .................... ${use_alloca} 1060*a58d3d2aSXin Li 1061*a58d3d2aSXin Li General configuration: 1062*a58d3d2aSXin Li 1063*a58d3d2aSXin Li Floating point support: ........ ${enable_float} 1064*a58d3d2aSXin Li Fast float approximations: ..... ${enable_float_approx} 1065*a58d3d2aSXin Li Fixed point debugging: ......... ${enable_fixed_point_debug} 1066*a58d3d2aSXin Li Inline Assembly Optimizations: . ${inline_optimization} 1067*a58d3d2aSXin Li External Assembly Optimizations: ${asm_optimization} 1068*a58d3d2aSXin Li Intrinsics Optimizations: ...... ${intrinsics_support} 1069*a58d3d2aSXin Li Run-time CPU detection: ........ ${rtcd_support} 1070*a58d3d2aSXin Li Custom modes: .................. ${enable_custom_modes} 1071*a58d3d2aSXin Li Assertion checking: ............ ${enable_assertions} 1072*a58d3d2aSXin Li Hardening: ..................... ${enable_hardening} 1073*a58d3d2aSXin Li Fuzzing: ....................... ${enable_fuzzing} 1074*a58d3d2aSXin Li Check ASM: ..................... ${enable_check_asm} 1075*a58d3d2aSXin Li 1076*a58d3d2aSXin Li API documentation: ............. ${enable_doc} 1077*a58d3d2aSXin Li Extra programs: ................ ${enable_extra_programs} 1078*a58d3d2aSXin Li------------------------------------------------------------------------ 1079*a58d3d2aSXin Li 1080*a58d3d2aSXin Li Type "make; make install" to compile and install 1081*a58d3d2aSXin Li Type "make check" to run the test suite 1082*a58d3d2aSXin Li]) 1083*a58d3d2aSXin Li 1084