X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=configure;h=2b1bd325625f8801269ff4b5cd9c52217a960e81;hb=89b51b570daa80e6e3790fcd449fe61fc5574e07;hp=b1c6d4511c72306ba432324f407d7f7dbeaa99ac;hpb=d4c99513f41272b9753e59642724717b834710a0;p=ffmpeg diff --git a/configure b/configure index b1c6d4511c7..2b1bd325625 100755 --- a/configure +++ b/configure @@ -100,16 +100,21 @@ Configuration options: --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary) --enable-gray enable full grayscale support (slower color) --disable-swscale-alpha disable alpha channel support in swscale + --disable-all disable building components, libraries and programs -Component options: - --disable-doc do not build documentation +Program options: + --disable-programs do not build command line programs --disable-avconv disable avconv build --disable-avplay disable avplay build --disable-avprobe disable avprobe build --disable-avserver disable avserver build + +Component options: + --disable-doc do not build documentation --disable-avdevice disable libavdevice build --disable-avcodec disable libavcodec build --disable-avformat disable libavformat build + --disable-avutil disable libavutil build --disable-swscale disable libswscale build --disable-avfilter disable video filter support [no] --disable-avresample disable libavresample build [no] @@ -118,8 +123,8 @@ Component options: --enable-x11grab enable X11 grabbing [no] --disable-network disable network support [no] --disable-dct disable DCT code - --disable-dwt disable DWT code --disable-lsp disable LSP code + --disable-lzo disable LZO decoder code --disable-mdct disable MDCT code --disable-rdft disable RDFT code --disable-fft disable FFT code @@ -260,7 +265,7 @@ Optimization options (experts only): --disable-armv5te disable armv5te optimizations --disable-armv6 disable armv6 optimizations --disable-armv6t2 disable armv6t2 optimizations - --disable-armvfp disable ARM VFP optimizations + --disable-vfp disable VFP optimizations --disable-neon disable NEON optimizations --disable-vis disable VIS optimizations --disable-inline-asm disable use of inline assembler @@ -530,12 +535,13 @@ is_in(){ return 1 } -check_deps(){ +do_check_deps(){ for cfg; do cfg="${cfg#!}" enabled ${cfg}_checking && die "Circular dependency for $cfg." disabled ${cfg}_checking && continue enable ${cfg}_checking + append allopts $cfg eval dep_all="\$${cfg}_deps" eval dep_any="\$${cfg}_deps_any" @@ -545,7 +551,7 @@ check_deps(){ eval dep_ifn="\$${cfg}_if_any" pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn - check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn + do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; } @@ -555,8 +561,6 @@ check_deps(){ disabled_any $dep_sel && disable $cfg if enabled $cfg; then - eval dep_extralibs="\$${cfg}_extralibs" - test -n "$dep_extralibs" && add_extralibs $dep_extralibs enable_deep $dep_sel enable_deep_weak $dep_sgs fi @@ -565,39 +569,48 @@ check_deps(){ done } -print_config_h(){ - enabled $1 && v=1 || v=0 - echo "#define $2 $v" -} +check_deps(){ + unset allopts -print_config_mak(){ - enabled $1 && v= || v=! - echo "$v$2=yes" -} + do_check_deps "$@" -print_config_asm(){ - enabled $1 && v=1 || v=0 - echo "%define $2 $v" + for cfg in $allopts; do + enabled $cfg || continue + eval dep_extralibs="\$${cfg}_extralibs" + test -n "$dep_extralibs" && add_extralibs $dep_extralibs + done } print_config(){ pfx=$1 files=$2 shift 2 - for cfg; do - ucname="$(toupper $cfg)" - for f in $files; do - "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f - done - done + map 'eval echo "$v \${$v:-no}"' "$@" | + awk "BEGIN { split(\"$files\", files) } + { + c = \"$pfx\" toupper(\$1); + v = \$2; + sub(/yes/, 1, v); + sub(/no/, 0, v); + for (f in files) { + file = files[f]; + if (file ~ /\\.h\$/) { + printf(\"#define %s %d\\n\", c, v) >>file; + } else if (file ~ /\\.asm\$/) { + printf(\"%%define %s %d\\n\", c, v) >>file; + } else if (file ~ /\\.mak\$/) { + n = -v ? \"\" : \"!\"; + printf(\"%s%s=yes\\n\", n, c) >>file; + } + } + }" } print_enabled(){ - test x"$1" = x-n && end=" " && shift || end="\n" suf=$1 shift for v; do - enabled $v && printf "%s$end" ${v%$suf}; + enabled $v && printf "%s\n" ${v%$suf}; done } @@ -680,9 +693,9 @@ as_o(){ check_as(){ log check_as "$@" - cat > $TMPC - log_file $TMPC - check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPC + cat > $TMPS + log_file $TMPS + check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS } check_inline_asm(){ @@ -691,11 +704,17 @@ check_inline_asm(){ code="$2" shift 2 disable $name - check_as "$@" < $TMPS @@ -784,11 +803,13 @@ EOF check_mathfunc(){ log check_mathfunc "$@" func=$1 - shift + narg=$2 + shift 2 + test $narg = 2 && args="f, g" || args="f" disable $func check_ld "$@" < -float foo(float f) { return $func(f); } +float foo(float f, float g) { return $func($args); } int main(void){ return 0; } EOF } @@ -976,6 +997,16 @@ COMPONENT_LIST=" protocols " +LIBRARY_LIST=" + avcodec + avdevice + avfilter + avformat + avresample + avutil + swscale +" + PROGRAM_LIST=" avconv avplay @@ -985,17 +1016,12 @@ PROGRAM_LIST=" CONFIG_LIST=" $COMPONENT_LIST + $LIBRARY_LIST $PROGRAM_LIST - avcodec - avdevice - avfilter - avformat - avresample avisynth bzlib dct doc - dwt dxva2 fft frei0r @@ -1029,6 +1055,7 @@ CONFIG_LIST=" libxavs libxvid lsp + lzo mdct memalign_hack network @@ -1042,7 +1069,6 @@ CONFIG_LIST=" small sram static - swscale swscale_alpha thumb vaapi @@ -1060,6 +1086,7 @@ THREADS_LIST=' ' ARCH_LIST=' + aarch64 alpha arm avr32 @@ -1085,6 +1112,15 @@ ARCH_LIST=' x86_64 ' +ARCH_EXT_LIST_ARM=' + armv5te + armv6 + armv6t2 + neon + vfp + vfpv3 +' + ARCH_EXT_LIST_X86=' amd3dnow amd3dnowext @@ -1101,15 +1137,10 @@ ARCH_EXT_LIST_X86=' ' ARCH_EXT_LIST=" + $ARCH_EXT_LIST_ARM $ARCH_EXT_LIST_X86 altivec - armv5te - armv6 - armv6t2 - armvfp - neon ppc4xx - vfpv3 vis " @@ -1170,6 +1201,7 @@ HAVE_LIST=" attribute_packed closesocket cmov + CommandLineToArgvW cpunop CryptGenRandom dcbzl @@ -1230,6 +1262,7 @@ HAVE_LIST=" sched_getaffinity sdl sdl_video_size + SetConsoleTextAttribute setmode setrlimit Sleep @@ -1271,11 +1304,10 @@ HAVE_LIST=" xmm_clobbers " -# options emitted with CONFIG_ prefix but not available on command line +# options emitted with CONFIG_ prefix but not available on the command line CONFIG_EXTRA=" aandcttables ac3dsp - avutil error_resilience gcrypt golomb @@ -1294,7 +1326,9 @@ CONFIG_EXTRA=" nettle rangecoder rtpdec + rtpenc_chain sinewin + videodsp vp3dsp " @@ -1366,9 +1400,11 @@ CMDLINE_APPEND=" armv5te_deps="arm" armv6_deps="arm" armv6t2_deps="arm" -armvfp_deps="arm" neon_deps="arm" -vfpv3_deps="armvfp" +vfp_deps="arm" +vfpv3_deps="vfp" + +map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM altivec_deps="ppc" ppc4xx_deps="ppc" @@ -1403,8 +1439,8 @@ done aligned_stack_if_any="ppc x86" fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64" -fast_clz_if_any="alpha armv5te avr32 mips ppc x86" -fast_unaligned_if_any="armv6 ppc x86" +fast_clz_if_any="alpha avr32 mips ppc x86" +fast_unaligned_if_any="ppc x86" inline_asm_deps="!tms470" need_memalign="altivec neon sse" @@ -1419,9 +1455,10 @@ mdct_select="fft" rdft_select="fft" mpegaudio_select="mpegaudiodsp" mpegaudiodsp_select="dct" +mpegvideo_select="videodsp" mpegvideoenc_select="mpegvideo" -# decoders / encoders / hardware accelerators +# decoders / encoders aac_decoder_select="mdct sinewin" aac_encoder_select="mdct sinewin" aac_latm_decoder_select="aac_decoder aac_latm_parser" @@ -1436,7 +1473,9 @@ atrac3_decoder_select="mdct" binkaudio_dct_decoder_select="mdct rdft dct sinewin" binkaudio_rdft_decoder_select="mdct rdft sinewin" cavs_decoder_select="golomb mpegvideo" +comfortnoise_encoder_select="lpc" cook_decoder_select="mdct sinewin" +cscd_decoder_select="lzo" cscd_decoder_suggest="zlib" dca_decoder_select="mdct" dnxhd_encoder_select="aandcttables mpegvideoenc" @@ -1461,15 +1500,9 @@ h261_decoder_select="error_resilience mpegvideo" h261_encoder_select="aandcttables mpegvideoenc" h263_decoder_select="error_resilience h263_parser mpegvideo" h263_encoder_select="aandcttables error_resilience mpegvideoenc" -h263_vaapi_hwaccel_select="vaapi h263_decoder" h263i_decoder_select="h263_decoder" h263p_encoder_select="h263_encoder" h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo" -h264_dxva2_hwaccel_deps="dxva2api_h" -h264_dxva2_hwaccel_select="dxva2 h264_decoder" -h264_vaapi_hwaccel_select="vaapi h264_decoder" -h264_vda_hwaccel_select="vda h264_decoder" -h264_vdpau_decoder_select="vdpau h264_decoder" huffyuv_encoder_select="huffman" iac_decoder_select="fft mdct sinewin" imc_decoder_select="fft mdct sinewin" @@ -1492,21 +1525,14 @@ mp3on4_decoder_select="mpegaudio" mp3on4float_decoder_select="mpegaudio" mpc7_decoder_select="mpegaudiodsp" mpc8_decoder_select="mpegaudiodsp" -mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder" mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h" mpeg_xvmc_decoder_select="mpegvideo_decoder" -mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" mpeg1video_decoder_select="error_resilience mpegvideo" mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc" -mpeg2_dxva2_hwaccel_deps="dxva2api_h" -mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder" -mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" mpeg2video_decoder_select="error_resilience mpegvideo" mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc" mpeg4_decoder_select="h263_decoder mpeg4video_parser" mpeg4_encoder_select="h263_encoder" -mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder" -mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder" msmpeg4v1_decoder_select="h263_decoder" msmpeg4v1_encoder_select="h263_encoder" msmpeg4v2_decoder_select="h263_decoder" @@ -1516,6 +1542,7 @@ msmpeg4v3_encoder_select="h263_encoder" mss2_decoder_select="vc1_decoder" nellymoser_decoder_select="mdct sinewin" nellymoser_encoder_select="mdct sinewin" +nuv_decoder_select="lzo" png_decoder_select="zlib" png_encoder_select="zlib" qcelp_decoder_select="lsp" @@ -1530,8 +1557,6 @@ rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvi rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo" shorten_decoder_select="golomb" sipr_decoder_select="lsp" -snow_decoder_select="dwt rangecoder" -snow_encoder_select="aandcttables dwt error_resilience mpegvideoenc rangecoder" svq1_decoder_select="error_resilience mpegvideo" svq1_encoder_select="aandcttables error_resilience mpegvideoenc" svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo" @@ -1544,19 +1569,15 @@ tscc_decoder_select="zlib" twinvq_decoder_select="mdct lsp sinewin" utvideo_encoder_select="huffman" vc1_decoder_select="h263_decoder h264chroma h264qpel" -vc1_dxva2_hwaccel_deps="dxva2api_h" -vc1_dxva2_hwaccel_select="dxva2 vc1_decoder" -vc1_vaapi_hwaccel_select="vaapi vc1_decoder" -vc1_vdpau_decoder_select="vdpau vc1_decoder" vc1image_decoder_select="vc1_decoder" vorbis_decoder_select="mdct" vorbis_encoder_select="mdct" -vp3_decoder_select="vp3dsp" -vp5_decoder_select="vp3dsp" -vp6_decoder_select="huffman vp3dsp" +vp3_decoder_select="vp3dsp videodsp" +vp5_decoder_select="vp3dsp videodsp" +vp6_decoder_select="huffman vp3dsp videodsp" vp6a_decoder_select="vp6_decoder" vp6f_decoder_select="vp6_decoder" -vp8_decoder_select="h264pred h264qpel" +vp8_decoder_select="h264pred videodsp" wmapro_decoder_select="mdct sinewin" wmav1_decoder_select="mdct sinewin" wmav1_encoder_select="mdct sinewin" @@ -1568,9 +1589,6 @@ wmv1_encoder_select="h263_encoder" wmv2_decoder_select="h263_decoder" wmv2_encoder_select="h263_encoder" wmv3_decoder_select="vc1_decoder" -wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel" -wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel" -wmv3_vdpau_decoder_select="vc1_vdpau_decoder" wmv3image_decoder_select="wmv3_decoder" zerocodec_decoder_select="zlib" zlib_decoder_select="zlib" @@ -1578,10 +1596,32 @@ zlib_encoder_select="zlib" zmbv_decoder_select="zlib" zmbv_encoder_select="zlib" +# hardware accelerators vaapi_deps="va_va_h" vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads" vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h" +h263_vaapi_hwaccel_select="vaapi h263_decoder" +h264_dxva2_hwaccel_deps="dxva2api_h" +h264_dxva2_hwaccel_select="dxva2 h264_decoder" +h264_vaapi_hwaccel_select="vaapi h264_decoder" +h264_vda_hwaccel_select="vda h264_decoder" +h264_vdpau_decoder_select="vdpau h264_decoder" +mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder" +mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" +mpeg2_dxva2_hwaccel_deps="dxva2api_h" +mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder" +mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" +mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder" +mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder" +vc1_dxva2_hwaccel_deps="dxva2api_h" +vc1_dxva2_hwaccel_select="dxva2 vc1_decoder" +vc1_vaapi_hwaccel_select="vaapi vc1_decoder" +vc1_vdpau_decoder_select="vdpau vc1_decoder" +wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel" +wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel" +wmv3_vdpau_decoder_select="vc1_vdpau_decoder" + # parsers h264_parser_select="error_resilience golomb h264dsp h264pred mpegvideo" mpeg4video_parser_select="error_resilience mpegvideo" @@ -1627,9 +1667,11 @@ dirac_demuxer_select="dirac_parser" eac3_demuxer_select="ac3_parser" flac_demuxer_select="flac_parser" ipod_muxer_select="mov_muxer" +ismv_muxer_select="mov_muxer" matroska_audio_muxer_select="matroska_muxer" -matroska_demuxer_suggest="zlib bzlib" +matroska_demuxer_suggest="bzlib lzo zlib" mov_demuxer_suggest="zlib" +mov_muxer_select="rtpenc_chain" mp3_demuxer_select="mpegaudio_parser" mp4_muxer_select="mov_muxer" mpegts_muxer_select="adts_muxer latm_muxer mpegvideo" @@ -1641,12 +1683,13 @@ rtp_demuxer_select="sdp_demuxer" rtp_muxer_select="mpegvideo" rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer" rtsp_demuxer_select="http_protocol rtpdec" -rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol" +rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain" sap_demuxer_select="sdp_demuxer" -sap_muxer_select="rtp_muxer rtp_protocol" +sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain" sdp_demuxer_select="rtpdec" smoothstreaming_muxer_select="ismv_muxer" spdif_muxer_select="aac_parser" +tak_demuxer_select="tak_parser" tg2_muxer_select="mov_muxer" tgp_muxer_select="mov_muxer" w64_demuxer_deps="wav_demuxer" @@ -1676,10 +1719,8 @@ ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl" ffrtmpcrypt_protocol_select="tcp_protocol" ffrtmphttp_protocol_deps="!librtmp_protocol" ffrtmphttp_protocol_select="http_protocol" -gopher_protocol_deps="network" -httpproxy_protocol_deps="network" +gopher_protocol_select="network" httpproxy_protocol_select="tcp_protocol" -http_protocol_deps="network" http_protocol_select="tcp_protocol" https_protocol_select="tls_protocol" librtmp_protocol_deps="librtmp" @@ -1688,7 +1729,7 @@ librtmps_protocol_deps="librtmp" librtmpt_protocol_deps="librtmp" librtmpte_protocol_deps="librtmp" mmsh_protocol_select="http_protocol" -mmst_protocol_deps="network" +mmst_protocol_select="network" rtmp_protocol_deps="!librtmp_protocol" rtmp_protocol_select="tcp_protocol" rtmpe_protocol_select="ffrtmpcrypt_protocol" @@ -1698,11 +1739,12 @@ rtmpt_protocol_select="ffrtmphttp_protocol" rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol" rtmpts_protocol_select="ffrtmphttp_protocol https_protocol" rtp_protocol_select="udp_protocol" -sctp_protocol_deps="network struct_sctp_event_subscribe" -tcp_protocol_deps="network" +sctp_protocol_deps="struct_sctp_event_subscribe" +sctp_protocol_select="network" +tcp_protocol_select="network" tls_protocol_deps_any="openssl gnutls" tls_protocol_select="tcp_protocol" -udp_protocol_deps="network" +udp_protocol_select="network" # filters blackframe_filter_deps="gpl" @@ -1721,14 +1763,19 @@ scale_filter_deps="swscale" yadif_filter_deps="gpl" # libraries -avdevice_deps="avcodec avformat" -avformat_deps="avcodec" +avcodec_deps="avutil" +avdevice_deps="avutil avcodec avformat" +avfilter_deps="avutil" +avformat_deps="avutil avcodec" +avresample_deps="avutil" +swscale_deps="avutil" # programs -avconv_deps="avcodec avfilter avformat avresample swscale - aformat_filter asyncts_filter - format_filter fps_filter scale_filter setpts_filter" -avplay_deps="avcodec avformat swscale sdl" +avconv_deps="avcodec avfilter avformat avresample swscale" +avconv_select="aformat_filter anull_filter asyncts_filter format_filter + fps_filter null_filter resample_filter scale_filter + setpts_filter" +avplay_deps="avcodec avformat avresample swscale sdl" avplay_select="rdft" avprobe_deps="avcodec avformat" avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared" @@ -1772,20 +1819,11 @@ target_os_default=$(tolower $(uname -s)) host_os=$target_os_default # configurable options -enable $PROGRAM_LIST - -enable avcodec -enable avdevice -enable avfilter -enable avformat -enable avresample -enable avutil -enable swscale +enable $LIBRARY_LIST $PROGRAM_LIST enable asm enable debug enable doc -enable network enable optimizations enable safe_bitstream_reader enable static @@ -1892,8 +1930,6 @@ for n in $COMPONENT_LIST; do eval ${n}_if_any="\$$v" done -disable snow_decoder snow_encoder - enable $ARCH_EXT_LIST die_unknown(){ @@ -1933,63 +1969,74 @@ do_random(){ for opt do optval="${opt#*=}" case "$opt" in - --extra-ldflags=*) add_ldflags $optval - ;; - --extra-libs=*) add_extralibs $optval - ;; - --disable-devices) disable $INDEV_LIST $OUTDEV_LIST - ;; - --enable-debug=*) debuglevel="$optval" - ;; - --disable-everything) - map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST - ;; - --enable-random|--disable-random) - action=${opt%%-random} - do_random ${action#--} $COMPONENT_LIST - ;; - --enable-random=*|--disable-random=*) - action=${opt%%-random=*} - do_random ${action#--} $optval - ;; - --enable-*=*|--disable-*=*) - eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/') - is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" - eval list=\$$(toupper $thing)_LIST - name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing} - $action $(filter "$name" $list) - ;; - --enable-?*|--disable-?*) - eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g') - if is_in $option $COMPONENT_LIST; then - test $action = disable && action=unset - eval $action \$$(toupper ${option%s})_LIST - elif is_in $option $CMDLINE_SELECT; then - $action $option - else - die_unknown $opt - fi - ;; - --list-*) - NAME="${opt#--list-}" - is_in $NAME $COMPONENT_LIST || die_unknown $opt - NAME=${NAME%s} - eval show_list $NAME \$$(toupper $NAME)_LIST - ;; - --help|-h) show_help - ;; - *) - optname="${opt%%=*}" - optname="${optname#--}" - optname=$(echo "$optname" | sed 's/-/_/g') - if is_in $optname $CMDLINE_SET; then - eval $optname='$optval' - elif is_in $optname $CMDLINE_APPEND; then - append $optname "$optval" - else - die_unknown $opt - fi - ;; + --extra-ldflags=*) + add_ldflags $optval + ;; + --extra-libs=*) + add_extralibs $optval + ;; + --disable-devices) + disable $INDEV_LIST $OUTDEV_LIST + ;; + --enable-debug=*) + debuglevel="$optval" + ;; + --disable-programs) + disable $PROGRAM_LIST + ;; + --disable-everything) + map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST + ;; + --disable-all) + map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST + disable $LIBRARY_LIST $PROGRAM_LIST doc + ;; + --enable-random|--disable-random) + action=${opt%%-random} + do_random ${action#--} $COMPONENT_LIST + ;; + --enable-random=*|--disable-random=*) + action=${opt%%-random=*} + do_random ${action#--} $optval + ;; + --enable-*=*|--disable-*=*) + eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/') + is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" + eval list=\$$(toupper $thing)_LIST + name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing} + $action $(filter "$name" $list) + ;; + --enable-?*|--disable-?*) + eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g') + if is_in $option $COMPONENT_LIST; then + test $action = disable && action=unset + eval $action \$$(toupper ${option%s})_LIST + elif is_in $option $CMDLINE_SELECT; then + $action $option + else + die_unknown $opt + fi + ;; + --list-*) + NAME="${opt#--list-}" + is_in $NAME $COMPONENT_LIST || die_unknown $opt + NAME=${NAME%s} + eval show_list $NAME \$$(toupper $NAME)_LIST + ;; + --help|-h) show_help + ;; + *) + optname="${opt%%=*}" + optname="${optname#--}" + optname=$(echo "$optname" | sed 's/-/_/g') + if is_in $optname $CMDLINE_SET; then + eval $optname='$optval' + elif is_in $optname $CMDLINE_APPEND; then + append $optname "$optval" + else + die_unknown $opt + fi + ;; esac done @@ -2103,6 +2150,24 @@ EOF die "Sanity test failed." fi +ccc_flags(){ + for flag; do + case $flag in + -std=c99) echo -c99 ;; + -mcpu=*) echo -arch ${flag#*=} ;; + -mieee) echo -ieee ;; + -O*|-fast) echo $flag ;; + -fno-math-errno) echo -assume nomath_errno ;; + -g) echo -g3 ;; + -Wall) echo -msg_enable level2 ;; + -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;; + -Wl,*) echo $flag ;; + -f*|-W*) ;; + *) echo $flag ;; + esac + done +} + msvc_flags(){ for flag; do case $flag in @@ -2116,6 +2181,7 @@ msvc_flags(){ -fno-math-errno) ;; -fno-common) ;; -fno-signed-zeros) ;; + -fPIC) ;; -lz) echo zlib.lib ;; -lavifil32) echo vfw32.lib ;; -lavicap32) echo vfw32.lib user32.lib ;; @@ -2153,6 +2219,8 @@ suncc_flags(){ prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;; *-sse3) echo -xarch=sse3 ;; core2) echo -xarch=ssse3 -xchip=core2 ;; + corei7) echo -xarch=sse4_2 -xchip=nehalem ;; + corei7-avx) echo -xarch=avx -xchip=sandybridge ;; amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;; athlon-4|athlon-[mx]p) echo -xarch=ssea ;; k8|opteron|athlon64|athlon-fx) @@ -2243,10 +2311,9 @@ probe_cc(){ _type=ccc _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3) _DEPFLAGS='-M' - debuglevel=3 - _ldflags='-Wl,-z,now' # calls to libots crash without this _cflags_speed='-fast' _cflags_size='-O1' + _flags_filter=ccc_flags elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then test -d "$sysroot" || die "No valid sysroot specified." _type=armcc @@ -2450,39 +2517,29 @@ fi # Deal with common $arch aliases case "$arch" in + aarch64|arm64) + arch="aarch64" + ;; arm*) arch="arm" ;; - mips|mipsel|IP*) - arch="mips" - ;; - mips64*) + mips*|IP*) arch="mips" - subarch="mips64" ;; - parisc|hppa) + parisc*|hppa*) arch="parisc" ;; - parisc64|hppa64) - arch="parisc" - subarch="parisc64" - ;; - "Power Macintosh"|ppc|powerpc) + "Power Macintosh"|ppc*|powerpc*) arch="ppc" ;; - ppc64|powerpc64) - arch="ppc" - subarch="ppc64" - ;; s390|s390x) arch="s390" ;; sh4|sh) arch="sh4" ;; - sun4u|sparc64) + sun4u|sparc*) arch="sparc" - subarch="sparc64" ;; tilegx|tile-gx) arch="tilegx" @@ -2496,8 +2553,107 @@ is_in $arch $ARCH_LIST || warn "unknown architecture $arch" enable $arch # Add processor-specific flags -if test "$cpu" = generic; then - : do nothing +if enabled aarch64; then + + case $cpu in + armv*) + cpuflags="-march=$cpu" + ;; + *) + cpuflags="-mcpu=$cpu" + ;; + esac + +elif enabled alpha; then + + cpuflags="-mcpu=$cpu" + +elif enabled arm; then + + check_arm_arch() { + check_cpp_condition stddef.h \ + "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \ + $cpuflags + } + + probe_arm_arch() { + if check_arm_arch 4; then echo armv4; + elif check_arm_arch 4T; then echo armv4t; + elif check_arm_arch 5; then echo armv5; + elif check_arm_arch 5E; then echo armv5e; + elif check_arm_arch 5T; then echo armv5t; + elif check_arm_arch 5TE; then echo armv5te; + elif check_arm_arch 5TEJ; then echo armv5te; + elif check_arm_arch 6; then echo armv6; + elif check_arm_arch 6J; then echo armv6j; + elif check_arm_arch 6K; then echo armv6k; + elif check_arm_arch 6Z; then echo armv6z; + elif check_arm_arch 6ZK; then echo armv6zk; + elif check_arm_arch 6T2; then echo armv6t2; + elif check_arm_arch 7; then echo armv7; + elif check_arm_arch 7A 7_A; then echo armv7-a; + elif check_arm_arch 7R 7_R; then echo armv7-r; + elif check_arm_arch 7M 7_M; then echo armv7-m; + elif check_arm_arch 7EM 7E_M; then echo armv7-m; + elif check_arm_arch 8A 8_A; then echo armv8-a; + fi + } + + [ "$cpu" = generic ] && cpu=$(probe_arm_arch) + + case $cpu in + armv*) + cpuflags="-march=$cpu" + subarch=$(echo $cpu | sed 's/[^a-z0-9]//g') + ;; + *) + cpuflags="-mcpu=$cpu" + case $cpu in + cortex-a*) subarch=armv7a ;; + cortex-r*) subarch=armv7r ;; + cortex-m*) enable thumb; subarch=armv7m ;; + arm11*) subarch=armv6 ;; + arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;; + armv4*|arm7*|arm9[24]*) subarch=armv4 ;; + *) subarch=$(probe_arm_arch) ;; + esac + ;; + esac + + case "$subarch" in + armv5t*) enable fast_clz ;; + armv[6-8]*) enable fast_clz fast_unaligned ;; + esac + +elif enabled avr32; then + + case $cpu in + ap7[02]0[0-2]) + subarch="avr32_ap" + cpuflags="-mpart=$cpu" + ;; + ap) + subarch="avr32_ap" + cpuflags="-march=$cpu" + ;; + uc3[ab]*) + subarch="avr32_uc" + cpuflags="-mcpu=$cpu" + ;; + uc) + subarch="avr32_uc" + cpuflags="-march=$cpu" + ;; + esac + +elif enabled bfin; then + + cpuflags="-mcpu=$cpu" + +elif enabled mips; then + + cpuflags="-march=$cpu" + elif enabled ppc; then case $(tolower $cpu) in @@ -2514,20 +2670,20 @@ elif enabled ppc; then disable altivec ;; g3|75*|ppc75*|powerpc75*) - cpuflags="-mcpu=750 -mpowerpc-gfxopt" + cpuflags="-mcpu=750" disable altivec ;; g4|745*|ppc745*|powerpc745*) - cpuflags="-mcpu=7450 -mpowerpc-gfxopt" + cpuflags="-mcpu=7450" ;; 74*|ppc74*|powerpc74*) - cpuflags="-mcpu=7400 -mpowerpc-gfxopt" + cpuflags="-mcpu=7400" ;; g5|970|ppc970|powerpc970) - cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64" + cpuflags="-mcpu=970" ;; power[3-7]*) - cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64" + cpuflags="-mcpu=$cpu" ;; cell) cpuflags="-mcpu=cell" @@ -2547,6 +2703,18 @@ elif enabled ppc; then ;; esac +elif enabled sparc; then + + case $cpu in + cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789]) + cpuflags="-mcpu=$cpu" + disable vis + ;; + ultrasparc*|niagara[234]) + cpuflags="-mcpu=$cpu" + ;; + esac + elif enabled x86; then case $cpu in @@ -2560,7 +2728,7 @@ elif enabled x86; then disable cmov ;; # targets that do support conditional mov (cmov) - i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom|bdver*) + i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*) cpuflags="-march=$cpu" enable cmov enable fast_cmov @@ -2573,75 +2741,12 @@ elif enabled x86; then ;; esac -elif enabled sparc; then - - case $cpu in - niagara) - cpuflags="-mcpu=$cpu" - disable vis - ;; - sparc64) - cpuflags="-mcpu=v9" - ;; - esac - -elif enabled arm; then - - case $cpu in - armv*) - cpuflags="-march=$cpu" - subarch=$(echo $cpu | sed 's/[^a-z0-9]//g') - ;; - *) - cpuflags="-mcpu=$cpu" - case $cpu in - cortex-a*) subarch=armv7a ;; - cortex-r*) subarch=armv7r ;; - cortex-m*) enable thumb; subarch=armv7m ;; - arm11*) subarch=armv6 ;; - arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;; - armv4*|arm7*|arm9[24]*) subarch=armv4 ;; - esac - ;; - esac - -elif enabled alpha; then - - enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu" - -elif enabled bfin; then - - cpuflags="-mcpu=$cpu" - -elif enabled mips; then - - cpuflags="-march=$cpu" - -elif enabled avr32; then - - case $cpu in - ap7[02]0[0-2]) - subarch="avr32_ap" - cpuflags="-mpart=$cpu" - ;; - ap) - subarch="avr32_ap" - cpuflags="-march=$cpu" - ;; - uc3[ab]*) - subarch="avr32_uc" - cpuflags="-mcpu=$cpu" - ;; - uc) - subarch="avr32_uc" - cpuflags="-march=$cpu" - ;; - esac - fi -add_cflags $cpuflags -add_asflags $cpuflags +if [ "$cpu" != generic ]; then + add_cflags $cpuflags + add_asflags $cpuflags +fi # compiler sanity check check_exec < 1' + spic=$shared + ;; + parisc) + check_64bit parisc parisc64 'sizeof(void *) > 4' + spic=$shared + ;; + ppc) + check_64bit ppc ppc64 'sizeof(void *) > 4' + spic=$shared + ;; + sparc) + check_64bit sparc sparc64 'sizeof(void *) > 4' spic=$shared ;; x86) @@ -2771,12 +2892,12 @@ case $target_os in SLIBSUF=".dll" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' - SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)' + SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS= SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)' SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)' - SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base' + SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base' objformat="win32" dlltool="${cross_prefix}dlltool" ranlib=: @@ -2820,7 +2941,6 @@ case $target_os in SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a' objformat="win32" enable dos_paths - add_cppflags -U__STRICT_ANSI__ ;; *-dos|freedos|opendos) network_extralibs="-lsocket" @@ -2829,7 +2949,6 @@ case $target_os in add_cppflags -U__STRICT_ANSI__ ;; linux) - add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 enable dv1394 ;; irix*) @@ -2860,10 +2979,9 @@ case $target_os in enable dos_paths ;; gnu/kfreebsd) - add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE + add_cppflags -D_BSD_SOURCE ;; gnu) - add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 ;; qnx) add_cppflags -D_QNX_SOURCE @@ -2911,8 +3029,10 @@ esac if check_cpp_condition features.h "defined __UCLIBC__"; then libc_type=uclibc + add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 elif check_cpp_condition features.h "defined __GLIBC__"; then libc_type=glibc + add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 elif check_header _mingw.h; then libc_type=mingw check_cpp_condition _mingw.h \ @@ -2921,6 +3041,7 @@ elif check_header _mingw.h; then die "ERROR: MinGW runtime version must be >= 3.15." elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then libc_type=newlib + add_cppflags -U__STRICT_ANSI__ elif check_func_headers stdlib.h _get_doserrno; then libc_type=msvcrt add_compat strtod.o strtod=avpriv_strtod @@ -2943,6 +3064,10 @@ if enabled_all tms470 glibc; then add_cflags -pds=48 # incompatible redefinition of macro fi +if enabled_all ccc glibc; then + add_ldflags -Wl,-z,now # calls to libots crash without this +fi + esc(){ echo "$*" | sed 's/%/%25/g;s/:/%3a/g' } @@ -3033,6 +3158,7 @@ if enabled alpha; then elif enabled arm; then + check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb enabled thumb && check_cflags -mthumb || check_cflags -marm nogas=die @@ -3049,12 +3175,16 @@ EOF warn "Compiler does not indicate floating-point ABI, guessing $fpabi." fi - enabled armv5te && check_inline_asm armv5te '"qadd r0, r0, r0"' - enabled armv6 && check_inline_asm armv6 '"sadd16 r0, r0, r0"' - enabled armv6t2 && check_inline_asm armv6t2 '"movt r0, #0"' - enabled armvfp && check_inline_asm armvfp '"fadds s0, s0, s0"' - enabled neon && check_inline_asm neon '"vadd.i16 q0, q0, q0"' - enabled vfpv3 && check_inline_asm vfpv3 '"vmov.f32 s0, #1.0"' + enabled armv5te && check_insn armv5te 'qadd r0, r0, r0' + enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0' + enabled armv6t2 && check_insn armv6t2 'movt r0, #0' + enabled neon && check_insn neon 'vadd.i16 q0, q0, q0' + enabled vfp && check_insn vfp 'fadds s0, s0, s0' + enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0' + + [ $target_os = linux ] || + map 'enabled_any ${v}_external ${v}_inline || disable $v' \ + $ARCH_EXT_LIST_ARM check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)' check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)' @@ -3065,6 +3195,14 @@ elif enabled mips; then check_inline_asm loongson '"dmult.g $1, $2, $3"' +elif enabled parisc; then + + if enabled gcc; then + case $($cc -dumpversion) in + 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;; + esac + fi + elif enabled ppc; then enable local_aligned_8 local_aligned_16 @@ -3097,9 +3235,7 @@ EOF elif enabled sparc; then - enabled vis && - check_inline_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc && - add_cflags -mcpu=ultrasparc -mtune=ultrasparc + enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"' elif enabled x86; then @@ -3147,9 +3283,8 @@ EOF elf*) enabled debug && append YASMFLAGS $yasm_debug ;; esac - check_yasm "pextrd [eax], xmm0, 1" && enable yasm || + check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm || die "yasm not found, use --disable-yasm for a crippled build" - check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx_external check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external check_yasm "CPU amdnop" && enable cpunop fi @@ -3164,8 +3299,13 @@ fi if enabled asm; then as=${gas:=$as} - check_inline_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' || + check_as <=0.9.1"; } - enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx || - die "ERROR: libvpx encoder version must be >=0.9.1"; } } + enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx || + die "ERROR: libvpx encoder version must be >=0.9.6"; } } 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."; } @@ -3519,12 +3664,10 @@ if enabled icc; then fi elif enabled ccc; then # disable some annoying warnings - add_cflags -msg_disable cvtu32to64 - add_cflags -msg_disable embedcomment - add_cflags -msg_disable needconstext - add_cflags -msg_disable nomainieee - add_cflags -msg_disable ptrmismatch1 - add_cflags -msg_disable unreachcode + add_cflags -msg_disable bitnotint + add_cflags -msg_disable mixfuncvoid + add_cflags -msg_disable nonstandcast + add_cflags -msg_disable unsupieee elif enabled gcc; then check_optflags -fno-tree-vectorize check_cflags -Werror=implicit-function-declaration @@ -3536,6 +3679,8 @@ elif enabled llvm_gcc; then elif enabled clang; then check_cflags -mllvm -stack-alignment=16 check_cflags -Qunused-arguments + check_cflags -Werror=implicit-function-declaration + check_cflags -Werror=missing-prototypes elif enabled armcc; then # 2523: use of inline assembler is deprecated add_cflags -W${armcc_opt},--diag_suppress=2523 @@ -3553,6 +3698,9 @@ elif enabled msvc; then fi case $target_os in + osf1) + enabled ccc && add_ldflags '-Wl,-expect_unresolved,*' + ;; plan9) add_cppflags -Dmain=plan9_main ;; @@ -3601,7 +3749,7 @@ if enabled arm; then echo "ARMv5TE enabled ${armv5te-no}" echo "ARMv6 enabled ${armv6-no}" echo "ARMv6T2 enabled ${armv6t2-no}" - echo "ARM VFP enabled ${armvfp-no}" + echo "VFP enabled ${vfp-no}" echo "NEON enabled ${neon-no}" fi if enabled ppc; then @@ -3718,6 +3866,7 @@ ASFLAGS=$ASFLAGS AS_C=$AS_C AS_O=$AS_O CC_C=$CC_C +CC_E=$CC_E CC_O=$CC_O LD_O=$LD_O LD_LIB=$LD_LIB @@ -3780,7 +3929,7 @@ SAMPLES:=${samples:-\$(LIBAV_SAMPLES)} EOF get_version(){ - lcname=$1 + lcname=lib${1} name=$(toupper $lcname) file=$source_path/$lcname/version.h eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file") @@ -3789,13 +3938,7 @@ get_version(){ eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak } -get_version libavcodec -get_version libavdevice -get_version libavfilter -get_version libavformat -get_version libavresample -get_version libavutil -get_version libswscale +map 'get_version $v' $LIBRARY_LIST cat > $TMPH <