X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=configure;h=81a4c7ae270bc4b2ab3d91a3c9dc09bce0db1ff2;hb=0e830094ad0dc251613a0aa3234d9c5c397e02e6;hp=f624cfc5211fd5148c68e9d36054dfb61b7e47c7;hpb=1a5fdf9519d7f4b9a1bdda623516c37744f569bd;p=ffmpeg diff --git a/configure b/configure index f624cfc5211..81a4c7ae270 100755 --- a/configure +++ b/configure @@ -202,6 +202,7 @@ External library support: --enable-libvorbis enable Vorbis encoding via libvorbis [no] --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no] --enable-libwavpack enable wavpack encoding via libwavpack [no] + --enable-libwebp enable WebP encoding via libwebp [no] --enable-libx264 enable H.264 encoding via x264 [no] --enable-libxavs enable AVS encoding via xavs [no] --enable-libxvid enable Xvid encoding via xvidcore, @@ -286,6 +287,8 @@ Developer options (useful when working on Libav itself): --enable-extra-warnings enable more compiler warnings --samples=PATH location of test samples for FATE, if not set use \$LIBAV_SAMPLES at make invocation time. + --enable-neon-clobber-test check NEON registers for clobbering (should be + used only for debugging purposes) --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only; should be used only for debugging purposes) --enable-random randomly enable/disable components @@ -762,6 +765,13 @@ check_ld(){ check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs } +print_include(){ + hdr=$1 + test "${hdr%.h}" = "${hdr}" && + echo "#include $hdr" || + echo "#include <$hdr>" +} + check_code(){ log check_code "$@" check=$1 @@ -770,7 +780,7 @@ check_code(){ shift 3 { for hdr in $headers; do - echo "#include <$hdr>" + print_include $hdr done echo "int main(void) { $code; return 0; }" } | check_$check "$@" @@ -865,7 +875,7 @@ check_func_headers(){ shift 2 { for hdr in $headers; do - echo "#include <$hdr>" + print_include $hdr done for func in $funcs; do echo "long check_$func(void) { return (long) $func; }" @@ -1116,6 +1126,7 @@ EXTERNAL_LIBRARY_LIST=" libvorbis libvpx libwavpack + libwebp libx264 libxavs libxvid @@ -1165,6 +1176,7 @@ CONFIG_LIST=" lzo mdct memalign_hack + neon_clobber_test network nonfree pod2man @@ -1443,6 +1455,7 @@ CONFIG_EXTRA=" h264qpel hpeldsp huffman + intrax8 lgplv3 lpc mpegaudio @@ -1531,8 +1544,8 @@ CMDLINE_APPEND=" armv5te_deps="arm" armv6_deps="arm" armv6t2_deps="arm" -neon_deps="arm" -vfp_deps="arm" +neon_deps_any="aarch64 arm" +vfp_deps_any="aarch64 arm" vfpv3_deps="vfp" map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM @@ -1548,6 +1561,7 @@ x86_64_suggest="fast_cmov" amd3dnow_deps="mmx" amd3dnowext_deps="amd3dnow" +i686_deps="x86" mmx_deps="x86" mmxext_deps="mmx" sse_deps="mmxext" @@ -1571,10 +1585,10 @@ for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do eval ${ext}_suggest='"${ext}_external ${ext}_inline"' done -aligned_stack_if_any="ppc x86" -fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64" -fast_clz_if_any="alpha avr32 mips ppc x86" -fast_unaligned_if_any="ppc x86" +aligned_stack_if_any="aarch64 ppc x86" +fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64" +fast_clz_if_any="aarch64 alpha avr32 mips ppc x86" +fast_unaligned_if_any="aarch64 ppc x86" need_memalign="altivec neon sse" @@ -1583,6 +1597,13 @@ log2_deps="!libc_msvcrt" symver_if_any="symver_asm_label symver_gnu_asm" +# threading support +atomics_gcc_if="sync_val_compare_and_swap" +atomics_suncc_if="atomic_cas_ptr machine_rw_barrier" +atomics_win32_if="MemoryBarrier" +atomics_native_if_any="$ATOMICS_LIST" +threads_if_any="$THREADS_LIST" + # subsystems dct_select="rdft" error_resilience_select="dsputil" @@ -1614,6 +1635,7 @@ asv2_decoder_select="dsputil" asv2_encoder_select="dsputil" atrac1_decoder_select="mdct sinewin" atrac3_decoder_select="mdct" +atrac3p_decoder_select="mdct sinewin" bink_decoder_select="dsputil hpeldsp" binkaudio_dct_decoder_select="mdct rdft dct sinewin" binkaudio_rdft_decoder_select="mdct rdft sinewin" @@ -1744,7 +1766,7 @@ twinvq_decoder_select="mdct lsp sinewin" utvideo_decoder_select="dsputil" utvideo_encoder_select="dsputil huffman" vble_decoder_select="dsputil" -vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel" +vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel intrax8" vc1image_decoder_select="vc1_decoder" vorbis_decoder_select="mdct" vorbis_encoder_select="mdct" @@ -1764,7 +1786,7 @@ wmav2_encoder_select="mdct sinewin" wmavoice_decoder_select="lsp rdft dct mdct sinewin" wmv1_decoder_select="h263_decoder" wmv1_encoder_select="h263_encoder" -wmv2_decoder_select="h263_decoder videodsp" +wmv2_decoder_select="h263_decoder intrax8 videodsp" wmv2_encoder_select="h263_encoder" wmv3_decoder_select="vc1_decoder" wmv3image_decoder_select="wmv3_decoder" @@ -1860,6 +1882,7 @@ libvpx_vp8_encoder_deps="libvpx" libvpx_vp9_decoder_deps="libvpx" libvpx_vp9_encoder_deps="libvpx" libwavpack_encoder_deps="libwavpack" +libwebp_encoder_deps="libwebp" libx264_encoder_deps="libx264" libxavs_encoder_deps="libxavs" libxvid_encoder_deps="libxvid" @@ -1991,7 +2014,6 @@ interlace_filter_deps="gpl" resample_filter_deps="avresample" ocv_filter_deps="libopencv" scale_filter_deps="swscale" -yadif_filter_deps="gpl" # examples output_example_deps="avcodec avformat avutil swscale" @@ -2104,8 +2126,6 @@ HOSTCC_E='-E -o $@' HOSTCC_O='-o $@' HOSTLD_O='-o $@' -host_cflags='-O3 -g' -host_cppflags='-D_ISOC99_SOURCE' host_libs='-lm' host_cflags_filter=echo host_ldflags_filter=echo @@ -2682,7 +2702,7 @@ probe_cc(){ elif $_cc -v 2>&1 | grep -q clang; then _type=clang _ident=$($_cc --version | head -n1) - _depflags='-MMD' + _depflags='-MMD -MF $(@:.o=.d) -MT $@' _cflags_speed='-O3' _cflags_size='-Os' elif $_cc -V 2>&1 | grep -q Sun; then @@ -3146,8 +3166,10 @@ check_cc -D_LARGEFILE_SOURCE < EOF +add_host_cppflags -D_ISOC99_SOURCE check_host_cflags -std=c99 check_host_cflags -Wall +check_host_cflags -O3 check_64bit(){ arch32=$1 @@ -3401,6 +3423,7 @@ esac probe_libc(){ pfx=$1 + pfx_no_=${pfx%_} # uclibc defines __GLIBC__, so it needs to be checked before glibc. if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then eval ${pfx}libc_type=uclibc @@ -3415,13 +3438,18 @@ probe_libc(){ # MinGW64 is backwards compatible with MinGW32, so check for it first. elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then eval ${pfx}libc_type=mingw64 - add_${pfx}cppflags -U__STRICT_ANSI__ - elif check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then + add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1 + eval test \$${pfx_no_}cc_type = "gcc" && + add_${pfx}cppflags -D__printf__=__gnu_printf__ + elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" || + check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then eval ${pfx}libc_type=mingw32 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \ (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" || die "ERROR: MinGW32 runtime version must be >= 3.15." - add_${pfx}cppflags -U__STRICT_ANSI__ + add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1 + eval test \$${pfx_no_}cc_type = "gcc" && + add_${pfx}cppflags -D__printf__=__gnu_printf__ elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then eval ${pfx}libc_type=msvcrt # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to @@ -3436,7 +3464,7 @@ probe_libc(){ eval ${pfx}libc_type=klibc elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then eval ${pfx}libc_type=bionic - elif check_${pfx}cpp_condition sys/brand.h "defined SOLARIS_BRAND_NAME"; then + elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then eval ${pfx}libc_type=solaris add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 fi @@ -3570,7 +3598,14 @@ od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian check_inline_asm inline_asm_labels '"1:\n"' -if enabled alpha; then +if enabled aarch64; then + # internal assembler in clang 3.3 does not support this instruction + enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1' + enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2' + + map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM + +elif enabled alpha; then check_cflags -mieee @@ -3753,7 +3788,7 @@ if ! disabled network; then check_func_headers winsock2.h closesocket -lws2 && network_extralibs="-lws2" || { check_func_headers winsock2.h closesocket -lws2_32 && - network_extralibs="-lws2_32"; } + network_extralibs="-lws2_32"; } || disable winsock2_h network check_func_headers ws2tcpip.h getaddrinfo $network_extralibs check_type ws2tcpip.h socklen_t check_type ws2tcpip.h "struct addrinfo" @@ -3833,20 +3868,16 @@ check_header VideoDecodeAcceleration/VDADecoder.h check_header windows.h check_header X11/extensions/XvMClib.h -disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib -disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib - if ! disabled w32threads && ! enabled pthreads; then - check_func_headers "windows.h process.h" _beginthreadex && enable w32threads + check_func_headers "windows.h process.h" _beginthreadex && + enable w32threads || disable w32threads fi # check for some common methods of building with pthread support # do this before the optional library checks as some of them require pthreads if ! disabled pthreads && ! enabled w32threads; then enable pthreads - if check_func pthread_join; then - : - elif check_func pthread_join -pthread; then + if check_func pthread_join -pthread; then add_cflags -pthread add_extralibs -pthread elif check_func pthread_join -pthreads; then @@ -3854,7 +3885,9 @@ if ! disabled pthreads && ! enabled w32threads; then add_extralibs -pthreads elif check_func pthread_join -lpthreadGC2; then add_extralibs -lpthreadGC2 - elif ! check_lib pthread.h pthread_join -lpthread; then + elif check_lib pthread.h pthread_join -lpthread; then + : + elif ! check_func pthread_join; then disable pthreads fi fi @@ -3867,9 +3900,8 @@ for thread in $THREADS_LIST; do fi done -enabled sync_val_compare_and_swap && enable atomics_gcc -enabled_all atomic_cas_ptr machine_rw_barrier && enable atomics_suncc -enabled MemoryBarrier && enable atomics_win32 +disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib +disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib check_lib math.h sin -lm && LIBM="-lm" enabled vaapi && require vaapi va/va.h vaInitialize -lva @@ -3890,7 +3922,7 @@ enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h hea enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac -enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType +enabled libfreetype && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do check_lib "${gsm_hdr}" gsm_create -lgsm && break; done || die "ERROR: libgsm not found"; } @@ -3917,6 +3949,7 @@ enabled libvpx && { enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; } enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } } enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack +enabled libwebp && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 && { check_cpp_condition x264.h "X264_BUILD >= 118" || die "ERROR: libx264 version must be >= 0.118."; } @@ -4037,6 +4070,17 @@ test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic # -wN '..@*' is more selective than -x, but not available everywhere. check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true' +enabled neon_clobber_test && + check_ldflags -Wl,--wrap,avcodec_open2 \ + -Wl,--wrap,avcodec_decode_audio4 \ + -Wl,--wrap,avcodec_decode_video2 \ + -Wl,--wrap,avcodec_decode_subtitle2 \ + -Wl,--wrap,avcodec_encode_audio2 \ + -Wl,--wrap,avcodec_encode_video2 \ + -Wl,--wrap,avcodec_encode_subtitle \ + -Wl,--wrap,avresample_convert || + disable neon_clobber_test + enabled xmm_clobber_test && check_ldflags -Wl,--wrap,avcodec_open2 \ -Wl,--wrap,avcodec_decode_audio4 \ @@ -4045,6 +4089,7 @@ enabled xmm_clobber_test && -Wl,--wrap,avcodec_encode_audio2 \ -Wl,--wrap,avcodec_encode_video2 \ -Wl,--wrap,avcodec_encode_subtitle \ + -Wl,--wrap,avresample_convert \ -Wl,--wrap,sws_scale || disable xmm_clobber_test @@ -4172,9 +4217,6 @@ case $target_os in ;; esac -enabled_any $THREADS_LIST && enable threads -enabled_any $ATOMICS_LIST && enable atomics_native - enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; } check_deps $CONFIG_LIST \ @@ -4217,6 +4259,10 @@ if enabled x86; then echo "EBX available ${ebx_available-no}" echo "EBP available ${ebp_available-no}" fi +if enabled aarch64; then + echo "NEON enabled ${neon-no}" + echo "VFP enabled ${vfp-no}" +fi if enabled arm; then echo "ARMv5TE enabled ${armv5te-no}" echo "ARMv6 enabled ${armv6-no}"