2007-02-17 21:42:39 +00:00
#!/bin/sh
2002-05-18 23:13:26 +00:00
#
2011-03-17 17:02:14 +01:00
# FFmpeg configure script
2006-11-16 23:11:36 +00:00
#
2008-10-02 15:44:59 +00:00
# Copyright (c) 2000-2002 Fabrice Bellard
# Copyright (c) 2005-2008 Diego Biurrun
# Copyright (c) 2005-2008 Mans Rullgard
2002-05-18 23:13:26 +00:00
#
2003-10-18 18:47:06 +00:00
2008-10-02 15:44:24 +00:00
# Prevent locale nonsense from breaking basic text processing.
2008-10-12 15:56:22 +00:00
LC_ALL = C
export LC_ALL
2008-10-02 15:44:24 +00:00
2006-07-04 22:33:03 +00:00
# make sure we are running under a compatible shell
2006-11-14 22:48:20 +00:00
# try to make this part work with most shells
try_exec( ) {
2006-12-07 19:23:32 +00:00
echo " Trying shell $1 "
2008-05-15 11:37:29 +00:00
type " $1 " > /dev/null 2>& 1 && exec " $@ "
2006-11-14 22:48:20 +00:00
}
2006-08-03 22:27:38 +00:00
unset foo
2008-05-15 11:37:29 +00:00
( : ${ foo %%bar } ) 2> /dev/null
2006-12-07 19:23:32 +00:00
E1 = " $? "
2008-05-15 11:37:29 +00:00
( : ${ foo ? } ) 2> /dev/null
2006-12-07 19:23:32 +00:00
E2 = " $? "
if test " $E1 " != 0 || test " $E2 " = 0; then
echo "Broken shell detected. Trying alternatives."
2006-11-14 22:48:20 +00:00
export FF_CONF_EXEC
if test " 0 $FF_CONF_EXEC " -lt 1; then
FF_CONF_EXEC = 1
try_exec bash " $0 " " $@ "
fi
if test " 0 $FF_CONF_EXEC " -lt 2; then
FF_CONF_EXEC = 2
try_exec ksh " $0 " " $@ "
fi
if test " 0 $FF_CONF_EXEC " -lt 3; then
FF_CONF_EXEC = 3
try_exec /usr/xpg4/bin/sh " $0 " " $@ "
2006-07-04 22:33:03 +00:00
fi
echo "No compatible shell script interpreter found."
2006-12-12 20:40:39 +00:00
echo "This configure script requires a POSIX-compatible shell"
2006-11-14 22:48:20 +00:00
echo "such as bash or ksh."
2011-03-17 17:02:14 +01:00
echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
2006-12-11 10:57:52 +00:00
echo "Instead, install a working POSIX-compatible shell."
2011-03-17 17:02:14 +01:00
echo "Disabling this configure test will create a broken FFmpeg."
2006-11-14 22:48:20 +00:00
if test " $BASH_VERSION " = '2.04.0(1)-release' ; then
echo " This bash version ( $BASH_VERSION ) is broken on your platform. "
echo "Upgrade to a later version if available."
fi
2006-07-04 22:33:03 +00:00
exit 1
fi
2012-09-07 12:50:43 +01:00
test -d /usr/xpg4/bin && PATH = /usr/xpg4/bin:$PATH
2006-05-30 19:46:06 +00:00
show_help( ) {
2012-08-19 21:35:30 +02:00
cat <<EOF
2009-10-31 15:59:08 +00:00
Usage: configure [options]
Options: [defaults in brackets after descriptions]
2012-03-09 00:24:48 +01:00
Help options:
2009-10-31 15:59:08 +00:00
--help print this message
2016-11-06 18:33:05 +01:00
--quiet Suppress showing informative output
2012-03-09 00:24:48 +01:00
--list-decoders show all available decoders
--list-encoders show all available encoders
--list-hwaccels show all available hardware accelerators
--list-demuxers show all available demuxers
--list-muxers show all available muxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
Standard options:
2017-05-03 12:51:48 +02:00
--logfile=FILE log tests and output to FILE [ffbuild/config.log]
2009-10-31 15:59:08 +00:00
--disable-logging do not log configure debug information
2012-11-11 21:37:50 +01:00
--fatal-warnings fail if any configure warning is generated
2016-10-25 22:47:00 +02:00
--prefix=PREFIX install in PREFIX [$prefix_default]
2009-10-31 15:59:08 +00:00
--bindir=DIR install binaries in DIR [PREFIX/bin]
2011-08-15 22:36:13 +02:00
--datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
2013-09-01 13:41:33 +02:00
--docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg]
2009-10-31 15:59:08 +00:00
--libdir=DIR install libs in DIR [PREFIX/lib]
2014-12-15 02:49:12 +01:00
--shlibdir=DIR install shared libs in DIR [LIBDIR]
2009-10-31 15:59:08 +00:00
--incdir=DIR install includes in DIR [PREFIX/include]
--mandir=DIR install man page in DIR [PREFIX/share/man]
2015-05-29 16:08:36 +02:00
--pkgconfigdir=DIR install pkg-config files in DIR [LIBDIR/pkgconfig]
2013-11-10 09:02:51 +01:00
--enable-rpath use rpath to allow installing libraries in paths
not part of the dynamic linker search path
2017-03-31 11:01:33 +02:00
use rpath when linking programs (USE WITH CARE)
2016-02-19 16:34:30 +01:00
--install-name-dir=DIR Darwin directory name for installed targets
2009-10-31 15:59:08 +00:00
2012-03-09 00:24:48 +01:00
Licensing options:
2009-10-31 15:59:08 +00:00
--enable-gpl allow use of GPL code, the resulting libs
and binaries will be under GPL [no]
--enable-version3 upgrade (L)GPL to version 3 [no]
--enable-nonfree allow use of nonfree code, the resulting libs
and binaries will be unredistributable [no]
2012-03-09 00:24:48 +01:00
Configuration options:
--disable-static do not build static libraries [no]
--enable-shared build shared libraries [no]
--enable-small optimize for size instead of speed
2017-03-31 11:01:33 +02:00
--disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)
2012-03-09 00:24:48 +01:00
--enable-gray enable full grayscale support (slower color)
--disable-swscale-alpha disable alpha channel support in swscale
2012-11-10 14:47:52 +01:00
--disable-all disable building components, libraries and programs
2017-07-28 13:44:07 +02:00
--disable-autodetect disable automatically detected external libraries [no]
2012-03-09 00:24:48 +01:00
2012-11-10 18:10:59 +01:00
Program options:
--disable-programs do not build command line programs
2012-11-16 13:07:10 +01:00
--disable-ffmpeg disable ffmpeg build
--disable-ffplay disable ffplay build
--disable-ffprobe disable ffprobe build
2012-11-10 18:10:59 +01:00
2012-08-09 23:37:28 +02:00
Documentation options:
2009-10-31 15:59:08 +00:00
--disable-doc do not build documentation
2012-08-09 23:37:28 +02:00
--disable-htmlpages do not build HTML documentation pages
--disable-manpages do not build man documentation pages
--disable-podpages do not build POD documentation pages
--disable-txtpages do not build text documentation pages
Component options:
2010-01-26 23:13:01 +00:00
--disable-avdevice disable libavdevice build
--disable-avcodec disable libavcodec build
--disable-avformat disable libavformat build
2011-09-19 06:13:30 +02:00
--disable-swresample disable libswresample build
2010-01-26 23:13:01 +00:00
--disable-swscale disable libswscale build
2012-07-15 17:03:06 +02:00
--disable-avfilter disable libavfilter build
2015-03-02 14:56:05 +01:00
--disable-pthreads disable pthreads [autodetect]
--disable-w32threads disable Win32 threads [autodetect]
--disable-os2threads disable OS/2 threads [autodetect]
2009-10-31 15:59:08 +00:00
--disable-network disable network support [no]
2012-07-27 13:01:04 +02:00
--disable-dwt disable DWT code
2013-03-02 16:57:26 -08:00
--disable-error-resilience disable error resilience code
2012-07-27 13:01:04 +02:00
--disable-lsp disable LSP code
2014-08-28 19:32:45 -07:00
--disable-faan disable floating point AAN (I)DCT code
2024-04-02 21:01:56 -07:00
--disable-iamf disable support for Immersive Audio Model
2014-08-02 18:54:43 +02:00
--disable-pixelutils disable pixel utils in libavutil
2013-02-05 15:32:24 +01:00
2012-03-09 00:24:48 +01:00
Individual component options:
2010-03-12 13:03:40 +00:00
--disable-everything disable all components listed below
2009-10-31 15:59:08 +00:00
--disable-encoder=NAME disable encoder NAME
--enable-encoder=NAME enable encoder NAME
--disable-encoders disable all encoders
--disable-decoder=NAME disable decoder NAME
--enable-decoder=NAME enable decoder NAME
--disable-decoders disable all decoders
--disable-hwaccel=NAME disable hwaccel NAME
--enable-hwaccel=NAME enable hwaccel NAME
--disable-hwaccels disable all hwaccels
--disable-muxer=NAME disable muxer NAME
--enable-muxer=NAME enable muxer NAME
--disable-muxers disable all muxers
--disable-demuxer=NAME disable demuxer NAME
--enable-demuxer=NAME enable demuxer NAME
--disable-demuxers disable all demuxers
--enable-parser=NAME enable parser NAME
--disable-parser=NAME disable parser NAME
--disable-parsers disable all parsers
--enable-bsf=NAME enable bitstream filter NAME
--disable-bsf=NAME disable bitstream filter NAME
--disable-bsfs disable all bitstream filters
--enable-protocol=NAME enable protocol NAME
--disable-protocol=NAME disable protocol NAME
--disable-protocols disable all protocols
2012-03-09 00:24:48 +01:00
--enable-indev=NAME enable input device NAME
2009-10-31 15:59:08 +00:00
--disable-indev=NAME disable input device NAME
--disable-indevs disable input devices
2012-03-09 00:24:48 +01:00
--enable-outdev=NAME enable output device NAME
--disable-outdev=NAME disable output device NAME
2009-10-31 15:59:08 +00:00
--disable-outdevs disable output devices
--disable-devices disable all devices
--enable-filter=NAME enable filter NAME
--disable-filter=NAME disable filter NAME
--disable-filters disable all filters
External library support:
2016-05-03 06:38:22 +02:00
2016-06-25 11:01:50 +02:00
Using any of the following switches will allow FFmpeg to link to the
2016-05-03 06:38:22 +02:00
corresponding external library. All the components depending on that library
will become enabled, if all their other dependencies are met and they are not
2020-09-07 02:41:19 +02:00
explicitly disabled. E.g. --enable-libopus will enable linking to
libopus and allow the libopus encoder to be built, unless it is
specifically disabled with --disable-encoder=libopus.
2016-05-03 06:38:22 +02:00
Note that only the system libraries are auto-detected. All the other external
libraries must be explicitly enabled.
Also note that the following help text describes the purpose of the libraries
2016-06-25 11:01:50 +02:00
themselves, not all their features will necessarily be usable by FFmpeg.
2017-08-30 13:28:49 +02:00
--disable-alsa disable ALSA support [autodetect]
2017-09-15 14:27:36 +02:00
--disable-appkit disable Apple AppKit framework [autodetect]
2017-09-06 11:31:40 +02:00
--disable-avfoundation disable Apple AVFoundation framework [autodetect]
2013-05-04 21:18:13 +02:00
--enable-avisynth enable reading of AviSynth script files [no]
2013-05-10 09:55:15 +02:00
--disable-bzlib disable bzlib [autodetect]
2017-09-06 11:33:20 +02:00
--disable-coreimage disable Apple CoreImage framework [autodetect]
2015-10-03 17:24:06 -05:00
--enable-chromaprint enable audio fingerprinting with chromaprint [no]
2014-12-08 00:33:21 +01:00
--enable-frei0r enable frei0r video filtering [no]
2015-11-22 02:16:36 +11:00
--enable-gcrypt enable gcrypt, needed for rtmp(t)e support
if openssl, librtmp or gmp is not used [no]
--enable-gmp enable gmp, needed for rtmp(t)e support
if openssl or librtmp is not used [no]
2014-12-08 00:33:21 +01:00
--enable-gnutls enable gnutls, needed for https support
2018-04-21 15:53:31 +02:00
if openssl, libtls or mbedtls is not used [no]
2013-05-10 09:55:15 +02:00
--disable-iconv disable iconv [autodetect]
2015-09-28 15:18:56 +02:00
--enable-jni enable JNI support [no]
2014-12-08 00:33:21 +01:00
--enable-ladspa enable LADSPA audio filtering [no]
2022-04-09 19:58:55 +02:00
--enable-lcms2 enable ICC profile support via LittleCMS 2 [no]
2018-03-28 18:09:46 -03:00
--enable-libaom enable AV1 video encoding/decoding via libaom [no]
2019-01-14 21:52:23 +02:00
--enable-libaribb24 enable ARIB text and caption decoding via libaribb24 [no]
2023-02-23 19:17:15 +09:00
--enable-libaribcaption enable ARIB text and caption decoding via libaribcaption [no]
2014-12-08 00:33:21 +01:00
--enable-libass enable libass subtitles rendering,
needed for subtitles and ass filter [no]
2012-03-03 04:25:48 +01:00
--enable-libbluray enable BluRay reading using libbluray [no]
2014-04-29 18:53:16 +02:00
--enable-libbs2b enable bs2b DSP library [no]
2014-12-08 00:33:21 +01:00
--enable-libcaca enable textual display using libcaca [no]
2011-11-25 18:17:07 +01:00
--enable-libcelt enable CELT decoding via libcelt [no]
2014-12-08 00:33:21 +01:00
--enable-libcdio enable audio CD grabbing with libcdio [no]
2017-08-08 15:27:27 +02:00
--enable-libcodec2 enable codec2 en/decoding using libcodec2 [no]
2018-05-21 17:46:48 -04:00
--enable-libdav1d enable AV1 decoding via libdav1d [no]
2018-07-27 11:50:19 +08:00
--enable-libdavs2 enable AVS2 decoding via libdavs2 [no]
2009-10-31 15:59:08 +00:00
--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
and libraw1394 [no]
2024-02-18 22:01:44 -06:00
--enable-libdvdnav enable libdvdnav, needed for DVD demuxing [no]
--enable-libdvdread enable libdvdread, needed for DVD demuxing [no]
2013-08-15 15:40:32 -04:00
--enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
2011-08-21 02:29:33 +02:00
--enable-libflite enable flite (voice synthesis) support via libflite [no]
2016-06-21 22:03:18 +02:00
--enable-libfontconfig enable libfontconfig, useful for drawtext filter [no]
2014-12-08 00:33:21 +01:00
--enable-libfreetype enable libfreetype, needed for drawtext filter [no]
--enable-libfribidi enable libfribidi, improves drawtext filter [no]
2023-05-26 12:11:41 +02:00
--enable-libharfbuzz enable libharfbuzz, needed for drawtext filter [no]
2019-10-27 14:44:00 +00:00
--enable-libglslang enable GLSL->SPIRV compilation via libglslang [no]
2013-06-28 10:36:00 +02:00
--enable-libgme enable Game Music Emu via libgme [no]
2012-07-16 18:19:13 +02:00
--enable-libgsm enable GSM de/encoding via libgsm [no]
2012-07-05 14:02:53 +02:00
--enable-libiec61883 enable iec61883 via libiec61883 [no]
2012-06-16 00:42:13 +03:00
--enable-libilbc enable iLBC de/encoding via libilbc [no]
2017-10-21 14:10:39 -03:00
--enable-libjack enable JACK audio sound server [no]
2022-04-17 09:22:35 -04:00
--enable-libjxl enable JPEG XL de/encoding via libjxl [no]
2018-09-07 15:40:25 -04:00
--enable-libklvanc enable Kernel Labs VANC processing [no]
2015-07-14 08:53:35 +03:00
--enable-libkvazaar enable HEVC encoding via libkvazaar [no]
2024-04-01 21:32:04 +00:00
--enable-liblc3 enable LC3 de/encoding via liblc3 [no]
2024-03-19 10:07:18 -03:00
--enable-liblcevc-dec enable LCEVC decoding via liblcevc-dec [no]
2018-07-13 19:33:12 +09:00
--enable-liblensfun enable lensfun lens correction [no]
2011-10-04 20:47:16 +02:00
--enable-libmodplug enable ModPlug via libmodplug [no]
2009-10-31 15:59:08 +00:00
--enable-libmp3lame enable MP3 encoding via libmp3lame [no]
2025-05-18 14:16:21 +05:30
--enable-liboapv enable APV encoding via liboapv [no]
2012-06-18 00:05:52 +03:00
--enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
--enable-libopencv enable video filtering via libopencv [no]
2015-01-08 00:03:09 +02:00
--enable-libopenh264 enable H.264 encoding via OpenH264 [no]
2024-05-31 20:59:43 +05:30
--enable-libopenjpeg enable JPEG 2000 encoding via OpenJPEG [no]
2016-07-14 18:30:27 +01:00
--enable-libopenmpt enable decoding tracked files via libopenmpt [no]
2020-05-25 15:38:09 +08:00
--enable-libopenvino enable OpenVINO as a DNN module backend
for DNN based filters like dnn_processing [no]
2014-05-14 19:07:00 +02:00
--enable-libopus enable Opus de/encoding via libopus [no]
2022-01-27 13:01:43 +08:00
--enable-libplacebo enable libplacebo library [no]
2011-11-18 11:08:31 +01:00
--enable-libpulse enable Pulseaudio input via libpulse [no]
2023-11-28 23:58:15 +01:00
--enable-libqrencode enable QR encode generation via libqrencode [no]
2023-12-26 16:19:10 +01:00
--enable-libquirc enable QR decoding via libquirc [no]
2020-03-08 17:25:31 -04:00
--enable-librabbitmq enable RabbitMQ library [no]
2019-05-29 19:28:24 +01:00
--enable-librav1e enable AV1 encoding via rav1e [no]
2021-02-28 20:56:55 +01:00
--enable-librist enable RIST via librist [no]
2017-05-08 05:02:19 +01:00
--enable-librsvg enable SVG rasterization via librsvg [no]
2015-09-18 20:22:05 +00:00
--enable-librubberband enable rubberband needed for rubberband filter [no]
2010-03-28 13:39:36 +00:00
--enable-librtmp enable RTMP[E] support via librtmp [no]
2021-11-19 13:45:21 +01:00
--enable-libshaderc enable GLSL->SPIRV compilation via libshaderc [no]
2012-07-29 18:20:00 +00:00
--enable-libshine enable fixed-point MP3 encoding via libshine [no]
2014-07-13 00:54:23 +02:00
--enable-libsmbclient enable Samba protocol via libsmbclient [no]
2015-06-30 14:49:07 +02:00
--enable-libsnappy enable Snappy compression, needed for hap encoding [no]
2012-12-11 21:43:42 +01:00
--enable-libsoxr enable Include libsoxr resampling [no]
2012-07-16 18:19:13 +02:00
--enable-libspeex enable Speex de/encoding via libspeex [no]
2018-03-29 21:56:19 -03:00
--enable-libsrt enable Haivision SRT protocol via libsrt [no]
2013-09-18 14:08:11 +02:00
--enable-libssh enable SFTP protocol via libssh [no]
2019-01-18 02:11:38 +00:00
--enable-libsvtav1 enable AV1 encoding via SVT [no]
2018-06-03 20:22:50 +03:00
--enable-libtensorflow enable TensorFlow as a DNN module backend
2018-06-14 00:37:12 +03:00
for DNN based filters like sr [no]
2015-09-09 13:43:35 +00:00
--enable-libtesseract enable Tesseract, needed for ocr filter [no]
2009-10-31 15:59:08 +00:00
--enable-libtheora enable Theora encoding via libtheora [no]
2017-11-04 15:45:16 +01:00
--enable-libtls enable LibreSSL (via libtls), needed for https support
2018-04-21 15:53:31 +02:00
if openssl, gnutls or mbedtls is not used [no]
2024-03-15 12:42:49 +08:00
--enable-libtorch enable Torch as one DNN backend [no]
2012-08-01 14:33:34 +00:00
--enable-libtwolame enable MP2 encoding via libtwolame [no]
2020-10-05 20:16:25 +08:00
--enable-libuavs3d enable AVS3 decoding via libuavs3d [no]
2011-10-30 03:21:55 +01:00
--enable-libv4l2 enable libv4l2/v4l-utils [no]
2013-04-19 01:49:27 +02:00
--enable-libvidstab enable video stabilization using vid.stab [no]
2017-07-15 22:12:33 +05:30
--enable-libvmaf enable vmaf filter via libvmaf [no]
2009-12-29 16:48:09 +02:00
--enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
2012-05-05 10:45:30 +02:00
--enable-libvorbis enable Vorbis en/decoding via libvorbis,
2009-10-31 15:59:08 +00:00
native implementation exists [no]
2012-12-30 19:40:20 +01:00
--enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
2024-06-05 21:51:46 +02:00
--enable-libvvenc enable H.266/VVC encoding via vvenc [no]
2013-11-22 11:05:13 -05:00
--enable-libwebp enable WebP encoding via libwebp [no]
2009-10-31 15:59:08 +00:00
--enable-libx264 enable H.264 encoding via x264 [no]
2013-10-02 14:46:26 +00:00
--enable-libx265 enable HEVC encoding via x265 [no]
2023-09-19 13:34:21 +02:00
--enable-libxeve enable EVC encoding via libxeve [no]
2023-09-19 13:34:58 +02:00
--enable-libxevd enable EVC decoding via libxevd [no]
2010-07-27 07:18:36 +00:00
--enable-libxavs enable AVS encoding via xavs [no]
2018-09-10 11:59:02 +08:00
--enable-libxavs2 enable AVS2 encoding via xavs2 [no]
2015-03-02 14:56:05 +01:00
--enable-libxcb enable X11 grabbing using XCB [autodetect]
--enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
--enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
--enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
2009-10-31 15:59:08 +00:00
--enable-libxvid enable Xvid encoding via xvidcore,
native MPEG-4/Xvid encoder exists [no]
2018-05-14 21:00:26 +02:00
--enable-libxml2 enable XML parsing using the C library libxml2, needed
2021-12-26 16:47:57 -08:00
for dash and imf demuxing support [no]
2015-09-21 15:34:15 +02:00
--enable-libzimg enable z.lib, needed for zscale filter [no]
2013-04-21 15:00:11 +02:00
--enable-libzmq enable message passing via libzmq [no]
2013-09-01 23:05:50 +02:00
--enable-libzvbi enable teletext support via libzvbi [no]
2017-11-23 16:08:42 +01:00
--enable-lv2 enable LV2 audio filtering [no]
2014-08-22 23:39:57 -03:00
--disable-lzma disable lzma [autodetect]
2015-11-24 18:17:38 -08:00
--enable-decklink enable Blackmagic DeckLink I/O support [no]
2018-04-21 15:53:31 +02:00
--enable-mbedtls enable mbedTLS, needed for https support
if openssl, gnutls or libtls is not used [no]
2016-01-21 09:29:39 +01:00
--enable-mediacodec enable Android MediaCodec support [no]
2017-04-04 07:45:41 +02:00
--enable-mediafoundation enable encoding via MediaFoundation [auto]
2021-12-16 11:28:01 -08:00
--disable-metal disable Apple Metal framework [autodetect]
2017-06-03 01:39:04 +02:00
--enable-libmysofa enable libmysofa, needed for sofalizer filter [no]
2025-07-06 16:05:38 +08:00
--enable-ohcodec enable OpenHarmony Codec support [no]
2011-06-25 08:06:00 +02:00
--enable-openal enable OpenAL 1.1 capture support [no]
2017-03-04 23:57:47 +00:00
--enable-opencl enable OpenCL processing [no]
2013-11-24 20:13:27 +01:00
--enable-opengl enable OpenGL rendering [no]
2014-12-08 00:33:21 +01:00
--enable-openssl enable openssl, needed for https support
2018-04-21 15:53:31 +02:00
if gnutls, libtls or mbedtls is not used [no]
2019-05-05 15:01:53 +02:00
--enable-pocketsphinx enable PocketSphinx, needed for asr filter [no]
2017-08-30 13:41:23 +02:00
--disable-sndio disable sndio support [autodetect]
2015-10-04 14:48:49 +02:00
--disable-schannel disable SChannel SSP, needed for TLS support on
Windows if openssl and gnutls are not used [autodetect]
2016-02-24 23:31:02 +00:00
--disable-sdl2 disable sdl2 [autodetect]
2015-05-28 14:46:16 -05:00
--disable-securetransport disable Secure Transport, needed for TLS support
on OSX if openssl and gnutls are not used [autodetect]
2018-04-27 21:35:56 +02:00
--enable-vapoursynth enable VapourSynth demuxer [no]
2014-02-19 03:59:32 +01:00
--disable-xlib disable xlib [autodetect]
2013-05-10 09:55:15 +02:00
--disable-zlib disable zlib [autodetect]
2009-10-31 15:59:08 +00:00
2016-05-03 07:55:38 +02:00
The following libraries provide various hardware acceleration features:
2017-11-26 21:36:06 -05:00
--disable-amf disable AMF video encoding code [autodetect]
2016-06-25 11:23:19 +02:00
--disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
2019-02-20 19:57:49 -08:00
--enable-cuda-nvcc enable Nvidia CUDA compiler [no]
2019-07-30 02:51:42 -05:00
--disable-cuda-llvm disable CUDA compilation using clang [autodetect]
2016-10-10 12:58:26 +02:00
--disable-cuvid disable Nvidia CUVID support [autodetect]
2016-06-25 11:23:19 +02:00
--disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
2023-12-05 14:46:43 +08:00
--disable-d3d12va disable Microsoft Direct3D 12 video acceleration code [autodetect]
2016-06-25 11:23:19 +02:00
--disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
2018-03-03 21:28:26 +01:00
--disable-ffnvcodec disable dynamically linked Nvidia code [autodetect]
2023-12-29 12:23:26 +08:00
--disable-libdrm disable DRM code (Linux) [autodetect]
2016-06-25 11:23:19 +02:00
--enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
2021-02-03 14:49:46 +08:00
--enable-libvpl enable Intel oneVPL code via libvpl if libmfx is not used [no]
2016-06-25 11:23:19 +02:00
--enable-libnpp enable Nvidia Performance Primitives-based code [no]
--enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
2017-02-11 16:49:34 +01:00
--disable-nvdec disable Nvidia video decoding acceleration (via hwaccel) [autodetect]
2016-08-27 14:39:35 +02:00
--disable-nvenc disable Nvidia video encoding code [autodetect]
2016-06-25 11:23:19 +02:00
--enable-omx enable OpenMAX IL code [no]
--enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
2017-09-24 05:39:45 +00:00
--enable-rkmpp enable Rockchip Media Process Platform code [no]
2017-12-10 17:15:06 +00:00
--disable-v4l2-m2m disable V4L2 mem2mem code [autodetect]
2016-06-25 11:23:19 +02:00
--disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
--disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
--disable-videotoolbox disable VideoToolbox code [autodetect]
2022-12-18 08:31:03 +01:00
--disable-vulkan disable Vulkan code [autodetect]
2024-12-18 17:27:46 +09:00
--enable-vulkan-static statically link to libvulkan [no]
2016-05-03 07:55:38 +02:00
2014-03-11 18:52:44 +01:00
Toolchain options:
--arch=ARCH select architecture [$arch]
--cpu=CPU select the minimum required CPU (affects
instruction selection, may crash on older CPUs)
2009-10-31 15:59:08 +00:00
--cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
2014-03-12 21:05:00 +01:00
--progs-suffix=SUFFIX program name suffix []
2009-10-31 15:59:08 +00:00
--enable-cross-compile assume a cross-compiler is used
--sysroot=PATH root of cross-build tree
--sysinclude=PATH location of cross-build system headers
--target-os=OS compiler targets OS [$target_os]
--target-exec=CMD command to run executables on target
--target-path=DIR path to view of build directory on target
2013-05-20 01:55:32 +03:00
--target-samples=DIR path to samples directory on target
2013-10-05 13:48:22 +02:00
--tempprefix=PATH force fixed dir/prefix instead of mktemp for checks
2012-09-16 22:06:53 +01:00
--toolchain=NAME set tool defaults according to NAME
2018-03-09 17:19:15 +01:00
(gcc-asan, clang-asan, gcc-msan, clang-msan,
gcc-tsan, clang-tsan, gcc-usan, clang-usan,
valgrind-massif, valgrind-memcheck,
msvc, icl, gcov, llvm-cov, hardened)
2012-01-15 13:53:33 +01:00
--nm=NM use nm tool NM [$nm_default]
2010-05-02 18:59:15 +00:00
--ar=AR use archive tool AR [$ar_default]
2009-10-31 15:59:08 +00:00
--as=AS use assembler AS [$as_default]
2016-04-25 07:39:08 -07:00
--ln_s=LN_S use symbolic link tool LN_S [$ln_s_default]
2016-02-24 11:40:12 +01:00
--strip=STRIP use strip tool STRIP [$strip_default]
2013-12-05 17:50:14 -03:00
--windres=WINDRES use windows resource compiler WINDRES [$windres_default]
2016-10-08 14:18:33 +00:00
--x86asmexe=EXE use nasm-compatible assembler EXE [$x86asmexe_default]
2009-10-31 15:59:08 +00:00
--cc=CC use C compiler CC [$cc_default]
2024-03-19 15:40:14 -03:00
--stdc=STDC use C standard STDC [$stdc_default]
2011-08-31 04:11:25 +05:30
--cxx=CXX use C compiler CXX [$cxx_default]
2024-03-19 15:40:14 -03:00
--stdcxx=STDCXX use C standard STDCXX [$stdcxx_default]
2015-11-23 17:08:49 -05:00
--objcc=OCC use ObjC compiler OCC [$cc_default]
2012-07-27 13:01:04 +02:00
--dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
2019-07-30 02:51:42 -05:00
--nvcc=NVCC use Nvidia CUDA compiler NVCC or clang [$nvcc_default]
2012-01-15 13:53:33 +01:00
--ld=LD use linker LD [$ld_default]
2021-12-16 11:28:01 -08:00
--metalcc=METALCC use metal compiler METALCC [$metalcc_default]
--metallib=METALLIB use metal linker METALLIB [$metallib_default]
2014-06-18 16:45:45 +02:00
--pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
2014-01-20 11:17:45 +01:00
--pkg-config-flags=FLAGS pass additional flags to pkgconf []
2014-04-22 21:54:08 +02:00
--ranlib=RANLIB use ranlib RANLIB [$ranlib_default]
2014-07-07 15:24:48 -07:00
--doxygen=DOXYGEN use DOXYGEN to generate API doc [$doxygen_default]
2009-10-31 15:59:08 +00:00
--host-cc=HOSTCC use host C compiler HOSTCC
--host-cflags=HCFLAGS use HCFLAGS when compiling for host
2013-02-03 15:13:17 +01:00
--host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
2012-08-28 13:02:35 +01:00
--host-ld=HOSTLD use host linker HOSTLD
2009-10-31 15:59:08 +00:00
--host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
2018-12-20 11:39:14 +11:00
--host-extralibs=HLIBS use libs HLIBS when linking for host
2012-07-27 13:01:04 +02:00
--host-os=OS compiler host OS [$target_os]
2009-10-31 15:59:08 +00:00
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
2011-08-31 04:11:25 +05:30
--extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
2015-11-23 17:08:49 -05:00
--extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
2009-10-31 15:59:08 +00:00
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
2014-07-16 17:00:11 +02:00
--extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
2017-06-20 19:25:43 +02:00
--extra-ldsoflags=ELDFLAGS add ELDFLAGS to LDSOFLAGS [$LDSOFLAGS]
2009-10-31 15:59:08 +00:00
--extra-libs=ELIBS add ELIBS [$ELIBS]
--extra-version=STRING version string suffix []
2012-07-27 13:01:04 +02:00
--optflags=OPTFLAGS override optimization-related compiler flags
2017-05-11 22:53:41 +02:00
--nvccflags=NVCCFLAGS override nvcc flags [$nvccflags_default]
2009-10-31 15:59:08 +00:00
--build-suffix=SUFFIX library name suffix []
2012-03-09 00:24:48 +01:00
--enable-pic build position-independent code
2012-07-27 13:01:04 +02:00
--enable-thumb compile for Thumb instruction set
2023-03-23 14:38:51 +01:00
--enable-lto[=arg] use link-time optimization
2015-05-06 13:37:31 +02:00
--env="ENV=override" override the environment variables
2025-03-21 13:10:40 +05:30
--disable-response-files Don't pass the list of objects to linker in a file [autodetect]
2014-03-11 18:52:44 +01:00
Advanced options (experts only):
--malloc-prefix=PREFIX prefix malloc and related names with PREFIX
2015-09-03 11:55:48 +02:00
--custom-allocator=NAME use a supported custom allocator
2012-03-09 00:24:48 +01:00
--disable-symver disable symbol versioning
--enable-hardcoded-tables use hardcoded tables instead of runtime generation
--disable-safe-bitstream-reader
disable buffer boundary checking in bitreaders
2025-03-24 02:57:46 +01:00
(This disables some security checks and can cause undefined behavior,
crashes and arbitrary code execution, it may be faster, but
should only be used with trusted input)
2014-06-11 17:51:49 +01:00
--sws-max-filter-size=N the max filter size swscale uses [$sws_max_filter_size_default]
2012-03-09 00:24:48 +01:00
Optimization options (experts only):
2014-06-18 16:21:00 +02:00
--disable-asm disable all assembly optimizations
2009-10-31 15:59:08 +00:00
--disable-altivec disable AltiVec optimizations
2015-05-10 02:47:31 +02:00
--disable-vsx disable VSX optimizations
--disable-power8 disable POWER8 optimizations
2009-10-31 15:59:08 +00:00
--disable-amd3dnow disable 3DNow! optimizations
--disable-amd3dnowext disable 3DNow! extended optimizations
--disable-mmx disable MMX optimizations
2012-07-08 18:42:12 +02:00
--disable-mmxext disable MMXEXT optimizations
2009-10-31 15:59:08 +00:00
--disable-sse disable SSE optimizations
2012-08-28 13:56:46 +02:00
--disable-sse2 disable SSE2 optimizations
--disable-sse3 disable SSE3 optimizations
2009-10-31 15:59:08 +00:00
--disable-ssse3 disable SSSE3 optimizations
2012-08-28 13:56:46 +02:00
--disable-sse4 disable SSE4 optimizations
--disable-sse42 disable SSE4.2 optimizations
2011-02-16 02:39:42 +00:00
--disable-avx disable AVX optimizations
2014-02-06 01:33:59 -03:00
--disable-xop disable XOP optimizations
2014-02-22 02:47:01 -03:00
--disable-fma3 disable FMA3 optimizations
2012-06-18 23:39:14 -04:00
--disable-fma4 disable FMA4 optimizations
2013-10-20 10:28:38 -05:00
--disable-avx2 disable AVX2 optimizations
2017-10-26 19:45:50 +02:00
--disable-avx512 disable AVX-512 optimizations
2022-02-23 16:57:30 +08:00
--disable-avx512icl disable AVX-512ICL optimizations
2015-10-26 02:08:58 -05:00
--disable-aesni disable AESNI optimizations
2009-10-31 15:59:08 +00:00
--disable-armv5te disable armv5te optimizations
--disable-armv6 disable armv6 optimizations
--disable-armv6t2 disable armv6t2 optimizations
2012-12-04 23:29:34 +00:00
--disable-vfp disable VFP optimizations
2011-12-12 21:21:24 +01:00
--disable-neon disable NEON optimizations
2023-05-25 14:57:37 +03:00
--disable-dotprod disable DOTPROD optimizations
--disable-i8mm disable I8MM optimizations
2023-10-12 23:18:28 +03:00
--disable-sve disable SVE optimizations
--disable-sve2 disable SVE2 optimizations
2014-06-18 16:21:00 +02:00
--disable-inline-asm disable use of inline assembly
2016-10-08 14:18:33 +00:00
--disable-x86asm disable use of standalone x86 assembly
2015-12-03 13:22:16 +00:00
--disable-mipsdsp disable MIPS DSP ASE R1 optimizations
2012-06-04 18:02:56 +02:00
--disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
2015-04-09 19:46:24 +05:30
--disable-msa disable MSA optimizations
2012-06-04 18:02:56 +02:00
--disable-mipsfpu disable floating point MIPS optimizations
2021-12-15 11:51:04 +08:00
--disable-mmi disable Loongson MMI optimizations
--disable-lsx disable Loongson LSX optimizations
--disable-lasx disable Loongson LASX optimizations
2022-09-26 17:52:26 +03:00
--disable-rvv disable RISC-V Vector optimizations
2012-07-02 01:58:30 +02:00
--disable-fast-unaligned consider unaligned accesses slow
2024-11-20 20:44:59 +08:00
--disable-simd128 disable WebAssembly simd128 optimizations
2009-10-31 15:59:08 +00:00
2011-03-17 17:02:14 +01:00
Developer options (useful when working on FFmpeg itself):
2009-10-31 15:59:08 +00:00
--disable-debug disable debugging symbols
--enable-debug=LEVEL set the debug level [$debuglevel]
--disable-optimizations disable compiler optimizations
--enable-extra-warnings enable more compiler warnings
2011-04-01 00:24:12 +02:00
--disable-stripping disable stripping of executables and shared libraries
2012-04-08 00:59:22 +02:00
--assert-level=level 0(default), 1 or 2, amount of assertion testing,
2012-04-07 09:20:54 +02:00
2 causes a slowdown at runtime.
2012-07-02 19:31:35 +02:00
--enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
2012-01-20 20:42:31 +01:00
--valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
leaks and errors, using the specified valgrind binary.
Cannot be combined with --target-exec
2012-10-09 05:43:30 +02:00
--enable-ftrapv Trap arithmetic overflows
2011-02-26 11:50:35 +00:00
--samples=PATH location of test samples for FATE, if not set use
\$FATE_SAMPLES at make invocation time.
2013-12-20 13:51:50 +02:00
--enable-neon-clobber-test check NEON registers for clobbering (should be
used only for debugging purposes)
2012-02-02 11:48:13 -08:00
--enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
should be used only for debugging purposes)
2012-05-09 04:29:53 +01:00
--enable-random randomly enable/disable components
--disable-random
--enable-random=LIST randomly enable/disable specific components or
--disable-random=LIST component groups. LIST is a comma-separated list
of NAME[:PROB] entries where NAME is a component
(group) and PROB the probability associated with
NAME (default 0.5).
--random-seed=VALUE seed value for --enable/disable-random
2015-04-20 14:44:32 +01:00
--disable-valgrind-backtrace do not print a backtrace under Valgrind
(only applies to --disable-optimizations builds)
2018-12-20 11:38:31 +11:00
--enable-ossfuzz Enable building fuzzer tool
2017-04-21 23:58:32 +02:00
--libfuzzer=PATH path to libfuzzer
2016-12-28 00:19:49 +02:00
--ignore-tests=TESTS comma-separated list (without "fate-" prefix
in the name) of tests whose result is ignored
2017-09-01 15:11:18 +02:00
--enable-linux-perf enable Linux Performance Monitor API
2021-07-20 19:09:22 +02:00
--enable-macos-kperf enable macOS kperf (private) API
2019-12-02 23:57:11 +02:00
--disable-large-tests disable tests that use a large amount of memory
2021-06-11 23:54:34 +02:00
--disable-ptx-compression don't compress CUDA PTX code even when possible
2025-05-15 23:07:54 +02:00
--disable-resource-compression don't compress resources even when possible
2023-12-15 13:03:49 +02:00
--disable-version-tracking don't include the git/release version in the build
2009-10-31 15:59:08 +00:00
NOTE: Object files are built at the place where configure is launched.
EOF
2008-10-09 20:10:22 +00:00
exit 0
2006-05-30 19:46:06 +00:00
}
2003-10-18 18:47:06 +00:00
2015-09-20 21:50:17 -04:00
if test -t 1 && which tput >/dev/null 2>& 1; then
2015-09-07 19:11:16 -07:00
ncolors = $( tput colors)
if test -n " $ncolors " && test $ncolors -ge 8; then
bold_color = $( tput bold)
warn_color = $( tput setaf 3)
2015-09-09 20:47:22 -04:00
error_color = $( tput setaf 1)
2015-09-07 19:11:16 -07:00
reset_color = $( tput sgr0)
fi
2015-09-14 16:34:50 -07:00
# 72 used instead of 80 since that's the default of pr
ncols = $( tput cols)
2015-09-07 19:11:16 -07:00
fi
2015-09-14 16:34:50 -07:00
: ${ ncols : =72 }
2010-06-15 18:06:28 +00:00
2006-06-16 19:26:31 +00:00
log( ) {
2008-05-15 11:37:29 +00:00
echo " $@ " >> $logfile
2006-06-16 19:26:31 +00:00
}
2006-07-04 18:24:37 +00:00
log_file( ) {
2019-04-24 21:13:21 +08:00
log BEGIN " $1 "
log_file_i = 1
while IFS = read -r log_file_line; do
printf '%5d\t%s\n' " $log_file_i " " $log_file_line "
log_file_i = $(( $log_file_i + 1 ))
done < " $1 " >> " $logfile "
log END " $1 "
2006-06-17 14:39:11 +00:00
}
2010-06-24 20:49:32 +00:00
warn( ) {
log " WARNING: $* "
WARNINGS = " ${ WARNINGS } WARNING: $* \n "
}
2006-06-22 18:57:40 +00:00
die( ) {
2015-09-09 20:47:22 -04:00
log " $@ "
echo " $error_color $bold_color $@ $reset_color "
2006-06-22 18:57:40 +00:00
cat <<EOF
2009-04-02 08:02:32 +00:00
2006-06-22 18:57:40 +00:00
If you think configure made a mistake, make sure you are using the latest
2011-01-17 11:44:19 -09:00
version from Git. If the latest version fails, report the problem to the
2021-06-17 18:37:01 +02:00
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
2006-06-22 18:57:40 +00:00
EOF
2008-03-25 15:10:26 +00:00
if disabled logging; then
2006-06-22 18:57:40 +00:00
cat <<EOF
2008-03-25 15:10:26 +00:00
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
2006-06-22 18:57:40 +00:00
EOF
else
2012-08-19 21:35:30 +02:00
cat <<EOF
2008-03-25 15:10:26 +00:00
Include the log file "$logfile" produced by configure as this will help
2014-05-26 11:54:35 -08:00
solve the problem.
2006-06-22 18:57:40 +00:00
EOF
fi
2006-06-16 19:26:31 +00:00
exit 1
}
2008-02-11 23:17:06 +00:00
# Avoid locale weirdness, besides we really just want to translate ASCII.
2006-11-14 00:16:43 +00:00
toupper( ) {
2008-02-11 23:17:06 +00:00
echo " $@ " | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
2006-11-14 00:16:43 +00:00
}
2007-02-18 01:39:07 +00:00
tolower( ) {
2008-02-11 23:17:06 +00:00
echo " $@ " | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
2007-02-18 01:39:07 +00:00
}
2009-01-25 22:23:03 +00:00
c_escape( ) {
echo " $* " | sed 's/["\\]/\\\0/g'
}
2009-06-15 22:12:21 +00:00
sh_quote( ) {
v = $( echo " $1 " | sed "s/'/'\\\\''/g" )
2010-07-27 16:59:42 +00:00
test " x $v " = " x ${ v #*[!A-Za-z0-9_/.+-] } " || v = " ' $v ' "
2009-06-15 22:12:21 +00:00
echo " $v "
}
2011-02-13 13:06:53 +00:00
cleanws( ) {
2015-07-13 16:22:40 +08:00
echo " $@ " | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
2011-02-13 13:06:53 +00:00
}
2009-08-06 15:45:22 +00:00
filter( ) {
pat = $1
shift
for v; do
2017-04-06 18:14:29 +02:00
eval " case ' $v ' in $pat ) printf '%s ' ' $v ' ;; esac "
2009-08-06 15:45:22 +00:00
done
}
2011-01-25 14:44:07 +00:00
filter_out( ) {
pat = $1
shift
for v; do
2017-04-06 18:14:29 +02:00
eval " case ' $v ' in $pat ) ;; *) printf '%s ' ' $v ' ;; esac "
2011-01-25 14:44:07 +00:00
done
}
2010-03-11 00:39:02 +00:00
map( ) {
m = $1
shift
2010-03-16 21:22:54 +00:00
for v; do eval $m ; done
2010-03-11 00:39:02 +00:00
}
2012-08-27 03:07:11 +02:00
add_suffix( ) {
suffix = $1
shift
for v; do echo ${ v } ${ suffix } ; done
}
2018-01-02 14:34:18 +00:00
remove_suffix( ) {
suffix = $1
shift
for v; do echo ${ v % $suffix } ; done
}
2006-11-12 15:19:58 +00:00
set_all( ) {
value = $1
shift
for var in $* ; do
eval $var = $value
done
}
2008-10-24 23:18:08 +00:00
set_weak( ) {
value = $1
shift
for var; do
eval : \$ { $var := $value }
done
}
2013-03-04 22:58:34 +01:00
sanitize_var_name( ) {
echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
}
2017-03-21 12:22:23 +01:00
set_sanitized( ) {
2011-03-06 13:48:30 +00:00
var = $1
shift
2013-03-04 22:58:34 +01:00
eval $( sanitize_var_name " $var " ) = '$*'
2011-03-06 13:48:30 +00:00
}
2017-03-21 12:22:23 +01:00
get_sanitized( ) {
2013-03-04 22:58:34 +01:00
eval echo \$ $( sanitize_var_name " $1 " )
2011-03-06 13:48:30 +00:00
}
2007-02-11 15:49:37 +00:00
pushvar( ) {
2013-04-03 15:52:45 +03:00
for pvar in $* ; do
eval level = \$ { ${ pvar } _level:= 0}
eval ${ pvar } _${ level } = " \$ $pvar "
eval ${ pvar } _level = $(( $level + 1 ))
2007-02-11 15:49:37 +00:00
done
}
popvar( ) {
2013-04-03 15:52:45 +03:00
for pvar in $* ; do
eval level = \$ { ${ pvar } _level:-0}
2007-02-11 15:49:37 +00:00
test $level = 0 && continue
eval level = $(( $level - 1 ))
2013-04-03 15:52:45 +03:00
eval $pvar = " \${ ${ pvar } _ ${ level } } "
eval ${ pvar } _level = $level
eval unset ${ pvar } _${ level }
2007-02-11 15:49:37 +00:00
done
}
2016-11-30 23:50:17 +01:00
request( ) {
for var in $* ; do
eval ${ var } _requested = yes
eval $var =
done
}
2019-01-28 01:49:46 +01:00
warn_if_gets_disabled( ) {
for var in $* ; do
WARN_IF_GETS_DISABLED_LIST = " $WARN_IF_GETS_DISABLED_LIST $var "
done
}
2006-11-12 15:19:58 +00:00
enable( ) {
set_all yes $*
}
disable( ) {
set_all no $*
}
2019-01-28 01:49:46 +01:00
disable_with_reason( ) {
disable $1
eval " ${ 1 } _disable_reason=\" $2 \" "
if requested $1 ; then
die " ERROR: $1 requested, but $2 "
fi
}
2008-10-24 23:18:08 +00:00
enable_weak( ) {
set_weak yes $*
}
disable_weak( ) {
set_weak no $*
}
2017-03-21 12:22:23 +01:00
enable_sanitized( ) {
2010-01-11 13:36:58 +00:00
for var; do
2017-10-20 20:58:12 +02:00
enable $( sanitize_var_name $var )
2010-01-11 13:36:58 +00:00
done
2009-02-28 19:56:19 +00:00
}
2017-03-21 12:22:23 +01:00
disable_sanitized( ) {
2010-01-11 13:36:58 +00:00
for var; do
2017-10-20 20:58:12 +02:00
disable $( sanitize_var_name $var )
2010-01-11 13:36:58 +00:00
done
2009-02-28 19:56:19 +00:00
}
2008-10-24 23:18:04 +00:00
do_enable_deep( ) {
for var; do
enabled $var && continue
2018-08-05 06:16:44 +03:00
set -- $var
eval enable_deep \$ ${ var } _select
var = $1
eval enable_deep_weak \$ ${ var } _suggest
2008-10-24 23:18:04 +00:00
done
}
enable_deep( ) {
do_enable_deep $*
enable $*
}
2008-10-24 23:18:08 +00:00
enable_deep_weak( ) {
2013-04-03 15:55:14 +03:00
for var; do
disabled $var && continue
2018-08-05 06:16:44 +03:00
set -- $var
2013-04-03 15:55:14 +03:00
do_enable_deep $var
2018-08-05 06:16:44 +03:00
var = $1
2013-04-03 15:55:14 +03:00
enable_weak $var
done
2008-10-24 23:18:08 +00:00
}
2016-11-30 23:50:17 +01:00
requested( ) {
2017-11-12 00:38:09 -03:00
test " ${ 1 #! } " = " $1 " && op = "=" || op = "!="
2016-11-30 23:50:17 +01:00
eval test " x\$ ${ 1 #! } _requested " $op "xyes"
}
2006-06-16 19:26:31 +00:00
enabled( ) {
2017-10-20 20:58:12 +02:00
test " ${ 1 #! } " = " $1 " && op = "=" || op = "!="
2008-07-12 20:55:04 +00:00
eval test " x\$ ${ 1 #! } " $op "xyes"
2006-11-14 00:16:43 +00:00
}
2007-01-28 16:04:55 +00:00
disabled( ) {
2017-10-20 20:58:12 +02:00
test " ${ 1 #! } " = " $1 " && op = "=" || op = "!="
2008-07-12 20:55:04 +00:00
eval test " x\$ ${ 1 #! } " $op "xno"
2007-01-28 16:04:55 +00:00
}
2006-11-14 00:16:43 +00:00
enabled_all( ) {
for opt; do
enabled $opt || return 1
done
}
2007-01-28 16:16:49 +00:00
disabled_all( ) {
for opt; do
disabled $opt || return 1
done
}
2006-11-14 00:16:43 +00:00
enabled_any( ) {
for opt; do
enabled $opt && return 0
done
}
2007-01-28 16:16:49 +00:00
disabled_any( ) {
for opt; do
disabled $opt && return 0
done
2008-10-24 21:44:39 +00:00
return 1
2007-01-28 16:16:49 +00:00
}
2008-06-02 23:51:36 +00:00
set_default( ) {
for opt; do
2008-11-23 12:36:31 +00:00
eval : \$ { $opt := \$ ${ opt } _default}
2008-06-02 23:51:36 +00:00
done
}
2007-08-20 21:35:51 +00:00
is_in( ) {
value = $1
shift
for var in $* ; do
[ $var = $value ] && return 0
done
return 1
}
2018-08-05 06:16:44 +03:00
# The cfg loop is very hot (several thousands iterations), and in bash also
# potentialy quite slow. Try to abort the iterations early, preferably without
# calling functions. 70%+ of the time cfg is already done or without deps.
2017-01-22 16:42:36 +01:00
check_deps( ) {
2007-01-21 21:01:34 +00:00
for cfg; do
2018-08-05 06:16:44 +03:00
eval [ x\$ ${ cfg } _checking = xdone ] && continue
eval [ x\$ ${ cfg } _checking = xinprogress ] && die " Circular dependency for $cfg . "
eval "
dep_all=\$ ${ cfg } _deps
dep_any=\$ ${ cfg } _deps_any
dep_con=\$ ${ cfg } _conflict
dep_sel=\$ ${ cfg } _select
dep_sgs=\$ ${ cfg } _suggest
dep_ifa=\$ ${ cfg } _if
dep_ifn=\$ ${ cfg } _if_any
"
# most of the time here $cfg has no deps - avoid costly no-op work
if [ " $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn " ] ; then
eval ${ cfg } _checking = inprogress
set -- $cfg " $dep_all " " $dep_any " " $dep_con " " $dep_sel " " $dep_sgs " " $dep_ifa " " $dep_ifn "
check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
cfg = $1 ; dep_all = $2 ; dep_any = $3 ; dep_con = $4 ; dep_sel = $5 dep_sgs = $6 ; dep_ifa = $7 ; dep_ifn = $8
[ -n " $dep_ifa " ] && { enabled_all $dep_ifa && enable_weak $cfg ; }
[ -n " $dep_ifn " ] && { enabled_any $dep_ifn && enable_weak $cfg ; }
2019-01-28 01:49:46 +01:00
enabled_all $dep_all || { disable_with_reason $cfg " not all dependencies are satisfied: $dep_all " ; }
enabled_any $dep_any || { disable_with_reason $cfg " not any dependency is satisfied: $dep_any " ; }
disabled_all $dep_con || { disable_with_reason $cfg " some conflicting dependencies are unsatisfied: $dep_con " ; }
disabled_any $dep_sel && { disable_with_reason $cfg " some selected dependency is unsatisfied: $dep_sel " ; }
2018-08-05 06:16:44 +03:00
enabled $cfg && enable_deep_weak $dep_sel $dep_sgs
for dep in $dep_all $dep_any $dep_sel $dep_sgs ; do
# filter out library deps, these do not belong in extralibs
is_in $dep $LIBRARY_LIST && continue
enabled $dep && eval append ${ cfg } _extralibs ${ dep } _extralibs
done
fi
eval ${ cfg } _checking = done
2012-12-09 17:34:14 +00:00
done
}
2006-11-14 00:16:43 +00:00
print_config( ) {
pfx = $1
2010-09-03 21:27:12 +00:00
files = $2
shift 2
2012-10-27 16:43:12 +01:00
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\$/) {
2012-10-30 11:57:30 +00:00
n = -v ? \"\" : \"!\";
2012-10-27 16:43:12 +01:00
printf(\"%s%s=yes\\n\", n, c) >>file;
2013-03-19 20:54:26 +01:00
} else if (file ~ /\\.texi\$/) {
pre = -v ? \"\" : \"@c \";
yesno = \$2;
c2 = tolower(c);
gsub(/_/, \"-\", c2);
printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
2012-10-27 16:43:12 +01:00
}
}
} "
2006-06-16 19:26:31 +00:00
}
2010-07-08 18:44:03 +00:00
print_enabled( ) {
suf = $1
shift
for v; do
2016-04-04 20:16:54 +02:00
enabled $v && printf "%s\n" ${ v % $suf }
2010-07-08 18:44:03 +00:00
done
}
2006-06-16 19:26:31 +00:00
append( ) {
var = $1
shift
eval " $var =\"\$ $var $* \" "
}
2010-06-25 15:45:04 +00:00
prepend( ) {
var = $1
shift
eval " $var =\" $* \$ $var \" "
}
2018-07-30 22:39:15 +03:00
reverse ( ) {
eval '
reverse_out=
for v in $' $1 '; do
reverse_out="$v $reverse_out"
done
' $1 '=$reverse_out
'
}
# keeps the last occurence of each non-unique item
2014-05-01 13:18:57 +02:00
unique( ) {
2018-07-30 22:39:15 +03:00
unique_out =
eval unique_in = \$ $1
reverse unique_in
for v in $unique_in ; do
# " $unique_out" +space such that every item is surrounded with spaces
case " $unique_out " in *" $v " *) continue ; esac # already in list
unique_out = " $unique_out $v "
2014-05-01 13:18:57 +02:00
done
2018-07-30 22:39:15 +03:00
reverse unique_out
eval $1 = \$ unique_out
2014-05-01 13:18:57 +02:00
}
2017-01-22 16:42:36 +01:00
resolve( ) {
2018-07-30 22:39:15 +03:00
resolve_out =
eval resolve_in = \$ $1
for v in $resolve_in ; do
eval 'resolve_out="$resolve_out$' $v ' "'
2017-01-22 16:42:36 +01:00
done
2018-07-30 22:39:15 +03:00
eval $1 = \$ resolve_out
2017-01-22 16:42:36 +01:00
}
2009-07-12 13:29:32 +00:00
add_cppflags( ) {
2012-07-20 12:02:29 +01:00
append CPPFLAGS " $@ "
2009-07-12 13:29:32 +00:00
}
2006-06-16 19:26:31 +00:00
add_cflags( ) {
2012-07-20 12:02:18 +01:00
append CFLAGS $( $cflags_filter " $@ " )
2006-06-16 19:26:31 +00:00
}
2016-12-04 11:06:47 +01:00
add_cflags_headers( ) {
append CFLAGS_HEADERS $( $cflags_filter " $@ " )
}
2011-08-31 04:11:25 +05:30
add_cxxflags( ) {
2012-07-22 05:01:09 +02:00
append CXXFLAGS $( $cflags_filter " $@ " )
2011-08-31 04:11:25 +05:30
}
2015-11-23 17:08:49 -05:00
add_objcflags( ) {
append OBJCFLAGS $( $objcflags_filter " $@ " )
}
2017-10-21 00:43:15 +02:00
add_asflags( ) {
append ASFLAGS $( $asflags_filter " $@ " )
}
2006-06-16 19:26:31 +00:00
add_ldflags( ) {
2012-07-20 03:06:49 +01:00
append LDFLAGS $( $ldflags_filter " $@ " )
2006-06-16 19:26:31 +00:00
}
2014-07-16 17:00:11 +02:00
add_ldexeflags( ) {
append LDEXEFLAGS $( $ldflags_filter " $@ " )
}
2017-06-20 19:25:43 +02:00
add_ldsoflags( ) {
append LDSOFLAGS $( $ldflags_filter " $@ " )
2015-06-27 12:27:59 -04:00
}
2006-06-16 19:26:31 +00:00
add_extralibs( ) {
2012-07-20 03:06:49 +01:00
prepend extralibs $( $ldflags_filter " $@ " )
2006-06-16 19:26:31 +00:00
}
2017-10-21 00:43:15 +02:00
add_stripflags( ) {
2018-09-02 17:35:51 -03:00
append ASMSTRIPFLAGS " $@ "
2017-10-21 00:43:15 +02:00
}
2013-02-03 15:13:17 +01:00
add_host_cppflags( ) {
append host_cppflags " $@ "
}
2012-07-20 13:48:13 +01:00
add_host_cflags( ) {
append host_cflags $( $host_cflags_filter " $@ " )
}
add_host_ldflags( ) {
append host_ldflags $( $host_ldflags_filter " $@ " )
2006-06-16 19:26:31 +00:00
}
2012-10-14 17:56:00 +01:00
add_compat( ) {
append compat_objs $1
shift
map 'add_cppflags -D$v' " $@ "
}
2018-02-04 20:21:57 +01:00
test_cmd( ) {
2006-08-03 22:27:19 +00:00
log " $@ "
2008-05-15 11:37:29 +00:00
" $@ " >> $logfile 2>& 1
2006-07-31 07:54:48 +00:00
}
2018-03-15 18:22:51 -03:00
test_stat( ) {
log test_stat " $@ "
2014-04-06 23:17:08 +02:00
stat " $1 " >> $logfile 2>& 1
}
2017-10-20 21:18:51 +02:00
cc_e( ) {
eval printf '%s\\n' $CC_E
}
2012-07-20 22:22:18 +01:00
cc_o( ) {
eval printf '%s\\n' $CC_O
}
2017-10-20 21:18:51 +02:00
as_o( ) {
eval printf '%s\\n' $AS_O
}
x86asm_o( ) {
eval printf '%s\\n' $X86ASM_O
}
ld_o( ) {
eval printf '%s\\n' $LD_O
}
hostcc_e( ) {
eval printf '%s\\n' $HOSTCC_E
}
hostcc_o( ) {
eval printf '%s\\n' $HOSTCC_O
2012-07-20 22:22:41 +01:00
}
2019-02-20 19:57:49 -08:00
nvcc_o( ) {
eval printf '%s\\n' $NVCC_O
}
2018-02-04 20:21:57 +01:00
test_cc( ) {
log test_cc " $@ "
2008-05-15 11:37:29 +00:00
cat > $TMPC
2006-07-04 18:24:37 +00:00
log_file $TMPC
2018-02-04 20:21:57 +01:00
test_cmd $cc $CPPFLAGS $CFLAGS " $@ " $CC_C $( cc_o $TMPO ) $TMPC
2006-06-16 19:26:31 +00:00
}
2018-03-15 18:22:51 -03:00
test_cxx( ) {
log test_cxx " $@ "
2011-08-31 04:11:25 +05:30
cat > $TMPCPP
log_file $TMPCPP
2018-03-15 18:22:51 -03:00
test_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS " $@ " $CXX_C -o $TMPO $TMPCPP
2011-08-31 04:11:25 +05:30
}
2018-02-04 20:21:57 +01:00
test_objcc( ) {
log test_objcc " $@ "
2014-04-05 13:30:27 +02:00
cat > $TMPM
log_file $TMPM
2018-03-15 18:22:51 -03:00
test_cmd $objcc -Werror= missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS " $@ " $OBJCC_C $( cc_o $TMPO ) $TMPM
2014-04-05 13:30:27 +02:00
}
2019-02-20 19:57:49 -08:00
test_nvcc( ) {
log test_nvcc " $@ "
cat > $TMPCU
log_file $TMPCU
2019-02-26 17:09:26 +01:00
tmpcu_ = $TMPCU
tmpo_ = $TMPO
[ -x " $( command -v cygpath) " ] && tmpcu_ = $( cygpath -m $tmpcu_ ) && tmpo_ = $( cygpath -m $tmpo_ )
2019-07-30 02:51:42 -05:00
test_cmd $nvcc $nvccflags " $@ " $NVCC_C $( nvcc_o $tmpo_ ) $tmpcu_
2019-02-20 19:57:49 -08:00
}
check_nvcc( ) {
log check_nvcc " $@ "
2019-07-30 02:51:42 -05:00
name = $1
shift 1
disabled $name && return
disable $name
test_nvcc " $@ " <<EOF && enable $name
2019-02-20 19:57:49 -08:00
extern "C" {
__global__ void hello(unsigned char *data) {}
}
EOF
}
2018-02-04 20:21:57 +01:00
test_cpp( ) {
log test_cpp " $@ "
2008-05-15 11:37:29 +00:00
cat > $TMPC
2006-07-04 18:24:37 +00:00
log_file $TMPC
2018-02-04 20:21:57 +01:00
test_cmd $cc $CPPFLAGS $CFLAGS " $@ " $( cc_e $TMPO ) $TMPC
2006-06-01 19:28:41 +00:00
}
2018-02-04 20:21:57 +01:00
test_as( ) {
log test_as " $@ "
2012-12-01 13:19:05 +00:00
cat > $TMPS
log_file $TMPS
2018-02-04 20:21:57 +01:00
test_cmd $as $CPPFLAGS $ASFLAGS " $@ " $AS_C $( as_o $TMPO ) $TMPS
2009-03-05 21:20:04 +00:00
}
2017-10-21 01:07:34 +02:00
test_x86asm( ) {
log test_x86asm " $@ "
echo " $1 " > $TMPASM
log_file $TMPASM
shift
2018-03-29 21:22:43 -03:00
test_cmd $x86asmexe $X86ASMFLAGS -Werror " $@ " $( x86asm_o $TMPO ) $TMPASM
2017-10-21 01:07:34 +02:00
}
2017-09-24 18:55:28 +02:00
check_cmd( ) {
log check_cmd " $@ "
cmd = $1
disabled $cmd && return
disable $cmd
test_cmd $@ && enable $cmd
}
2017-10-20 04:43:13 +02:00
check_as( ) {
log check_as " $@ "
name = $1
code = $2
shift 2
disable $name
test_as $@ <<EOF && enable $name
$code
EOF
}
2012-08-07 23:46:52 +02:00
check_inline_asm( ) {
log check_inline_asm " $@ "
2007-09-23 21:52:09 +00:00
name = " $1 "
2010-01-18 23:12:53 +00:00
code = " $2 "
2007-09-23 21:52:09 +00:00
shift 2
2009-09-30 21:38:11 +00:00
disable $name
2018-02-04 20:21:57 +01:00
test_cc " $@ " <<EOF && enable $name
2010-01-18 23:12:53 +00:00
void foo(void){ __asm__ volatile($code); }
2007-09-23 21:52:09 +00:00
EOF
}
2016-03-07 19:49:10 +05:30
check_inline_asm_flags( ) {
log check_inline_asm_flags " $@ "
name = " $1 "
code = " $2 "
flags = ''
shift 2
while [ " $1 " != "" ] ; do
append flags $1
shift
done ;
disable $name
cat > $TMPC <<EOF
void foo(void){ __asm__ volatile($code); }
EOF
log_file $TMPC
2018-03-15 18:22:51 -03:00
test_cmd $cc $CPPFLAGS $CFLAGS $flags " $@ " $CC_C $( cc_o $TMPO ) $TMPC &&
2016-03-07 19:49:10 +05:30
enable $name && add_cflags $flags && add_asflags $flags && add_ldflags $flags
}
2012-12-01 15:06:56 +00:00
check_insn( ) {
log check_insn " $@ "
2018-05-30 17:30:31 +01:00
check_inline_asm ${ 1 } _inline " \" $2 \" "
2017-10-20 04:43:13 +02:00
check_as ${ 1 } _external " $2 "
2012-12-01 15:06:56 +00:00
}
2023-05-25 14:57:37 +03:00
check_arch_level( ) {
log check_arch_level " $@ "
level = " $1 "
check_as tested_arch_level " .arch $level "
enabled tested_arch_level && as_arch_level = " $level "
}
check_archext_insn( ) {
log check_archext_insn " $@ "
feature = " $1 "
instr = " $2 "
# Check if the assembly is accepted in inline assembly.
check_inline_asm ${ feature } _inline " \" $instr \" "
# We don't check if the instruction is supported out of the box by the
# external assembler (we don't try to set ${feature}_external) as we don't
# need to use these instructions in non-runtime detected codepaths.
disable $feature
enabled as_arch_directive && arch_directive = " .arch $as_arch_level " || arch_directive = ""
# Test if the assembler supports the .arch_extension $feature directive.
arch_extension_directive = " .arch_extension $feature "
test_as <<EOF && enable as_archext_${feature}_directive || arch_extension_directive=""
$arch_directive
$arch_extension_directive
EOF
# Test if we can assemble the instruction after potential .arch and
# .arch_extension directives.
test_as <<EOF && enable ${feature}
$arch_directive
$arch_extension_directive
$instr
EOF
}
2017-10-21 01:07:34 +02:00
check_x86asm( ) {
log check_x86asm " $@ "
name = $1
shift
disable $name
test_x86asm " $@ " && enable $name
2008-08-11 23:53:31 +00:00
}
2018-02-04 20:21:57 +01:00
test_ld( ) {
log test_ld " $@ "
2011-08-31 04:11:25 +05:30
type = $1
shift 1
2013-01-13 21:45:15 +01:00
flags = $( filter_out '-l*|*.so' $@ )
libs = $( filter '-l*|*.so' $@ )
2018-03-15 18:22:51 -03:00
test_$type $( $cflags_filter $flags ) || return
2012-07-20 03:06:49 +01:00
flags = $( $ldflags_filter $flags )
libs = $( $ldflags_filter $libs )
2018-03-15 18:22:51 -03:00
test_cmd $ld $LDFLAGS $LDEXEFLAGS $flags $( ld_o $TMPE ) $TMPO $libs $extralibs
2006-06-01 19:28:41 +00:00
}
2017-10-20 03:43:58 +02:00
check_ld( ) {
log check_ld " $@ "
2018-03-28 15:19:35 -03:00
type = $1
name = $2
shift 2
2017-10-20 03:43:58 +02:00
disable $name
2018-03-28 15:19:35 -03:00
test_ld $type $@ && enable $name
2017-10-20 03:43:58 +02:00
}
2013-12-23 01:03:48 +01:00
print_include( ) {
hdr = $1
test " ${ hdr %.h } " = " ${ hdr } " &&
echo " #include $hdr " ||
echo " #include < $hdr > "
}
2018-02-04 20:21:57 +01:00
test_code( ) {
log test_code " $@ "
2012-07-04 23:06:25 +01:00
check = $1
headers = $2
code = $3
shift 3
{
for hdr in $headers ; do
2013-12-23 01:03:48 +01:00
print_include $hdr
2012-07-04 23:06:25 +01:00
done
echo " int main(void) { $code ; return 0; } "
2018-02-04 20:21:57 +01:00
} | test_$check " $@ "
2012-07-04 23:06:25 +01:00
}
2009-07-12 13:29:32 +00:00
check_cppflags( ) {
log check_cppflags " $@ "
2018-03-15 18:22:51 -03:00
test_cpp " $@ " <<EOF && append CPPFLAGS "$@"
2017-09-27 11:54:11 -03:00
#include <stdlib.h>
2009-07-12 13:29:32 +00:00
EOF
}
2013-10-31 19:48:59 +01:00
test_cflags( ) {
log test_cflags " $@ "
2012-07-20 12:02:18 +01:00
set -- $( $cflags_filter " $@ " )
2018-02-04 20:21:57 +01:00
test_cc " $@ " <<EOF
2006-06-01 19:28:41 +00:00
int x;
EOF
}
2013-10-31 19:48:59 +01:00
check_cflags( ) {
log check_cflags " $@ "
test_cflags " $@ " && add_cflags " $@ "
}
2011-08-31 04:11:25 +05:30
check_cxxflags( ) {
log check_cxxflags " $@ "
2012-07-22 05:01:09 +02:00
set -- $( $cflags_filter " $@ " )
2018-03-15 18:22:51 -03:00
test_cxx " $@ " <<EOF && append CXXFLAGS "$@"
2011-08-31 04:11:25 +05:30
int x;
EOF
}
2015-11-23 17:08:49 -05:00
test_objcflags( ) {
2016-06-06 19:06:30 +02:00
log test_objcflags " $@ "
set -- $( $objcflags_filter " $@ " )
2018-02-04 20:21:57 +01:00
test_objcc " $@ " <<EOF
2015-11-23 17:08:49 -05:00
int x;
EOF
}
check_objcflags( ) {
2016-06-06 19:06:30 +02:00
log check_objcflags " $@ "
2015-11-23 17:08:49 -05:00
test_objcflags " $@ " && add_objcflags " $@ "
}
2010-01-16 04:48:58 +00:00
test_ldflags( ) {
log test_ldflags " $@ "
2017-10-20 20:58:12 +02:00
set -- $( $ldflags_filter " $@ " )
2018-03-15 18:22:51 -03:00
test_ld "cc" " $@ " <<EOF
2008-03-30 22:23:52 +00:00
int main(void){ return 0; }
2006-06-01 19:28:41 +00:00
EOF
}
2010-01-16 04:48:58 +00:00
check_ldflags( ) {
log check_ldflags " $@ "
test_ldflags " $@ " && add_ldflags " $@ "
}
2013-11-25 08:46:14 +00:00
test_stripflags( ) {
log test_stripflags " $@ "
2018-02-04 20:21:57 +01:00
# call test_cc to get a fresh TMPO
test_cc <<EOF
2013-11-25 08:46:14 +00:00
int main(void) { return 0; }
EOF
2018-03-15 18:22:51 -03:00
test_cmd $strip $ASMSTRIPFLAGS " $@ " $TMPO
2013-11-25 08:46:14 +00:00
}
check_stripflags( ) {
log check_stripflags " $@ "
test_stripflags " $@ " && add_stripflags " $@ "
}
2018-02-13 09:31:57 +01:00
check_headers( ) {
log check_headers " $@ "
2017-10-04 02:03:53 +02:00
headers = $1
2006-06-01 19:28:41 +00:00
shift
2017-10-04 02:03:53 +02:00
disable_sanitized $headers
{
for hdr in $headers ; do
print_include $hdr
done
echo "int x;"
2018-02-04 20:21:57 +01:00
} | test_cpp " $@ " && enable_sanitized $headers
2006-06-01 19:28:41 +00:00
}
2015-12-05 11:49:44 +01:00
check_header_objcc( ) {
log check_header_objcc " $@ "
2014-04-06 23:17:08 +02:00
rm -f -- " $TMPO "
2014-04-05 02:03:15 +02:00
header = $1
shift
2017-10-26 16:14:54 -03:00
disable_sanitized $header
2014-04-05 02:03:15 +02:00
{
echo " #include < $header > "
echo "int main(void) { return 0; }"
2018-03-15 18:22:51 -03:00
} | test_objcc && test_stat " $TMPO " && enable_sanitized $header
2014-04-05 02:03:15 +02:00
}
2017-09-06 11:29:23 +02:00
check_apple_framework( ) {
log check_apple_framework " $@ "
framework = " $1 "
name = " $( tolower $framework ) "
header = " ${ framework } / ${ framework } .h "
disable $name
2017-10-11 17:55:25 -03:00
check_header_objcc $header &&
enable $name && eval ${ name } _extralibs = '"-framework $framework"'
2017-09-06 11:29:23 +02:00
}
2006-06-01 19:28:41 +00:00
check_func( ) {
2006-06-16 19:26:31 +00:00
log check_func " $@ "
2006-06-01 19:28:41 +00:00
func = $1
shift
2007-02-14 22:18:13 +00:00
disable $func
2018-03-15 18:22:51 -03:00
test_ld "cc" " $@ " <<EOF && enable $func
2006-06-01 19:28:41 +00:00
extern int $func();
2008-03-30 22:23:52 +00:00
int main(void){ $func(); }
2006-06-01 19:28:41 +00:00
EOF
}
2010-02-09 22:55:13 +00:00
check_mathfunc( ) {
2010-02-10 22:14:25 +00:00
log check_mathfunc " $@ "
2010-02-09 22:55:13 +00:00
func = $1
2012-10-26 14:42:47 +01:00
narg = $2
shift 2
test $narg = 2 && args = "f, g" || args = "f"
2012-10-24 13:15:42 +02:00
disable $func
2018-03-15 18:22:51 -03:00
test_ld "cc" " $@ " <<EOF && enable $func
2012-10-24 13:15:42 +02:00
#include <math.h>
2012-10-26 14:42:47 +01:00
float foo(float f, float g) { return $func($args); }
2012-10-24 13:15:42 +02:00
int main(void){ return (int) foo; }
EOF
}
2008-09-20 16:17:27 +00:00
check_func_headers( ) {
log check_func_headers " $@ "
2007-02-19 23:00:18 +00:00
headers = $1
2011-03-07 02:49:55 +00:00
funcs = $2
2007-02-19 23:00:18 +00:00
shift 2
2011-03-07 02:49:55 +00:00
{
for hdr in $headers ; do
2013-12-23 01:03:48 +01:00
print_include $hdr
2011-03-07 02:49:55 +00:00
done
2016-10-25 19:09:46 +02:00
echo "#include <stdint.h>"
2011-03-07 02:49:55 +00:00
for func in $funcs ; do
echo " long check_ $func (void) { return (long) $func ; } "
done
2016-10-25 19:09:46 +02:00
echo "int main(void) { int ret = 0;"
# LTO could optimize out the test functions without this
for func in $funcs ; do
echo " ret |= ((intptr_t)check_ $func ) & 0xFFFF; "
done
echo "return ret; }"
2018-03-15 18:22:51 -03:00
} | test_ld "cc" " $@ " && enable $funcs && enable_sanitized $headers
2011-08-31 04:11:25 +05:30
}
check_class_headers_cpp( ) {
log check_class_headers_cpp " $@ "
headers = $1
classes = $2
shift 2
{
for hdr in $headers ; do
echo " #include < $hdr > "
done
echo "int main(void) { "
i = 1
for class in $classes ; do
echo " $class obj $i ; "
i = $( expr $i + 1)
done
echo "return 0; }"
2018-03-15 18:22:51 -03:00
} | test_ld "cxx" " $@ " && enable $funcs && enable_sanitized $headers
2007-02-19 23:00:18 +00:00
}
2018-02-04 20:21:57 +01:00
test_cpp_condition( ) {
log test_cpp_condition " $@ "
2008-10-12 09:07:14 +00:00
header = $1
condition = $2
2010-01-17 19:05:53 +00:00
shift 2
2018-02-04 20:21:57 +01:00
test_cpp " $@ " <<EOF
2008-10-12 09:07:14 +00:00
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}
2017-10-07 21:20:36 +02:00
check_cpp_condition( ) {
log check_cpp_condition " $@ "
name = $1
shift 1
disable $name
test_cpp_condition " $@ " && enable $name
}
2016-12-28 23:41:29 +01:00
test_cflags_cc( ) {
log test_cflags_cc " $@ "
2016-11-23 21:54:53 -08:00
flags = $1
2016-12-28 23:41:29 +01:00
header = $2
condition = $3
shift 3
2016-11-23 21:54:53 -08:00
set -- $( $cflags_filter " $flags " )
2018-03-15 18:22:51 -03:00
test_cc " $@ " <<EOF
2016-12-28 23:41:29 +01:00
#include <$header>
2016-11-23 21:54:53 -08:00
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}
2024-03-19 15:40:14 -03:00
check_cflags_cc( ) {
log check_cflags_cc " $@ "
flags = $1
test_cflags_cc " $@ " && add_cflags $flags
}
test_cxxflags_cc( ) {
log test_cxxflags_cc " $@ "
flags = $1
header = $2
condition = $3
shift 3
set -- $( $cflags_filter " $flags " )
test_cxx " $@ " <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}
check_cxxflags_cc( ) {
log check_cxxflags_cc " $@ "
flags = $1
test_cxxflags_cc " $@ " && add_cxxflags $flags
}
2006-06-16 19:26:31 +00:00
check_lib( ) {
log check_lib " $@ "
2016-12-08 10:16:34 +01:00
name = " $1 "
headers = " $2 "
funcs = " $3 "
shift 3
disable $name
check_func_headers " $headers " " $funcs " " $@ " &&
2017-01-22 16:42:36 +01:00
enable $name && eval ${ name } _extralibs = "\$@"
2007-02-19 23:00:18 +00:00
}
2011-08-31 04:11:25 +05:30
check_lib_cpp( ) {
log check_lib_cpp " $@ "
2017-10-11 17:55:25 -03:00
name = " $1 "
headers = " $2 "
classes = " $3 "
shift 3
disable $name
check_class_headers_cpp " $headers " " $classes " " $@ " &&
enable $name && eval ${ name } _extralibs = "\$@"
2011-08-31 04:11:25 +05:30
}
2017-09-29 22:56:08 -03:00
test_pkg_config( ) {
log test_pkg_config " $@ "
2017-02-11 13:09:27 +01:00
name = " $1 "
pkg_version = " $2 "
pkg = " ${ 2 %% * } "
headers = " $3 "
funcs = " $4 "
shift 4
disable $name
2024-12-16 16:19:50 -05:00
test_cmd $pkg_config --exists --print-errors " $pkg_version " || return
2014-01-20 11:17:45 +01:00
pkg_cflags = $( $pkg_config --cflags $pkg_config_flags $pkg )
pkg_libs = $( $pkg_config --libs $pkg_config_flags $pkg )
2021-10-08 10:27:19 -03:00
pkg_incdir = $( $pkg_config --variable= includedir $pkg_config_flags $pkg )
2011-03-06 13:48:30 +00:00
check_func_headers " $headers " " $funcs " $pkg_cflags $pkg_libs " $@ " &&
2017-02-11 13:09:27 +01:00
enable $name &&
2017-10-26 16:14:54 -03:00
set_sanitized " ${ name } _cflags " $pkg_cflags &&
2021-10-08 10:27:19 -03:00
set_sanitized " ${ name } _incdir " $pkg_incdir &&
2017-10-26 16:14:54 -03:00
set_sanitized " ${ name } _extralibs " $pkg_libs
2011-03-06 13:48:30 +00:00
}
2021-04-29 03:37:42 +02:00
test_pkg_config_cpp( ) {
log test_pkg_config_cpp " $@ "
name = " $1 "
pkg_version = " $2 "
pkg = " ${ 2 %% * } "
headers = " $3 "
cond = " $4 "
shift 4
disable $name
2024-12-16 16:19:50 -05:00
test_cmd $pkg_config --exists --print-errors " $pkg_version " || return
2021-04-29 03:37:42 +02:00
pkg_cflags = $( $pkg_config --cflags $pkg_config_flags $pkg )
2021-11-27 04:37:39 +01:00
pkg_incdir = $( $pkg_config --variable= includedir $pkg_config_flags $pkg )
pkg_incflags = $( $pkg_config --cflags-only-I $pkg_config_flags $pkg )
2021-04-29 03:37:42 +02:00
test_cpp_condition " $pkg_incdir / $headers " " $cond " " $@ " &&
enable $name &&
2021-10-08 10:27:19 -03:00
set_sanitized " ${ name } _cflags " $pkg_cflags &&
2021-11-27 04:37:39 +01:00
set_sanitized " ${ name } _incdir " $pkg_incdir &&
2021-11-24 20:17:09 +01:00
set_sanitized " ${ name } _incflags " $pkg_incflags
2021-04-29 03:37:42 +02:00
}
2017-09-29 22:56:08 -03:00
check_pkg_config( ) {
log check_pkg_config " $@ "
name = " $1 "
test_pkg_config " $@ " &&
eval add_cflags \$ ${ name } _cflags
2011-03-06 13:48:30 +00:00
}
2021-04-29 03:37:42 +02:00
check_pkg_config_cpp( ) {
log check_pkg_config_cpp " $@ "
name = " $1 "
test_pkg_config_cpp " $@ " &&
eval add_cflags \$ ${ name } _cflags
}
2021-11-24 20:17:09 +01:00
check_pkg_config_header_only( ) {
log check_pkg_config_cpp " $@ "
name = " $1 "
test_pkg_config_cpp " $@ " &&
eval add_cflags \$ ${ name } _incflags
}
2018-02-04 20:21:57 +01:00
test_exec( ) {
2018-03-15 18:22:51 -03:00
test_ld "cc" " $@ " && { enabled cross_compile || $TMPE >> $logfile 2>& 1; }
2006-06-16 19:26:31 +00:00
}
2007-04-13 20:16:13 +00:00
check_exec_crash( ) {
2016-11-08 20:04:18 +01:00
log check_exec_crash " $@ "
2009-03-09 23:59:31 +00:00
code = $( cat)
2007-04-13 20:16:13 +00:00
# exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
# are safe but may not be available everywhere. Thus we use
# raise(SIGTERM) instead. The check is run in a subshell so we
# can redirect the "Terminated" message from the shell. SIGBUS
# is not defined by standard C so it is used conditionally.
2018-02-04 20:21:57 +01:00
( test_exec " $@ " ) >> $logfile 2>& 1 <<EOF
2007-04-13 20:16:13 +00:00
#include <signal.h>
static void sighandler(int sig){
raise(SIGTERM);
}
2012-09-13 20:17:54 +01:00
int foo(void){
2011-10-22 00:10:29 +02:00
$code
}
2013-05-25 06:01:29 -04:00
int (*func_ptr)(void) = foo;
2007-11-20 11:18:52 +00:00
int main(void){
2007-04-13 20:16:13 +00:00
signal(SIGILL, sighandler);
signal(SIGFPE, sighandler);
signal(SIGSEGV, sighandler);
#ifdef SIGBUS
signal(SIGBUS, sighandler);
#endif
2012-02-09 17:49:22 +01:00
return func_ptr();
2007-04-13 20:16:13 +00:00
}
EOF
}
2008-01-01 22:54:35 +00:00
check_type( ) {
log check_type " $@ "
headers = $1
type = $2
shift 2
2017-03-21 12:22:23 +01:00
disable_sanitized " $type "
2018-02-04 20:21:57 +01:00
test_code cc " $headers " " $type v " " $@ " && enable_sanitized " $type "
2008-01-01 22:54:35 +00:00
}
2025-03-25 22:12:26 +02:00
check_objc_class( ) {
log check_objc_class " $@ "
headers = $1
type = $2
shift 2
disable_sanitized " $type "
test_code objcc " $headers " " $type * v " " $@ " && enable_sanitized " $type "
}
2010-01-17 19:10:03 +00:00
check_struct( ) {
2013-03-04 22:56:41 +01:00
log check_struct " $@ "
2010-01-17 19:10:03 +00:00
headers = $1
struct = $2
member = $3
shift 3
2017-03-21 12:22:23 +01:00
disable_sanitized " ${ struct } _ ${ member } "
2018-02-04 20:21:57 +01:00
test_code cc " $headers " " const void *p = &(( $struct *)0)-> $member " " $@ " &&
2017-03-21 12:22:23 +01:00
enable_sanitized " ${ struct } _ ${ member } "
2010-01-17 19:10:03 +00:00
}
2013-03-04 22:59:41 +01:00
check_builtin( ) {
log check_builtin " $@ "
name = $1
headers = $2
builtin = $3
shift 3
disable " $name "
2018-03-15 18:22:51 -03:00
test_code ld " $headers " " $builtin " "cc" " $@ " && enable " $name "
2013-03-04 22:59:41 +01:00
}
2013-11-14 12:19:04 +01:00
check_compile_assert( ) {
log check_compile_assert " $@ "
name = $1
headers = $2
condition = $3
shift 3
disable " $name "
2018-02-04 20:21:57 +01:00
test_code cc " $headers " " char c[2 * !!( $condition ) - 1] " " $@ " && enable " $name "
2013-11-14 12:19:04 +01:00
}
2017-10-17 03:00:50 +02:00
check_cc( ) {
log check_cc " $@ "
name = $1
shift
disable " $name "
test_code cc " $@ " && enable " $name "
}
2006-06-16 19:26:31 +00:00
require( ) {
2016-11-08 20:04:18 +01:00
log require " $@ "
2016-11-16 18:10:35 +01:00
name_version = " $1 "
2016-12-08 10:16:34 +01:00
name = " ${ 1 %% * } "
2017-10-21 01:27:23 +02:00
shift
check_lib $name " $@ " || die " ERROR: $name_version not found "
2007-02-19 23:00:18 +00:00
}
2017-10-17 03:00:50 +02:00
require_cc( ) {
log require_cc " $@ "
name = " $1 "
2018-03-28 09:11:17 +02:00
check_cc " $@ " || die " ERROR: $name failed "
2017-10-17 03:00:50 +02:00
}
2011-08-31 04:11:25 +05:30
require_cpp( ) {
2019-10-27 14:44:00 +00:00
log require_cpp " $@ "
name_version = " $1 "
name = " ${ 1 %% * } "
shift
check_lib_cpp " $name " " $@ " || die " ERROR: $name_version not found "
2011-08-31 04:11:25 +05:30
}
2018-09-02 17:29:54 -03:00
require_headers( ) {
log require_headers " $@ "
2017-10-04 02:03:53 +02:00
headers = " $1 "
2018-02-13 09:31:57 +01:00
check_headers " $@ " || die " ERROR: $headers not found "
2017-01-22 16:04:09 +01:00
}
2017-01-22 16:15:38 +01:00
require_cpp_condition( ) {
2017-10-20 20:58:12 +02:00
log require_cpp_condition " $@ "
2018-09-02 16:56:27 -03:00
condition = " $3 "
2018-03-28 09:11:17 +02:00
check_cpp_condition " $@ " || die " ERROR: $condition not satisfied "
2017-01-22 16:15:38 +01:00
}
2014-12-02 13:29:47 +01:00
require_pkg_config( ) {
2016-11-08 20:04:18 +01:00
log require_pkg_config " $@ "
2017-02-11 13:09:27 +01:00
pkg_version = " $2 "
2017-11-11 15:35:32 -03:00
check_pkg_config " $@ " || die " ERROR: $pkg_version not found using pkg-config $pkg_config_fail_message "
2014-12-02 13:29:47 +01:00
}
2021-04-29 03:37:42 +02:00
require_pkg_config_cpp( ) {
log require_pkg_config_cpp " $@ "
pkg_version = " $2 "
check_pkg_config_cpp " $@ " || die " ERROR: $pkg_version not found using pkg-config $pkg_config_fail_message "
}
2018-02-04 20:21:57 +01:00
test_host_cc( ) {
log test_host_cc " $@ "
2009-10-28 20:19:15 +00:00
cat > $TMPC
log_file $TMPC
2018-02-04 20:21:57 +01:00
test_cmd $host_cc $host_cflags " $@ " $HOSTCC_C $( hostcc_o $TMPO ) $TMPC
2009-10-28 20:19:15 +00:00
}
2018-02-04 20:21:57 +01:00
test_host_cpp( ) {
log test_host_cpp " $@ "
2013-02-28 16:16:10 +01:00
cat > $TMPC
log_file $TMPC
2018-02-04 20:21:57 +01:00
test_cmd $host_cc $host_cppflags $host_cflags " $@ " $( hostcc_e $TMPO ) $TMPC
2013-02-28 16:16:10 +01:00
}
2013-02-03 15:13:17 +01:00
check_host_cppflags( ) {
log check_host_cppflags " $@ "
2018-02-04 20:21:57 +01:00
test_host_cpp " $@ " <<EOF && append host_cppflags "$@"
2017-09-27 11:54:11 -03:00
#include <stdlib.h>
2013-02-03 15:13:17 +01:00
EOF
}
2009-10-28 20:19:15 +00:00
check_host_cflags( ) {
log check_host_cflags " $@ "
2012-07-20 13:48:13 +01:00
set -- $( $host_cflags_filter " $@ " )
2018-02-04 20:21:57 +01:00
test_host_cc " $@ " <<EOF && append host_cflags "$@"
2009-10-28 20:19:15 +00:00
int x;
EOF
}
2024-03-19 15:40:14 -03:00
test_host_cflags_cc( ) {
log test_host_cflags_cc " $@ "
flags = $1
header = $2
condition = $3
shift 3
set -- $( $host_cflags_filter " $flags " )
test_host_cc " $@ " <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}
check_host_cflags_cc( ) {
log check_host_cflags_cc " $@ "
flags = $1
test_host_cflags_cc " $@ " && add_host_cflags $flags
}
2018-02-04 20:21:57 +01:00
test_host_cpp_condition( ) {
log test_host_cpp_condition " $@ "
2013-02-28 16:16:10 +01:00
header = $1
condition = $2
shift 2
2018-02-04 20:21:57 +01:00
test_host_cpp " $@ " <<EOF
2013-02-28 16:16:10 +01:00
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}
2017-10-07 21:20:36 +02:00
check_host_cpp_condition( ) {
log check_host_cpp_condition " $@ "
name = $1
shift 1
disable $name
test_host_cpp_condition " $@ " && enable $name
}
2010-01-19 04:40:08 +00:00
cp_if_changed( ) {
2016-11-06 18:33:05 +01:00
cmp -s " $1 " " $2 " && { test " $quiet " != "yes" && echo " $2 is unchanged " ; } && return
2011-06-28 18:45:13 +01:00
mkdir -p " $( dirname $2 ) "
2016-11-29 15:09:35 +01:00
cp -f " $1 " " $2 "
2010-01-19 04:40:08 +00:00
}
2008-08-01 20:30:21 +00:00
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.
2015-10-05 03:41:41 +02:00
AVCODEC_COMPONENTS = "
2007-08-20 21:35:51 +00:00
bsfs
decoders
encoders
2009-04-02 08:48:06 +00:00
hwaccels
2015-10-05 03:41:41 +02:00
parsers
"
AVDEVICE_COMPONENTS = "
2007-12-06 17:53:46 +00:00
indevs
outdevs
2015-10-05 03:41:41 +02:00
"
2017-09-05 12:45:20 +02:00
2015-10-05 03:41:41 +02:00
AVFILTER_COMPONENTS = "
filters
"
2017-09-05 12:45:20 +02:00
2015-10-05 03:41:41 +02:00
AVFORMAT_COMPONENTS = "
demuxers
muxers
2007-08-20 21:35:51 +00:00
protocols
"
2015-10-05 03:41:41 +02:00
COMPONENT_LIST = "
$AVCODEC_COMPONENTS
$AVDEVICE_COMPONENTS
$AVFILTER_COMPONENTS
$AVFORMAT_COMPONENTS
"
2013-11-02 17:05:28 +01:00
EXAMPLE_LIST = "
2023-01-15 12:44:04 +01:00
avio_http_serve_files_example
2020-01-10 12:10:09 +01:00
avio_list_dir_example
2023-01-15 03:06:39 +01:00
avio_read_callback_example
2016-10-19 21:05:22 +02:00
decode_audio_example
2023-01-15 12:26:30 +01:00
decode_filter_audio_example
2023-01-15 12:33:11 +01:00
decode_filter_video_example
2016-10-19 21:05:22 +02:00
decode_video_example
2023-01-15 03:13:01 +01:00
demux_decode_example
2016-10-19 21:05:22 +02:00
encode_audio_example
2016-10-19 21:05:22 +02:00
encode_video_example
2014-07-16 16:42:42 +02:00
extract_mvs_example
2014-02-13 08:50:16 +01:00
filter_audio_example
2017-07-20 00:58:56 -04:00
hw_decode_example
2023-01-15 12:53:31 +01:00
mux_example
2023-01-15 12:56:54 +01:00
qsv_decode_example
2023-01-15 13:03:47 +01:00
remux_example
2023-01-15 16:43:06 +01:00
resample_audio_example
2023-01-15 16:44:25 +01:00
scale_video_example
2023-01-15 12:49:32 +01:00
show_metadata_example
2013-10-08 13:10:46 +02:00
transcode_aac_example
2023-01-15 13:11:09 +01:00
transcode_example
2017-11-06 14:45:27 +08:00
vaapi_encode_example
2018-01-11 15:00:30 +08:00
vaapi_transcode_example
2022-10-31 15:22:25 +08:00
qsv_transcode_example
2013-11-02 17:05:28 +01:00
"
2017-09-05 12:45:20 +02:00
2016-11-30 23:50:17 +01:00
EXTERNAL_AUTODETECT_LIBRARY_LIST = "
2017-08-30 13:28:49 +02:00
alsa
2017-09-15 14:27:36 +02:00
appkit
2017-09-06 11:31:40 +02:00
avfoundation
2016-11-30 23:50:17 +01:00
bzlib
2017-09-06 11:33:20 +02:00
coreimage
2016-11-30 23:50:17 +01:00
iconv
libxcb
libxcb_shm
libxcb_shape
libxcb_xfixes
lzma
2017-04-04 07:45:41 +02:00
mediafoundation
2021-12-18 21:34:10 -08:00
metal
2016-11-30 23:50:17 +01:00
schannel
sdl2
securetransport
2017-08-30 13:41:23 +02:00
sndio
2016-11-30 23:50:17 +01:00
xlib
zlib
"
2013-11-02 17:05:28 +01:00
2016-07-25 15:07:58 +02:00
EXTERNAL_LIBRARY_GPL_LIST = "
2017-04-01 01:09:19 +02:00
avisynth
2017-03-15 21:09:06 +01:00
frei0r
2016-07-25 15:07:58 +02:00
libcdio
2018-07-27 11:50:19 +08:00
libdavs2
2024-02-18 22:01:44 -06:00
libdvdnav
libdvdread
2017-03-15 21:09:06 +01:00
librubberband
libvidstab
2016-07-25 15:07:58 +02:00
libx264
libx265
libxavs
2018-09-10 11:59:02 +08:00
libxavs2
2016-07-25 15:07:58 +02:00
libxvid
"
EXTERNAL_LIBRARY_NONFREE_LIST = "
2017-04-12 22:49:06 +02:00
decklink
2016-07-25 15:07:58 +02:00
libfdk_aac
2017-11-04 15:45:16 +01:00
libtls
2016-07-25 15:07:58 +02:00
"
EXTERNAL_LIBRARY_VERSION3_LIST = "
2017-03-15 21:09:06 +01:00
gmp
2019-01-14 21:52:23 +02:00
libaribb24
2018-07-13 19:33:12 +09:00
liblensfun
2016-07-25 15:07:58 +02:00
libopencore_amrnb
libopencore_amrwb
libvo_amrwbenc
2018-04-21 15:53:31 +02:00
mbedtls
2017-09-24 05:39:45 +00:00
rkmpp
2016-07-25 15:07:58 +02:00
"
2017-03-15 21:09:06 +01:00
EXTERNAL_LIBRARY_GPLV3_LIST = "
libsmbclient
"
2012-10-27 20:02:33 +01:00
EXTERNAL_LIBRARY_LIST = "
2016-07-25 15:07:58 +02:00
$EXTERNAL_LIBRARY_GPL_LIST
$EXTERNAL_LIBRARY_NONFREE_LIST
$EXTERNAL_LIBRARY_VERSION3_LIST
2017-03-15 21:09:06 +01:00
$EXTERNAL_LIBRARY_GPLV3_LIST
2015-10-03 17:24:06 -05:00
chromaprint
2015-11-22 02:16:36 +11:00
gcrypt
2012-10-27 20:02:33 +01:00
gnutls
2015-09-28 15:18:56 +02:00
jni
2013-09-20 14:01:00 +00:00
ladspa
2022-04-09 19:58:55 +02:00
lcms2
2016-08-25 17:28:17 +02:00
libaom
2023-02-23 19:17:15 +09:00
libaribcaption
2013-02-24 17:55:31 +01:00
libass
libbluray
2014-04-29 18:53:16 +02:00
libbs2b
2013-02-24 17:55:31 +01:00
libcaca
libcelt
2017-08-08 15:27:27 +02:00
libcodec2
2018-05-21 17:46:48 -04:00
libdav1d
2012-10-27 20:02:33 +01:00
libdc1394
2013-02-24 17:55:31 +01:00
libflite
2014-04-12 16:02:50 +02:00
libfontconfig
2012-10-27 20:02:33 +01:00
libfreetype
2014-06-21 05:41:45 +01:00
libfribidi
2023-05-26 12:11:41 +02:00
libharfbuzz
2019-10-27 14:44:00 +00:00
libglslang
2013-06-28 10:36:00 +02:00
libgme
2012-10-27 20:02:33 +01:00
libgsm
2013-02-24 17:55:31 +01:00
libiec61883
2012-10-27 20:02:33 +01:00
libilbc
2017-03-14 23:42:37 +01:00
libjack
2022-04-17 09:22:34 -04:00
libjxl
2018-09-07 15:40:25 -04:00
libklvanc
2015-07-14 08:53:35 +03:00
libkvazaar
2024-04-01 21:32:04 +00:00
liblc3
2024-03-19 10:07:18 -03:00
liblcevc_dec
2013-02-24 17:55:31 +01:00
libmodplug
2012-10-27 20:02:33 +01:00
libmp3lame
2017-06-03 01:39:04 +02:00
libmysofa
2025-04-23 16:13:29 +02:00
liboapv
2012-10-27 20:02:33 +01:00
libopencv
2013-12-12 17:13:55 +02:00
libopenh264
2012-10-27 20:02:33 +01:00
libopenjpeg
2016-07-14 18:30:27 +01:00
libopenmpt
2020-05-25 15:38:09 +08:00
libopenvino
2012-10-27 20:02:33 +01:00
libopus
2021-07-26 00:55:37 +02:00
libplacebo
2012-10-27 20:02:33 +01:00
libpulse
2023-11-28 23:58:15 +01:00
libqrencode
2023-12-26 16:19:10 +01:00
libquirc
2020-03-08 17:25:31 -04:00
librabbitmq
2019-05-29 19:28:24 +01:00
librav1e
2021-02-28 20:56:55 +01:00
librist
2017-05-08 05:02:19 +01:00
librsvg
2012-10-27 20:02:33 +01:00
librtmp
2021-11-19 13:45:21 +01:00
libshaderc
2012-07-29 18:20:00 +00:00
libshine
2014-07-13 00:54:23 +02:00
libsmbclient
2015-04-25 23:58:57 +01:00
libsnappy
2013-02-24 17:55:31 +01:00
libsoxr
2012-10-27 20:02:33 +01:00
libspeex
2018-03-26 11:37:49 -04:00
libsrt
2013-09-18 14:08:11 +02:00
libssh
2019-01-18 02:11:38 +00:00
libsvtav1
2018-06-03 20:22:50 +03:00
libtensorflow
2015-09-09 13:43:35 +00:00
libtesseract
2012-10-27 20:02:33 +01:00
libtheora
2024-03-15 12:42:49 +08:00
libtorch
2013-02-24 17:55:31 +01:00
libtwolame
2020-10-05 20:16:25 +08:00
libuavs3d
2013-02-24 17:55:31 +01:00
libv4l2
2020-06-29 09:58:50 -07:00
libvmaf
2012-10-27 20:02:33 +01:00
libvorbis
libvpx
2024-06-05 21:51:46 +02:00
libvvenc
2013-11-22 11:05:13 -05:00
libwebp
2023-09-19 13:34:58 +02:00
libxevd
2023-09-19 13:34:21 +02:00
libxeve
2017-09-09 08:32:03 +08:00
libxml2
2015-09-21 15:34:15 +02:00
libzimg
2013-04-21 15:00:11 +02:00
libzmq
2013-09-01 23:05:50 +02:00
libzvbi
2017-11-23 16:08:42 +01:00
lv2
2016-01-21 09:29:39 +01:00
mediacodec
2025-07-06 16:05:38 +08:00
ohcodec
2013-02-24 17:55:31 +01:00
openal
2013-11-24 20:13:27 +01:00
opengl
2021-09-07 19:35:31 +02:00
openssl
2019-05-05 15:01:53 +02:00
pocketsphinx
2018-04-27 21:35:56 +02:00
vapoursynth
2024-12-18 17:27:46 +09:00
vulkan_static
2012-10-27 20:02:33 +01:00
"
2017-09-05 12:45:20 +02:00
2016-11-30 23:50:17 +01:00
HWACCEL_AUTODETECT_LIBRARY_LIST = "
2017-11-26 21:36:06 -05:00
amf
2016-06-25 11:32:26 +02:00
audiotoolbox
cuda
2019-07-30 02:51:42 -05:00
cuda_llvm
2016-06-25 11:32:26 +02:00
cuvid
d3d11va
2023-12-05 14:46:43 +08:00
d3d12va
2016-06-25 11:32:26 +02:00
dxva2
2018-03-03 21:28:26 +01:00
ffnvcodec
2023-12-29 12:23:26 +08:00
libdrm
2017-02-11 16:49:34 +01:00
nvdec
2016-06-25 11:32:26 +02:00
nvenc
vaapi
vdpau
2017-09-06 11:53:48 +02:00
videotoolbox
2021-12-20 11:04:49 +01:00
vulkan
2017-09-20 18:55:40 -07:00
v4l2_m2m
2016-06-25 11:32:26 +02:00
"
2017-10-11 17:55:25 -03:00
# catchall list of things that require external libs to link
EXTRALIBS_LIST = "
cpu_init
cws2fws
"
2017-03-15 21:09:06 +01:00
HWACCEL_LIBRARY_NONFREE_LIST = "
2019-02-20 19:57:49 -08:00
cuda_nvcc
2017-05-11 22:51:31 +02:00
cuda_sdk
2017-03-15 21:09:06 +01:00
libnpp
"
2016-11-30 23:50:17 +01:00
HWACCEL_LIBRARY_LIST = "
2017-03-15 21:09:06 +01:00
$HWACCEL_LIBRARY_NONFREE_LIST
2016-11-30 23:50:17 +01:00
libmfx
2021-02-03 14:49:46 +08:00
libvpl
2016-11-30 23:50:17 +01:00
mmal
omx
2017-03-04 23:57:47 +00:00
opencl
2016-11-30 23:50:17 +01:00
"
2012-08-09 23:37:28 +02:00
DOCUMENT_LIST = "
2013-11-24 18:40:16 -03:00
doc
2012-08-09 23:37:28 +02:00
htmlpages
manpages
podpages
txtpages
"
2013-11-02 17:21:51 +01:00
FEATURE_LIST = "
2014-03-14 18:39:10 +01:00
ftrapv
2013-11-02 17:21:51 +01:00
gray
hardcoded_tables
2012-07-24 21:33:42 +00:00
omx_rpi
2013-11-02 17:21:51 +01:00
runtime_cpudetect
safe_bitstream_reader
shared
small
static
swscale_alpha
"
2018-08-28 17:14:55 +03:00
# this list should be kept in linking order
2012-11-11 13:37:40 +01:00
LIBRARY_LIST = "
avdevice
avfilter
2018-08-28 17:14:55 +03:00
swscale
2012-11-11 13:37:40 +01:00
avformat
2018-08-28 17:14:55 +03:00
avcodec
swresample
2012-11-11 13:37:40 +01:00
avutil
"
2013-11-02 17:21:51 +01:00
LICENSE_LIST = "
gpl
nonfree
version3
"
2011-12-15 12:17:13 +01:00
PROGRAM_LIST = "
2011-12-16 01:23:15 +01:00
ffplay
ffprobe
2011-12-15 12:17:13 +01:00
ffmpeg
"
2013-11-02 17:21:51 +01:00
SUBSYSTEM_LIST = "
2014-03-14 18:39:10 +01:00
dwt
2013-03-02 16:57:26 -08:00
error_resilience
2014-08-28 19:32:45 -07:00
faan
2014-03-14 18:39:10 +01:00
fast_unaligned
2024-04-02 21:01:56 -07:00
iamf
2010-03-02 03:16:27 +00:00
lsp
2014-08-02 18:54:43 +02:00
pixelutils
2013-11-02 17:21:51 +01:00
network
"
2016-12-05 17:09:50 +01:00
# COMPONENT_LIST needs to come last to ensure correct dependency checking
2007-08-20 21:35:51 +00:00
CONFIG_LIST = "
2012-08-09 23:37:28 +02:00
$DOCUMENT_LIST
2013-11-02 17:05:28 +01:00
$EXAMPLE_LIST
2012-10-27 20:02:33 +01:00
$EXTERNAL_LIBRARY_LIST
2017-10-11 17:55:25 -03:00
$EXTERNAL_AUTODETECT_LIBRARY_LIST
2016-05-03 08:06:15 +02:00
$HWACCEL_LIBRARY_LIST
2017-10-11 17:55:25 -03:00
$HWACCEL_AUTODETECT_LIBRARY_LIST
2013-11-02 17:21:51 +01:00
$FEATURE_LIST
$LICENSE_LIST
2012-11-11 13:37:40 +01:00
$LIBRARY_LIST
2011-12-15 12:17:13 +01:00
$PROGRAM_LIST
2013-11-02 17:21:51 +01:00
$SUBSYSTEM_LIST
2017-07-28 13:44:07 +02:00
autodetect
2014-04-17 03:42:17 +02:00
fontconfig
2019-12-02 23:57:11 +02:00
large_tests
2017-09-01 15:11:18 +02:00
linux_perf
2021-07-20 19:09:22 +02:00
macos_kperf
2012-07-02 19:31:35 +02:00
memory_poisoning
2013-12-20 13:51:50 +02:00
neon_clobber_test
2017-04-21 23:58:32 +02:00
ossfuzz
2009-08-20 01:06:18 +00:00
pic
2021-06-11 23:54:34 +02:00
ptx_compression
2025-05-15 23:07:54 +02:00
resource_compression
2011-06-14 11:29:48 +01:00
thumb
2015-04-20 14:44:32 +01:00
valgrind_backtrace
2012-02-02 11:48:13 -08:00
xmm_clobber_test
2016-12-05 17:09:50 +01:00
$COMPONENT_LIST
2007-08-20 21:35:51 +00:00
"
2006-11-14 00:47:27 +00:00
2013-11-02 17:21:49 +01:00
THREADS_LIST = "
2007-02-25 21:26:40 +00:00
pthreads
2011-11-02 00:00:21 +09:00
os2threads
2007-02-25 21:26:40 +00:00
w32threads
2013-11-02 17:21:49 +01:00
"
2007-02-25 21:26:40 +00:00
2013-11-02 17:21:49 +01:00
ATOMICS_LIST = "
2013-04-06 19:04:56 +02:00
atomics_win32
2013-11-02 17:21:49 +01:00
"
2013-03-27 19:26:19 +01:00
2016-11-30 23:50:17 +01:00
AUTODETECT_LIBS = "
$EXTERNAL_AUTODETECT_LIBRARY_LIST
$HWACCEL_AUTODETECT_LIBRARY_LIST
$THREADS_LIST
"
2013-11-02 17:21:49 +01:00
ARCH_LIST = "
2012-11-16 21:02:53 +00:00
aarch64
2008-12-17 00:54:54 +00:00
arm
2007-06-15 20:35:44 +00:00
ia64
2021-12-01 11:52:19 +08:00
loongarch
loongarch32
loongarch64
2007-06-15 20:35:44 +00:00
m68k
mips
2009-05-19 19:40:24 +00:00
mips64
2007-06-15 20:35:44 +00:00
parisc
2008-12-27 11:33:26 +00:00
ppc
2009-05-26 05:00:51 +00:00
ppc64
2021-07-25 18:31:27 -04:00
riscv
2007-06-15 20:35:44 +00:00
s390
sparc
sparc64
2012-10-16 18:21:06 +00:00
tilegx
tilepro
2024-11-20 20:44:59 +08:00
wasm
2007-06-15 20:35:44 +00:00
x86
x86_32
x86_64
2013-11-02 17:21:49 +01:00
"
2007-06-15 20:35:44 +00:00
2013-11-02 17:21:49 +01:00
ARCH_EXT_LIST_ARM = "
2012-12-01 12:26:12 +00:00
armv5te
armv6
armv6t2
2014-04-05 13:46:51 +02:00
armv8
2023-05-25 14:57:37 +03:00
dotprod
i8mm
2012-12-01 12:26:12 +00:00
neon
2012-12-04 23:29:34 +00:00
vfp
2012-12-01 12:26:12 +00:00
vfpv3
2014-08-07 18:34:35 +02:00
setend
2023-10-12 23:18:28 +03:00
sve
sve2
2013-11-02 17:21:49 +01:00
"
2012-12-01 12:26:12 +00:00
2014-03-14 19:49:02 +01:00
ARCH_EXT_LIST_MIPS = "
mipsfpu
mips32r2
2016-03-07 19:49:10 +05:30
mips32r5
2015-12-03 13:22:23 +00:00
mips64r2
2015-12-03 13:22:24 +00:00
mips32r6
2015-04-09 19:50:13 +05:30
mips64r6
2015-12-03 13:22:16 +00:00
mipsdsp
2014-03-14 19:49:02 +01:00
mipsdspr2
2015-04-09 19:46:24 +05:30
msa
2015-05-08 18:16:14 +08:00
"
ARCH_EXT_LIST_LOONGSON = "
2015-07-03 18:12:07 +08:00
loongson2
loongson3
2015-07-03 18:11:27 +08:00
mmi
2021-12-15 11:51:04 +08:00
lsx
lasx
2014-03-14 19:49:02 +01:00
"
2024-11-20 20:44:59 +08:00
ARCH_EXT_LIST_WASM = "
simd128
"
2013-11-02 17:21:49 +01:00
ARCH_EXT_LIST_X86_SIMD = "
2015-10-26 02:08:58 -05:00
aesni
2009-01-25 19:48:26 +00:00
amd3dnow
2009-02-18 00:03:09 +00:00
amd3dnowext
2012-08-28 13:56:46 +02:00
avx
2013-10-20 10:28:38 -05:00
avx2
2017-10-26 19:45:50 +02:00
avx512
2022-02-23 16:57:30 +08:00
avx512icl
2014-02-22 02:47:01 -03:00
fma3
2012-08-28 13:56:46 +02:00
fma4
mmx
mmxext
sse
sse2
sse3
sse4
sse42
ssse3
2014-02-20 23:27:13 +01:00
xop
2013-11-02 17:21:49 +01:00
"
2012-08-28 13:56:46 +02:00
2014-03-06 18:31:45 +01:00
ARCH_EXT_LIST_PPC = "
altivec
dcbzl
ldbrx
2015-05-10 02:47:31 +02:00
power8
2014-03-06 18:31:45 +01:00
ppc4xx
2023-08-18 15:32:39 -04:00
vec_xl
2014-06-18 04:51:35 -04:00
vsx
2014-03-06 18:31:45 +01:00
"
2022-09-26 17:52:26 +03:00
ARCH_EXT_LIST_RISCV = "
2023-12-05 17:54:26 +02:00
rv
2022-09-26 17:52:26 +03:00
rvv
2022-09-23 18:09:18 +03:00
rv_zicbop
2024-05-07 22:08:38 +03:00
rv_zvbb
2022-09-26 17:52:26 +03:00
"
2013-11-02 17:21:53 +01:00
ARCH_EXT_LIST_X86 = "
$ARCH_EXT_LIST_X86_SIMD
i686
"
2012-08-28 13:56:46 +02:00
ARCH_EXT_LIST = "
2012-12-01 12:26:12 +00:00
$ARCH_EXT_LIST_ARM
2014-03-06 18:31:45 +01:00
$ARCH_EXT_LIST_PPC
2022-09-26 17:52:26 +03:00
$ARCH_EXT_LIST_RISCV
2024-11-20 20:44:59 +08:00
$ARCH_EXT_LIST_WASM
2012-08-28 13:56:46 +02:00
$ARCH_EXT_LIST_X86
2014-03-14 19:49:02 +01:00
$ARCH_EXT_LIST_MIPS
2015-05-08 18:16:14 +08:00
$ARCH_EXT_LIST_LOONGSON
2012-08-28 13:56:46 +02:00
"
2007-06-15 20:35:44 +00:00
2014-03-06 18:31:45 +01:00
ARCH_FEATURES = "
aligned_stack
fast_64bit
fast_clz
fast_cmov
2022-08-10 02:23:26 +02:00
fast_float16
2014-07-21 13:58:55 -07:00
simd_align_16
2016-07-30 20:54:42 +02:00
simd_align_32
2017-11-06 15:43:39 +01:00
simd_align_64
2012-08-28 13:56:46 +02:00
"
2007-06-15 20:35:44 +00:00
2014-03-06 18:31:45 +01:00
BUILTIN_LIST = "
MemoryBarrier
mm_empty
rdtsc
2016-02-21 22:42:32 +00:00
sem_timedwait
2014-03-06 18:31:45 +01:00
"
2013-11-02 17:21:49 +01:00
HAVE_LIST_CMDLINE = "
2012-09-05 11:35:13 +02:00
inline_asm
symver
2016-10-08 14:18:33 +00:00
x86asm
2013-11-02 17:21:49 +01:00
"
2012-09-05 11:35:13 +02:00
2013-11-02 17:21:49 +01:00
HAVE_LIST_PUB = "
2010-01-19 04:40:16 +00:00
bigendian
2010-07-10 22:22:00 +00:00
fast_unaligned
2013-11-02 17:21:49 +01:00
"
2010-01-19 04:40:16 +00:00
2014-03-06 18:31:45 +01:00
HEADERS_LIST = "
arpa_inet_h
2024-05-03 20:08:03 +03:00
asm_hwprobe_h
2014-03-14 19:08:14 +01:00
asm_types_h
2014-03-06 18:31:45 +01:00
cdio_paranoia_h
cdio_paranoia_paranoia_h
2016-11-24 13:39:13 -03:00
cuda_h
2016-02-21 22:42:32 +00:00
dispatch_dispatch_h
2014-03-06 18:31:45 +01:00
direct_h
2015-06-29 00:13:43 +02:00
dirent_h
2017-06-22 14:52:57 +02:00
dxgidebug_h
2014-03-06 18:31:45 +01:00
dxva_h
2014-03-14 19:08:14 +01:00
ES2_gl_h
2017-11-11 18:04:22 -03:00
gsm_h
2014-03-06 18:31:45 +01:00
io_h
2020-12-30 22:19:16 +01:00
linux_dma_buf_h
2018-04-08 13:30:19 -03:00
linux_perf_event_h
2014-03-06 18:31:45 +01:00
malloc_h
2016-01-21 23:17:47 +01:00
opencv2_core_core_c_h
2014-03-06 18:31:45 +01:00
poll_h
2024-01-07 00:55:51 -05:00
pthread_np_h
2023-11-18 22:09:57 +02:00
sys_hwprobe_h
2014-03-06 18:31:45 +01:00
sys_param_h
sys_resource_h
sys_select_h
sys_soundcard_h
sys_time_h
sys_un_h
sys_videoio_h
2014-03-14 19:08:14 +01:00
termios_h
2014-11-05 10:59:44 +01:00
udplite_h
2014-03-06 18:31:45 +01:00
unistd_h
2015-04-20 14:44:32 +01:00
valgrind_valgrind_h
2014-03-06 18:31:45 +01:00
windows_h
winsock2_h
"
2014-05-13 23:03:28 +02:00
INTRINSICS_LIST = "
intrinsics_neon
2022-11-14 02:32:33 -03:00
intrinsics_sse2
2014-05-13 23:03:28 +02:00
"
2012-10-19 18:58:39 +02:00
MATH_FUNCS = "
2012-10-13 22:54:53 +01:00
atanf
atan2f
2013-01-22 04:10:21 -03:00
cbrt
2012-10-19 18:58:39 +02:00
cbrtf
2015-07-20 04:04:46 -03:00
copysign
2012-10-13 22:54:53 +01:00
cosf
2015-07-20 04:04:46 -03:00
erf
2012-10-19 18:58:39 +02:00
exp2
exp2f
2012-10-13 22:54:53 +01:00
expf
2015-11-14 11:57:28 -05:00
hypot
2016-01-13 19:09:25 -05:00
isfinite
2012-10-19 18:58:39 +02:00
isinf
isnan
2012-10-13 22:54:53 +01:00
ldexpf
2012-10-19 18:58:39 +02:00
llrint
llrintf
log2
log2f
2012-10-13 22:54:53 +01:00
log10f
2012-10-19 18:58:39 +02:00
lrint
lrintf
2012-10-13 22:54:53 +01:00
powf
2012-10-19 18:58:39 +02:00
rint
round
roundf
2012-10-13 22:54:53 +01:00
sinf
2012-10-19 18:58:39 +02:00
trunc
truncf
"
2017-09-26 18:26:11 +02:00
SYSTEM_FEATURES = "
dos_paths
libc_msvcrt
MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
section_data_rel_ro
threads
uwp
2017-11-11 23:21:55 -03:00
winrt
2017-09-26 18:26:11 +02:00
"
2014-03-06 18:31:45 +01:00
SYSTEM_FUNCS = "
2012-11-27 04:55:26 +01:00
access
2012-06-18 14:37:02 +01:00
aligned_malloc
2023-07-08 11:48:13 -06:00
arc4random_buf
2012-03-03 15:56:11 +01:00
clock_gettime
2007-08-08 20:18:41 +00:00
closesocket
2012-11-29 17:02:24 +02:00
CommandLineToArgvW
2024-09-09 06:34:42 -04:00
elf_aux_info
2010-06-30 10:38:01 +00:00
fcntl
2010-01-11 17:01:56 +00:00
getaddrinfo
2022-02-23 16:08:05 +02:00
getauxval
2022-06-20 13:29:57 +03:00
getenv
2007-08-10 01:13:15 +00:00
gethrtime
2012-07-03 20:14:09 -07:00
getopt
2019-12-11 22:53:28 +02:00
GetModuleHandle
2012-01-01 23:54:40 +00:00
GetProcessAffinityMask
2010-02-22 22:21:58 +00:00
GetProcessMemoryInfo
2007-08-12 00:59:50 +00:00
GetProcessTimes
2007-07-13 16:04:00 +00:00
getrusage
2020-01-21 14:47:57 +02:00
GetStdHandle
2013-11-02 17:21:49 +01:00
GetSystemTimeAsFileTime
2012-06-20 13:46:52 +01:00
gettimeofday
2012-02-27 10:27:17 +01:00
glob
2013-11-24 20:13:27 +01:00
glXGetProcAddress
2014-10-24 10:33:19 +03:00
gmtime_r
2006-11-14 03:55:26 +00:00
inet_aton
2009-07-24 00:12:55 +00:00
isatty
2011-03-22 03:47:48 +00:00
kbhit
2011-02-21 01:02:29 +01:00
localtime_r
2015-08-25 12:48:12 +02:00
lstat
2009-04-09 14:55:05 +00:00
lzo1x_999_compress
2014-01-24 01:15:31 +01:00
mach_absolute_time
2011-01-05 05:16:33 +00:00
MapViewOfFile
2006-11-14 00:47:27 +00:00
memalign
2007-07-11 13:57:22 +00:00
mkstemp
2010-12-22 14:13:04 +00:00
mmap
2012-10-13 02:40:48 +00:00
mprotect
2012-06-21 17:00:25 +01:00
nanosleep
2011-09-04 00:24:06 +02:00
PeekNamedPipe
2009-01-07 23:36:34 +00:00
posix_memalign
2022-10-18 18:10:01 +02:00
prctl
2012-05-08 19:02:33 +02:00
pthread_cancel
2024-01-07 00:55:51 -05:00
pthread_set_name_np
pthread_setname_np
2011-12-21 01:18:01 +01:00
sched_getaffinity
2017-10-25 11:03:14 -07:00
SecItemImport
2012-11-30 16:56:57 +02:00
SetConsoleTextAttribute
2015-06-30 16:31:19 -06:00
SetConsoleCtrlHandler
2019-12-11 22:53:28 +02:00
SetDllDirectory
2009-01-11 22:05:43 +00:00
setmode
2011-09-12 17:40:29 +02:00
setrlimit
2012-06-21 17:00:25 +01:00
Sleep
2010-03-25 22:46:35 +00:00
strerror_r
2014-03-06 18:31:45 +01:00
sysconf
sysctl
2023-05-26 10:20:21 +03:00
sysctlbyname
2024-06-30 18:33:18 +08:00
tempnam
2014-03-06 18:31:45 +01:00
usleep
2015-10-01 17:58:40 +02:00
UTGetOSTypeFromString
2014-03-06 18:31:45 +01:00
VirtualAlloc
2014-03-14 19:08:14 +01:00
wglGetProcAddress
2014-03-06 18:31:45 +01:00
"
2017-09-26 18:26:11 +02:00
SYSTEM_LIBRARIES = "
2018-04-03 11:44:25 +02:00
bcrypt
2017-09-26 18:26:11 +02:00
vaapi_drm
vaapi_x11
2023-04-14 10:39:04 -04:00
vaapi_win32
2017-09-26 18:26:11 +02:00
vdpau_x11
"
2014-03-06 18:31:45 +01:00
TOOLCHAIN_FEATURES = "
2017-05-03 11:18:51 +03:00
as_arch_directive
2023-05-25 14:57:37 +03:00
as_archext_dotprod_directive
as_archext_i8mm_directive
2023-10-12 23:18:28 +03:00
as_archext_sve_directive
as_archext_sve2_directive
2018-03-31 21:54:32 +03:00
as_dn_directive
2016-07-18 23:23:50 +03:00
as_fpu_directive
2014-05-30 09:58:43 +02:00
as_func
2015-02-18 00:40:06 +02:00
as_object_arch
2014-03-06 18:31:45 +01:00
asm_mod_q
2017-01-25 18:40:51 +01:00
blocks_extension
2014-03-06 18:31:45 +01:00
ebp_available
ebx_available
gnu_as
2014-03-14 19:08:14 +01:00
gnu_windres
2014-03-06 18:31:45 +01:00
ibm_asm
2016-01-24 09:28:55 -08:00
inline_asm_direct_symbol_refs
2014-03-06 18:31:45 +01:00
inline_asm_labels
2014-03-18 15:29:14 +11:00
inline_asm_nonlocal_labels
2014-03-06 18:31:45 +01:00
pragma_deprecated
2014-03-14 19:08:14 +01:00
rsync_contimeout
2014-03-06 18:31:45 +01:00
symver_asm_label
symver_gnu_asm
vfp_args
xform_asm
xmm_clobbers
"
TYPES_LIST = "
2022-07-19 13:44:58 +02:00
DPI_AWARENESS_CONTEXT
2022-07-08 18:02:40 +02:00
IDXGIOutput5
2017-09-26 11:30:28 -07:00
kCMVideoCodecType_HEVC
2021-02-23 14:02:27 +09:00
kCMVideoCodecType_HEVCWithAlpha
2021-11-13 02:43:06 -06:00
kCMVideoCodecType_VP9
2023-11-10 22:11:44 +02:00
kCMVideoCodecType_AV1
2019-04-13 16:36:00 +02:00
kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange
2021-11-13 00:30:28 -06:00
kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange
kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange
kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange
kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange
kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange
kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange
2019-06-26 18:57:59 +08:00
kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ
kCVImageBufferTransferFunction_ITU_R_2100_HLG
kCVImageBufferTransferFunction_Linear
2021-10-31 19:34:33 +08:00
kCVImageBufferYCbCrMatrix_ITU_R_2020
kCVImageBufferColorPrimaries_ITU_R_2020
kCVImageBufferTransferFunction_ITU_R_2020
kCVImageBufferTransferFunction_SMPTE_ST_428_1
2024-12-16 10:28:29 +01:00
kVTQPModulationLevel_Default
2025-07-13 16:56:20 -03:00
SecPkgContext_KeyingMaterialInfo
2014-03-06 18:31:45 +01:00
socklen_t
2010-01-11 17:17:01 +00:00
struct_addrinfo
2012-06-21 14:19:56 +03:00
struct_group_source_req
struct_ip_mreq_source
2010-01-21 15:42:05 +00:00
struct_ipv6_mreq
2016-03-09 14:17:46 +01:00
struct_msghdr_msg_flags
2012-06-25 12:08:44 +03:00
struct_pollfd
2011-09-12 17:40:29 +02:00
struct_rusage_ru_maxrss
2012-08-08 16:01:01 +02:00
struct_sctp_event_subscribe
2010-01-21 15:42:05 +00:00
struct_sockaddr_in6
2010-01-20 17:24:23 +00:00
struct_sockaddr_sa_len
2010-01-11 17:42:15 +00:00
struct_sockaddr_storage
2013-05-25 15:32:14 +02:00
struct_stat_st_mtim_tv_nsec
2011-12-27 06:31:41 +01:00
struct_v4l2_frmivalenum_discrete
2024-02-29 13:34:34 +08:00
struct_mfxConfigInterface
2014-03-06 18:31:45 +01:00
"
HAVE_LIST = "
$ARCH_EXT_LIST
$( add_suffix _external $ARCH_EXT_LIST )
$( add_suffix _inline $ARCH_EXT_LIST )
$ARCH_FEATURES
$BUILTIN_LIST
$HAVE_LIST_CMDLINE
$HAVE_LIST_PUB
$HEADERS_LIST
2014-05-13 23:03:28 +02:00
$INTRINSICS_LIST
2014-03-06 18:31:45 +01:00
$MATH_FUNCS
2017-09-26 18:26:11 +02:00
$SYSTEM_FEATURES
2014-03-06 18:31:45 +01:00
$SYSTEM_FUNCS
2017-09-26 18:26:11 +02:00
$SYSTEM_LIBRARIES
2014-03-06 18:31:45 +01:00
$THREADS_LIST
$TOOLCHAIN_FEATURES
$TYPES_LIST
2021-06-11 23:54:34 +02:00
gzip
2025-06-06 16:09:34 -04:00
ioctl_posix
2020-07-05 16:49:44 +01:00
libdrm_getfb2
2014-03-14 19:08:14 +01:00
makeinfo
2014-08-31 19:39:35 -07:00
makeinfo_html
2017-06-25 22:34:40 +01:00
opencl_d3d11
2017-09-10 13:37:20 +01:00
opencl_drm_arm
2018-03-11 21:19:20 +00:00
opencl_drm_beignet
2017-03-05 16:21:41 +00:00
opencl_dxva2
2017-03-04 23:57:48 +00:00
opencl_vaapi_beignet
2017-03-04 23:57:49 +00:00
opencl_vaapi_intel_media
2024-02-23 22:11:43 +08:00
opencl_videotoolbox
2014-03-14 19:08:14 +01:00
perl
pod2man
2012-07-11 22:41:25 -03:00
texi2html
2021-04-16 10:46:41 +02:00
xmllint
2021-06-11 23:54:34 +02:00
zlib_gzip
2023-08-15 16:26:31 +08:00
openvino2
2007-02-25 21:38:11 +00:00
"
2006-11-14 00:16:43 +00:00
2012-12-19 18:48:21 +01:00
# options emitted with CONFIG_ prefix but not available on the command line
2008-10-24 23:18:21 +00:00
CONFIG_EXTRA = "
2012-07-24 19:16:29 +02:00
aandcttables
2012-07-27 02:06:29 +02:00
ac3dsp
2017-04-26 18:57:54 +02:00
adts_header
2020-08-07 16:03:29 -03:00
atsc_a53
2013-02-17 22:00:36 +01:00
audio_frame_queue
2014-01-16 17:30:19 +01:00
audiodsp
2014-01-14 10:33:47 +01:00
blockdsp
2014-02-13 17:57:05 +01:00
bswapdsp
2014-03-22 18:41:43 +01:00
cabac
2017-05-04 23:01:51 +01:00
cbs
2025-04-19 18:44:14 +01:00
cbs_apv
2018-09-09 23:08:11 +01:00
cbs_av1
2017-05-14 16:18:25 +01:00
cbs_h264
2017-05-14 16:32:00 +01:00
cbs_h265
2023-03-21 16:01:15 +01:00
cbs_h266
2018-09-18 23:30:53 +01:00
cbs_jpeg
2017-05-04 23:03:03 +01:00
cbs_mpeg2
2023-11-13 01:53:35 +00:00
cbs_vp8
2017-06-22 22:42:51 +01:00
cbs_vp9
2025-06-10 07:46:31 +10:00
celp_math
2023-08-22 13:26:36 +08:00
d3d12va_encode
2022-03-15 17:56:38 +01:00
deflate_wrapper
2014-07-05 09:09:15 +00:00
dirac_parse
2018-06-03 20:22:50 +03:00
dnn
2024-04-12 12:55:42 +02:00
dovi_rpudec
2024-04-12 13:24:22 +02:00
dovi_rpuenc
2014-07-05 09:09:15 +00:00
dvprofile
2023-06-15 13:46:43 +02:00
evcparse
2013-08-21 18:26:40 +02:00
exif
2014-08-28 19:32:45 -07:00
faandct
faanidct
2014-02-03 10:09:45 -08:00
fdctdsp
2015-02-21 11:24:44 +01:00
fmtconvert
2013-03-13 21:59:33 -07:00
frame_thread_encoder
2015-07-16 16:11:04 +01:00
g722dsp
2012-03-08 23:53:57 +01:00
golomb
2009-06-05 11:04:03 +00:00
gplv3
2013-11-05 08:11:47 +01:00
h263dsp
2012-03-08 23:53:57 +01:00
h264chroma
h264dsp
2016-06-28 10:24:05 +02:00
h264parse
2012-03-08 23:53:57 +01:00
h264pred
2011-12-18 14:10:33 +01:00
h264qpel
2022-06-27 17:41:34 +02:00
h264_sei
2017-04-02 15:40:01 -03:00
hevcparse
2022-06-27 17:41:34 +02:00
hevc_sei
2013-03-09 15:14:35 -08:00
hpeldsp
2012-03-08 23:53:57 +01:00
huffman
2014-01-07 12:23:13 +01:00
huffyuvdsp
2013-12-23 18:42:11 +01:00
huffyuvencdsp
2024-02-15 19:12:40 -03:00
iamfdec
2024-02-17 10:26:51 -03:00
iamfenc
2014-01-24 11:55:16 +01:00
idctdsp
2022-03-15 10:46:09 +01:00
inflate_wrapper
2014-01-14 18:24:02 +01:00
intrax8
2016-02-16 19:59:06 +01:00
iso_media
2024-05-17 09:48:03 -03:00
iso_writer
2015-07-16 16:10:58 +01:00
ividsp
2015-03-27 12:23:59 +01:00
jpegtables
2009-06-05 11:04:03 +00:00
lgplv3
2016-01-24 09:28:55 -08:00
libx262
2023-03-11 11:51:13 +02:00
libx264_hdr10
2014-05-30 16:28:49 +02:00
llauddsp
2014-01-20 20:32:51 +01:00
llviddsp
2017-01-07 23:13:48 -03:00
llvidencdsp
2012-03-08 23:53:57 +01:00
lpc
2015-08-26 11:31:40 +02:00
lzf
2014-02-08 02:59:58 +01:00
me_cmp
2014-06-20 06:05:45 -07:00
mpeg_er
2012-08-14 02:09:15 +02:00
mpegaudio
2012-07-27 02:06:29 +02:00
mpegaudiodsp
2016-12-03 11:25:02 +01:00
mpegaudioheader
2021-12-14 11:19:08 +01:00
mpeg4audio
2012-08-04 00:05:46 +01:00
mpegvideo
2021-12-24 02:13:41 +01:00
mpegvideodec
2012-08-13 13:00:24 +02:00
mpegvideoenc
2025-06-14 17:03:05 +02:00
mpegvideoencdsp
2022-07-31 11:12:41 +02:00
msmpeg4dec
msmpeg4enc
2015-07-16 16:10:59 +01:00
mss34dsp
2014-02-03 14:29:09 -08:00
pixblockdsp
2014-01-08 14:00:10 +01:00
qpeldsp
2015-03-13 08:13:00 +01:00
qsv
2015-03-13 07:55:53 +01:00
qsvdec
2015-03-13 10:20:31 +01:00
qsvenc
2017-08-18 09:40:47 +08:00
qsvvpp
2012-08-13 19:16:06 +02:00
rangecoder
2013-08-04 14:33:36 +02:00
riffdec
2013-08-04 14:10:54 +02:00
riffenc
2012-07-27 02:06:29 +02:00
rtpdec
2012-11-29 10:34:54 +01:00
rtpenc_chain
2015-07-16 16:11:00 +01:00
rv34dsp
2018-04-05 01:37:25 +02:00
scene_sad
2012-07-27 02:06:29 +02:00
sinewin
2015-05-24 16:20:26 +02:00
snappy
2016-03-18 15:52:30 +01:00
srtp
2014-07-21 16:25:48 +01:00
startcode
2015-05-20 00:01:37 +01:00
texturedsp
texturedspenc
2013-12-21 16:03:59 +01:00
tpeldsp
2017-10-01 22:51:07 +01:00
vaapi_1
2016-03-23 23:49:02 +00:00
vaapi_encode
2016-02-10 13:10:50 +01:00
vc1dsp
2012-12-15 09:46:02 -08:00
videodsp
2012-07-16 12:50:14 +01:00
vp3dsp
2015-07-16 16:11:01 +01:00
vp56dsp
2015-07-16 16:11:02 +01:00
vp8dsp
2024-08-30 17:04:30 +00:00
vulkan_encode
2025-04-27 19:44:33 +08:00
vvc_sei
2014-09-03 03:27:27 -07:00
wma_freqs
2015-07-16 16:11:03 +01:00
wmv2dsp
2008-10-24 23:18:21 +00:00
"
2007-02-11 19:50:19 +00:00
CMDLINE_SELECT = "
2007-06-15 20:35:44 +00:00
$ARCH_EXT_LIST
2007-02-11 19:50:19 +00:00
$CONFIG_LIST
2012-09-05 11:35:13 +02:00
$HAVE_LIST_CMDLINE
2007-02-25 21:26:40 +00:00
$THREADS_LIST
2010-01-18 23:12:55 +00:00
asm
2008-03-25 15:16:02 +00:00
cross_compile
2007-02-11 19:50:19 +00:00
debug
extra_warnings
2008-03-25 09:53:49 +00:00
logging
2007-10-24 19:19:02 +00:00
optimizations
2025-03-21 13:10:40 +05:30
response_files
2013-11-10 09:02:51 +01:00
rpath
2011-04-01 00:24:12 +02:00
stripping
2023-12-15 13:03:49 +02:00
version_tracking
2007-02-11 19:50:19 +00:00
"
2008-06-02 23:47:33 +00:00
2013-11-02 17:21:49 +01:00
PATHS_LIST = "
2008-05-28 09:37:01 +00:00
bindir
2009-01-25 22:23:03 +00:00
datadir
2013-08-28 10:30:14 +02:00
docdir
2008-03-25 22:51:43 +00:00
incdir
libdir
mandir
2015-05-29 16:08:36 +02:00
pkgconfigdir
2008-03-25 22:51:43 +00:00
prefix
shlibdir
2016-02-19 16:34:30 +01:00
install_name_dir
2013-11-02 17:21:49 +01:00
"
2008-06-02 23:47:33 +00:00
CMDLINE_SET = "
$PATHS_LIST
2010-05-02 18:59:15 +00:00
ar
2008-06-02 23:47:33 +00:00
arch
2009-03-05 21:20:01 +00:00
as
2012-04-07 09:20:54 +02:00
assert_level
2008-06-02 23:47:33 +00:00
build_suffix
cc
2015-11-23 17:08:49 -05:00
objcc
2008-06-02 23:47:33 +00:00
cpu
cross_prefix
2015-09-03 11:55:48 +02:00
custom_allocator
2011-08-31 04:11:25 +05:30
cxx
2009-07-12 13:29:43 +00:00
dep_cc
2014-07-07 15:24:48 -07:00
doxygen
2015-05-06 13:37:31 +02:00
env
2008-09-26 21:37:50 +00:00
extra_version
2013-04-16 13:40:45 +02:00
gas
2008-11-23 12:36:34 +00:00
host_cc
host_cflags
2016-12-06 18:19:09 +01:00
host_extralibs
2012-08-28 13:02:35 +01:00
host_ld
2008-11-23 12:36:34 +00:00
host_ldflags
2009-03-08 22:11:24 +00:00
host_os
2016-12-28 00:19:49 +02:00
ignore_tests
2011-05-18 00:03:19 +02:00
install
2009-07-12 13:29:40 +00:00
ld
2016-04-25 07:39:08 -07:00
ln_s
2008-06-02 23:47:33 +00:00
logfile
2010-01-28 13:06:31 +00:00
malloc_prefix
2021-12-16 11:28:01 -08:00
metalcc
metallib
2008-12-13 15:13:24 +00:00
nm
2011-06-19 18:47:06 +01:00
optflags
2018-04-16 22:35:23 +02:00
nvcc
2017-05-11 22:53:41 +02:00
nvccflags
2011-03-06 13:48:30 +00:00
pkg_config
2014-01-20 11:17:45 +01:00
pkg_config_flags
2012-01-29 22:56:12 +01:00
progs_suffix
2012-05-09 04:29:53 +01:00
random_seed
2014-04-22 21:54:08 +02:00
ranlib
2010-03-15 19:23:24 +00:00
samples
2024-03-19 15:40:14 -03:00
stdc
stdcxx
2011-04-01 00:24:12 +02:00
strip
2014-06-11 17:51:49 +01:00
sws_max_filter_size
2009-02-21 21:07:34 +00:00
sysinclude
sysroot
2008-11-23 12:36:38 +00:00
target_exec
2008-03-25 22:51:43 +00:00
target_os
2008-11-23 12:36:38 +00:00
target_path
2013-05-20 01:55:32 +03:00
target_samples
2013-10-05 13:48:22 +02:00
tempprefix
2012-09-16 22:06:53 +01:00
toolchain
2012-01-20 20:42:31 +01:00
valgrind
2018-12-20 11:39:39 +11:00
windres
2016-10-08 14:18:33 +00:00
x86asmexe
2008-06-02 23:47:33 +00:00
"
2007-02-11 19:50:19 +00:00
2009-07-20 19:00:59 +00:00
CMDLINE_APPEND = "
extra_cflags
2011-08-31 04:11:25 +05:30
extra_cxxflags
2015-11-23 17:08:49 -05:00
extra_objcflags
2013-02-03 15:13:17 +01:00
host_cppflags
2009-07-20 19:00:59 +00:00
"
2007-05-08 08:27:00 +00:00
# code dependency declarations
2007-06-17 11:57:50 +00:00
# architecture extensions
2010-01-18 21:04:57 +00:00
2008-12-17 00:54:54 +00:00
armv5te_deps = "arm"
armv6_deps = "arm"
2008-12-30 03:13:44 +00:00
armv6t2_deps = "arm"
2014-04-05 13:46:51 +02:00
armv8_deps = "aarch64"
2013-12-10 20:13:32 +01:00
neon_deps_any = "aarch64 arm"
2014-05-13 23:03:28 +02:00
intrinsics_neon_deps = "neon"
2024-07-11 13:52:10 -03:00
intrinsics_sse2_deps = "sse2"
2023-07-14 19:29:32 +03:00
vfp_deps = "arm"
2012-12-04 23:29:34 +00:00
vfpv3_deps = "vfp"
2014-08-07 18:34:35 +02:00
setend_deps = "arm"
2023-05-25 14:57:37 +03:00
dotprod_deps = "aarch64 neon"
i8mm_deps = "aarch64 neon"
2023-10-12 23:18:28 +03:00
sve_deps = "aarch64 neon"
sve2_deps = "aarch64 neon sve"
2010-01-18 21:04:57 +00:00
2012-12-03 01:36:49 +00:00
map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2010-01-18 21:04:57 +00:00
altivec_deps = "ppc"
2017-06-06 19:06:10 +02:00
dcbzl_deps = "ppc"
ldbrx_deps = "ppc"
2010-01-18 21:04:57 +00:00
ppc4xx_deps = "ppc"
2023-08-18 15:32:39 -04:00
vec_xl_deps = "altivec"
2015-05-10 02:47:31 +02:00
vsx_deps = "altivec"
power8_deps = "vsx"
2010-01-18 21:04:57 +00:00
2023-12-05 17:54:26 +02:00
rv_deps = "riscv"
rvv_deps = "rv"
2022-09-23 18:09:18 +03:00
rv_zicbop = "riscv"
2024-05-07 22:08:38 +03:00
rv_zvbb_deps = "rvv"
2022-09-26 17:52:26 +03:00
2016-07-16 15:18:58 -03:00
loongson2_deps = "mips"
loongson3_deps = "mips"
2021-12-15 11:51:04 +08:00
mmi_deps_any = "loongson2 loongson3"
lsx_deps = "loongarch"
lasx_deps = "lsx"
2015-04-16 02:59:17 -03:00
mips32r2_deps = "mips"
2016-03-07 19:49:10 +05:30
mips32r5_deps = "mips"
2015-12-03 13:22:24 +00:00
mips32r6_deps = "mips"
2015-12-03 13:22:23 +00:00
mips64r2_deps = "mips"
2015-04-09 19:50:13 +05:30
mips64r6_deps = "mips"
2017-11-01 20:39:37 -03:00
mipsfpu_deps = "mips"
mipsdsp_deps = "mips"
mipsdspr2_deps = "mips"
msa_deps = "mipsfpu"
2010-01-18 21:04:57 +00:00
2024-11-20 20:44:59 +08:00
simd128_deps = "wasm"
2013-08-27 23:33:57 +02:00
x86_64_select = "i686"
x86_64_suggest = "fast_cmov"
2012-08-28 13:56:46 +02:00
2010-01-18 21:04:57 +00:00
amd3dnow_deps = "mmx"
amd3dnowext_deps = "amd3dnow"
2014-01-25 16:55:58 +01:00
i686_deps = "x86"
2007-06-17 11:57:50 +00:00
mmx_deps = "x86"
2012-07-08 18:42:12 +02:00
mmxext_deps = "mmx"
2012-08-28 13:56:46 +02:00
sse_deps = "mmxext"
sse2_deps = "sse"
sse3_deps = "sse2"
ssse3_deps = "sse3"
sse4_deps = "ssse3"
sse42_deps = "sse4"
2015-10-26 02:08:58 -05:00
aesni_deps = "sse42"
2012-08-28 13:56:46 +02:00
avx_deps = "sse42"
2014-02-06 01:33:59 -03:00
xop_deps = "avx"
2014-02-22 02:47:01 -03:00
fma3_deps = "avx"
2012-06-18 23:39:14 -04:00
fma4_deps = "avx"
2013-10-20 10:28:38 -05:00
avx2_deps = "avx"
2017-10-26 19:45:50 +02:00
avx512_deps = "avx2"
2022-02-23 16:57:30 +08:00
avx512icl_deps = "avx512"
2007-06-17 11:57:50 +00:00
2016-10-08 14:18:33 +00:00
mmx_external_deps = "x86asm"
2017-06-06 18:56:24 +02:00
mmx_inline_deps = "inline_asm x86"
2012-08-27 03:07:11 +02:00
mmx_suggest = "mmx_external mmx_inline"
2013-11-02 17:21:53 +01:00
for ext in $( filter_out mmx $ARCH_EXT_LIST_X86_SIMD ) ; do
2012-08-27 03:07:11 +02:00
eval dep = \$ ${ ext } _deps
eval ${ ext } _external_deps = '"${dep}_external"'
eval ${ ext } _inline_deps = '"${dep}_inline"'
eval ${ ext } _suggest = '"${ext}_external ${ext}_inline"'
done
2013-12-12 17:45:32 +01:00
aligned_stack_if_any = "aarch64 ppc x86"
2024-06-09 13:20:24 -04:00
fast_64bit_if_any = "aarch64 ia64 mips64 parisc64 ppc64 riscv64 sparc64 x86_64"
2024-06-09 14:43:34 +03:00
fast_clz_if_any = "aarch64 mips ppc x86"
2013-12-12 17:45:32 +01:00
fast_unaligned_if_any = "aarch64 ppc x86"
2014-07-21 13:58:55 -07:00
simd_align_16_if_any = "altivec neon sse"
2016-07-30 20:54:42 +02:00
simd_align_32_if_any = "avx"
2017-11-06 15:43:39 +01:00
simd_align_64_if_any = "avx512"
2009-07-15 18:33:12 +00:00
2013-12-10 09:25:18 +01:00
# system capabilities
2018-04-08 13:30:19 -03:00
linux_perf_deps = "linux_perf_event_h"
2010-06-15 13:26:52 +00:00
symver_if_any = "symver_asm_label symver_gnu_asm"
2017-01-20 17:17:16 +01:00
valgrind_backtrace_conflict = "optimizations"
valgrind_backtrace_deps = "valgrind_valgrind_h"
2010-06-15 13:26:52 +00:00
2013-12-18 21:52:28 +01:00
# threading support
atomics_win32_if = "MemoryBarrier"
atomics_native_if_any = " $ATOMICS_LIST "
2013-12-18 22:29:25 +01:00
w32threads_deps = "atomics_native"
2013-12-18 21:52:28 +01:00
threads_if_any = " $THREADS_LIST "
2010-02-11 23:40:37 +00:00
# subsystems
2025-06-22 09:15:56 +10:00
cbs_apv_select = "cbs"
2018-09-09 23:08:11 +01:00
cbs_av1_select = "cbs"
2019-07-08 18:38:21 +02:00
cbs_h264_select = "cbs"
cbs_h265_select = "cbs"
2023-03-21 16:01:15 +01:00
cbs_h266_select = "cbs"
2018-09-18 23:30:53 +01:00
cbs_jpeg_select = "cbs"
2017-05-04 23:03:03 +01:00
cbs_mpeg2_select = "cbs"
2023-11-13 01:53:35 +00:00
cbs_vp8_select = "cbs"
2017-06-22 22:42:51 +01:00
cbs_vp9_select = "cbs"
2022-03-15 17:56:38 +01:00
deflate_wrapper_deps = "zlib"
2014-07-05 09:09:15 +00:00
dirac_parse_select = "golomb"
2024-04-12 12:55:42 +02:00
dovi_rpudec_select = "golomb"
2024-04-12 13:24:22 +02:00
dovi_rpuenc_select = "golomb"
2021-05-04 13:27:12 +01:00
dnn_deps = "avformat swscale"
2024-06-10 17:35:51 +02:00
dnn_deps_any = "libtensorflow libopenvino libtorch"
2014-02-08 02:59:58 +01:00
error_resilience_select = "me_cmp"
2023-06-17 10:16:45 -03:00
evcparse_select = "golomb"
2017-06-12 21:33:35 +02:00
faandct_deps = "faan"
faandct_select = "fdctdsp"
faanidct_deps = "faan"
faanidct_select = "idctdsp"
2016-02-10 13:08:13 +01:00
h264dsp_select = "startcode"
2024-05-09 14:01:38 +02:00
h264parse_select = "golomb"
2022-06-27 17:41:34 +02:00
h264_sei_select = "atsc_a53 golomb"
hevcparse_select = "golomb"
hevc_sei_select = "atsc_a53 golomb"
2024-12-16 21:51:58 +11:00
iso_writer_select = "golomb"
2013-03-13 21:59:33 -07:00
frame_thread_encoder_deps = "encoders threads"
2024-04-02 21:01:56 -07:00
iamfdec_deps = "iamf"
2024-04-03 21:34:54 +02:00
iamfdec_select = "iso_media mpeg4audio"
2024-04-02 21:01:56 -07:00
iamfenc_deps = "iamf"
2022-03-15 10:46:09 +01:00
inflate_wrapper_deps = "zlib"
2022-07-31 09:47:32 +02:00
intrax8_select = "blockdsp wmv2dsp"
2021-12-14 11:19:08 +01:00
iso_media_select = "mpeg4audio"
2022-10-09 16:20:50 +02:00
me_cmp_select = "idctdsp"
2014-06-20 06:05:45 -07:00
mpeg_er_select = "error_resilience"
2016-12-03 11:25:02 +01:00
mpegaudio_select = "mpegaudiodsp mpegaudioheader"
2022-10-24 03:20:22 +02:00
mpegvideo_select = "blockdsp hpeldsp idctdsp videodsp"
mpegvideodec_select = "h264chroma mpegvideo mpeg_er"
2025-06-14 17:03:05 +02:00
mpegvideoenc_select = "aandcttables fdctdsp me_cmp mpegvideo mpegvideoencdsp pixblockdsp"
2022-07-31 11:12:41 +02:00
msmpeg4dec_select = "h263_decoder"
msmpeg4enc_select = "h263_encoder"
2016-02-10 13:10:50 +01:00
vc1dsp_select = "h264chroma qpeldsp startcode"
2025-04-27 19:44:33 +08:00
vvc_sei_select = "atsc_a53 golomb"
2024-05-05 08:40:55 +02:00
wmv2dsp_select = "qpeldsp"
2010-02-11 23:40:37 +00:00
2012-12-20 22:40:39 +01:00
# decoders / encoders
2022-10-28 21:36:10 +02:00
aac_decoder_select = "adts_header mpeg4audio sinewin"
aac_fixed_decoder_select = "adts_header mpeg4audio"
2025-06-03 17:56:00 +02:00
aac_encoder_select = "audio_frame_queue lpc sinewin"
2010-11-02 08:32:04 +00:00
aac_latm_decoder_select = "aac_decoder aac_latm_parser"
2022-10-26 13:12:58 +02:00
ac3_decoder_select = "ac3_parser ac3dsp bswapdsp fmtconvert"
ac3_fixed_decoder_select = "ac3_parser ac3dsp bswapdsp"
ac3_encoder_select = "ac3dsp audiodsp me_cmp"
ac3_fixed_encoder_select = "ac3dsp audiodsp me_cmp"
2025-06-10 07:46:31 +10:00
acelp_kelvin_decoder_select = "audiodsp celp_math"
2015-07-16 16:11:04 +01:00
adpcm_g722_decoder_select = "g722dsp"
adpcm_g722_encoder_select = "g722dsp"
2022-10-20 05:24:28 +02:00
agm_decoder_select = "idctdsp"
2014-01-24 11:55:16 +01:00
aic_decoder_select = "golomb idctdsp"
2009-10-18 19:51:18 +00:00
alac_encoder_select = "lpc"
2021-12-14 11:19:08 +01:00
als_decoder_select = "bswapdsp mpeg4audio"
2025-06-10 07:46:31 +10:00
amrnb_decoder_select = "lsp celp_math"
amrwb_decoder_select = "lsp celp_math"
2014-03-01 05:11:37 +01:00
amv_decoder_select = "sp5x_decoder exif"
2018-07-29 21:22:28 -03:00
amv_encoder_select = "jpegtables mpegvideoenc"
2014-06-23 13:23:41 +02:00
ape_decoder_select = "bswapdsp llauddsp"
2022-03-15 15:05:53 +01:00
apng_decoder_select = "inflate_wrapper"
2022-03-15 18:20:04 +01:00
apng_encoder_select = "deflate_wrapper llvidencdsp"
2017-11-19 14:54:34 +01:00
aptx_encoder_select = "audio_frame_queue"
2018-01-06 17:11:48 +01:00
aptx_hd_encoder_select = "audio_frame_queue"
2025-04-19 19:10:34 +01:00
apv_decoder_select = "cbs_apv"
2014-01-24 11:55:16 +01:00
asv1_decoder_select = "blockdsp bswapdsp idctdsp"
2018-07-29 21:30:00 -03:00
asv1_encoder_select = "aandcttables bswapdsp fdctdsp pixblockdsp"
2014-01-24 11:55:16 +01:00
asv2_decoder_select = "blockdsp bswapdsp idctdsp"
2018-07-29 21:30:00 -03:00
asv2_encoder_select = "aandcttables bswapdsp fdctdsp pixblockdsp"
2022-11-01 09:05:23 +01:00
atrac1_decoder_select = "sinewin"
2024-05-04 23:38:20 +02:00
atrac3p_decoder_select = "sinewin"
atrac3pal_decoder_select = "sinewin"
2024-04-12 12:55:42 +02:00
av1_decoder_select = "atsc_a53 cbs_av1 dovi_rpudec"
2014-01-14 10:33:47 +01:00
bink_decoder_select = "blockdsp hpeldsp"
2022-11-20 04:57:00 +01:00
binkaudio_dct_decoder_select = "wma_freqs"
binkaudio_rdft_decoder_select = "wma_freqs"
2014-01-24 11:55:16 +01:00
cavs_decoder_select = "blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2017-06-07 12:48:00 +02:00
clearvideo_decoder_select = "idctdsp"
2014-02-13 17:57:05 +01:00
cllc_decoder_select = "bswapdsp"
2012-10-23 00:02:41 +03:00
comfortnoise_encoder_select = "lpc"
2022-10-29 23:03:45 +02:00
cook_decoder_select = "audiodsp sinewin"
2022-03-18 14:30:16 +01:00
cri_decoder_select = "mjpeg_decoder"
2008-10-25 18:36:36 +00:00
cscd_decoder_suggest = "zlib"
2015-05-27 00:30:51 +01:00
dds_decoder_select = "texturedsp"
2025-06-14 18:26:38 +02:00
dirac_decoder_select = "dirac_parse dwt golomb mpegvideoencdsp qpeldsp videodsp"
2014-01-24 11:55:16 +01:00
dnxhd_decoder_select = "blockdsp idctdsp"
2022-10-09 19:13:01 +02:00
dnxhd_encoder_select = "blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp videodsp"
2014-07-05 09:09:15 +00:00
dvvideo_decoder_select = "dvprofile idctdsp"
2014-02-08 02:59:58 +01:00
dvvideo_encoder_select = "dvprofile fdctdsp me_cmp pixblockdsp"
2017-11-19 15:23:02 -03:00
dxa_decoder_deps = "zlib"
2015-08-26 11:31:41 +02:00
dxv_decoder_select = "lzf texturedsp"
2024-01-23 19:59:00 +01:00
dxv_encoder_select = "texturedspenc"
2009-07-21 09:03:45 +00:00
eac3_decoder_select = "ac3_decoder"
2012-08-19 23:19:38 +02:00
eac3_encoder_select = "ac3_encoder"
2022-10-20 04:59:58 +02:00
eamad_decoder_select = "aandcttables blockdsp bswapdsp"
2022-10-20 05:27:41 +02:00
eatgq_decoder_select = "aandcttables"
2022-10-20 05:30:10 +02:00
eatqi_decoder_select = "aandcttables blockdsp bswapdsp"
2017-11-19 15:23:02 -03:00
exr_decoder_deps = "zlib"
2025-03-20 11:27:09 +01:00
exr_decoder_select = "bswapdsp"
2021-02-14 23:11:59 +01:00
exr_encoder_deps = "zlib"
2016-12-07 12:48:31 +01:00
ffv1_decoder_select = "rangecoder"
2014-02-24 06:01:16 -08:00
ffv1_encoder_select = "rangecoder"
2024-10-06 06:27:16 +02:00
ffv1_vulkan_encoder_select = "vulkan spirv_compiler"
2014-02-27 15:02:25 -08:00
ffvhuff_decoder_select = "huffyuv_decoder"
ffvhuff_encoder_select = "huffyuv_encoder"
2014-04-01 21:00:47 +02:00
fic_decoder_select = "golomb"
2022-08-01 03:07:46 +02:00
flac_encoder_select = "bswapdsp lpc"
2022-03-15 13:05:17 +01:00
flashsv2_decoder_select = "inflate_wrapper"
2022-03-15 19:29:16 +01:00
flashsv2_encoder_select = "deflate_wrapper"
2022-03-15 13:05:17 +01:00
flashsv_decoder_select = "inflate_wrapper"
2017-11-19 15:23:02 -03:00
flashsv_encoder_deps = "zlib"
2009-12-28 18:00:07 +00:00
flv_decoder_select = "h263_decoder"
2009-08-05 15:26:54 +00:00
flv_encoder_select = "h263_encoder"
2014-02-13 17:57:05 +01:00
fourxm_decoder_select = "blockdsp bswapdsp"
fraps_decoder_select = "bswapdsp huffman"
2024-05-04 23:53:36 +02:00
ftr_decoder_select = "adts_header"
2017-11-19 15:23:02 -03:00
g2m_decoder_deps = "zlib"
g2m_decoder_select = "blockdsp idctdsp jpegtables"
2025-06-10 07:46:31 +10:00
g723_1_decoder_select = "celp_math"
g723_1_encoder_select = "celp_math"
g729_decoder_select = "audiodsp celp_math"
2021-12-24 02:13:41 +01:00
h261_decoder_select = "mpegvideodec"
2018-07-29 21:22:28 -03:00
h261_encoder_select = "mpegvideoenc"
2021-12-24 02:13:41 +01:00
h263_decoder_select = "h263_parser h263dsp mpegvideodec qpeldsp"
2018-07-29 21:22:28 -03:00
h263_encoder_select = "h263dsp mpegvideoenc"
2009-12-28 18:00:07 +00:00
h263i_decoder_select = "h263_decoder"
2015-04-12 15:42:38 -03:00
h263p_decoder_select = "h263_decoder"
2009-08-05 15:21:36 +00:00
h263p_encoder_select = "h263_encoder"
2022-06-27 17:41:34 +02:00
h264_decoder_select = "cabac golomb h264chroma h264dsp h264parse h264pred h264qpel h264_sei videodsp"
2013-03-02 16:57:26 -08:00
h264_decoder_suggest = "error_resilience"
2015-04-25 23:58:57 +01:00
hap_decoder_select = "snappy texturedsp"
hap_encoder_deps = "libsnappy"
hap_encoder_select = "texturedspenc"
2024-04-12 12:55:42 +02:00
hevc_decoder_select = "bswapdsp cabac dovi_rpudec golomb hevcparse hevc_sei videodsp"
2014-06-23 13:23:41 +02:00
huffyuv_decoder_select = "bswapdsp huffyuvdsp llviddsp"
2017-01-07 23:13:48 -03:00
huffyuv_encoder_select = "bswapdsp huffman huffyuvencdsp llvidencdsp"
2019-01-10 19:58:34 +01:00
hymt_decoder_select = "huffyuv_decoder"
2014-02-27 15:02:24 -08:00
iac_decoder_select = "imc_decoder"
2022-11-05 11:35:59 +01:00
imc_decoder_select = "bswapdsp sinewin"
2022-10-20 05:24:28 +02:00
imm4_decoder_select = "bswapdsp idctdsp"
2018-09-14 11:14:15 +02:00
imm5_decoder_select = "h264_decoder hevc_decoder"
2013-03-10 08:19:27 -07:00
indeo3_decoder_select = "hpeldsp"
2015-07-16 16:10:58 +01:00
indeo4_decoder_select = "ividsp"
indeo5_decoder_select = "ividsp"
2013-03-10 12:58:02 -07:00
interplay_video_decoder_select = "hpeldsp"
2021-12-24 02:13:41 +01:00
ipu_decoder_select = "mpegvideodec"
2016-12-07 12:48:31 +01:00
jpegls_decoder_select = "mjpeg_decoder"
2014-01-14 10:33:47 +01:00
jv_decoder_select = "blockdsp"
2017-01-07 19:04:39 -03:00
lagarith_decoder_select = "llviddsp"
2024-12-05 11:21:16 +11:00
lead_decoder_select = "blockdsp idctdsp jpegtables"
2022-10-05 18:41:18 +02:00
ljpeg_encoder_select = "jpegtables"
2022-03-15 13:25:07 +01:00
lscr_decoder_select = "inflate_wrapper"
2017-01-07 19:04:39 -03:00
magicyuv_decoder_select = "llviddsp"
2017-10-28 13:14:51 -03:00
magicyuv_encoder_select = "llvidencdsp"
2022-09-30 03:41:59 +02:00
mdec_decoder_select = "blockdsp bswapdsp idctdsp"
2023-01-31 10:18:17 +01:00
media100_decoder_select = "media100_to_mjpegb_bsf mjpegb_decoder"
2022-10-29 11:05:06 +02:00
metasound_decoder_select = "lsp sinewin"
2014-01-24 11:55:16 +01:00
mimic_decoder_select = "blockdsp bswapdsp hpeldsp idctdsp"
2015-03-31 01:02:00 +02:00
mjpeg_decoder_select = "blockdsp hpeldsp exif idctdsp jpegtables"
2018-07-29 21:22:28 -03:00
mjpeg_encoder_select = "jpegtables mpegvideoenc"
2013-11-02 17:21:49 +01:00
mjpegb_decoder_select = "mjpeg_decoder"
2014-01-29 15:17:05 +01:00
mlp_decoder_select = "mlp_parser"
2019-02-12 17:51:26 +01:00
mlp_encoder_select = "lpc audio_frame_queue"
2020-08-25 12:34:32 +02:00
mobiclip_decoder_select = "bswapdsp golomb"
2014-02-13 17:57:05 +01:00
motionpixels_decoder_select = "bswapdsp"
2012-08-14 02:09:15 +02:00
mp1_decoder_select = "mpegaudio"
mp1float_decoder_select = "mpegaudio"
mp2_decoder_select = "mpegaudio"
mp2float_decoder_select = "mpegaudio"
mp3_decoder_select = "mpegaudio"
mp3adu_decoder_select = "mpegaudio"
mp3adufloat_decoder_select = "mpegaudio"
mp3float_decoder_select = "mpegaudio"
2021-12-14 11:19:08 +01:00
mp3on4_decoder_select = "mpegaudio mpeg4audio"
mp3on4float_decoder_select = "mpegaudio mpeg4audio"
2014-02-13 17:57:05 +01:00
mpc7_decoder_select = "bswapdsp mpegaudiodsp"
2014-01-17 00:53:40 +01:00
mpc8_decoder_select = "mpegaudiodsp"
2021-12-24 02:13:41 +01:00
mpegvideo_decoder_select = "mpegvideodec"
mpeg1video_decoder_select = "mpegvideodec"
2022-10-24 03:31:15 +02:00
mpeg1video_encoder_select = "mpegvideoenc"
2021-12-24 02:13:41 +01:00
mpeg2video_decoder_select = "mpegvideodec"
2022-10-24 03:31:15 +02:00
mpeg2video_encoder_select = "mpegvideoenc"
2024-06-02 07:41:04 +02:00
mpeg4_decoder_select = "h263_decoder"
2022-11-03 01:17:04 +01:00
mpeg4_encoder_select = "h263_encoder qpeldsp"
2015-07-16 16:10:59 +01:00
msa1_decoder_select = "mss34dsp"
2022-03-15 12:27:32 +01:00
mscc_decoder_select = "inflate_wrapper"
2022-07-31 11:12:41 +02:00
msmpeg4v1_decoder_select = "msmpeg4dec"
msmpeg4v2_decoder_select = "msmpeg4dec"
msmpeg4v2_encoder_select = "msmpeg4enc"
msmpeg4v3_decoder_select = "msmpeg4dec"
msmpeg4v3_encoder_select = "msmpeg4enc"
2021-12-24 02:13:41 +01:00
mss2_decoder_select = "mpegvideodec qpeldsp vc1_decoder"
2020-11-01 01:08:15 +01:00
mts2_decoder_select = "jpegtables mss34dsp"
2020-04-10 23:14:35 +10:00
mv30_decoder_select = "aandcttables blockdsp"
2022-03-15 12:19:37 +01:00
mvha_decoder_select = "inflate_wrapper llviddsp"
2022-03-15 12:13:19 +01:00
mwsc_decoder_select = "inflate_wrapper"
2014-02-27 15:02:23 -08:00
mxpeg_decoder_select = "mjpeg_decoder"
2022-10-30 11:50:41 +01:00
nellymoser_decoder_select = "sinewin"
2022-10-30 11:54:40 +01:00
nellymoser_encoder_select = "audio_frame_queue sinewin"
2020-05-27 15:22:35 +02:00
notchlc_decoder_select = "lzf"
2022-02-26 12:28:44 -03:00
nuv_decoder_select = "idctdsp"
2014-05-15 18:28:45 +02:00
opus_decoder_deps = "swresample"
2022-09-28 00:07:53 +02:00
opus_encoder_select = "audio_frame_queue"
2024-05-04 22:46:32 +02:00
pdv_decoder_select = "inflate_wrapper"
2022-03-15 15:05:53 +01:00
png_decoder_select = "inflate_wrapper"
2022-03-15 18:20:04 +01:00
png_encoder_select = "deflate_wrapper llvidencdsp"
2014-07-01 14:38:57 +02:00
prores_decoder_select = "blockdsp idctdsp"
2014-02-03 10:09:45 -08:00
prores_encoder_select = "fdctdsp"
2022-10-09 09:42:11 +02:00
prores_aw_encoder_select = "fdctdsp"
prores_ks_encoder_select = "fdctdsp"
2010-03-02 03:16:27 +00:00
qcelp_decoder_select = "lsp"
2022-11-05 15:39:10 +01:00
qdm2_decoder_select = "mpegaudiodsp"
2014-06-27 03:00:22 -03:00
ra_144_decoder_select = "audiodsp"
2016-01-24 09:28:55 -08:00
ra_144_encoder_select = "audio_frame_queue lpc audiodsp"
2012-03-27 01:04:45 +02:00
ralf_decoder_select = "golomb"
2022-03-15 12:04:47 +01:00
rasc_decoder_select = "inflate_wrapper"
2014-07-17 23:27:40 +02:00
rawvideo_decoder_select = "bswapdsp"
2017-11-19 15:23:02 -03:00
rscc_decoder_deps = "zlib"
2023-06-03 12:29:25 +02:00
rtv1_decoder_select = "texturedsp"
2015-08-08 11:02:25 +02:00
rv10_decoder_select = "h263_decoder"
2009-08-05 10:44:12 +00:00
rv10_encoder_select = "h263_encoder"
2015-08-08 11:02:25 +02:00
rv20_decoder_select = "h263_decoder"
2009-08-05 10:44:12 +00:00
rv20_encoder_select = "h263_encoder"
2021-12-24 02:13:41 +01:00
rv30_decoder_select = "golomb h264pred h264qpel mpegvideodec rv34dsp"
rv40_decoder_select = "golomb h264pred h264qpel mpegvideodec rv34dsp"
2024-11-16 19:08:39 +11:00
rv60_decoder_select = "videodsp golomb"
2017-11-19 15:23:02 -03:00
screenpresso_decoder_deps = "zlib"
2017-04-13 18:14:04 -03:00
shorten_decoder_select = "bswapdsp"
2025-06-10 07:46:31 +10:00
sipr_decoder_select = "lsp celp_math"
2020-12-01 19:32:00 +01:00
smvjpeg_decoder_select = "mjpeg_decoder"
2022-10-09 06:20:33 +02:00
snow_decoder_select = "dwt h264qpel rangecoder videodsp"
2025-06-14 18:46:48 +02:00
snow_encoder_select = "dwt h264qpel hpeldsp me_cmp mpegvideoencdsp rangecoder videodsp"
2014-01-30 12:15:28 +01:00
sonic_decoder_select = "golomb rangecoder"
sonic_encoder_select = "golomb rangecoder"
2014-05-05 09:14:31 +02:00
sonic_ls_encoder_select = "golomb rangecoder"
2014-02-27 15:02:23 -08:00
sp5x_decoder_select = "mjpeg_decoder"
2022-09-30 03:41:59 +02:00
speedhq_decoder_select = "blockdsp idctdsp"
2020-12-10 09:41:07 +01:00
speedhq_encoder_select = "mpegvideoenc"
2022-03-15 12:27:32 +01:00
srgc_decoder_select = "inflate_wrapper"
2013-03-10 13:38:45 -07:00
svq1_decoder_select = "hpeldsp"
2025-06-14 18:19:02 +02:00
svq1_encoder_select = "hpeldsp me_cmp mpegvideoencdsp"
2016-06-28 10:24:05 +02:00
svq3_decoder_select = "golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2014-03-06 13:04:03 +01:00
svq3_decoder_suggest = "zlib"
2014-01-16 17:30:19 +01:00
tak_decoder_select = "audiodsp"
2017-11-19 15:23:02 -03:00
tdsc_decoder_deps = "zlib"
tdsc_decoder_select = "mjpeg_decoder"
2009-07-22 21:36:50 +00:00
theora_decoder_select = "vp3_decoder"
2013-11-02 17:21:49 +01:00
thp_decoder_select = "mjpeg_decoder"
2019-08-29 16:10:41 +03:00
tiff_decoder_select = "mjpeg_decoder"
2014-08-22 23:39:57 -03:00
tiff_decoder_suggest = "zlib lzma"
2008-10-25 18:36:36 +00:00
tiff_encoder_suggest = "zlib"
2012-09-11 12:19:09 +02:00
truehd_decoder_select = "mlp_parser"
2019-02-12 17:51:26 +01:00
truehd_encoder_select = "lpc audio_frame_queue"
2014-02-13 17:57:05 +01:00
truemotion2_decoder_select = "bswapdsp"
truespeech_decoder_select = "bswapdsp"
2022-03-15 11:48:14 +01:00
tscc_decoder_select = "inflate_wrapper"
2022-10-29 11:05:06 +02:00
twinvq_decoder_select = "lsp sinewin"
2015-06-22 21:15:50 +02:00
txd_decoder_select = "texturedsp"
2017-01-07 19:04:39 -03:00
utvideo_decoder_select = "bswapdsp llviddsp"
2017-01-07 23:13:48 -03:00
utvideo_encoder_select = "bswapdsp huffman llvidencdsp"
2017-01-07 19:04:39 -03:00
vble_decoder_select = "llviddsp"
2022-03-19 01:22:23 +01:00
vbn_decoder_select = "texturedsp"
2022-03-22 02:29:29 +01:00
vbn_encoder_select = "texturedspenc"
2023-06-04 20:30:59 +02:00
vmix_decoder_select = "idctdsp"
2022-11-01 21:03:40 +01:00
vc1_decoder_select = "blockdsp h264qpel intrax8 mpegvideodec qpeldsp vc1dsp"
2016-01-24 09:28:55 -08:00
vc1image_decoder_select = "vc1_decoder"
2022-11-01 09:50:50 +01:00
vorbis_encoder_select = "audio_frame_queue"
2013-03-09 21:26:09 -08:00
vp3_decoder_select = "hpeldsp vp3dsp videodsp"
2019-01-06 17:45:04 +11:00
vp4_decoder_select = "vp3_decoder"
2015-07-16 16:11:01 +01:00
vp5_decoder_select = "h264chroma hpeldsp videodsp vp3dsp vp56dsp"
vp6_decoder_select = "h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2009-07-20 09:24:59 +00:00
vp6a_decoder_select = "vp6_decoder"
vp6f_decoder_select = "vp6_decoder"
2015-07-16 16:11:02 +01:00
vp7_decoder_select = "h264pred videodsp vp8dsp"
vp8_decoder_select = "h264pred videodsp vp8dsp"
2017-11-30 01:51:16 -03:00
vp9_decoder_select = "videodsp vp9_parser vp9_superframe_split_bsf"
2025-04-27 19:44:33 +08:00
vvc_decoder_select = "cabac cbs_h266 golomb videodsp vvc_sei"
2022-03-15 11:33:26 +01:00
wcmv_decoder_select = "inflate_wrapper"
2016-01-24 20:30:33 -03:00
webp_decoder_select = "vp8_decoder exif"
2014-06-08 03:10:24 +02:00
wmalossless_decoder_select = "llauddsp"
2022-10-29 11:05:59 +02:00
wmapro_decoder_select = "sinewin wma_freqs"
2022-11-01 08:45:27 +01:00
wmav1_decoder_select = "sinewin wma_freqs"
wmav1_encoder_select = "sinewin wma_freqs"
wmav2_decoder_select = "sinewin wma_freqs"
wmav2_encoder_select = "sinewin wma_freqs"
2023-09-28 17:52:06 +02:00
wmavoice_decoder_select = "lsp sinewin"
2022-07-31 11:12:41 +02:00
wmv1_decoder_select = "msmpeg4dec"
wmv1_encoder_select = "msmpeg4enc"
wmv2_decoder_select = "blockdsp error_resilience idctdsp intrax8 msmpeg4dec videodsp wmv2dsp"
wmv2_encoder_select = "msmpeg4enc wmv2dsp"
2009-07-19 11:07:10 +00:00
wmv3_decoder_select = "vc1_decoder"
2011-08-17 14:24:42 +02:00
wmv3image_decoder_select = "wmv3_decoder"
2016-01-17 18:37:01 +01:00
xma1_decoder_select = "wmapro_decoder"
xma2_decoder_select = "wmapro_decoder"
2019-11-04 14:25:31 -09:00
ylc_decoder_select = "bswapdsp"
2022-03-15 11:26:13 +01:00
zerocodec_decoder_select = "inflate_wrapper"
2022-03-15 12:52:37 +01:00
zlib_decoder_select = "inflate_wrapper"
2022-03-15 18:28:54 +01:00
zlib_encoder_select = "deflate_wrapper"
2022-03-15 11:11:39 +01:00
zmbv_decoder_select = "inflate_wrapper"
2022-03-15 18:06:24 +01:00
zmbv_encoder_select = "deflate_wrapper"
2007-01-21 21:01:34 +00:00
2012-12-20 22:40:39 +01:00
# hardware accelerators
2018-03-03 21:28:26 +01:00
cuda_deps = "ffnvcodec"
cuvid_deps = "ffnvcodec"
2017-11-11 16:05:45 -03:00
d3d11va_deps = "dxva_h ID3D11VideoDecoder ID3D11VideoContext"
2023-12-05 14:46:43 +08:00
d3d12va_deps = "dxva_h ID3D12Device ID3D12VideoDecoder"
2017-10-11 17:55:25 -03:00
dxva2_deps = "dxva2api_h DXVA2_ConfigPictureDecode ole32 user32"
2018-03-03 21:28:26 +01:00
ffnvcodec_deps_any = "libdl LoadLibrary"
2024-11-06 20:31:34 +08:00
mediacodec_deps = "android mediandk pthreads"
2018-03-03 21:28:26 +01:00
nvdec_deps = "ffnvcodec"
2021-07-15 15:44:05 -03:00
vaapi_x11_deps = "xlib_x11"
2016-03-02 20:11:40 +08:00
videotoolbox_hwaccel_deps = "videotoolbox pthreads"
videotoolbox_hwaccel_extralibs = "-framework QuartzCore"
2024-03-12 09:44:37 +05:30
vulkan_deps = "threads"
2021-04-29 03:37:42 +02:00
vulkan_deps_any = "libdl LoadLibrary"
2010-04-19 12:49:51 +00:00
2020-11-05 14:13:14 +01:00
av1_d3d11va_hwaccel_deps = "d3d11va DXVA_PicParams_AV1"
av1_d3d11va_hwaccel_select = "av1_decoder"
av1_d3d11va2_hwaccel_deps = "d3d11va DXVA_PicParams_AV1"
av1_d3d11va2_hwaccel_select = "av1_decoder"
2023-12-05 14:46:47 +08:00
av1_d3d12va_hwaccel_deps = "d3d12va DXVA_PicParams_AV1"
av1_d3d12va_hwaccel_select = "av1_decoder"
2020-11-05 14:13:14 +01:00
av1_dxva2_hwaccel_deps = "dxva2 DXVA_PicParams_AV1"
av1_dxva2_hwaccel_select = "av1_decoder"
2020-10-17 18:16:54 +02:00
av1_nvdec_hwaccel_deps = "nvdec CUVIDAV1PICPARAMS"
av1_nvdec_hwaccel_select = "av1_decoder"
2020-10-29 14:54:25 +08:00
av1_vaapi_hwaccel_deps = "vaapi VADecPictureParameterBufferAV1_bit_depth_idx"
av1_vaapi_hwaccel_select = "av1_decoder"
2022-05-16 18:45:58 +05:30
av1_vdpau_hwaccel_deps = "vdpau VdpPictureInfoAV1"
av1_vdpau_hwaccel_select = "av1_decoder"
2023-11-10 22:11:44 +02:00
av1_videotoolbox_hwaccel_deps = "videotoolbox"
av1_videotoolbox_hwaccel_select = "av1_decoder"
2023-02-17 04:09:16 +01:00
av1_vulkan_hwaccel_deps = "vulkan"
av1_vulkan_hwaccel_select = "av1_decoder"
2025-03-10 03:04:39 +00:00
ffv1_vulkan_hwaccel_deps = "vulkan spirv_compiler"
ffv1_vulkan_hwaccel_select = "ffv1_decoder"
2013-02-21 12:35:40 +01:00
h263_vaapi_hwaccel_deps = "vaapi"
h263_vaapi_hwaccel_select = "h263_decoder"
2015-07-11 13:23:21 +02:00
h263_videotoolbox_hwaccel_deps = "videotoolbox"
h263_videotoolbox_hwaccel_select = "h263_decoder"
2015-05-11 10:52:47 +02:00
h264_d3d11va_hwaccel_deps = "d3d11va"
h264_d3d11va_hwaccel_select = "h264_decoder"
2017-06-07 17:11:17 +02:00
h264_d3d11va2_hwaccel_deps = "d3d11va"
h264_d3d11va2_hwaccel_select = "h264_decoder"
2023-12-05 14:46:44 +08:00
h264_d3d12va_hwaccel_deps = "d3d12va"
h264_d3d12va_hwaccel_select = "h264_decoder"
2013-02-21 12:39:20 +01:00
h264_dxva2_hwaccel_deps = "dxva2"
h264_dxva2_hwaccel_select = "h264_decoder"
2017-11-13 21:55:09 +01:00
h264_nvdec_hwaccel_deps = "nvdec"
2017-02-11 16:49:34 +01:00
h264_nvdec_hwaccel_select = "h264_decoder"
2013-02-21 12:35:40 +01:00
h264_vaapi_hwaccel_deps = "vaapi"
h264_vaapi_hwaccel_select = "h264_decoder"
h264_vdpau_hwaccel_deps = "vdpau"
h264_vdpau_hwaccel_select = "h264_decoder"
2015-07-11 13:23:21 +02:00
h264_videotoolbox_hwaccel_deps = "videotoolbox"
h264_videotoolbox_hwaccel_select = "h264_decoder"
2022-12-14 01:13:01 +01:00
h264_vulkan_hwaccel_deps = "vulkan"
h264_vulkan_hwaccel_select = "h264_decoder"
2015-05-11 10:52:47 +02:00
hevc_d3d11va_hwaccel_deps = "d3d11va DXVA_PicParams_HEVC"
hevc_d3d11va_hwaccel_select = "hevc_decoder"
2017-06-07 17:11:17 +02:00
hevc_d3d11va2_hwaccel_deps = "d3d11va DXVA_PicParams_HEVC"
hevc_d3d11va2_hwaccel_select = "hevc_decoder"
2023-12-05 14:46:45 +08:00
hevc_d3d12va_hwaccel_deps = "d3d12va DXVA_PicParams_HEVC"
hevc_d3d12va_hwaccel_select = "hevc_decoder"
2015-01-25 13:01:11 +01:00
hevc_dxva2_hwaccel_deps = "dxva2 DXVA_PicParams_HEVC"
hevc_dxva2_hwaccel_select = "hevc_decoder"
2017-11-13 21:55:09 +01:00
hevc_nvdec_hwaccel_deps = "nvdec"
2017-11-10 20:38:36 -03:00
hevc_nvdec_hwaccel_select = "hevc_decoder"
2015-08-26 14:55:40 +02:00
hevc_vaapi_hwaccel_deps = "vaapi VAPictureParameterBufferHEVC"
hevc_vaapi_hwaccel_select = "hevc_decoder"
2015-06-13 09:42:48 -07:00
hevc_vdpau_hwaccel_deps = "vdpau VdpPictureInfoHEVC"
2015-06-30 04:09:58 -03:00
hevc_vdpau_hwaccel_select = "hevc_decoder"
2017-09-26 11:30:28 -07:00
hevc_videotoolbox_hwaccel_deps = "videotoolbox"
hevc_videotoolbox_hwaccel_select = "hevc_decoder"
2022-12-14 08:27:18 +01:00
hevc_vulkan_hwaccel_deps = "vulkan"
hevc_vulkan_hwaccel_select = "hevc_decoder"
2018-02-18 15:53:33 -08:00
mjpeg_nvdec_hwaccel_deps = "nvdec"
mjpeg_nvdec_hwaccel_select = "mjpeg_decoder"
2017-11-23 23:47:52 +00:00
mjpeg_vaapi_hwaccel_deps = "vaapi"
mjpeg_vaapi_hwaccel_select = "mjpeg_decoder"
2017-11-16 07:38:10 -08:00
mpeg1_nvdec_hwaccel_deps = "nvdec"
mpeg1_nvdec_hwaccel_select = "mpeg1video_decoder"
2013-02-21 12:35:40 +01:00
mpeg1_vdpau_hwaccel_deps = "vdpau"
mpeg1_vdpau_hwaccel_select = "mpeg1video_decoder"
2015-07-11 13:23:21 +02:00
mpeg1_videotoolbox_hwaccel_deps = "videotoolbox"
mpeg1_videotoolbox_hwaccel_select = "mpeg1video_decoder"
2015-05-11 10:52:47 +02:00
mpeg2_d3d11va_hwaccel_deps = "d3d11va"
mpeg2_d3d11va_hwaccel_select = "mpeg2video_decoder"
2017-06-07 17:11:17 +02:00
mpeg2_d3d11va2_hwaccel_deps = "d3d11va"
mpeg2_d3d11va2_hwaccel_select = "mpeg2video_decoder"
2023-12-05 14:46:48 +08:00
mpeg2_d3d12va_hwaccel_deps = "d3d12va"
mpeg2_d3d12va_hwaccel_select = "mpeg2video_decoder"
2013-02-21 12:39:20 +01:00
mpeg2_dxva2_hwaccel_deps = "dxva2"
mpeg2_dxva2_hwaccel_select = "mpeg2video_decoder"
2017-11-16 07:35:17 -08:00
mpeg2_nvdec_hwaccel_deps = "nvdec"
mpeg2_nvdec_hwaccel_select = "mpeg2video_decoder"
2013-02-21 12:35:40 +01:00
mpeg2_vaapi_hwaccel_deps = "vaapi"
mpeg2_vaapi_hwaccel_select = "mpeg2video_decoder"
mpeg2_vdpau_hwaccel_deps = "vdpau"
mpeg2_vdpau_hwaccel_select = "mpeg2video_decoder"
2015-07-11 13:23:21 +02:00
mpeg2_videotoolbox_hwaccel_deps = "videotoolbox"
mpeg2_videotoolbox_hwaccel_select = "mpeg2video_decoder"
2017-11-15 20:59:29 -08:00
mpeg4_nvdec_hwaccel_deps = "nvdec"
mpeg4_nvdec_hwaccel_select = "mpeg4_decoder"
2013-02-21 12:35:40 +01:00
mpeg4_vaapi_hwaccel_deps = "vaapi"
mpeg4_vaapi_hwaccel_select = "mpeg4_decoder"
mpeg4_vdpau_hwaccel_deps = "vdpau"
mpeg4_vdpau_hwaccel_select = "mpeg4_decoder"
2015-07-11 13:23:21 +02:00
mpeg4_videotoolbox_hwaccel_deps = "videotoolbox"
mpeg4_videotoolbox_hwaccel_select = "mpeg4_decoder"
2021-11-13 13:38:04 -06:00
prores_videotoolbox_hwaccel_deps = "videotoolbox"
prores_videotoolbox_hwaccel_select = "prores_decoder"
2015-05-11 10:52:47 +02:00
vc1_d3d11va_hwaccel_deps = "d3d11va"
vc1_d3d11va_hwaccel_select = "vc1_decoder"
2017-06-07 17:11:17 +02:00
vc1_d3d11va2_hwaccel_deps = "d3d11va"
vc1_d3d11va2_hwaccel_select = "vc1_decoder"
2023-12-05 14:46:49 +08:00
vc1_d3d12va_hwaccel_deps = "d3d12va"
vc1_d3d12va_hwaccel_select = "vc1_decoder"
2013-02-21 12:39:20 +01:00
vc1_dxva2_hwaccel_deps = "dxva2"
vc1_dxva2_hwaccel_select = "vc1_decoder"
2017-11-13 21:09:27 -08:00
vc1_nvdec_hwaccel_deps = "nvdec"
vc1_nvdec_hwaccel_select = "vc1_decoder"
2013-02-21 12:35:40 +01:00
vc1_vaapi_hwaccel_deps = "vaapi"
vc1_vaapi_hwaccel_select = "vc1_decoder"
vc1_vdpau_hwaccel_deps = "vdpau"
vc1_vdpau_hwaccel_select = "vc1_decoder"
2017-11-19 08:42:39 -08:00
vp8_nvdec_hwaccel_deps = "nvdec"
vp8_nvdec_hwaccel_select = "vp8_decoder"
2018-09-18 23:30:39 +01:00
vp8_vaapi_hwaccel_deps = "vaapi"
2017-11-18 17:55:24 +00:00
vp8_vaapi_hwaccel_select = "vp8_decoder"
2015-12-07 13:12:21 -03:00
vp9_d3d11va_hwaccel_deps = "d3d11va DXVA_PicParams_VP9"
2015-12-03 11:09:51 +01:00
vp9_d3d11va_hwaccel_select = "vp9_decoder"
2017-06-07 17:11:17 +02:00
vp9_d3d11va2_hwaccel_deps = "d3d11va DXVA_PicParams_VP9"
vp9_d3d11va2_hwaccel_select = "vp9_decoder"
2023-12-05 14:46:46 +08:00
vp9_d3d12va_hwaccel_deps = "d3d12va DXVA_PicParams_VP9"
vp9_d3d12va_hwaccel_select = "vp9_decoder"
2015-12-03 11:09:51 +01:00
vp9_dxva2_hwaccel_deps = "dxva2 DXVA_PicParams_VP9"
vp9_dxva2_hwaccel_select = "vp9_decoder"
2017-11-13 21:55:09 +01:00
vp9_nvdec_hwaccel_deps = "nvdec"
2017-11-11 21:19:07 +01:00
vp9_nvdec_hwaccel_select = "vp9_decoder"
2016-12-08 19:29:14 +00:00
vp9_vaapi_hwaccel_deps = "vaapi VADecPictureParameterBufferVP9_bit_depth"
2015-12-19 20:31:00 +01:00
vp9_vaapi_hwaccel_select = "vp9_decoder"
2019-10-25 11:00:13 +05:30
vp9_vdpau_hwaccel_deps = "vdpau VdpPictureInfoVP9"
vp9_vdpau_hwaccel_select = "vp9_decoder"
2021-11-13 02:43:06 -06:00
vp9_videotoolbox_hwaccel_deps = "videotoolbox"
vp9_videotoolbox_hwaccel_select = "vp9_decoder"
2024-10-28 16:55:25 +08:00
vvc_vaapi_hwaccel_deps = "vaapi VAPictureParameterBufferVVC"
vvc_vaapi_hwaccel_select = "vvc_decoder"
2015-05-11 10:52:47 +02:00
wmv3_d3d11va_hwaccel_select = "vc1_d3d11va_hwaccel"
2017-06-07 17:11:17 +02:00
wmv3_d3d11va2_hwaccel_select = "vc1_d3d11va2_hwaccel"
2023-12-05 14:46:49 +08:00
wmv3_d3d12va_hwaccel_select = "vc1_d3d12va_hwaccel"
2012-12-20 22:40:39 +01:00
wmv3_dxva2_hwaccel_select = "vc1_dxva2_hwaccel"
2017-11-13 21:09:27 -08:00
wmv3_nvdec_hwaccel_select = "vc1_nvdec_hwaccel"
2012-12-20 22:40:39 +01:00
wmv3_vaapi_hwaccel_select = "vc1_vaapi_hwaccel"
2013-01-12 17:53:47 +02:00
wmv3_vdpau_hwaccel_select = "vc1_vdpau_hwaccel"
2012-12-20 22:40:39 +01:00
2016-03-21 16:06:32 +01:00
# hardware-accelerated codecs
2023-08-22 13:26:36 +08:00
d3d12va_encode_deps = "d3d12va ID3D12VideoEncoder d3d12_encoder_feature"
2017-04-04 07:45:41 +02:00
mediafoundation_deps = "mftransform_h MFCreateAlignedMemoryBuffer"
2017-01-24 13:57:52 +01:00
omx_deps = "libdl pthreads"
2016-12-02 12:33:50 +01:00
omx_rpi_select = "omx"
2017-06-06 17:41:11 +02:00
qsv_deps = "libmfx"
2016-03-21 16:06:32 +01:00
qsvdec_select = "qsv"
qsvenc_select = "qsv"
2017-08-18 09:40:47 +08:00
qsvvpp_select = "qsv"
2016-03-21 16:06:32 +01:00
vaapi_encode_deps = "vaapi"
2024-08-30 17:04:30 +00:00
vulkan_encode_deps = "vulkan"
2018-04-29 15:04:10 -03:00
v4l2_m2m_deps = "linux_videodev2_h sem_timedwait"
2016-03-21 16:06:32 +01:00
2022-08-30 21:13:27 +02:00
bilateral_cuda_filter_deps = "ffnvcodec"
bilateral_cuda_filter_deps_any = "cuda_nvcc cuda_llvm"
2022-09-10 11:05:56 +03:00
chromakey_cuda_filter_deps = "ffnvcodec"
chromakey_cuda_filter_deps_any = "cuda_nvcc cuda_llvm"
colorspace_cuda_filter_deps = "ffnvcodec"
colorspace_cuda_filter_deps_any = "cuda_nvcc cuda_llvm"
2018-03-03 21:28:26 +01:00
hwupload_cuda_filter_deps = "ffnvcodec"
scale_npp_filter_deps = "ffnvcodec libnpp"
2021-09-06 15:25:51 +03:00
scale2ref_npp_filter_deps = "ffnvcodec libnpp"
2019-07-30 02:51:42 -05:00
scale_cuda_filter_deps = "ffnvcodec"
scale_cuda_filter_deps_any = "cuda_nvcc cuda_llvm"
thumbnail_cuda_filter_deps = "ffnvcodec"
thumbnail_cuda_filter_deps_any = "cuda_nvcc cuda_llvm"
2018-08-29 12:53:02 +03:00
transpose_npp_filter_deps = "ffnvcodec libnpp"
2020-03-19 17:45:48 +01:00
overlay_cuda_filter_deps = "ffnvcodec"
overlay_cuda_filter_deps_any = "cuda_nvcc cuda_llvm"
2025-06-16 16:33:45 -07:00
pad_cuda_filter_deps = "ffnvcodec"
pad_cuda_filter_deps_any = "cuda_nvcc cuda_llvm"
2021-09-06 14:26:27 +03:00
sharpen_npp_filter_deps = "ffnvcodec libnpp"
2016-03-21 16:06:32 +01:00
2022-08-01 15:30:59 +03:00
ddagrab_filter_deps = "d3d11va IDXGIOutput1 DXGI_OUTDUPL_FRAME_INFO"
2022-07-08 18:02:40 +02:00
2017-11-26 21:36:06 -05:00
amf_deps_any = "libdl LoadLibrary"
2018-03-03 21:28:26 +01:00
nvenc_deps = "ffnvcodec"
2017-10-04 01:05:56 -03:00
nvenc_deps_any = "libdl LoadLibrary"
2017-04-08 14:06:48 +02:00
2024-06-12 15:42:10 +02:00
aac_mediacodec_decoder_deps = "mediacodec"
aac_mediacodec_decoder_select = "aac_adtstoasc_bsf aac_parser"
2017-04-04 07:45:41 +02:00
aac_mf_encoder_deps = "mediafoundation"
ac3_mf_encoder_deps = "mediafoundation"
2024-06-12 15:42:10 +02:00
amrnb_mediacodec_decoder_deps = "mediacodec"
amrnb_mediacodec_decoder_select = "amr_parser"
amrwb_mediacodec_decoder_deps = "mediacodec"
amrwb_mediacodec_decoder_select = "amr_parser"
2024-06-14 16:28:53 +08:00
av1_amf_encoder_deps = "amf"
2024-10-15 14:49:39 +02:00
av1_amf_decoder_deps = "amf"
2020-10-15 23:25:05 +02:00
av1_cuvid_decoder_deps = "cuvid CUVIDAV1PICPARAMS"
2022-12-19 20:45:40 +08:00
av1_mediacodec_decoder_deps = "mediacodec"
2023-04-25 19:37:05 +03:00
av1_mediacodec_encoder_deps = "mediacodec"
2024-04-17 12:37:40 +08:00
av1_mediacodec_encoder_select = "extract_extradata_bsf"
2024-10-04 23:04:04 +05:30
av1_mf_encoder_deps = "mediafoundation"
2022-11-05 21:17:37 +01:00
av1_nvenc_encoder_deps = "nvenc NV_ENC_PIC_PARAMS_AV1"
av1_nvenc_encoder_select = "atsc_a53"
2024-06-14 16:28:53 +08:00
av1_qsv_decoder_select = "qsvdec"
av1_qsv_encoder_deps = "libvpl"
av1_qsv_encoder_select = "qsvenc"
av1_vaapi_encoder_deps = "VAEncPictureParameterBufferAV1"
av1_vaapi_encoder_select = "cbs_av1 vaapi_encode"
2017-09-20 18:55:40 -07:00
h263_v4l2m2m_decoder_deps = "v4l2_m2m h263_v4l2_m2m"
h263_v4l2m2m_encoder_deps = "v4l2_m2m h263_v4l2_m2m"
2017-11-26 21:36:06 -05:00
h264_amf_encoder_deps = "amf"
2024-10-15 14:49:39 +02:00
h264_amf_decoder_deps = "amf"
2017-11-13 22:01:53 +01:00
h264_cuvid_decoder_deps = "cuvid"
2017-03-25 22:31:22 +01:00
h264_cuvid_decoder_select = "h264_mp4toannexb_bsf"
2017-04-08 14:06:48 +02:00
h264_mediacodec_decoder_deps = "mediacodec"
h264_mediacodec_decoder_select = "h264_mp4toannexb_bsf h264_parser"
2022-10-18 00:23:08 +08:00
h264_mediacodec_encoder_deps = "mediacodec"
2024-04-17 12:37:40 +08:00
h264_mediacodec_encoder_select = "extract_extradata_bsf h264_metadata"
2017-04-04 07:45:41 +02:00
h264_mf_encoder_deps = "mediafoundation"
2016-11-16 18:38:52 +01:00
h264_mmal_decoder_deps = "mmal"
2016-06-25 22:24:13 +02:00
h264_nvenc_encoder_deps = "nvenc"
2020-08-09 14:01:16 -03:00
h264_nvenc_encoder_select = "atsc_a53"
2016-11-16 18:38:52 +01:00
h264_omx_encoder_deps = "omx"
2019-08-13 14:11:10 +08:00
h264_qsv_decoder_select = "h264_mp4toannexb_bsf qsvdec"
2020-08-09 14:01:16 -03:00
h264_qsv_encoder_select = "atsc_a53 qsvenc"
2017-09-24 05:39:45 +00:00
h264_rkmpp_decoder_deps = "rkmpp"
h264_rkmpp_decoder_select = "h264_mp4toannexb_bsf"
2023-01-09 18:40:24 +00:00
h264_vaapi_encoder_select = "atsc_a53 cbs_h264 vaapi_encode"
2025-06-22 09:15:56 +10:00
h264_vulkan_encoder_select = "atsc_a53 cbs_h264 vulkan_encode"
2017-09-20 18:55:40 -07:00
h264_v4l2m2m_decoder_deps = "v4l2_m2m h264_v4l2_m2m"
2018-11-05 14:22:10 +00:00
h264_v4l2m2m_decoder_select = "h264_mp4toannexb_bsf"
2017-09-20 18:55:40 -07:00
h264_v4l2m2m_encoder_deps = "v4l2_m2m h264_v4l2_m2m"
2017-11-26 21:36:06 -05:00
hevc_amf_encoder_deps = "amf"
2024-10-15 14:49:39 +02:00
hevc_amf_decoder_deps = "amf"
2017-11-13 22:01:53 +01:00
hevc_cuvid_decoder_deps = "cuvid"
2017-03-25 22:31:22 +01:00
hevc_cuvid_decoder_select = "hevc_mp4toannexb_bsf"
2023-08-22 13:26:36 +08:00
hevc_d3d12va_encoder_select = "cbs_h265 d3d12va_encode"
2017-04-08 14:06:48 +02:00
hevc_mediacodec_decoder_deps = "mediacodec"
hevc_mediacodec_decoder_select = "hevc_mp4toannexb_bsf hevc_parser"
2022-10-18 00:23:08 +08:00
hevc_mediacodec_encoder_deps = "mediacodec"
2024-04-17 12:37:40 +08:00
hevc_mediacodec_encoder_select = "extract_extradata_bsf hevc_metadata"
2017-04-04 07:45:41 +02:00
hevc_mf_encoder_deps = "mediafoundation"
2016-06-25 22:24:13 +02:00
hevc_nvenc_encoder_deps = "nvenc"
2020-08-09 14:01:16 -03:00
hevc_nvenc_encoder_select = "atsc_a53"
2019-08-13 14:11:10 +08:00
hevc_qsv_decoder_select = "hevc_mp4toannexb_bsf qsvdec"
2017-04-02 15:40:01 -03:00
hevc_qsv_encoder_select = "hevcparse qsvenc"
2017-09-24 05:39:45 +00:00
hevc_rkmpp_decoder_deps = "rkmpp"
hevc_rkmpp_decoder_select = "hevc_mp4toannexb_bsf"
2016-03-21 16:06:32 +01:00
hevc_vaapi_encoder_deps = "VAEncPictureParameterBufferHEVC"
2023-01-09 18:40:24 +00:00
hevc_vaapi_encoder_select = "atsc_a53 cbs_h265 vaapi_encode"
2024-09-14 10:10:57 +02:00
hevc_vulkan_encoder_select = "atsc_a53 cbs_h265 vulkan_encode"
2017-09-20 18:55:40 -07:00
hevc_v4l2m2m_decoder_deps = "v4l2_m2m hevc_v4l2_m2m"
2018-11-05 14:22:10 +00:00
hevc_v4l2m2m_decoder_select = "hevc_mp4toannexb_bsf"
2017-09-20 18:55:40 -07:00
hevc_v4l2m2m_encoder_deps = "v4l2_m2m hevc_v4l2_m2m"
2017-11-13 22:01:53 +01:00
mjpeg_cuvid_decoder_deps = "cuvid"
2019-08-13 14:11:11 +08:00
mjpeg_qsv_decoder_select = "qsvdec"
2017-07-21 12:12:44 +08:00
mjpeg_qsv_encoder_deps = "libmfx"
mjpeg_qsv_encoder_select = "qsvenc"
2016-11-16 18:38:52 +01:00
mjpeg_vaapi_encoder_deps = "VAEncPictureParameterBufferJPEG"
2018-09-18 23:30:54 +01:00
mjpeg_vaapi_encoder_select = "cbs_jpeg jpegtables vaapi_encode"
2017-04-04 07:45:41 +02:00
mp3_mf_encoder_deps = "mediafoundation"
2024-06-12 15:42:10 +02:00
mp3_mediacodec_decoder_deps = "mediacodec"
mp3_mediacodec_decoder_select = "mpegaudioheader"
2017-11-13 22:01:53 +01:00
mpeg1_cuvid_decoder_deps = "cuvid"
2017-09-20 18:55:40 -07:00
mpeg1_v4l2m2m_decoder_deps = "v4l2_m2m mpeg1_v4l2_m2m"
2017-11-13 22:01:53 +01:00
mpeg2_cuvid_decoder_deps = "cuvid"
2016-11-16 18:38:52 +01:00
mpeg2_mmal_decoder_deps = "mmal"
2017-06-05 16:22:58 -04:00
mpeg2_mediacodec_decoder_deps = "mediacodec"
2019-08-13 14:11:10 +08:00
mpeg2_qsv_decoder_select = "qsvdec"
2016-03-21 16:06:32 +01:00
mpeg2_qsv_encoder_select = "qsvenc"
2017-06-24 00:29:32 +01:00
mpeg2_vaapi_encoder_select = "cbs_mpeg2 vaapi_encode"
2017-09-20 18:55:40 -07:00
mpeg2_v4l2m2m_decoder_deps = "v4l2_m2m mpeg2_v4l2_m2m"
2017-11-13 22:01:53 +01:00
mpeg4_cuvid_decoder_deps = "cuvid"
2017-04-08 14:06:48 +02:00
mpeg4_mediacodec_decoder_deps = "mediacodec"
2023-03-27 15:21:27 +00:00
mpeg4_mediacodec_encoder_deps = "mediacodec"
2024-04-17 12:37:40 +08:00
mpeg4_mediacodec_encoder_select = "extract_extradata_bsf"
2017-04-08 14:06:48 +02:00
mpeg4_mmal_decoder_deps = "mmal"
2016-11-16 18:38:52 +01:00
mpeg4_omx_encoder_deps = "omx"
2017-09-20 18:55:40 -07:00
mpeg4_v4l2m2m_decoder_deps = "v4l2_m2m mpeg4_v4l2_m2m"
mpeg4_v4l2m2m_encoder_deps = "v4l2_m2m mpeg4_v4l2_m2m"
2017-11-13 22:01:53 +01:00
vc1_cuvid_decoder_deps = "cuvid"
2016-11-16 18:38:52 +01:00
vc1_mmal_decoder_deps = "mmal"
2019-08-13 14:11:10 +08:00
vc1_qsv_decoder_select = "qsvdec"
2017-09-20 18:55:40 -07:00
vc1_v4l2m2m_decoder_deps = "v4l2_m2m vc1_v4l2_m2m"
2017-11-13 22:01:53 +01:00
vp8_cuvid_decoder_deps = "cuvid"
2017-04-08 14:06:48 +02:00
vp8_mediacodec_decoder_deps = "mediacodec"
2023-04-19 23:29:18 +03:00
vp8_mediacodec_encoder_deps = "mediacodec"
2019-08-13 14:11:10 +08:00
vp8_qsv_decoder_select = "qsvdec"
2017-09-24 05:39:45 +00:00
vp8_rkmpp_decoder_deps = "rkmpp"
2016-11-29 20:38:29 +00:00
vp8_vaapi_encoder_deps = "VAEncPictureParameterBufferVP8"
vp8_vaapi_encoder_select = "vaapi_encode"
2017-09-20 18:55:40 -07:00
vp8_v4l2m2m_decoder_deps = "v4l2_m2m vp8_v4l2_m2m"
vp8_v4l2m2m_encoder_deps = "v4l2_m2m vp8_v4l2_m2m"
2025-01-03 14:10:00 -05:00
vp9_amf_decoder_deps = "amf"
2017-11-13 22:01:53 +01:00
vp9_cuvid_decoder_deps = "cuvid"
2017-04-08 14:06:48 +02:00
vp9_mediacodec_decoder_deps = "mediacodec"
2023-03-27 15:21:34 +00:00
vp9_mediacodec_encoder_deps = "mediacodec"
2019-08-13 14:11:12 +08:00
vp9_qsv_decoder_select = "qsvdec"
2017-09-24 05:39:45 +00:00
vp9_rkmpp_decoder_deps = "rkmpp"
2016-11-28 23:54:57 +00:00
vp9_vaapi_encoder_deps = "VAEncPictureParameterBufferVP9"
vp9_vaapi_encoder_select = "vaapi_encode"
2019-10-26 22:18:31 +08:00
vp9_qsv_encoder_deps = "libmfx MFX_CODEC_VP9"
vp9_qsv_encoder_select = "qsvenc"
2017-09-20 18:55:40 -07:00
vp9_v4l2m2m_decoder_deps = "v4l2_m2m vp9_v4l2_m2m"
2024-08-15 10:19:50 +08:00
vvc_qsv_decoder_select = "vvc_mp4toannexb_bsf qsvdec"
2016-06-04 19:06:52 +02:00
2009-06-09 20:29:52 +00:00
# parsers
2021-12-14 11:19:08 +01:00
aac_parser_select = "adts_header mpeg4audio"
2025-04-27 17:57:12 -03:00
apv_parser_select = "cbs_apv"
2018-07-14 11:59:59 -03:00
av1_parser_select = "cbs_av1"
2023-06-17 10:16:45 -03:00
evc_parser_select = "evcparse"
2025-02-01 10:49:28 -03:00
ffv1_parser_select = "rangecoder"
2024-05-09 14:35:25 +02:00
ftr_parser_select = "adts_header mpeg4audio"
2022-06-27 17:41:34 +02:00
h264_parser_select = "golomb h264dsp h264parse h264_sei"
hevc_parser_select = "hevcparse hevc_sei"
2016-12-03 11:25:02 +01:00
mpegaudio_parser_select = "mpegaudioheader"
2021-12-24 02:13:41 +01:00
mpeg4video_parser_select = "h263dsp mpegvideodec qpeldsp"
2016-02-10 15:41:50 +01:00
vc1_parser_select = "vc1dsp"
2023-03-21 16:01:16 +01:00
vvc_parser_select = "cbs_h266"
2009-06-09 20:29:52 +00:00
2015-03-27 12:23:59 +01:00
# bitstream_filters
2021-12-14 11:19:08 +01:00
aac_adtstoasc_bsf_select = "adts_header mpeg4audio"
2019-11-10 21:09:02 -03:00
av1_frame_merge_bsf_select = "cbs_av1"
2019-04-11 15:59:34 -03:00
av1_frame_split_bsf_select = "cbs_av1"
2018-09-09 23:08:12 +01:00
av1_metadata_bsf_select = "cbs_av1"
2024-06-14 13:33:45 +02:00
dovi_rpu_bsf_select = "cbs_h265 cbs_av1 dovi_rpudec dovi_rpuenc"
2022-08-15 14:46:09 -03:00
dts2pts_bsf_select = "cbs_h264 h264parse"
2018-06-12 10:02:44 +02:00
eac3_core_bsf_select = "ac3_parser"
2023-06-17 10:16:45 -03:00
evc_frame_merge_bsf_select = "evcparse"
2018-03-06 18:49:27 +00:00
filter_units_bsf_select = "cbs"
2018-03-18 19:12:39 -03:00
h264_metadata_bsf_deps = "const_nan"
2017-05-04 23:09:02 +01:00
h264_metadata_bsf_select = "cbs_h264"
2017-05-04 23:10:19 +01:00
h264_redundant_pps_bsf_select = "cbs_h264"
2017-07-23 16:23:51 +01:00
hevc_metadata_bsf_select = "cbs_h265"
2015-03-27 12:23:59 +01:00
mjpeg2jpeg_bsf_select = "jpegtables"
2017-08-01 15:35:14 +01:00
mpeg2_metadata_bsf_select = "cbs_mpeg2"
2023-11-13 01:53:35 +00:00
trace_headers_bsf_select = "cbs cbs_vp8"
2018-04-02 02:38:03 +01:00
vp9_metadata_bsf_select = "cbs_vp9"
2023-03-21 16:01:17 +01:00
vvc_metadata_bsf_select = "cbs_h266"
2015-03-27 12:23:59 +01:00
2007-05-08 08:27:00 +00:00
# external libraries
2016-02-18 21:38:37 -06:00
aac_at_decoder_deps = "audiotoolbox"
2017-11-30 14:58:59 -08:00
aac_at_decoder_select = "aac_adtstoasc_bsf"
2016-02-18 21:38:37 -06:00
ac3_at_decoder_deps = "audiotoolbox"
2016-04-07 20:43:37 -05:00
ac3_at_decoder_select = "ac3_parser"
2016-02-18 21:38:37 -06:00
adpcm_ima_qt_at_decoder_deps = "audiotoolbox"
alac_at_decoder_deps = "audiotoolbox"
amr_nb_at_decoder_deps = "audiotoolbox"
2017-10-04 01:05:56 -03:00
avisynth_deps_any = "libdl LoadLibrary"
2016-10-31 14:30:43 +11:00
avisynth_demuxer_deps = "avisynth"
avisynth_demuxer_select = "riffdec"
2016-03-30 20:55:32 -05:00
eac3_at_decoder_deps = "audiotoolbox"
2016-04-07 20:43:37 -05:00
eac3_at_decoder_select = "ac3_parser"
2016-02-18 21:38:37 -06:00
gsm_ms_at_decoder_deps = "audiotoolbox"
ilbc_at_decoder_deps = "audiotoolbox"
mp1_at_decoder_deps = "audiotoolbox"
mp2_at_decoder_deps = "audiotoolbox"
mp3_at_decoder_deps = "audiotoolbox"
2017-04-09 12:03:30 -03:00
mp1_at_decoder_select = "mpegaudioheader"
mp2_at_decoder_select = "mpegaudioheader"
mp3_at_decoder_select = "mpegaudioheader"
2016-02-18 21:38:37 -06:00
pcm_alaw_at_decoder_deps = "audiotoolbox"
pcm_mulaw_at_decoder_deps = "audiotoolbox"
qdmc_at_decoder_deps = "audiotoolbox"
qdm2_at_decoder_deps = "audiotoolbox"
2016-02-23 21:01:24 -06:00
aac_at_encoder_deps = "audiotoolbox"
aac_at_encoder_select = "audio_frame_queue"
alac_at_encoder_deps = "audiotoolbox"
alac_at_encoder_select = "audio_frame_queue"
ilbc_at_encoder_deps = "audiotoolbox"
ilbc_at_encoder_select = "audio_frame_queue"
pcm_alaw_at_encoder_deps = "audiotoolbox"
pcm_alaw_at_encoder_select = "audio_frame_queue"
pcm_mulaw_at_encoder_deps = "audiotoolbox"
pcm_mulaw_at_encoder_select = "audio_frame_queue"
2015-10-03 17:24:06 -05:00
chromaprint_muxer_deps = "chromaprint"
2017-09-29 11:05:33 +02:00
h264_videotoolbox_encoder_deps = "pthreads"
2020-08-09 14:01:16 -03:00
h264_videotoolbox_encoder_select = "atsc_a53 videotoolbox_encoder"
2017-11-12 10:19:17 -08:00
hevc_videotoolbox_encoder_deps = "pthreads"
2020-08-09 14:01:16 -03:00
hevc_videotoolbox_encoder_select = "atsc_a53 videotoolbox_encoder"
2021-12-16 17:33:46 -06:00
prores_videotoolbox_encoder_deps = "pthreads"
prores_videotoolbox_encoder_select = "videotoolbox_encoder"
2016-08-25 17:28:17 +02:00
libaom_av1_decoder_deps = "libaom"
2018-02-11 21:33:25 +01:00
libaom_av1_encoder_deps = "libaom"
2024-03-22 17:54:09 +01:00
libaom_av1_encoder_select = "extract_extradata_bsf dovi_rpuenc"
2019-01-14 21:52:23 +02:00
libaribb24_decoder_deps = "libaribb24"
2023-02-23 19:17:15 +09:00
libaribcaption_decoder_deps = "libaribcaption"
2011-04-16 17:45:30 +02:00
libcelt_decoder_deps = "libcelt"
2017-08-08 15:27:27 +02:00
libcodec2_decoder_deps = "libcodec2"
libcodec2_encoder_deps = "libcodec2"
2018-05-21 17:46:48 -04:00
libdav1d_decoder_deps = "libdav1d"
2024-04-12 12:55:42 +02:00
libdav1d_decoder_select = "atsc_a53 dovi_rpudec"
2018-07-27 11:50:19 +08:00
libdavs2_decoder_deps = "libdavs2"
2022-06-13 11:36:35 +08:00
libdavs2_decoder_select = "avs2_parser"
2013-08-15 15:40:32 -04:00
libfdk_aac_decoder_deps = "libfdk_aac"
2012-06-28 16:46:24 +03:00
libfdk_aac_encoder_deps = "libfdk_aac"
2013-02-17 22:00:36 +01:00
libfdk_aac_encoder_select = "audio_frame_queue"
2013-06-28 10:36:00 +02:00
libgme_demuxer_deps = "libgme"
2007-01-21 21:45:48 +00:00
libgsm_decoder_deps = "libgsm"
libgsm_encoder_deps = "libgsm"
2007-02-20 18:56:45 +00:00
libgsm_ms_decoder_deps = "libgsm"
libgsm_ms_encoder_deps = "libgsm"
2012-06-16 00:42:13 +03:00
libilbc_decoder_deps = "libilbc"
libilbc_encoder_deps = "libilbc"
2024-12-03 19:54:13 -05:00
libjxl_anim_decoder_deps = "libjxl libjxl_threads"
libjxl_anim_encoder_deps = "libjxl libjxl_threads"
2022-04-17 09:22:34 -04:00
libjxl_decoder_deps = "libjxl libjxl_threads"
2022-04-17 09:22:35 -04:00
libjxl_encoder_deps = "libjxl libjxl_threads"
2015-07-14 08:53:35 +03:00
libkvazaar_encoder_deps = "libkvazaar"
2024-04-01 21:32:04 +00:00
liblc3_decoder_deps = "liblc3"
liblc3_encoder_deps = "liblc3"
liblc3_encoder_select = "audio_frame_queue"
2011-10-05 00:33:06 +02:00
libmodplug_demuxer_deps = "libmodplug"
2007-06-06 08:51:41 +00:00
libmp3lame_encoder_deps = "libmp3lame"
2016-12-03 11:25:02 +01:00
libmp3lame_encoder_select = "audio_frame_queue mpegaudioheader"
2025-04-23 16:13:29 +02:00
liboapv_encoder_deps = "liboapv"
2009-06-05 12:32:40 +00:00
libopencore_amrnb_decoder_deps = "libopencore_amrnb"
libopencore_amrnb_encoder_deps = "libopencore_amrnb"
2013-02-17 22:00:36 +01:00
libopencore_amrnb_encoder_select = "audio_frame_queue"
2009-06-05 12:32:40 +00:00
libopencore_amrwb_decoder_deps = "libopencore_amrwb"
2016-06-24 00:58:17 +03:00
libopenh264_decoder_deps = "libopenh264"
libopenh264_decoder_select = "h264_mp4toannexb_bsf"
2013-12-12 17:13:55 +02:00
libopenh264_encoder_deps = "libopenh264"
2011-11-17 16:57:09 -07:00
libopenjpeg_encoder_deps = "libopenjpeg"
2016-07-14 18:30:27 +01:00
libopenmpt_demuxer_deps = "libopenmpt"
2012-06-24 11:39:05 +02:00
libopus_decoder_deps = "libopus"
2012-09-28 23:16:09 -06:00
libopus_encoder_deps = "libopus"
2013-02-17 22:00:36 +01:00
libopus_encoder_select = "audio_frame_queue"
2019-05-29 19:28:24 +01:00
librav1e_encoder_deps = "librav1e"
2017-05-08 05:02:19 +01:00
librsvg_decoder_deps = "librsvg"
2012-07-29 18:20:00 +00:00
libshine_encoder_deps = "libshine"
2022-01-05 19:57:58 +01:00
libshine_encoder_select = "audio_frame_queue mpegaudioheader"
2008-10-24 06:29:05 +00:00
libspeex_decoder_deps = "libspeex"
2011-09-11 03:14:14 +02:00
libspeex_encoder_deps = "libspeex"
2013-02-17 22:00:36 +01:00
libspeex_encoder_select = "audio_frame_queue"
2020-07-30 22:31:58 +01:00
libsvtav1_encoder_deps = "libsvtav1"
2024-04-22 20:34:14 +08:00
libsvtav1_encoder_select = "dovi_rpuenc"
2007-01-25 00:16:28 +00:00
libtheora_encoder_deps = "libtheora"
2012-08-01 14:33:34 +00:00
libtwolame_encoder_deps = "libtwolame"
2020-10-05 20:16:25 +08:00
libuavs3d_decoder_deps = "libuavs3d"
2009-12-29 16:48:09 +02:00
libvo_amrwbenc_encoder_deps = "libvo_amrwbenc"
2012-05-05 10:45:30 +02:00
libvorbis_decoder_deps = "libvorbis"
2017-10-11 17:55:25 -03:00
libvorbis_encoder_deps = "libvorbis libvorbisenc"
2013-02-17 22:00:36 +01:00
libvorbis_encoder_select = "audio_frame_queue"
2012-12-30 19:40:20 +01:00
libvpx_vp8_decoder_deps = "libvpx"
libvpx_vp8_encoder_deps = "libvpx"
libvpx_vp9_decoder_deps = "libvpx"
libvpx_vp9_encoder_deps = "libvpx"
2024-06-05 21:51:46 +02:00
libvvenc_encoder_deps = "libvvenc"
2013-11-22 11:05:13 -05:00
libwebp_encoder_deps = "libwebp"
2015-05-19 18:04:07 -07:00
libwebp_anim_encoder_deps = "libwebp"
2015-07-10 14:45:14 +02:00
libx262_encoder_deps = "libx262"
2007-06-06 08:51:41 +00:00
libx264_encoder_deps = "libx264"
2024-03-17 11:34:57 +08:00
libx264_encoder_select = "atsc_a53 golomb"
2021-07-01 23:57:51 +03:00
libx264rgb_encoder_deps = "libx264"
2014-12-08 10:43:12 +01:00
libx264rgb_encoder_select = "libx264_encoder"
2013-10-02 14:46:26 +00:00
libx265_encoder_deps = "libx265"
2024-04-22 20:34:14 +08:00
libx265_encoder_select = "atsc_a53 dovi_rpuenc"
2010-07-27 07:18:36 +00:00
libxavs_encoder_deps = "libxavs"
2018-09-10 11:59:02 +08:00
libxavs2_encoder_deps = "libxavs2"
2023-09-19 13:34:58 +02:00
libxevd_decoder_deps = "libxevd"
2023-09-19 13:34:21 +02:00
libxeve_encoder_deps = "libxeve"
2007-06-06 08:51:41 +00:00
libxvid_encoder_deps = "libxvid"
2013-09-01 23:05:50 +02:00
libzvbi_teletext_decoder_deps = "libzvbi"
2018-04-27 21:35:56 +02:00
vapoursynth_demuxer_deps = "vapoursynth"
2017-10-11 17:55:25 -03:00
videotoolbox_suggest = "coreservices"
2025-03-25 22:57:58 +02:00
videotoolbox_deps = "corefoundation coremedia corevideo VTDecompressionSessionDecodeFrame"
2016-03-02 20:11:40 +08:00
videotoolbox_encoder_deps = "videotoolbox VTCompressionSessionPrepareToEncodeFrames"
2007-01-21 21:01:34 +00:00
2007-05-08 08:27:00 +00:00
# demuxers / muxers
2011-01-21 18:12:17 +00:00
ac3_demuxer_select = "ac3_parser"
2019-11-01 13:50:33 -08:00
act_demuxer_select = "riffdec"
2021-12-14 11:19:08 +01:00
adts_muxer_select = "mpeg4audio"
2017-01-16 12:03:21 +01:00
aiff_muxer_select = "iso_media"
2022-01-06 17:01:09 +01:00
amv_muxer_select = "riffenc"
2025-04-27 17:59:14 -03:00
apv_demuxer_select = "apv_parser"
2013-08-04 14:33:36 +02:00
asf_demuxer_select = "riffdec"
2015-06-28 13:05:45 +02:00
asf_o_demuxer_select = "riffdec"
2013-08-04 14:10:54 +02:00
asf_muxer_select = "riffenc"
2009-07-12 22:31:05 +00:00
asf_stream_muxer_select = "asf_muxer"
2019-11-10 21:20:30 -03:00
av1_demuxer_select = "av1_frame_merge_bsf av1_parser"
2021-02-10 14:27:09 +01:00
avi_demuxer_select = "riffdec exif"
2013-08-04 14:10:54 +02:00
avi_muxer_select = "riffenc"
2022-05-12 09:23:28 -07:00
avif_muxer_select = "mov_muxer"
2021-02-09 14:41:53 +01:00
caf_demuxer_select = "iso_media"
2017-01-16 12:03:21 +01:00
caf_muxer_select = "iso_media"
2014-10-06 11:36:17 +03:00
dash_muxer_select = "mp4_muxer"
2017-09-09 08:32:03 +08:00
dash_demuxer_deps = "libxml2"
2024-03-03 22:44:09 +01:00
daud_muxer_select = "pcm_rechunk_bsf"
2011-01-21 18:12:17 +00:00
dirac_demuxer_select = "dirac_parser"
2012-10-05 15:55:50 +00:00
dts_demuxer_select = "dca_parser"
2012-10-05 12:32:20 +00:00
dtshd_demuxer_select = "dca_parser"
2014-07-05 09:09:15 +00:00
dv_demuxer_select = "dvprofile"
dv_muxer_select = "dvprofile"
2024-02-18 22:01:44 -06:00
dvdvideo_demuxer_select = "mpegps_demuxer"
dvdvideo_demuxer_deps = "libdvdnav libdvdread"
2013-08-04 14:33:36 +02:00
dxa_demuxer_select = "riffdec"
2009-12-29 13:14:41 +00:00
eac3_demuxer_select = "ac3_parser"
2023-06-17 10:16:45 -03:00
evc_demuxer_select = "evc_frame_merge_bsf evc_parser"
2012-09-17 16:16:16 +02:00
f4v_muxer_select = "mov_muxer"
2016-08-29 16:56:32 +10:00
fifo_muxer_deps = "threads"
2011-01-21 18:12:17 +00:00
flac_demuxer_select = "flac_parser"
2024-05-17 09:48:03 -03:00
flv_muxer_select = "aac_adtstoasc_bsf iso_writer"
2020-05-09 18:44:24 -03:00
gxf_muxer_select = "pcm_rechunk_bsf"
2013-08-15 16:06:52 +03:00
hds_muxer_select = "flv_muxer"
2024-03-17 23:59:26 +01:00
hls_demuxer_select = "aac_demuxer ac3_demuxer adts_header ac3_parser eac3_demuxer mov_demuxer mpegts_demuxer"
2023-02-11 17:35:50 +05:30
hls_muxer_select = "mov_muxer mpegts_muxer"
2024-04-03 21:43:37 +02:00
iamf_demuxer_select = "iamfdec"
iamf_muxer_select = "iamfenc"
2014-04-19 00:46:23 +02:00
image2_alias_pix_demuxer_select = "image2_demuxer"
image2_brender_pix_demuxer_select = "image2_demuxer"
2021-12-26 16:47:57 -08:00
imf_demuxer_deps = "libxml2"
2022-01-03 07:12:45 +01:00
imf_demuxer_select = "mxf_demuxer"
2009-07-12 22:31:05 +00:00
ipod_muxer_select = "mov_muxer"
2012-12-01 17:56:00 +01:00
ismv_muxer_select = "mov_muxer"
2018-11-05 14:22:05 +00:00
ivf_muxer_select = "av1_metadata_bsf vp9_superframe_bsf"
2021-12-14 11:19:08 +01:00
latm_muxer_select = "aac_adtstoasc_bsf mpeg4audio"
2009-07-12 22:31:05 +00:00
matroska_audio_muxer_select = "matroska_muxer"
2021-02-10 14:27:09 +01:00
matroska_demuxer_select = "riffdec"
2022-02-26 12:28:44 -03:00
matroska_demuxer_suggest = "bzlib zlib"
2024-05-17 09:48:03 -03:00
matroska_muxer_select = "iso_writer mpeg4audio riffenc aac_adtstoasc_bsf pgs_frame_merge_bsf vp9_superframe_bsf"
2020-04-19 15:57:22 -03:00
mlp_demuxer_select = "mlp_parser"
2013-08-04 14:10:54 +02:00
mmf_muxer_select = "riffenc"
2024-04-02 21:01:56 -07:00
mov_demuxer_select = "iso_media riffdec"
2024-04-03 21:43:37 +02:00
mov_demuxer_suggest = "iamfdec zlib"
2024-05-17 09:48:03 -03:00
mov_muxer_select = "iso_media iso_writer riffenc rtpenc_chain vp9_superframe_bsf aac_adtstoasc_bsf ac3_parser"
2024-04-03 21:43:37 +02:00
mov_muxer_suggest = "iamfenc"
2011-01-21 18:12:17 +00:00
mp3_demuxer_select = "mpegaudio_parser"
2016-12-03 11:25:02 +01:00
mp3_muxer_select = "mpegaudioheader"
2009-07-12 22:31:05 +00:00
mp4_muxer_select = "mov_muxer"
2016-02-16 19:59:06 +01:00
mpegts_demuxer_select = "iso_media"
2024-01-30 20:49:03 +08:00
mpegts_muxer_select = "ac3_parser adts_muxer latm_muxer h264_mp4toannexb_bsf hevc_mp4toannexb_bsf vvc_mp4toannexb_bsf"
2009-07-12 22:31:05 +00:00
mpegtsraw_demuxer_select = "mpegts_demuxer"
2024-05-17 09:48:03 -03:00
mxf_muxer_select = "iso_writer pcm_rechunk_bsf rangecoder"
2009-07-12 22:31:05 +00:00
mxf_d10_muxer_select = "mxf_muxer"
2015-02-09 19:19:08 -08:00
mxf_opatom_muxer_select = "mxf_muxer"
2013-08-04 14:10:54 +02:00
nut_muxer_select = "riffenc"
2013-08-04 14:33:36 +02:00
nuv_demuxer_select = "riffdec"
2020-08-13 14:51:02 +08:00
obu_demuxer_select = "av1_frame_merge_bsf av1_parser"
2021-08-27 16:34:06 -03:00
obu_muxer_select = "av1_metadata_bsf"
2014-08-17 20:55:37 +02:00
oga_muxer_select = "ogg_muxer"
2014-07-05 09:09:15 +00:00
ogg_demuxer_select = "dirac_parse"
2016-07-20 21:55:12 -03:00
ogv_muxer_select = "ogg_muxer"
2014-08-17 20:55:37 +02:00
opus_muxer_select = "ogg_muxer"
2009-07-12 22:31:05 +00:00
psp_muxer_select = "mov_muxer"
2010-10-19 07:38:53 +00:00
rtp_demuxer_select = "sdp_demuxer"
2024-05-17 09:48:03 -03:00
rtp_muxer_select = "iso_writer"
2021-03-18 17:32:46 +05:30
rtp_mpegts_muxer_select = "mpegts_muxer rtp_muxer"
2021-02-10 01:19:44 +01:00
rtpdec_select = "asf_demuxer mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2010-10-21 12:18:48 +00:00
rtsp_demuxer_select = "http_protocol rtpdec"
2012-11-29 10:34:54 +01:00
rtsp_muxer_select = "rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2010-10-13 09:06:59 +00:00
sap_demuxer_select = "sdp_demuxer"
2012-11-29 10:34:54 +01:00
sap_muxer_select = "rtp_muxer rtp_protocol rtpenc_chain"
2010-10-21 12:18:48 +00:00
sdp_demuxer_select = "rtpdec"
2012-09-18 11:34:16 +03:00
smoothstreaming_muxer_select = "ismv_muxer"
2017-04-26 18:57:54 +02:00
spdif_demuxer_select = "adts_header"
spdif_muxer_select = "adts_header"
2014-08-17 20:55:37 +02:00
spx_muxer_select = "ogg_muxer"
2015-12-02 18:41:00 -05:00
swf_demuxer_suggest = "zlib"
2012-10-02 13:43:19 +00:00
tak_demuxer_select = "tak_parser"
2020-04-19 15:57:22 -03:00
truehd_demuxer_select = "mlp_parser"
2009-07-12 22:31:05 +00:00
tg2_muxer_select = "mov_muxer"
tgp_muxer_select = "mov_muxer"
2012-09-03 02:51:00 +02:00
vobsub_demuxer_select = "mpegps_demuxer"
2013-08-05 23:05:30 +02:00
w64_demuxer_select = "wav_demuxer"
2013-08-06 19:21:29 +02:00
w64_muxer_select = "wav_muxer"
2013-08-04 14:33:36 +02:00
wav_demuxer_select = "riffdec"
2013-08-04 14:10:54 +02:00
wav_muxer_select = "riffenc"
2020-04-07 21:25:48 +02:00
webm_chunk_muxer_select = "webm_muxer"
2016-02-20 00:29:55 +01:00
webm_dash_manifest_demuxer_select = "matroska_demuxer"
2025-05-16 20:15:05 +08:00
whip_muxer_deps_any = "dtls_protocol"
2016-02-16 19:51:26 +01:00
wtv_demuxer_select = "mpegts_demuxer riffdec"
2016-02-24 17:46:10 +00:00
wtv_muxer_select = "mpegts_muxer riffenc"
2013-08-04 14:33:36 +02:00
xmv_demuxer_select = "riffdec"
xwma_demuxer_select = "riffdec"
2009-06-29 20:00:58 +00:00
# indevs / outdevs
2018-02-20 09:41:46 +01:00
android_camera_indev_deps = "android camera2ndk mediandk pthreads"
2016-12-08 11:49:34 +01:00
alsa_indev_deps = "alsa"
alsa_outdev_deps = "alsa"
2025-03-25 22:12:26 +02:00
avfoundation_indev_deps = "avfoundation corevideo coremedia pthreads AVCaptureSession"
2017-10-11 17:55:25 -03:00
avfoundation_indev_suggest = "coregraphics applicationservices"
avfoundation_indev_extralibs = "-framework Foundation"
2025-03-25 19:26:07 +02:00
audiotoolbox_outdev_deps = "audiotoolbox pthreads AudioObjectPropertyAddress"
2020-06-15 15:09:33 +02:00
audiotoolbox_outdev_extralibs = "-framework AudioToolbox -framework CoreAudio"
2012-03-13 21:45:46 +00:00
caca_outdev_deps = "libcaca"
2017-10-10 20:20:28 +02:00
decklink_deps_any = "libdl LoadLibrary"
decklink_indev_deps = "decklink threads"
2014-09-22 02:46:03 +02:00
decklink_indev_extralibs = "-lstdc++"
2022-01-06 20:47:31 +01:00
decklink_indev_suggest = "libzvbi"
2017-10-10 20:20:28 +02:00
decklink_outdev_deps = "decklink threads"
2018-09-07 15:40:25 -04:00
decklink_outdev_suggest = "libklvanc"
2016-01-24 09:28:55 -08:00
decklink_outdev_extralibs = "-lstdc++"
2011-05-21 14:24:50 +02:00
dshow_indev_deps = "IBaseFilter"
2015-04-22 18:38:38 +02:00
dshow_indev_extralibs = "-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
2011-03-07 18:54:52 +01:00
fbdev_indev_deps = "linux_fb_h"
2013-10-16 17:18:55 +02:00
fbdev_outdev_deps = "linux_fb_h"
2014-04-02 14:53:10 -04:00
gdigrab_indev_deps = "CreateDIBSection"
gdigrab_indev_extralibs = "-lgdi32"
gdigrab_indev_select = "bmp_decoder"
2012-07-05 14:02:53 +02:00
iec61883_indev_deps = "libiec61883"
2022-08-23 10:41:04 +02:00
iec61883_indev_select = "dv_demuxer"
2017-03-14 23:42:37 +01:00
jack_indev_deps = "libjack"
2016-02-21 22:42:32 +00:00
jack_indev_deps_any = "sem_timedwait dispatch_dispatch_h"
2017-09-02 18:14:27 +01:00
kmsgrab_indev_deps = "libdrm"
2011-06-11 15:40:08 +02:00
lavfi_indev_deps = "avfilter"
2011-09-13 17:23:06 +02:00
libcdio_indev_deps = "libcdio"
2009-06-29 18:49:15 +00:00
libdc1394_indev_deps = "libdc1394"
2011-06-25 08:06:00 +02:00
openal_indev_deps = "openal"
2017-09-26 16:57:17 +02:00
oss_indev_deps_any = "sys_soundcard_h"
oss_outdev_deps_any = "sys_soundcard_h"
2011-10-19 11:23:20 -07:00
pulse_indev_deps = "libpulse"
2013-10-04 11:49:07 +02:00
pulse_outdev_deps = "libpulse"
2016-12-08 11:49:34 +01:00
sndio_indev_deps = "sndio"
sndio_outdev_deps = "sndio"
2009-06-29 18:49:15 +00:00
v4l2_indev_deps_any = "linux_videodev2_h sys_videoio_h"
2017-10-12 19:36:19 -03:00
v4l2_indev_suggest = "libv4l2"
2013-05-19 23:36:10 +02:00
v4l2_outdev_deps_any = "linux_videodev2_h sys_videoio_h"
2017-10-12 19:36:19 -03:00
v4l2_outdev_suggest = "libv4l2"
2016-12-08 10:16:34 +01:00
vfwcap_indev_deps = "vfw32 vfwcap_defines"
2016-07-27 11:31:49 +02:00
xcbgrab_indev_deps = "libxcb"
2017-10-11 17:55:25 -03:00
xcbgrab_indev_suggest = "libxcb_shm libxcb_shape libxcb_xfixes"
2021-07-15 15:44:05 -03:00
xv_outdev_deps = "xlib_xv xlib_x11 xlib_xext"
2007-01-21 21:01:34 +00:00
2007-05-08 08:27:00 +00:00
# protocols
2024-02-12 23:14:35 +01:00
android_content_protocol_deps = "jni"
android_content_protocol_select = "file_protocol"
2015-09-30 13:41:53 +10:00
async_protocol_deps = "threads"
2012-03-03 04:25:48 +01:00
bluray_protocol_deps = "libbluray"
2017-01-20 17:17:16 +01:00
ffrtmpcrypt_protocol_conflict = "librtmp_protocol"
2018-04-21 15:53:31 +02:00
ffrtmpcrypt_protocol_deps_any = "gcrypt gmp openssl mbedtls"
2012-07-19 14:13:58 +02:00
ffrtmpcrypt_protocol_select = "tcp_protocol"
2017-01-20 17:17:16 +01:00
ffrtmphttp_protocol_conflict = "librtmp_protocol"
2012-07-16 11:56:20 +02:00
ffrtmphttp_protocol_select = "http_protocol"
2013-05-15 16:08:11 +02:00
ftp_protocol_select = "tcp_protocol"
2021-02-28 23:47:03 +01:00
gopher_protocol_select = "tcp_protocol"
2021-02-28 23:47:05 +01:00
gophers_protocol_select = "tls_protocol"
2010-03-09 12:09:55 +00:00
http_protocol_select = "tcp_protocol"
2017-10-11 17:55:25 -03:00
http_protocol_suggest = "zlib"
2013-11-02 17:21:49 +01:00
httpproxy_protocol_select = "tcp_protocol"
2017-10-11 17:55:25 -03:00
httpproxy_protocol_suggest = "zlib"
2011-02-06 00:20:26 +02:00
https_protocol_select = "tls_protocol"
2017-10-11 17:55:25 -03:00
https_protocol_suggest = "zlib"
2014-07-28 11:55:38 +02:00
icecast_protocol_select = "http_protocol"
2010-08-22 12:03:27 +00:00
mmsh_protocol_select = "http_protocol"
2012-12-07 15:03:40 +01:00
mmst_protocol_select = "network"
2017-01-20 17:17:16 +01:00
rtmp_protocol_conflict = "librtmp_protocol"
2010-05-14 18:51:46 +00:00
rtmp_protocol_select = "tcp_protocol"
2017-10-11 17:55:25 -03:00
rtmp_protocol_suggest = "zlib"
2012-07-19 14:13:58 +02:00
rtmpe_protocol_select = "ffrtmpcrypt_protocol"
2017-10-11 17:55:25 -03:00
rtmpe_protocol_suggest = "zlib"
2017-01-20 17:17:16 +01:00
rtmps_protocol_conflict = "librtmp_protocol"
2012-07-17 12:02:42 +02:00
rtmps_protocol_select = "tls_protocol"
2017-10-11 17:55:25 -03:00
rtmps_protocol_suggest = "zlib"
2012-07-16 11:56:20 +02:00
rtmpt_protocol_select = "ffrtmphttp_protocol"
2017-10-11 17:55:25 -03:00
rtmpt_protocol_suggest = "zlib"
2012-07-20 16:36:47 +02:00
rtmpte_protocol_select = "ffrtmpcrypt_protocol ffrtmphttp_protocol"
2017-10-11 17:55:25 -03:00
rtmpte_protocol_suggest = "zlib"
2012-07-23 16:38:45 +03:00
rtmpts_protocol_select = "ffrtmphttp_protocol https_protocol"
2017-10-11 17:55:25 -03:00
rtmpts_protocol_suggest = "zlib"
2010-05-14 18:51:46 +00:00
rtp_protocol_select = "udp_protocol"
2018-04-21 15:53:31 +02:00
schannel_conflict = "openssl gnutls libtls mbedtls"
2016-03-09 14:17:46 +01:00
sctp_protocol_deps = "struct_sctp_event_subscribe struct_msghdr_msg_flags"
2012-12-07 15:03:40 +01:00
sctp_protocol_select = "network"
2018-04-21 15:53:31 +02:00
securetransport_conflict = "openssl gnutls libtls mbedtls"
2016-03-18 15:52:30 +01:00
srtp_protocol_select = "rtp_protocol srtp"
2012-12-07 15:03:40 +01:00
tcp_protocol_select = "network"
2018-04-21 15:53:31 +02:00
tls_protocol_deps_any = "gnutls openssl schannel securetransport libtls mbedtls"
2017-05-23 10:15:28 +02:00
tls_protocol_select = "tcp_protocol"
2025-05-16 20:15:05 +08:00
# TODO: Support libtls, mbedtls, and gnutls.
2025-06-24 19:30:19 +02:00
dtls_protocol_deps_any = "openssl schannel"
2025-05-16 20:15:05 +08:00
dtls_protocol_select = "udp_protocol"
2012-12-07 15:03:40 +01:00
udp_protocol_select = "network"
2014-11-05 10:59:44 +01:00
udplite_protocol_select = "network"
2013-07-30 01:34:56 +02:00
unix_protocol_deps = "sys_un_h"
unix_protocol_select = "network"
2022-12-09 15:37:03 +00:00
ipfs_gateway_protocol_select = "https_protocol"
ipns_gateway_protocol_select = "https_protocol"
2007-04-26 23:44:56 +00:00
2018-03-22 14:57:53 +01:00
# external library protocols
2020-03-08 17:25:31 -04:00
libamqp_protocol_deps = "librabbitmq"
libamqp_protocol_select = "network"
2021-02-28 20:56:55 +01:00
librist_protocol_deps = "librist"
librist_protocol_select = "network"
2018-03-22 14:57:53 +01:00
librtmp_protocol_deps = "librtmp"
librtmpe_protocol_deps = "librtmp"
librtmps_protocol_deps = "librtmp"
librtmpt_protocol_deps = "librtmp"
librtmpte_protocol_deps = "librtmp"
2018-09-02 16:50:45 -03:00
libsmbclient_protocol_deps = "libsmbclient gplv3"
2018-03-22 14:57:53 +01:00
libsrt_protocol_deps = "libsrt"
libsrt_protocol_select = "network"
2018-09-02 16:50:45 -03:00
libssh_protocol_deps = "libssh"
libtls_conflict = "openssl gnutls mbedtls"
2019-07-30 14:39:32 -04:00
libzmq_protocol_deps = "libzmq"
libzmq_protocol_select = "network"
2018-03-22 14:57:53 +01:00
2010-09-14 13:21:13 +00:00
# filters
2021-05-09 10:17:49 +02:00
ametadata_filter_deps = "avformat"
2011-08-18 14:26:15 +02:00
amovie_filter_deps = "avcodec avformat"
2012-01-21 20:26:31 +01:00
aresample_filter_deps = "swresample"
2019-05-05 15:01:53 +02:00
asr_filter_deps = "pocketsphinx"
2011-09-17 15:52:19 +02:00
ass_filter_deps = "libass"
2018-03-19 13:30:23 +11:00
avgblur_opencl_filter_deps = "opencl"
2021-11-19 13:45:21 +01:00
avgblur_vulkan_filter_deps = "vulkan spirv_compiler"
2013-04-21 15:00:11 +02:00
azmq_filter_deps = "libzmq"
2025-02-18 16:54:40 +01:00
blackdetect_vulkan_filter_deps = "vulkan spirv_compiler"
2010-09-26 21:36:05 +00:00
blackframe_filter_deps = "gpl"
2022-01-01 02:09:53 +08:00
blend_vulkan_filter_deps = "vulkan spirv_compiler"
2011-07-09 18:13:10 +02:00
boxblur_filter_deps = "gpl"
2018-06-20 04:33:02 +03:00
boxblur_opencl_filter_deps = "opencl gpl"
2014-04-29 18:53:16 +02:00
bs2b_filter_deps = "libbs2b"
2019-08-29 21:43:29 -07:00
bwdif_cuda_filter_deps = "ffnvcodec"
bwdif_cuda_filter_deps_any = "cuda_nvcc cuda_llvm"
2023-02-26 22:36:51 +01:00
bwdif_vulkan_filter_deps = "vulkan spirv_compiler"
2021-11-19 13:45:21 +01:00
chromaber_vulkan_filter_deps = "vulkan spirv_compiler"
2023-02-22 22:21:43 +01:00
color_vulkan_filter_deps = "vulkan spirv_compiler"
2019-04-16 22:08:49 -04:00
colorkey_opencl_filter_deps = "opencl"
2012-03-10 04:04:19 +01:00
colormatrix_filter_deps = "gpl"
2018-03-24 18:57:43 +03:00
convolution_opencl_filter_deps = "opencl"
2017-09-15 14:27:36 +02:00
coreimage_filter_deps = "coreimage appkit"
coreimage_filter_extralibs = "-framework OpenGL"
coreimagesrc_filter_deps = "coreimage appkit"
coreimagesrc_filter_extralibs = "-framework OpenGL"
2015-05-02 21:28:31 +02:00
cover_rect_filter_deps = "avcodec avformat gpl"
2010-10-12 09:22:32 +00:00
cropdetect_filter_deps = "gpl"
2016-07-02 12:12:36 +02:00
deinterlace_qsv_filter_deps = "libmfx"
2023-01-30 09:37:18 +08:00
deinterlace_qsv_filter_select = "qsvvpp"
2017-02-19 17:23:07 +00:00
deinterlace_vaapi_filter_deps = "vaapi"
2011-08-10 18:58:49 +02:00
delogo_filter_deps = "gpl"
2018-09-18 23:30:39 +01:00
denoise_vaapi_filter_deps = "vaapi"
2019-06-12 10:27:35 -03:00
derain_filter_select = "dnn"
2014-08-02 18:57:32 +02:00
deshake_filter_select = "pixelutils"
2019-08-08 09:24:32 -04:00
deshake_opencl_filter_deps = "opencl"
2018-08-12 23:12:08 +03:00
dilation_opencl_filter_deps = "opencl"
2021-03-17 14:08:38 +08:00
dnn_classify_filter_select = "dnn"
2021-02-07 14:36:13 +08:00
dnn_detect_filter_select = "dnn"
2019-10-31 16:33:02 +08:00
dnn_processing_filter_select = "dnn"
2023-05-26 12:11:41 +02:00
drawtext_filter_deps = "libfreetype libharfbuzz"
2017-10-17 01:17:32 -03:00
drawtext_filter_suggest = "libfontconfig libfribidi"
2017-05-06 23:52:38 -03:00
elbg_filter_deps = "avcodec"
2015-01-19 03:56:48 +05:30
eq_filter_deps = "gpl"
2018-08-12 23:12:08 +03:00
erosion_opencl_filter_deps = "opencl"
2015-05-02 21:28:31 +02:00
find_rect_filter_deps = "avcodec avformat gpl"
2021-11-26 17:10:57 +08:00
flip_vulkan_filter_deps = "vulkan spirv_compiler"
2023-02-07 09:01:40 +01:00
flite_filter_deps = "libflite threads"
2018-04-05 01:37:25 +02:00
framerate_filter_select = "scene_sad"
2018-11-04 22:22:24 +01:00
freezedetect_filter_select = "scene_sad"
2021-09-05 16:34:37 +02:00
frei0r_deps_any = "libdl LoadLibrary"
frei0r_filter_deps = "frei0r"
frei0r_src_filter_deps = "frei0r"
2014-12-23 22:24:37 +05:30
fspp_filter_deps = "gpl"
2023-12-02 18:46:16 +01:00
fsync_filter_deps = "avformat"
2021-11-19 13:45:21 +01:00
gblur_vulkan_filter_deps = "vulkan spirv_compiler"
2021-11-19 22:50:00 +08:00
hflip_vulkan_filter_deps = "vulkan spirv_compiler"
2012-10-20 07:45:51 +02:00
histeq_filter_deps = "gpl"
2010-12-04 13:03:42 +00:00
hqdn3d_filter_deps = "gpl"
2022-04-11 13:26:07 +02:00
iccdetect_filter_deps = "lcms2"
2022-04-09 20:02:56 +02:00
iccgen_filter_deps = "lcms2"
2024-05-05 15:34:53 +02:00
identity_filter_select = "scene_sad"
2013-03-12 11:35:21 +01:00
interlace_filter_deps = "gpl"
2025-02-17 15:46:09 +01:00
interlace_vulkan_filter_deps = "vulkan spirv_compiler"
2012-10-18 09:50:53 +02:00
kerndeint_filter_deps = "gpl"
2017-10-04 01:05:56 -03:00
ladspa_filter_deps = "ladspa libdl"
2024-03-19 10:07:18 -03:00
lcevc_filter_deps = "liblcevc_dec"
2018-07-13 19:33:12 +09:00
lensfun_filter_deps = "liblensfun version3"
2021-11-19 07:46:15 +01:00
libplacebo_filter_deps = "libplacebo vulkan"
2017-11-23 16:08:42 +01:00
lv2_filter_deps = "lv2"
2013-05-28 13:40:39 +02:00
mcdeint_filter_deps = "avcodec gpl"
2021-05-09 10:17:49 +02:00
metadata_filter_deps = "avformat"
2011-05-05 01:05:07 +02:00
movie_filter_deps = "avcodec avformat"
2014-08-02 18:58:39 +02:00
mpdecimate_filter_deps = "gpl"
mpdecimate_filter_select = "pixelutils"
2018-10-07 18:55:47 +02:00
minterpolate_filter_select = "scene_sad"
2011-08-08 14:41:22 +02:00
mptestsrc_filter_deps = "gpl"
2024-10-02 12:44:49 -03:00
msad_filter_select = "scene_sad"
2011-05-28 22:00:26 +02:00
negate_filter_deps = "lut_filter"
2019-04-12 16:29:03 +08:00
nlmeans_opencl_filter_deps = "opencl"
2023-04-13 12:15:13 +02:00
nlmeans_vulkan_filter_deps = "vulkan spirv_compiler"
2016-01-23 17:15:53 +01:00
nnedi_filter_deps = "gpl"
2015-09-09 13:43:35 +00:00
ocr_filter_deps = "libtesseract"
2010-12-23 17:24:19 +00:00
ocv_filter_deps = "libopencv"
2018-01-02 23:17:32 +00:00
openclsrc_filter_deps = "opencl"
2023-11-28 23:58:15 +01:00
qrencode_filter_deps = "libqrencode"
qrencodesrc_filter_deps = "libqrencode"
2023-12-26 16:19:10 +01:00
quirc_filter_deps = "libquirc"
2017-09-10 21:53:36 +01:00
overlay_opencl_filter_deps = "opencl"
2017-08-18 09:40:47 +08:00
overlay_qsv_filter_deps = "libmfx"
overlay_qsv_filter_select = "qsvvpp"
2021-11-22 15:53:50 +08:00
overlay_vaapi_filter_deps = "vaapi VAProcPipelineCaps_blend_flags"
2021-11-19 13:45:21 +01:00
overlay_vulkan_filter_deps = "vulkan spirv_compiler"
2013-05-10 21:27:15 +02:00
owdenoise_filter_deps = "gpl"
2020-02-06 17:41:08 +01:00
pad_opencl_filter_deps = "opencl"
2012-01-18 12:00:16 +01:00
pan_filter_deps = "swresample"
2016-01-24 09:28:55 -08:00
perspective_filter_deps = "gpl"
2013-08-31 18:46:17 +00:00
phase_filter_deps = "gpl"
2016-01-24 09:28:55 -08:00
pp7_filter_deps = "gpl"
2018-06-30 03:46:24 +03:00
prewitt_opencl_filter_deps = "opencl"
2018-09-18 23:30:39 +01:00
procamp_vaapi_filter_deps = "vaapi"
2018-01-02 23:17:32 +00:00
program_opencl_filter_deps = "opencl"
2013-07-08 12:42:53 +00:00
pullup_filter_deps = "gpl"
2022-06-29 19:12:24 +02:00
remap_opencl_filter_deps = "opencl"
2012-03-10 14:01:28 +01:00
removelogo_filter_deps = "avcodec avformat swscale"
2015-01-28 15:13:27 +00:00
repeatfields_filter_deps = "gpl"
2018-06-30 03:46:24 +03:00
roberts_opencl_filter_deps = "opencl"
2015-09-18 20:22:05 +00:00
rubberband_filter_deps = "librubberband"
2013-06-03 13:34:04 +02:00
sab_filter_deps = "gpl swscale"
2015-08-15 18:38:06 +02:00
scale2ref_filter_deps = "swscale"
2016-01-24 09:28:55 -08:00
scale_filter_deps = "swscale"
2024-10-15 15:18:20 +02:00
sr_amf_filter_deps = "amf"
vpp_amf_filter_deps = "amf"
2016-03-26 12:39:58 +01:00
scale_qsv_filter_deps = "libmfx"
2023-01-17 14:20:25 +08:00
scale_qsv_filter_select = "qsvvpp"
2019-10-08 23:28:36 +08:00
scdet_filter_select = "scene_sad"
2025-02-20 21:23:28 +01:00
scdet_vulkan_filter_deps = "vulkan spirv_compiler"
2018-04-05 01:47:32 +02:00
select_filter_select = "scene_sad"
2018-09-18 23:30:39 +01:00
sharpness_vaapi_filter_deps = "vaapi"
2021-07-27 21:16:28 +02:00
showcqt_filter_deps = "avformat swscale"
2017-10-12 14:17:43 -03:00
showcqt_filter_suggest = "libfontconfig libfreetype"
2017-01-02 02:08:57 +01:00
signature_filter_deps = "gpl avcodec avformat"
2016-01-24 09:28:55 -08:00
smartblur_filter_deps = "gpl swscale"
2018-06-30 03:46:24 +03:00
sobel_opencl_filter_deps = "opencl"
2021-07-24 11:26:08 +02:00
sofalizer_filter_deps = "libmysofa"
2013-10-02 01:27:22 +02:00
spp_filter_deps = "gpl avcodec"
2023-09-28 18:28:55 +02:00
spp_filter_select = "idctdsp fdctdsp me_cmp pixblockdsp"
2018-06-14 00:37:12 +03:00
sr_filter_deps = "avformat swscale"
sr_filter_select = "dnn"
2013-03-01 17:35:52 +00:00
stereo3d_filter_deps = "gpl"
2012-11-29 03:28:37 +01:00
subtitles_filter_deps = "avformat avcodec libass"
2012-03-18 10:59:01 +01:00
super2xsai_filter_deps = "gpl"
2012-09-28 05:25:22 +02:00
pixfmts_super2xsai_test_deps = "super2xsai_filter"
2016-01-24 09:28:55 -08:00
tinterlace_filter_deps = "gpl"
2012-09-28 05:25:22 +02:00
tinterlace_merge_test_deps = "tinterlace_filter"
tinterlace_pad_test_deps = "tinterlace_filter"
2017-09-13 14:07:21 -03:00
tonemap_filter_deps = "const_nan"
2019-12-30 15:32:56 +08:00
tonemap_vaapi_filter_deps = "vaapi VAProcFilterParameterBufferHDRToneMapping"
2018-06-19 09:57:31 +08:00
tonemap_opencl_filter_deps = "opencl const_nan"
2018-11-28 10:27:38 +08:00
transpose_opencl_filter_deps = "opencl"
2019-01-17 11:33:05 +08:00
transpose_vaapi_filter_deps = "vaapi VAProcPipelineCaps_rotation_flags"
2023-07-16 17:13:29 +08:00
transpose_vt_filter_deps = "videotoolbox VTPixelRotationSessionCreate"
2021-12-09 17:36:51 +08:00
transpose_vulkan_filter_deps = "vulkan spirv_compiler"
2017-11-14 19:47:27 +00:00
unsharp_opencl_filter_deps = "opencl"
2014-12-07 18:56:46 +05:30
uspp_filter_deps = "gpl avcodec"
2016-08-24 22:13:03 +02:00
vaguedenoiser_filter_deps = "gpl"
2021-11-19 22:50:01 +08:00
vflip_vulkan_filter_deps = "vulkan spirv_compiler"
2016-01-24 09:28:55 -08:00
vidstabdetect_filter_deps = "libvidstab"
vidstabtransform_filter_deps = "libvidstab"
2021-12-24 12:43:50 -08:00
libvmaf_filter_deps = "libvmaf"
2023-09-25 13:14:13 +01:00
libvmaf_cuda_filter_deps = "libvmaf libvmaf_cuda ffnvcodec"
2013-04-21 15:00:11 +02:00
zmq_filter_deps = "libzmq"
2013-09-16 15:31:15 +00:00
zoompan_filter_deps = "swscale"
2017-09-13 14:07:21 -03:00
zscale_filter_deps = "libzimg const_nan"
2018-09-18 23:30:39 +01:00
scale_vaapi_filter_deps = "vaapi"
2023-12-13 21:08:30 +08:00
scale_vt_filter_deps = "videotoolbox VTPixelTransferSessionCreate"
2021-11-19 13:45:21 +01:00
scale_vulkan_filter_deps = "vulkan spirv_compiler"
2017-08-24 10:16:28 +08:00
vpp_qsv_filter_deps = "libmfx"
vpp_qsv_filter_select = "qsvvpp"
2020-01-23 16:29:34 +01:00
xfade_opencl_filter_deps = "opencl"
2023-06-07 00:22:59 +02:00
xfade_vulkan_filter_deps = "vulkan spirv_compiler"
2019-07-30 02:51:42 -05:00
yadif_cuda_filter_deps = "ffnvcodec"
yadif_cuda_filter_deps_any = "cuda_nvcc cuda_llvm"
2021-12-13 17:08:50 -08:00
yadif_videotoolbox_filter_deps = "metal corevideo videotoolbox"
2023-01-19 16:30:06 +08:00
hstack_vaapi_filter_deps = "vaapi_1"
vstack_vaapi_filter_deps = "vaapi_1"
xstack_vaapi_filter_deps = "vaapi_1"
2023-02-07 11:59:07 +08:00
hstack_qsv_filter_deps = "libmfx"
hstack_qsv_filter_select = "qsvvpp"
vstack_qsv_filter_deps = "libmfx"
vstack_qsv_filter_select = "qsvvpp"
xstack_qsv_filter_deps = "libmfx"
xstack_qsv_filter_select = "qsvvpp"
2024-03-18 14:06:14 +08:00
pad_vaapi_filter_deps = "vaapi_1"
2024-03-18 14:06:15 +08:00
drawbox_vaapi_filter_deps = "vaapi_1"
2010-09-14 13:21:13 +00:00
2013-11-02 17:05:28 +01:00
# examples
2023-01-15 12:44:04 +01:00
avio_http_serve_files_deps = "avformat avutil fork"
2020-01-10 12:10:09 +01:00
avio_list_dir_deps = "avformat avutil"
2023-01-15 03:06:39 +01:00
avio_read_callback_deps = "avformat avcodec avutil"
2016-10-19 21:05:22 +02:00
decode_audio_example_deps = "avcodec avutil"
2023-01-15 12:26:30 +01:00
decode_filter_audio_example_deps = "avfilter avcodec avformat avutil"
2023-01-15 12:33:11 +01:00
decode_filter_video_example_deps = "avfilter avcodec avformat avutil"
2016-10-19 21:05:22 +02:00
decode_video_example_deps = "avcodec avutil"
2023-01-15 03:13:01 +01:00
demux_decode_example_deps = "avcodec avformat avutil"
2016-10-19 21:05:22 +02:00
encode_audio_example_deps = "avcodec avutil"
2016-10-19 21:05:22 +02:00
encode_video_example_deps = "avcodec avutil"
2014-07-16 16:42:42 +02:00
extract_mvs_example_deps = "avcodec avformat avutil"
2014-02-13 08:50:16 +01:00
filter_audio_example_deps = "avfilter avutil"
2017-07-20 00:58:56 -04:00
hw_decode_example_deps = "avcodec avformat avutil"
2023-01-15 12:53:31 +01:00
mux_example_deps = "avcodec avformat avutil swscale"
2023-01-15 12:56:54 +01:00
qsv_decode_example_deps = "avcodec avutil libmfx h264_qsv_decoder"
2023-01-15 13:03:47 +01:00
remux_example_deps = "avcodec avformat avutil"
2023-01-15 16:43:06 +01:00
resample_audio_example_deps = "avutil swresample"
2023-01-15 16:44:25 +01:00
scale_video_example_deps = "avutil swscale"
2023-01-15 12:49:32 +01:00
show_metadata_example_deps = "avformat avutil"
2013-11-27 11:15:48 +01:00
transcode_aac_example_deps = "avcodec avformat swresample"
2023-01-15 13:11:09 +01:00
transcode_example_deps = "avfilter avcodec avformat avutil"
2018-01-23 23:37:33 -03:00
vaapi_encode_example_deps = "avcodec avutil h264_vaapi_encoder"
2018-01-11 15:00:30 +08:00
vaapi_transcode_example_deps = "avcodec avformat avutil h264_vaapi_encoder"
2022-10-31 15:22:25 +08:00
qsv_transcode_example_deps = "avcodec avformat avutil h264_qsv_encoder"
2013-11-02 17:05:28 +01:00
2017-01-22 16:42:36 +01:00
# EXTRALIBS_LIST
cpu_init_extralibs = "pthreads_extralibs"
cws2fws_extralibs = "zlib_extralibs"
2018-08-28 17:14:55 +03:00
# libraries, in any order
2012-11-11 13:37:40 +01:00
avcodec_deps = "avutil"
2024-10-06 16:24:13 +02:00
avcodec_suggest = "libm stdatomic spirv_compiler"
2014-05-01 13:18:57 +02:00
avdevice_deps = "avformat avcodec avutil"
2022-01-19 12:50:41 +01:00
avdevice_suggest = "libm stdatomic"
2012-11-11 13:37:40 +01:00
avfilter_deps = "avutil"
2024-10-07 09:14:08 +02:00
avfilter_suggest = "libm stdatomic spirv_compiler"
2014-05-01 13:18:57 +02:00
avformat_deps = "avcodec avutil"
2022-01-19 12:50:41 +01:00
avformat_suggest = "libm network zlib stdatomic"
2023-07-04 19:49:23 -03:00
avutil_suggest = "clock_gettime ffnvcodec gcrypt libm libdrm libmfx opencl openssl user32 vaapi vulkan videotoolbox corefoundation corevideo coremedia bcrypt stdatomic"
2014-05-13 22:30:07 +02:00
swresample_deps = "avutil"
2022-01-19 12:50:41 +01:00
swresample_suggest = "libm libsoxr stdatomic"
2012-11-11 13:37:40 +01:00
swscale_deps = "avutil"
2022-01-19 12:50:41 +01:00
swscale_suggest = "libm stdatomic"
2008-02-26 21:32:56 +00:00
2024-10-06 10:42:15 -03:00
avcodec_extralibs = "pthreads_extralibs iconv_extralibs dxva2_extralibs liblcevc_dec_extralibs lcms2_extralibs"
2017-10-11 17:55:25 -03:00
avfilter_extralibs = "pthreads_extralibs"
2023-12-21 23:25:00 +02:00
avutil_extralibs = "d3d11va_extralibs d3d12va_extralibs mediacodec_extralibs nanosleep_extralibs pthreads_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vaapi_win32_extralibs vdpau_x11_extralibs"
2008-02-26 21:32:56 +00:00
2007-05-08 08:27:00 +00:00
# programs
2022-03-21 15:39:29 +01:00
ffmpeg_deps = "avcodec avfilter avformat threads"
2024-09-20 10:25:41 -03:00
ffmpeg_select = "aformat_filter anull_filter atrim_filter crop_filter
format_filter hflip_filter null_filter rotate_filter
2019-03-02 20:49:12 +05:30
transpose_filter trim_filter vflip_filter"
2017-10-11 17:55:25 -03:00
ffmpeg_suggest = "ole32 psapi shell32"
2023-03-10 09:39:06 +01:00
ffplay_deps = "avcodec avformat avfilter swscale swresample sdl2"
2023-09-28 17:54:52 +02:00
ffplay_select = "crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2023-11-08 00:45:04 +08:00
ffplay_suggest = "shell32 libplacebo vulkan"
2011-01-04 14:00:10 +00:00
ffprobe_deps = "avcodec avformat"
2017-10-11 17:55:25 -03:00
ffprobe_suggest = "shell32"
2007-02-11 14:22:28 +00:00
2012-08-09 23:37:28 +02:00
# documentation
podpages_deps = "perl"
manpages_deps = "perl pod2man"
2014-08-31 19:39:35 -07:00
htmlpages_deps = "perl"
htmlpages_deps_any = "makeinfo_html texi2html"
2013-05-28 21:52:33 +02:00
txtpages_deps = "perl makeinfo"
2013-11-24 18:40:16 -03:00
doc_deps_any = "manpages htmlpages podpages txtpages"
2007-05-08 08:27:00 +00:00
2001-07-22 14:18:56 +00:00
# default parameters
2007-02-06 22:09:46 +00:00
2017-05-03 12:51:48 +02:00
logfile = "ffbuild/config.log"
2007-02-06 22:09:46 +00:00
# installation paths
2008-06-02 23:51:36 +00:00
prefix_default = "/usr/local"
bindir_default = '${prefix}/bin'
2011-08-15 22:36:13 +02:00
datadir_default = '${prefix}/share/ffmpeg'
2013-09-01 13:41:33 +02:00
docdir_default = '${prefix}/share/doc/ffmpeg'
2008-06-02 23:51:36 +00:00
incdir_default = '${prefix}/include'
libdir_default = '${prefix}/lib'
mandir_default = '${prefix}/share/man'
2007-02-06 22:09:46 +00:00
# toolchain
2010-05-02 18:59:15 +00:00
ar_default = "ar"
2008-10-21 00:57:20 +00:00
cc_default = "gcc"
2024-03-19 15:42:00 -03:00
stdc_default = "c17"
2024-03-19 15:40:14 -03:00
stdcxx_default = "c++11"
2011-08-31 04:11:25 +05:30
cxx_default = "g++"
2008-11-23 12:36:34 +00:00
host_cc_default = "gcc"
2014-07-07 15:24:48 -07:00
doxygen_default = "doxygen"
2011-05-18 00:03:19 +02:00
install = "install"
2016-04-25 07:39:08 -07:00
ln_s_default = "ln -s -f"
2021-12-21 02:34:51 -06:00
metalcc_default = "xcrun -sdk macosx metal"
metallib_default = "xcrun -sdk macosx metallib"
2012-09-16 21:47:16 +01:00
nm_default = "nm -g"
2011-03-06 13:48:30 +00:00
pkg_config_default = pkg-config
2015-06-25 11:01:12 -04:00
ranlib_default = "ranlib"
2011-04-01 00:24:12 +02:00
strip_default = "strip"
2016-05-27 11:38:38 +02:00
version_script = '--version-script'
2017-10-06 23:06:45 +02:00
objformat = "elf32"
2016-10-13 18:33:15 +00:00
x86asmexe_default = "nasm"
2013-12-05 17:50:14 -03:00
windres_default = "windres"
2017-10-06 22:15:35 +02:00
striptype = "direct"
2025-03-21 13:10:40 +05:30
response_files_default = "auto"
2007-02-06 22:09:46 +00:00
# OS
2010-02-11 23:57:52 +00:00
target_os_default = $( tolower $( uname -s) )
host_os = $target_os_default
2007-02-06 22:09:46 +00:00
2014-03-13 08:34:45 +01:00
# machine
if test " $target_os_default " = aix; then
arch_default = $( uname -p)
2014-06-16 16:46:10 +02:00
strip_default = "strip -X32_64"
2018-12-02 15:18:46 +01:00
nm_default = "nm -g -X32_64"
2025-05-23 17:32:00 +08:00
elif test " $MSYSTEM_CARCH " != "" ; then
arch_default = " $MSYSTEM_CARCH "
2014-03-13 08:34:45 +01:00
else
arch_default = $( uname -m)
fi
cpu = "generic"
2014-07-22 03:06:43 +02:00
intrinsics = "none"
2014-03-13 08:34:45 +01:00
2007-02-06 22:09:46 +00:00
# configurable options
2016-02-17 23:34:54 +01:00
enable $PROGRAM_LIST
2012-08-09 23:37:28 +02:00
enable $DOCUMENT_LIST
2016-02-17 23:34:54 +01:00
enable $EXAMPLE_LIST
2021-04-14 04:33:24 +02:00
enable $LIBRARY_LIST
2011-12-14 23:58:10 +01:00
enable stripping
2023-12-15 13:03:49 +02:00
enable version_tracking
2011-09-12 17:40:29 +02:00
enable asm
enable debug
enable doc
2014-08-28 19:32:45 -07:00
enable faan faandct faanidct
2024-04-03 21:43:37 +02:00
enable iamf
2019-12-02 23:57:11 +02:00
enable large_tests
2007-10-24 19:17:15 +00:00
enable optimizations
2021-06-11 23:54:34 +02:00
enable ptx_compression
2025-05-15 23:07:54 +02:00
enable resource_compression
2012-09-21 18:01:33 +02:00
enable runtime_cpudetect
2011-12-16 21:42:04 +00:00
enable safe_bitstream_reader
2008-03-25 15:04:42 +00:00
enable static
2009-03-20 14:12:47 +00:00
enable swscale_alpha
2015-04-20 14:44:32 +01:00
enable valgrind_backtrace
2007-02-06 22:09:46 +00:00
2014-06-11 17:51:49 +01:00
sws_max_filter_size_default = 256
set_default sws_max_filter_size
2017-01-22 16:42:36 +01:00
# internal components are enabled by default
enable $EXTRALIBS_LIST
2017-02-24 14:00:24 +01:00
# Avoid external, non-system, libraries getting enabled by dependency resolution
2017-10-11 17:55:25 -03:00
disable $EXTERNAL_LIBRARY_LIST $HWACCEL_LIBRARY_LIST
2017-02-24 14:00:24 +01:00
2007-02-06 22:09:46 +00:00
# build settings
2008-04-10 19:44:29 +00:00
SHFLAGS = '-shared -Wl,-soname,$$(@F)'
2003-01-11 20:34:38 +00:00
LIBPREF = "lib"
LIBSUF = ".a"
2007-10-19 18:03:05 +00:00
FULLNAME = '$(NAME)$(BUILDSUF)'
LIBNAME = '$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2003-01-11 20:34:38 +00:00
SLIBPREF = "lib"
SLIBSUF = ".so"
2007-10-19 18:03:05 +00:00
SLIBNAME = '$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2006-05-16 18:06:28 +00:00
SLIBNAME_WITH_VERSION = '$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR = '$(SLIBNAME).$(LIBMAJOR)'
2010-03-06 17:44:18 +00:00
LIB_INSTALL_EXTRA_CMD = '$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2011-07-07 15:25:30 +01:00
SLIB_INSTALL_NAME = '$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS = '$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2016-05-27 11:38:38 +02:00
VERSION_SCRIPT_POSTPROCESS_CMD = "cat"
2002-03-08 09:09:57 +00:00
2012-07-20 12:20:23 +01:00
asflags_filter = echo
cflags_filter = echo
2012-07-20 03:06:49 +01:00
ldflags_filter = echo
2012-07-20 23:43:27 +01:00
AS_C = '-c'
2011-06-25 11:57:32 +01:00
AS_O = '-o $@'
2012-07-20 23:43:27 +01:00
CC_C = '-c'
2012-07-20 22:22:41 +01:00
CC_E = '-E -o $@'
2009-07-12 13:29:46 +00:00
CC_O = '-o $@'
2012-07-30 17:44:56 +02:00
CXX_C = '-c'
2011-08-31 04:11:25 +05:30
CXX_O = '-o $@'
2015-11-23 17:08:49 -05:00
OBJCC_C = '-c'
OBJCC_E = '-E -o $@'
OBJCC_O = '-o $@'
2016-10-13 00:45:09 +00:00
X86ASM_O = '-o $@'
2012-07-20 13:43:07 +01:00
LD_O = '-o $@'
2012-08-28 16:06:56 +01:00
LD_LIB = '-l%'
LD_PATH = '-L'
2012-07-20 23:43:27 +01:00
HOSTCC_C = '-c'
2013-02-28 16:16:10 +01:00
HOSTCC_E = '-E -o $@'
2012-07-20 13:43:07 +01:00
HOSTCC_O = '-o $@'
2012-08-28 13:02:35 +01:00
HOSTLD_O = '-o $@'
2017-05-11 22:53:41 +02:00
NVCC_C = '-c'
NVCC_O = '-o $@'
2009-07-12 13:29:46 +00:00
2016-12-06 18:19:09 +01:00
host_extralibs = '-lm'
2012-07-20 13:48:13 +01:00
host_cflags_filter = echo
host_ldflags_filter = echo
2008-11-23 12:36:34 +00:00
2010-01-30 15:48:55 +00:00
target_path = '$(CURDIR)'
2008-11-23 12:36:38 +00:00
2010-07-01 11:11:23 +00:00
# since the object filename is not given with the -MM flag, the compiler
# is only able to print the basename, and we must add the path ourselves
2015-10-08 12:30:51 +02:00
DEPCMD = '$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
2012-07-20 13:43:07 +01:00
DEPFLAGS = '-MM'
2008-03-12 23:30:35 +00:00
2017-02-10 19:31:34 +00:00
mkdir -p ffbuild
2007-02-17 18:32:04 +00:00
# find source path
2009-07-17 13:10:26 +00:00
if test -f configure; then
2011-06-06 22:38:38 +01:00
source_path = .
2019-04-25 00:42:48 +02:00
elif test -f src/configure; then
source_path = src
2007-02-17 18:32:04 +00:00
else
2011-06-06 12:56:26 +01:00
source_path = $( cd $( dirname " $0 " ) ; pwd )
2015-08-25 23:22:49 -04:00
case " $source_path " in
*[ [ :blank:] ] *) die "Out of tree builds are impossible with whitespace in source path." ; ;
esac
2009-03-15 21:32:36 +00:00
test -e " $source_path /config.h " &&
die "Out of tree builds are impossible with config.h in source dir."
2007-02-17 18:32:04 +00:00
fi
2009-03-30 21:12:44 +00:00
for v in " $@ " ; do
2009-06-15 22:12:21 +00:00
r = ${ v #*= }
l = ${ v % " $r " }
r = $( sh_quote " $r " )
2011-03-17 17:01:10 +01:00
FFMPEG_CONFIGURATION = " ${ FFMPEG_CONFIGURATION # } ${ l } ${ r } "
2009-03-30 21:12:44 +00:00
done
2007-02-17 18:32:04 +00:00
2016-02-19 10:39:29 +01:00
find_things_extern( ) {
thing = $1
pattern = $2
file = $source_path /$3
2018-03-23 20:38:25 +00:00
out = ${ 4 :- $thing }
sed -n " s/^[^#]*extern.* $pattern *ff_\([^ ]*\)_ $thing ;/\1_ $out /p " " $file "
2016-02-19 10:39:29 +01:00
}
2018-02-18 17:20:26 +00:00
find_filters_extern( ) {
file = $source_path /$1
2025-01-09 02:42:11 +01:00
sed -n 's/^extern const FFFilter ff_[avfsinkrc]\{2,5\}_\([[:alnum:]_]\{1,\}\);/\1_filter/p' $file
2018-02-18 17:20:26 +00:00
}
FILTER_LIST = $( find_filters_extern libavfilter/allfilters.c)
2023-01-27 15:06:00 +01:00
OUTDEV_LIST = $( find_things_extern muxer FFOutputFormat libavdevice/alldevices.c outdev)
2024-02-10 15:50:43 +01:00
INDEV_LIST = $( find_things_extern demuxer FFInputFormat libavdevice/alldevices.c indev)
2023-01-27 15:06:00 +01:00
MUXER_LIST = $( find_things_extern muxer FFOutputFormat libavformat/allformats.c)
2024-02-10 15:50:43 +01:00
DEMUXER_LIST = $( find_things_extern demuxer FFInputFormat libavformat/allformats.c)
2022-03-16 21:09:54 +01:00
ENCODER_LIST = $( find_things_extern encoder FFCodec libavcodec/allcodecs.c)
DECODER_LIST = $( find_things_extern decoder FFCodec libavcodec/allcodecs.c)
2017-12-22 22:17:00 +00:00
CODEC_LIST = "
$ENCODER_LIST
$DECODER_LIST
"
2018-07-21 14:21:16 -03:00
PARSER_LIST = $( find_things_extern parser AVCodecParser libavcodec/parsers.c)
2022-03-21 22:25:27 +01:00
BSF_LIST = $( find_things_extern bsf FFBitStreamFilter libavcodec/bitstream_filters.c)
2023-08-01 19:44:22 +02:00
HWACCEL_LIST = $( find_things_extern hwaccel FFHWAccel libavcodec/hwaccels.h)
2016-02-19 10:39:29 +01:00
PROTOCOL_LIST = $( find_things_extern protocol URLProtocol libavformat/protocols.c)
2017-01-22 16:42:36 +01:00
AVCODEC_COMPONENTS_LIST = "
2011-09-12 17:52:44 +02:00
$BSF_LIST
$DECODER_LIST
$ENCODER_LIST
$HWACCEL_LIST
2017-01-22 16:42:36 +01:00
$PARSER_LIST
"
AVDEVICE_COMPONENTS_LIST = "
2011-09-12 17:52:44 +02:00
$INDEV_LIST
$OUTDEV_LIST
2017-01-22 16:42:36 +01:00
"
AVFILTER_COMPONENTS_LIST = "
$FILTER_LIST
"
AVFORMAT_COMPONENTS_LIST = "
$DEMUXER_LIST
$MUXER_LIST
2011-09-12 17:52:44 +02:00
$PROTOCOL_LIST
"
2017-01-22 16:42:36 +01:00
ALL_COMPONENTS = "
$AVCODEC_COMPONENTS_LIST
$AVDEVICE_COMPONENTS_LIST
$AVFILTER_COMPONENTS_LIST
$AVFORMAT_COMPONENTS_LIST
"
2016-02-17 23:34:54 +01:00
for n in $COMPONENT_LIST ; do
v = $( toupper ${ n %s } ) _LIST
eval enable \$ $v
eval ${ n } _if_any = " \$ $v "
done
2012-10-19 02:22:12 -03:00
enable $ARCH_EXT_LIST
2007-02-17 18:32:04 +00:00
die_unknown( ) {
echo " Unknown option \" $1 \". "
echo " See $0 --help for available options. "
exit 1
}
2015-09-14 16:34:50 -07:00
print_in_columns( ) {
2019-04-27 23:15:08 +02:00
tr ' ' '\n' | sort | tr '\r\n' ' ' | awk -v col_width = 24 -v width = " $ncols " '
{
num_cols = width > col_width ? int(width / col_width) : 1;
num_rows = int((NF + num_cols-1) / num_cols);
y = x = 1;
for (y = 1; y <= num_rows; y++) {
i = y;
for (x = 1; x <= num_cols; x++) {
if (i <= NF) {
line = sprintf("%s%-" col_width "s", line, $i);
}
i = i + num_rows;
}
print line; line = "";
}
}' | sed 's/ *$//'
2013-02-21 16:43:47 +01:00
}
2007-07-27 14:13:34 +00:00
show_list( ) {
2007-11-04 02:15:53 +00:00
suffix = _$1
shift
2015-09-14 16:34:50 -07:00
echo $* | sed s/$suffix //g | print_in_columns
2007-07-27 14:13:34 +00:00
exit 0
}
2012-05-09 04:29:53 +01:00
rand_list( ) {
IFS = ', '
set -- $*
unset IFS
for thing; do
comp = ${ thing % : * }
prob = ${ thing # $comp }
prob = ${ prob # : }
is_in ${ comp } $COMPONENT_LIST && eval comp = \$ $( toupper ${ comp %s } ) _LIST
echo " prob ${ prob :- 0 .5 } "
printf '%s\n' $comp
done
}
do_random( ) {
action = $1
shift
random_seed = $( awk " BEGIN { srand( $random_seed ); print srand() } " )
$action $( rand_list " $@ " | awk " BEGIN { srand( $random_seed ) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print } " )
}
2024-02-29 13:47:06 +01:00
# deprecated components (disabled by default)
disable sonic_encoder sonic_ls_encoder
2007-02-17 18:32:04 +00:00
for opt do
2007-11-23 11:09:28 +00:00
optval = " ${ opt #*= } "
case " $opt " in
2012-12-02 23:32:41 +01:00
--extra-ldflags= *)
add_ldflags $optval
2012-11-29 18:03:50 +00:00
; ;
2014-07-16 17:00:11 +02:00
--extra-ldexeflags= *)
add_ldexeflags $optval
; ;
2017-06-20 19:25:43 +02:00
--extra-ldsoflags= *)
add_ldsoflags $optval
; ;
2015-06-27 12:27:59 -04:00
--extra-ldlibflags= *)
2017-11-06 17:55:26 -03:00
warn "The --extra-ldlibflags option is only provided for compatibility and will be\n" \
"removed in the future. Use --extra-ldsoflags instead."
add_ldsoflags $optval
2015-06-27 12:27:59 -04:00
; ;
2012-12-02 23:32:41 +01:00
--extra-libs= *)
add_extralibs $optval
2012-11-29 18:03:50 +00:00
; ;
2012-12-02 23:32:41 +01:00
--disable-devices)
disable $INDEV_LIST $OUTDEV_LIST
2012-11-29 18:03:50 +00:00
; ;
2012-12-02 23:32:41 +01:00
--enable-debug= *)
debuglevel = " $optval "
2012-11-29 18:03:50 +00:00
; ;
--disable-programs)
disable $PROGRAM_LIST
; ;
--disable-everything)
2016-02-17 23:34:54 +01:00
map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2012-11-29 18:03:50 +00:00
; ;
2012-11-10 14:47:52 +01:00
--disable-all)
2016-02-17 23:34:54 +01:00
map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2012-11-10 14:47:52 +01:00
disable $LIBRARY_LIST $PROGRAM_LIST doc
2015-10-18 14:27:51 +02:00
enable avutil
2012-11-10 14:47:52 +01:00
; ;
2012-11-29 18:03:50 +00:00
--enable-random| --disable-random)
action = ${ opt %%-random }
do_random ${ action #-- } $COMPONENT_LIST
; ;
--enable-random= *| --disable-random= *)
action = ${ opt %%-random=* }
do_random ${ action #-- } $optval
; ;
2017-08-30 13:12:14 +02:00
--enable-sdl)
enable sdl2
; ;
2023-03-23 14:38:51 +01:00
--enable-lto*)
lto = -f${ opt #--enable- }
; ;
2012-11-29 18:03:50 +00:00
--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 }
2012-12-02 13:47:07 +01:00
list = $( filter " $name " $list )
[ " $list " = "" ] && warn " Option $opt did not match anything "
2019-01-28 01:49:46 +01:00
test $action = enable && warn_if_gets_disabled $list
2012-12-02 13:47:07 +01:00
$action $list
2012-11-29 18:03:50 +00:00
; ;
--enable-?*| --disable-?*)
eval $( echo " $opt " | sed 's/--/action=/;s/-/ option=/;s/-/_/g' )
if is_in $option $COMPONENT_LIST ; then
2016-02-17 23:34:54 +01:00
test $action = disable && action = unset
2012-11-29 18:03:50 +00:00
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
; ;
2016-11-06 18:33:05 +01:00
--quiet| -q) quiet = yes
; ;
2012-12-02 13:47:07 +01:00
--fatal-warnings) enable fatal_warnings
; ;
2017-04-21 23:58:32 +02:00
--libfuzzer= *)
libfuzzer_path = " $optval "
; ;
2012-11-29 18:03:50 +00:00
*)
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
; ;
2007-11-23 11:09:28 +00:00
esac
2007-02-17 18:32:04 +00:00
done
2015-06-02 22:55:52 +03:00
for e in $env ; do
2015-05-06 13:37:31 +02:00
eval " export $e "
done
2007-02-17 18:32:04 +00:00
2017-07-28 13:44:07 +02:00
if disabled autodetect; then
2017-08-30 12:26:01 +02:00
# Unless iconv is explicitely disabled by the user, we still want to probe
# for the iconv from the libc.
disabled iconv || enable libc_iconv
2017-07-28 13:44:07 +02:00
disable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
disable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
fi
2016-11-30 23:50:17 +01:00
# Mark specifically enabled, but normally autodetected libraries as requested.
for lib in $AUTODETECT_LIBS ; do
enabled $lib && request $lib
done
2017-07-28 13:39:00 +02:00
#TODO: switch to $AUTODETECT_LIBS when $THREADS_LIST is supported the same way
enable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
enable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
2017-07-28 12:58:39 +02:00
2008-05-15 23:34:43 +00:00
disabled logging && logfile = /dev/null
2017-09-24 18:46:47 +02:00
# command line configuration sanity checks
2017-09-24 11:52:08 +02:00
# we need to build at least one lib type
if ! enabled_any static shared; then
cat <<EOF
At least one library type must be built.
Specify --enable-static to build the static libraries or --enable-shared to
build the shared libraries as well. To only build the shared libraries specify
--disable-static in addition to --enable-shared.
EOF
exit 1
fi
2013-03-27 18:21:10 +01:00
die_license_disabled( ) {
enabled $1 || { enabled $v && die " $v is $1 and --enable- $1 is not specified. " ; }
}
2017-03-31 14:39:10 -03:00
die_license_disabled_gpl( ) {
enabled $1 || { enabled $v && die " $v is incompatible with the gpl and --enable- $1 is not specified. " ; }
}
map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST
map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST
2013-03-27 18:21:10 +01:00
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2018-02-05 13:53:49 +01:00
if enabled nonfree; then
license = "nonfree and unredistributable"
elif enabled gplv3; then
license = "GPL version 3 or later"
elif enabled lgplv3; then
license = "LGPL version 3 or later"
elif enabled gpl; then
license = "GPL version 2 or later"
else
license = "LGPL version 2.1 or later"
fi
2017-11-01 16:26:36 -03:00
enabled_all gnutls openssl &&
die "GnuTLS and OpenSSL must not be enabled at the same time."
2018-04-21 15:53:31 +02:00
enabled_all gnutls mbedtls &&
die "GnuTLS and mbedTLS must not be enabled at the same time."
enabled_all openssl mbedtls &&
die "OpenSSL and mbedTLS must not be enabled at the same time."
2015-10-05 03:41:41 +02:00
# Disable all the library-specific components if the library itself
# is disabled, see AVCODEC_LIST and following _LIST variables.
disable_components( ) {
2016-02-17 23:34:54 +01:00
disabled ${ 1 } && disable $(
2015-10-05 03:41:41 +02:00
eval components = " \$ $( toupper ${ 1 } ) _COMPONENTS "
map 'eval echo \${$(toupper ${v%s})_LIST}' $components
)
}
map 'disable_components $v' $LIBRARY_LIST
2011-03-17 17:01:10 +01:00
echo " # $0 $FFMPEG_CONFIGURATION " > $logfile
2008-05-15 23:34:43 +00:00
set >> $logfile
2013-05-05 16:21:57 +02:00
test -n " $valgrind " && toolchain = "valgrind-memcheck"
2018-08-18 10:34:15 +02:00
enabled ossfuzz && ! echo $CFLAGS | grep -q -- "-fsanitize=" && ! echo $CFLAGS | grep -q -- "-fcoverage-mapping" && {
2017-04-21 23:58:32 +02:00
add_cflags -fsanitize= address,undefined -fsanitize-coverage= trace-pc-guard,trace-cmp -fno-omit-frame-pointer
add_ldflags -fsanitize= address,undefined -fsanitize-coverage= trace-pc-guard,trace-cmp
}
2024-09-12 23:41:33 +02:00
add_sanitizer_flags( ) {
case " $1 " in
asan)
add_cflags -fsanitize= address
add_ldflags -fsanitize= address
; ;
lsan)
add_cflags -fsanitize= leak
add_ldflags -fsanitize= leak
; ;
msan)
add_cflags -fsanitize= memory -fsanitize-memory-track-origins
add_ldflags -fsanitize= memory
; ;
tsan)
add_cflags -fsanitize= thread
add_ldflags -fsanitize= thread
; ;
usan)
add_cflags -fsanitize= undefined
add_ldflags -fsanitize= undefined
; ;
?*)
die " Unknown sanitizer $1 "
; ;
esac
}
2012-09-16 22:06:53 +01:00
case " $toolchain " in
2024-09-12 23:41:33 +02:00
clang-*)
add_sanitizer_flags " ${ toolchain #clang- } "
cc_default = "clang"
cxx_default = "clang++"
2022-12-07 17:04:55 +01:00
; ;
2024-09-12 23:41:33 +02:00
gcc-*)
add_sanitizer_flags " ${ toolchain #gcc- } "
cc_default = "gcc"
cxx_default = "g++"
# In case of tsan with gcc, PIC has to be enabled
if [ " ${ toolchain #gcc- } " = "tsan" ] ; then
add_cflags -fPIC
add_ldflags -fPIC
fi
2014-02-19 20:20:39 +01:00
; ;
2016-02-06 17:31:14 +01:00
valgrind-*)
2013-05-04 10:25:41 +02:00
target_exec_default = "valgrind"
2016-02-06 17:31:14 +01:00
case " $toolchain " in
valgrind-massif)
2016-02-16 17:44:33 +00:00
target_exec_args = "--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc"
2016-02-06 17:31:14 +01:00
; ;
valgrind-memcheck)
2016-02-16 17:44:33 +00:00
target_exec_args = " --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions= $source_path /tests/fate-valgrind.supp "
2016-02-06 17:31:14 +01:00
; ;
esac
2013-05-04 10:25:41 +02:00
; ;
2012-09-16 22:06:53 +01:00
msvc)
2019-04-20 00:12:34 +02:00
cl_major_ver = $( cl.exe 2>& 1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p' )
2013-11-04 15:46:34 +02:00
if [ -z " $cl_major_ver " ] || [ $cl_major_ver -ge 18 ] ; then
2019-04-20 00:12:34 +02:00
cc_default = "cl.exe"
cxx_default = "cl.exe"
2013-11-04 15:46:34 +02:00
else
2018-05-15 00:53:26 +01:00
die "Unsupported MSVC version (2013 or newer required)"
2013-11-04 15:46:34 +02:00
fi
2015-07-24 09:38:04 +02:00
ld_default = " $source_path /compat/windows/mslink "
2022-08-07 16:31:51 +02:00
windres_default = " $source_path /compat/windows/mswindres "
2019-04-20 00:12:34 +02:00
nm_default = "dumpbin.exe -symbols"
ar_default = "lib.exe"
2021-01-23 13:52:41 +01:00
case " ${ arch :- $arch_default } " in
2017-10-13 11:10:27 +03:00
aarch64| arm64)
2019-04-20 00:12:34 +02:00
as_default = "armasm64.exe"
2017-10-13 11:10:27 +03:00
; ;
2015-07-24 23:23:29 +03:00
arm*)
2019-04-20 00:12:34 +02:00
as_default = "armasm.exe"
2015-07-24 23:23:29 +03:00
; ;
esac
2012-10-13 15:57:56 +03:00
target_os_default = "win32"
2013-11-14 11:58:37 +02:00
# Use a relative path for TMPDIR. This makes sure all the
# ffconf temp files are written with a relative path, avoiding
# issues with msys/win32 path conversion for MSVC parameters
# such as -Fo<file> or -out:<file>.
TMPDIR = .
2012-09-16 22:06:53 +01:00
; ;
2013-05-25 06:07:42 -04:00
icl)
2013-11-14 11:58:37 +02:00
cc_default = "icl"
ld_default = "xilink"
2013-05-25 06:07:42 -04:00
nm_default = "dumpbin -symbols"
ar_default = "xilib"
target_os_default = "win32"
2013-11-14 11:58:37 +02:00
TMPDIR = .
2013-05-25 06:07:42 -04:00
; ;
2013-03-23 08:17:24 +01:00
gcov)
add_cflags -fprofile-arcs -ftest-coverage
add_ldflags -fprofile-arcs -ftest-coverage
; ;
2016-03-06 22:52:04 +01:00
llvm-cov)
add_cflags -fprofile-arcs -ftest-coverage
add_ldflags --coverage
; ;
2013-10-28 13:22:52 +01:00
hardened)
2014-07-30 05:09:47 -07:00
add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE= 2
add_cflags -fno-strict-overflow -fstack-protector-all
add_ldflags -Wl,-z,relro -Wl,-z,now
2016-10-04 12:21:41 +02:00
add_cflags -fPIE
add_ldexeflags -fPIE -pie
2013-10-28 13:22:52 +01:00
; ;
2012-09-16 22:06:53 +01:00
?*)
die " Unknown toolchain $toolchain "
; ;
esac
2017-09-24 18:46:47 +02:00
if test -n " $cross_prefix " ; then
2015-02-26 21:54:55 +01:00
test -n " $arch " && test -n " $target_os " ||
2016-12-02 13:11:43 +01:00
die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
2017-09-24 18:46:47 +02:00
enable cross_compile
2015-02-26 21:54:55 +01:00
fi
2018-12-07 00:11:17 +01:00
set_default target_os
if test " $target_os " = android; then
cc_default = "clang"
fi
2014-04-07 00:47:42 +02:00
ar_default = " ${ cross_prefix } ${ ar_default } "
cc_default = " ${ cross_prefix } ${ cc_default } "
2015-02-26 19:36:28 +01:00
cxx_default = " ${ cross_prefix } ${ cxx_default } "
2014-04-07 00:47:42 +02:00
nm_default = " ${ cross_prefix } ${ nm_default } "
pkg_config_default = " ${ cross_prefix } ${ pkg_config_default } "
2022-02-14 15:00:07 +02:00
ranlib_default = " ${ cross_prefix } ${ ranlib_default } "
2015-02-26 19:36:28 +01:00
strip_default = " ${ cross_prefix } ${ strip_default } "
windres_default = " ${ cross_prefix } ${ windres_default } "
2014-04-07 00:47:42 +02:00
sysinclude_default = " ${ sysroot } /usr/include "
2019-07-30 02:51:42 -05:00
if enabled cuda_sdk; then
warn "Option --enable-cuda-sdk is deprecated. Use --enable-cuda-nvcc instead."
enable cuda_nvcc
fi
if enabled cuda_nvcc; then
nvcc_default = "nvcc"
nvccflags_default = "-gencode arch=compute_30,code=sm_30 -O2"
else
nvcc_default = "clang"
nvccflags_default = "--cuda-gpu-arch=sm_30 -O2"
NVCC_C = ""
fi
2021-06-06 21:31:00 +02:00
set_default nvcc
if enabled cuda_nvcc; then
if $nvcc $nvccflags_default 2>& 1 | grep -qi unsupported; then
nvccflags_default = "-gencode arch=compute_60,code=sm_60 -O2"
fi
fi
2014-07-07 15:24:48 -07:00
set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
2024-03-19 15:40:14 -03:00
target_exec x86asmexe metalcc metallib stdc stdcxx
2008-11-23 12:36:34 +00:00
enabled cross_compile || host_cc_default = $cc
set_default host_cc
2008-10-21 00:57:20 +00:00
2022-02-14 15:00:07 +02:00
if ${ ranlib } 2>& 1 | grep -q "\-D " ; then
ranlib = " ${ ranlib } -D "
fi
2014-12-02 13:54:46 +01:00
pkg_config_fail_message = ""
2011-05-05 16:45:12 +01:00
if ! $pkg_config --version >/dev/null 2>& 1; then
warn " $pkg_config not found, library detection may fail. "
pkg_config = false
2014-12-02 13:54:46 +01:00
elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags ; then
pkg_config_fail_message = "
Note: When building a static binary, add --pkg-config-flags=\"--static\"."
2011-05-05 16:45:12 +01:00
fi
2014-07-07 15:24:48 -07:00
if test $doxygen != $doxygen_default && \
! $doxygen --version >/dev/null 2>& 1; then
warn " Specified doxygen \" $doxygen \" not found, API documentation will fail to build. "
fi
2009-03-08 22:11:24 +00:00
exesuf( ) {
case $1 in
2021-06-12 14:29:55 +02:00
mingw32*| mingw64*| msys*| win32| win64| cygwin*| *-dos| freedos| opendos| os/2*| symbian) echo .exe ; ;
2009-03-08 22:11:24 +00:00
esac
}
EXESUF = $( exesuf $target_os )
HOSTEXESUF = $( exesuf $host_os )
2009-02-05 00:03:54 +00:00
2008-05-13 17:25:04 +00:00
# set temporary file name
2008-12-29 12:55:24 +00:00
: ${ TMPDIR : = $TEMPDIR }
2008-12-29 12:55:28 +00:00
: ${ TMPDIR : = $TMP }
2008-12-29 12:55:24 +00:00
: ${ TMPDIR : =/tmp }
2008-05-13 17:25:04 +00:00
2013-10-05 13:48:22 +02:00
if [ -n " $tempprefix " ] ; then
mktemp( ) {
2017-05-20 21:29:58 -03:00
tmpname = " $tempprefix . ${ HOSTNAME } . ${ UID } "
echo " $tmpname "
mkdir " $tmpname "
2013-10-05 13:48:22 +02:00
}
2018-03-15 18:22:51 -03:00
elif ! test_cmd mktemp -u XXXXXX; then
2009-03-03 08:53:55 +00:00
# simple replacement for missing mktemp
# NOT SAFE FOR GENERAL USE
mktemp( ) {
2014-09-21 11:38:25 +02:00
tmpname = " ${ 2 %%XXX* } . ${ HOSTNAME } . ${ UID } . $$ "
echo " $tmpname "
mkdir " $tmpname "
2009-03-03 08:53:55 +00:00
}
fi
2017-05-20 16:44:58 +02:00
FFTMPDIR = $( mktemp -d " ${ TMPDIR } /ffconf.XXXXXXXX " 2> /dev/null) ||
2014-09-21 11:38:25 +02:00
die " Unable to create temporary directory in $TMPDIR . "
2009-03-03 08:53:55 +00:00
tmpfile( ) {
2017-05-20 16:44:58 +02:00
tmp = " ${ FFTMPDIR } /test " $2
2014-09-21 11:38:25 +02:00
( set -C; exec > $tmp ) 2> /dev/null ||
2017-05-20 16:44:58 +02:00
die " Unable to create temporary file in $FFTMPDIR . "
2009-03-03 08:53:55 +00:00
eval $1 = $tmp
}
2017-05-20 16:44:58 +02:00
trap 'rm -rf -- "$FFTMPDIR"' EXIT
2014-09-21 11:48:21 +02:00
trap 'exit 2' INT
2009-03-03 08:53:55 +00:00
2010-09-03 21:27:19 +00:00
tmpfile TMPASM .asm
2011-09-12 17:40:29 +02:00
tmpfile TMPC .c
2011-12-14 23:58:10 +01:00
tmpfile TMPCPP .cpp
2011-09-12 17:40:29 +02:00
tmpfile TMPE $EXESUF
tmpfile TMPH .h
2014-04-05 13:30:27 +02:00
tmpfile TMPM .m
2019-02-20 19:57:49 -08:00
tmpfile TMPCU .cu
2011-09-12 17:40:29 +02:00
tmpfile TMPO .o
tmpfile TMPS .S
tmpfile TMPSH .sh
tmpfile TMPV .ver
2009-03-03 08:53:55 +00:00
unset -f mktemp
2008-05-13 17:25:04 +00:00
2010-10-06 15:54:35 +01:00
chmod +x $TMPE
2009-02-04 21:28:54 +00:00
# make sure we can execute files in $TMPDIR
cat > $TMPSH 2>> $logfile <<EOF
2024-04-09 15:31:13 +02:00
#!/bin/sh
2009-02-04 21:28:54 +00:00
EOF
chmod +x $TMPSH >> $logfile 2>& 1
if ! $TMPSH >> $logfile 2>& 1; then
cat <<EOF
Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
variable to another directory and make sure that it is not mounted noexec.
EOF
die "Sanity test failed."
fi
2014-08-10 14:40:09 +03:00
armasm_flags( ) {
for flag; do
case $flag in
# Filter out MSVC cl.exe options from cflags that shouldn't
# be passed to gas-preprocessor
-M[ TD] *) ; ;
*) echo $flag ; ;
esac
done
}
2013-09-12 20:17:15 +02:00
cparser_flags( ) {
for flag; do
case $flag in
-Wno-switch) echo -Wno-switch-enum ; ;
-Wno-format-zero-length) ; ;
-Wdisabled-optimization) ; ;
-Wno-pointer-sign) echo -Wno-other ; ;
*) echo $flag ; ;
esac
done
}
2013-05-30 20:11:20 +00:00
msvc_common_flags( ) {
2012-06-22 12:24:59 +03:00
for flag; do
case $flag in
2013-05-30 20:11:20 +00:00
# In addition to specifying certain flags under the compiler
# specific filters, they must be specified here as well or else the
# generic catch all at the bottom will print the original flag.
-Wall) ; ;
2016-12-14 20:35:18 +01:00
-Wextra) ; ;
2024-02-03 17:44:43 +01:00
-std= c*) echo /std:${ flag #-std= } ; ;
2013-05-30 20:11:20 +00:00
# Common flags
2013-06-24 21:10:11 +00:00
-fomit-frame-pointer) ; ;
2012-06-22 12:24:59 +03:00
-g) echo -Z7 ; ;
-fno-math-errno) ; ;
-fno-common) ; ;
-fno-signed-zeros) ; ;
2012-10-30 22:57:37 +01:00
-fPIC) ; ;
2013-05-28 23:39:21 +03:00
-mthumb) ; ;
-march= *) ; ;
2023-12-21 23:43:11 +02:00
-mfp16-format= *) ; ;
2012-06-22 12:24:59 +03:00
-lz) echo zlib.lib ; ;
2016-01-27 22:41:43 +01:00
-lx264) echo libx264.lib ; ;
2017-04-13 02:38:02 -07:00
-lstdc++) ; ;
2012-06-22 12:24:59 +03:00
-l*) echo ${ flag #-l } .lib ; ;
2015-07-24 13:16:43 +02:00
-LARGEADDRESSAWARE) echo $flag ; ;
2015-01-02 23:29:27 +02:00
-L*) echo -libpath:${ flag #-L } ; ;
2020-04-01 16:57:40 +02:00
-Wl,*) ; ;
2012-06-22 12:24:59 +03:00
*) echo $flag ; ;
esac
done
}
2013-05-30 20:11:20 +00:00
msvc_flags( ) {
msvc_common_flags " $@ "
for flag; do
case $flag in
2016-12-14 20:35:18 +01:00
-Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
-wd4554 ; ;
-Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2013-05-30 20:11:20 +00:00
-wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
-wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2015-03-16 15:31:57 +01:00
-wd4307 \
2016-11-22 08:18:38 +01:00
-wd4273 -wd4554 -wd4701 -wd4703 ; ;
2013-05-30 20:11:20 +00:00
esac
done
}
icl_flags( ) {
msvc_common_flags " $@ "
for flag; do
case $flag in
# Despite what Intel's documentation says -Wall, which is supported
# on Windows, does enable remarks so disable them here.
-Wall) echo $flag -Qdiag-disable:remark ; ;
2024-03-19 15:40:14 -03:00
-std= $stdc ) echo -Qstd= $stdc ; ;
2023-03-23 14:38:51 +01:00
-flto*) echo -ipo ; ;
2013-05-30 20:11:20 +00:00
esac
done
}
2014-05-04 17:16:26 +02:00
icc_flags( ) {
for flag; do
case $flag in
2023-03-23 14:38:51 +01:00
-flto*) echo -ipo ; ;
2014-05-04 17:16:26 +02:00
*) echo $flag ; ;
esac
done
}
2012-07-18 20:27:09 +01:00
suncc_flags( ) {
for flag; do
case $flag in
-march= *| -mcpu= *)
case " ${ flag #*= } " in
native) echo -xtarget= native ; ;
v9| niagara) echo -xarch= sparc ; ;
ultrasparc) echo -xarch= sparcvis ; ;
ultrasparc3| niagara2) echo -xarch= sparcvis2 ; ;
i586| pentium) echo -xchip= pentium ; ;
i686| pentiumpro| pentium2) echo -xtarget= pentium_pro ; ;
pentium3*| c3-2) echo -xtarget= pentium3 ; ;
pentium-m) echo -xarch= sse2 -xchip= pentium3 ; ;
pentium4*) echo -xtarget= pentium4 ; ;
prescott| nocona) echo -xarch= sse3 -xchip= pentium4 ; ;
*-sse3) echo -xarch= sse3 ; ;
core2) echo -xarch= ssse3 -xchip= core2 ; ;
2014-04-27 22:01:34 -03:00
bonnell) echo -xarch= ssse3 ; ;
corei7| nehalem) echo -xtarget= nehalem ; ;
westmere) echo -xtarget= westmere ; ;
silvermont) echo -xarch= sse4_2 ; ;
corei7-avx| sandybridge) echo -xtarget= sandybridge ; ;
2016-07-17 19:14:12 -03:00
core-avx*| ivybridge| haswell| broadwell| skylake*| knl)
2014-04-27 22:01:34 -03:00
echo -xarch= avx ; ;
2013-06-24 10:40:15 +02:00
amdfam10| barcelona) echo -xtarget= barcelona ; ;
2014-04-27 22:01:34 -03:00
btver1) echo -xarch= amdsse4a ; ;
2016-07-17 19:14:12 -03:00
btver2| bdver*| znver*) echo -xarch= avx ; ;
2013-06-20 13:42:21 +02:00
athlon-4| athlon-[ mx] p) echo -xarch= ssea ; ;
2012-07-18 20:27:09 +01:00
k8| opteron| athlon64| athlon-fx)
2013-06-20 13:42:21 +02:00
echo -xarch= sse2a ; ;
athlon*) echo -xarch= pentium_proa ; ;
2012-07-18 20:27:09 +01:00
esac
; ;
2024-03-19 15:40:14 -03:00
-std= $stdc ) echo -x$stdc ; ;
2012-07-18 20:27:09 +01:00
-fomit-frame-pointer) echo -xregs= frameptr ; ;
-fPIC) echo -KPIC -xcode= pic32 ; ;
-W*,*) echo $flag ; ;
2013-01-14 12:51:59 -05:00
-f*-*| -W*| -mimpure-text) ; ;
-shared) echo -G ; ;
2012-07-18 20:27:09 +01:00
*) echo $flag ; ;
esac
done
}
2012-07-20 13:43:07 +01:00
probe_cc( ) {
pfx = $1
_cc = $2
2015-08-26 09:36:25 -04:00
first = $3
2012-07-20 13:43:07 +01:00
2012-08-28 16:06:56 +01:00
unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
unset _ld_o _ldflags _ld_lib _ld_path
2012-07-20 22:22:41 +01:00
unset _depflags _DEPCMD _DEPFLAGS
2012-07-20 13:43:07 +01:00
_flags_filter = echo
2013-11-08 23:55:06 +01:00
if $_cc --version 2>& 1 | grep -q '^GNU assembler' ; then
true # no-op to avoid reading stdin in following checks
elif $_cc -v 2>& 1 | grep -q '^gcc.*LLVM' ; then
2012-07-20 13:43:07 +01:00
_type = llvm_gcc
2015-08-03 12:20:59 +02:00
gcc_extra_ver = $( expr " $( $_cc --version 2>/dev/null | head -n1) " : '.*\((.*)\)' )
_ident = " llvm-gcc $( $_cc -dumpversion 2>/dev/null) $gcc_extra_ver "
2012-07-20 13:43:07 +01:00
_depflags = '-MMD -MF $(@:.o=.d) -MT $@'
_cflags_speed = '-O3'
_cflags_size = '-Os'
elif $_cc -v 2>& 1 | grep -qi ^gcc; then
_type = gcc
gcc_version = $( $_cc --version | head -n1)
gcc_basever = $( $_cc -dumpversion)
gcc_pkg_ver = $( expr " $gcc_version " : '[^ ]* \(([^)]*)\)' )
gcc_ext_ver = $( expr " $gcc_version " : " .* $gcc_pkg_ver $gcc_basever \\(.*\\) " )
_ident = $( cleanws " gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver " )
2015-08-24 15:38:18 -04:00
case $gcc_basever in
2015-12-29 19:01:39 -08:00
2) ; ;
2.*) ; ;
2015-10-11 09:37:42 -04:00
*) _depflags = '-MMD -MF $(@:.o=.d) -MT $@' ; ;
2015-08-24 15:38:18 -04:00
esac
2015-08-26 09:36:25 -04:00
if [ " $first " = true ] ; then
case $gcc_basever in
4.2*)
warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ; ;
esac
fi
2012-07-20 13:43:07 +01:00
_cflags_speed = '-O3'
_cflags_size = '-Os'
2013-02-25 17:05:22 +01:00
elif $_cc --version 2>/dev/null | grep -q ^icc; then
2012-07-20 13:43:07 +01:00
_type = icc
_ident = $( $_cc --version | head -n1)
_depflags = '-MMD'
_cflags_speed = '-O3'
_cflags_size = '-Os'
_cflags_noopt = '-O1'
2014-05-04 17:16:26 +02:00
_flags_filter = icc_flags
2012-07-20 13:43:07 +01:00
elif $_cc -v 2>& 1 | grep -q xlc; then
_type = xlc
_ident = $( $_cc -qversion 2>/dev/null | head -n1)
_cflags_speed = '-O5'
_cflags_size = '-O5 -qcompact'
2014-04-18 23:40:59 +03:00
elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler" ; then
2012-07-20 13:43:07 +01:00
test -d " $sysroot " || die "No valid sysroot specified."
_type = armcc
2014-07-28 11:51:29 +03:00
_ident = $( $_cc --vsn | grep -i build | head -n1 | sed 's/.*: //' )
2012-07-20 13:43:07 +01:00
armcc_conf = " $PWD /armcc.conf "
$_cc --arm_linux_configure \
--arm_linux_config_file= " $armcc_conf " \
--configure_sysroot= " $sysroot " \
--configure_cpp_headers= " $sysinclude " >>$logfile 2>& 1 ||
die "Error creating armcc configuration file."
$_cc --vsn | grep -q RVCT && armcc_opt = rvct || armcc_opt = armcc
_flags = " --arm_linux_config_file= $armcc_conf --translate_gcc "
as_default = " ${ cross_prefix } gcc "
_depflags = '-MMD'
_cflags_speed = '-O3'
_cflags_size = '-Os'
2018-02-01 11:52:24 +01:00
elif $_cc -v 2>& 1 | grep -q clang && ! $_cc -? > /dev/null 2>& 1; then
2012-07-20 13:43:07 +01:00
_type = clang
2015-08-03 12:20:59 +02:00
_ident = $( $_cc --version 2>/dev/null | head -n1)
2014-01-25 17:34:19 +01:00
_depflags = '-MMD -MF $(@:.o=.d) -MT $@'
2012-07-20 13:43:07 +01:00
_cflags_speed = '-O3'
2017-03-10 04:02:13 +00:00
_cflags_size = '-Oz'
2012-07-20 13:43:07 +01:00
elif $_cc -V 2>& 1 | grep -q Sun; then
_type = suncc
_ident = $( $_cc -V 2>& 1 | head -n1 | cut -d' ' -f 2-)
_DEPCMD = '$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2024-03-19 15:40:14 -03:00
_DEPFLAGS = '-xM1 -x$stdc'
_ldflags = '-std=$stdc'
2012-07-20 13:43:07 +01:00
_cflags_speed = '-O5'
_cflags_size = '-O5 -xspace'
_flags_filter = suncc_flags
elif $_cc -v 2>& 1 | grep -q 'PathScale\|Path64' ; then
_type = pathscale
_ident = $( $_cc -v 2>& 1 | head -n1 | tr -d :)
_depflags = '-MMD -MF $(@:.o=.d) -MT $@'
_cflags_speed = '-O2'
_cflags_size = '-Os'
_flags_filter = 'filter_out -Wdisabled-optimization'
elif $_cc -v 2>& 1 | grep -q Open64; then
_type = open64
_ident = $( $_cc -v 2>& 1 | head -n1 | tr -d :)
_depflags = '-MMD -MF $(@:.o=.d) -MT $@'
_cflags_speed = '-O2'
_cflags_size = '-Os'
_flags_filter = 'filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2014-08-09 22:25:44 +03:00
elif $_cc 2>& 1 | grep -q 'Microsoft.*ARM.*Assembler' ; then
_type = armasm
_ident = $( $_cc | head -n1)
# 4509: "This form of conditional instruction is deprecated"
_flags = "-nologo -ignore 4509"
2014-08-10 14:40:09 +03:00
_flags_filter = armasm_flags
2013-05-25 06:07:42 -04:00
elif $_cc 2>& 1 | grep -q Intel; then
_type = icl
2014-06-05 22:59:47 +03:00
_ident = $( $_cc 2>& 1 | head -n1)
2013-05-25 06:07:42 -04:00
_depflags = '-QMMD -QMF$(@:.o=.d) -QMT$@'
2013-06-20 13:42:21 +02:00
# Not only is O3 broken on 13.x+ but it is slower on all previous
# versions (tested) as well.
2013-05-25 06:07:42 -04:00
_cflags_speed = "-O2"
_cflags_size = "-O1 -Oi" # -O1 without -Oi miscompiles stuff
if $_cc 2>& 1 | grep -q Linker; then
2013-11-14 11:58:37 +02:00
_ld_o = '-out:$@'
2013-05-25 06:07:42 -04:00
else
_ld_o = '-Fe$@'
fi
2013-11-14 11:58:37 +02:00
_cc_o = '-Fo$@'
2013-05-25 06:07:42 -04:00
_cc_e = '-P'
2013-05-30 20:11:20 +00:00
_flags_filter = icl_flags
2013-05-25 06:07:42 -04:00
_ld_lib = 'lib%.a'
_ld_path = '-libpath:'
2013-06-20 13:42:21 +02:00
# -Qdiag-error to make icl error when seeing certain unknown arguments
2013-05-30 20:11:21 +00:00
_flags = '-nologo -Qdiag-error:4044,10157'
2014-05-11 15:07:13 +10:00
# -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
2013-06-20 13:42:21 +02:00
# with MSVC which enables it by default.
2017-03-15 12:44:35 +01:00
_cflags = '-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
2014-11-21 05:55:48 +11:00
disable stripping
2016-07-22 10:19:52 +03:00
elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker' ; then
# lld can emulate multiple different linkers; in ms link.exe mode,
# the -? parameter gives the help output which contains an identifyable
# string, while it gives an error in other modes.
_type = lld-link
# The link.exe mode doesn't have a switch for getting the version,
# but we can force it back to gnu mode and get the version from there.
2016-11-03 14:14:12 +02:00
_ident = $( $_cc -flavor gnu --version 2>/dev/null)
2016-07-22 10:19:52 +03:00
_ld_o = '-out:$@'
_flags_filter = msvc_flags
_ld_lib = 'lib%.a'
_ld_path = '-libpath:'
2025-06-14 03:03:15 +02:00
elif $_cc -nologo- 2>& 1 | grep -q ^Microsoft || { $_cc -v 2>& 1 | grep -q clang && $_cc -? > /dev/null 2>& 1; } ; then
2014-11-20 18:34:37 +11:00
_type = msvc
2025-06-14 03:03:15 +02:00
if $_cc -nologo- 2>& 1 | grep -q ^Microsoft; then
2025-06-21 11:13:22 +02:00
# Depending on the tool (cl.exe or link.exe), the version number
# is printed on the first line of stderr or stdout
_ident = $( $_cc 2>& 1 | grep ^Microsoft | head -n1 | tr -d '\r' )
2020-03-26 00:00:10 +01:00
else
_ident = $( $_cc --version 2>/dev/null | head -n1 | tr -d '\r' )
fi
2024-04-25 23:34:51 +02:00
if [ -x " $( command -v wslpath) " ] ; then
2024-05-01 19:40:00 +02:00
_DEPCMD = '$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk ' \' '/including/ { sub(/^.*file: */, ""); if (!match($$0, / /)) { print $$0 } }' \' ' | xargs -r -d\\n -n1 wslpath -u | awk ' \' 'BEGIN { printf "%s:", "$@" }; { sub(/\r/,""); printf " %s", $$0 }; END { print "" }' \' ' > $(@:.o=.d)'
2024-04-25 23:34:51 +02:00
else
_DEPCMD = '$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk ' \' '/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }' \' ' > $(@:.o=.d)'
fi
2014-11-20 18:34:37 +11:00
_DEPFLAGS = '$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
_cflags_speed = "-O2"
_cflags_size = "-O1"
2017-04-26 16:39:37 +02:00
_cflags_noopt = "-O1"
2015-07-24 00:44:58 +02:00
if $_cc -nologo- 2>& 1 | grep -q Linker; then
2014-11-20 18:34:37 +11:00
_ld_o = '-out:$@'
else
_ld_o = '-Fe$@'
fi
_cc_o = '-Fo$@'
_cc_e = '-P -Fi$@'
_flags_filter = msvc_flags
_ld_lib = 'lib%.a'
_ld_path = '-libpath:'
_flags = '-nologo'
disable stripping
2013-09-12 20:17:15 +02:00
elif $_cc --version 2>/dev/null | grep -q ^cparser; then
_type = cparser
_ident = $( $_cc --version | head -n1)
_depflags = '-MMD'
_cflags_speed = '-O4'
_cflags_size = '-O2'
_flags_filter = cparser_flags
2009-08-10 17:25:46 +00:00
fi
2012-07-20 13:43:07 +01:00
eval ${ pfx } _type = \$ _type
eval ${ pfx } _ident = \$ _ident
}
set_ccvars( ) {
2012-07-20 23:43:27 +01:00
eval ${ 1 } _C = \$ { _cc_c-\$ { ${ 1 } _C} }
2012-07-20 22:22:41 +01:00
eval ${ 1 } _E = \$ { _cc_e-\$ { ${ 1 } _E} }
2012-07-20 13:43:07 +01:00
eval ${ 1 } _O = \$ { _cc_o-\$ { ${ 1 } _O} }
if [ -n " $_depflags " ] ; then
eval ${ 1 } _DEPFLAGS = \$ _depflags
else
eval ${ 1 } DEP = \$ { _DEPCMD:-\$ DEPCMD}
eval ${ 1 } DEP_FLAGS = \$ { _DEPFLAGS:-\$ DEPFLAGS}
eval DEP${ 1 } FLAGS = \$ _flags
fi
}
2015-08-26 09:36:25 -04:00
probe_cc cc " $cc " "true"
2012-07-20 13:43:07 +01:00
cflags_filter = $_flags_filter
cflags_speed = $_cflags_speed
cflags_size = $_cflags_size
cflags_noopt = $_cflags_noopt
add_cflags $_flags $_cflags
cc_ldflags = $_ldflags
set_ccvars CC
2017-04-13 02:38:02 -07:00
set_ccvars CXX
2012-07-20 13:43:07 +01:00
probe_cc hostcc " $host_cc "
host_cflags_filter = $_flags_filter
2017-01-19 11:36:52 +01:00
host_cflags_speed = $_cflags_speed
2012-07-20 13:43:07 +01:00
add_host_cflags $_flags $_cflags
set_ccvars HOSTCC
2009-02-21 21:07:32 +00:00
2010-06-24 20:49:39 +00:00
test -n " $cc_type " && enable $cc_type ||
warn " Unknown C compiler $cc , unable to select optimal CFLAGS "
2009-02-21 21:07:32 +00:00
2009-07-12 13:29:55 +00:00
: ${ as_default : = $cc }
2015-11-23 17:08:49 -05:00
: ${ objcc_default : = $cc }
2009-07-12 13:29:43 +00:00
: ${ dep_cc_default : = $cc }
2009-07-12 13:29:40 +00:00
: ${ ld_default : = $cc }
2012-08-28 13:02:35 +01:00
: ${ host_ld_default : = $host_cc }
2025-03-21 13:10:40 +05:30
set_default ar as objcc dep_cc ld ln_s host_ld windres response_files
2009-03-09 22:39:49 +00:00
2012-07-20 13:43:07 +01:00
probe_cc as " $as "
asflags_filter = $_flags_filter
add_asflags $_flags $_cflags
set_ccvars AS
2015-11-23 17:08:49 -05:00
probe_cc objcc " $objcc "
objcflags_filter = $_flags_filter
add_objcflags $_flags $_cflags
set_ccvars OBJC
2012-07-20 13:43:07 +01:00
probe_cc ld " $ld "
ldflags_filter = $_flags_filter
add_ldflags $_flags $_ldflags
test " $cc_type " != " $ld_type " && add_ldflags $cc_ldflags
2012-08-28 12:50:09 +01:00
LD_O = ${ _ld_o - $LD_O }
2012-08-28 16:06:56 +01:00
LD_LIB = ${ _ld_lib - $LD_LIB }
LD_PATH = ${ _ld_path - $LD_PATH }
2012-07-20 13:43:07 +01:00
2012-08-28 13:02:35 +01:00
probe_cc hostld " $host_ld "
host_ldflags_filter = $_flags_filter
add_host_ldflags $_flags $_ldflags
HOSTLD_O = ${ _ld_o - $HOSTLD_O }
2012-07-20 13:43:07 +01:00
if [ -z " $CC_DEPFLAGS " ] && [ " $dep_cc " != " $cc " ] ; then
probe_cc depcc " $dep_cc "
CCDEP = ${ _DEPCMD :- $DEPCMD }
CCDEP_FLAGS = ${ _DEPFLAGS : = $DEPFLAGS }
DEPCCFLAGS = $_flags
fi
2009-08-08 18:27:27 +00:00
2025-06-14 03:03:15 +02:00
if $ar 2>& 1 | grep -q ^Microsoft; then
2012-09-17 23:56:32 +01:00
arflags = "-nologo"
ar_o = '-out:$@'
2015-01-26 23:50:29 +01:00
elif $ar 2>& 1 | grep -q "\[D\] " ; then
arflags = "rcD"
ar_o = '$@'
2012-09-17 23:56:32 +01:00
else
2015-01-26 23:02:01 +01:00
arflags = "rc"
2012-09-17 23:56:32 +01:00
ar_o = '$@'
fi
2009-07-12 13:29:51 +00:00
add_cflags $extra_cflags
2011-08-31 04:11:25 +05:30
add_cxxflags $extra_cxxflags
2015-11-23 17:08:49 -05:00
add_objcflags $extra_objcflags
2009-07-12 13:29:53 +00:00
add_asflags $extra_cflags
2009-07-12 13:29:51 +00:00
2009-02-21 21:07:37 +00:00
if test -n " $sysroot " ; then
case " $cc_type " in
2011-02-27 23:34:38 +00:00
gcc| llvm_gcc| clang)
2009-07-12 13:29:35 +00:00
add_cppflags --sysroot= " $sysroot "
2009-02-21 21:07:37 +00:00
add_ldflags --sysroot= " $sysroot "
; ;
esac
fi
2009-08-06 15:45:19 +00:00
if test " $cpu " = host; then
2013-06-20 13:42:21 +02:00
enabled cross_compile &&
2020-04-01 00:07:55 -04:00
warn "--cpu=host makes no sense when cross-compiling."
2009-08-06 15:45:19 +00:00
case " $cc_type " in
2010-09-02 21:41:07 +00:00
gcc| llvm_gcc)
2009-08-06 15:45:19 +00:00
check_native( ) {
$cc $1 = native -v -c -o $TMPO $TMPC >$TMPE 2>& 1 || return
2011-07-10 16:17:55 +01:00
sed -n " /cc1.* $1 =/{
2010-01-22 03:14:19 +00:00
s/.* $1 =\\([^ ]*\\).*/\\1/
p
q
} " $TMPE
2009-08-06 15:45:19 +00:00
}
cpu = $( check_native -march || check_native -mcpu)
; ;
2015-12-14 18:11:00 +03:00
clang)
check_native( ) {
$cc $1 = native -v -c -o $TMPO $TMPC >$TMPE 2>& 1 || return
sed -n "/cc1.*-target-cpu /{
s/.*-target-cpu \\([^ ]*\\).*/\\1/
p
q
}" $TMPE
}
cpu = $( check_native -march)
; ;
2009-08-06 15:45:19 +00:00
esac
2013-06-20 13:42:21 +02:00
test " ${ cpu :- host } " = host &&
die " --cpu=host not supported with compiler $cc "
2009-08-06 15:45:19 +00:00
fi
2010-01-18 21:05:01 +00:00
# Deal with common $arch aliases
case " $arch " in
2012-11-16 21:02:53 +00:00
aarch64| arm64)
arch = "aarch64"
; ;
2013-07-25 10:52:15 +02:00
arm*| iPad*| iPhone*)
2010-01-18 21:05:01 +00:00
arch = "arm"
; ;
2025-05-13 09:11:34 +08:00
loongarch*| loong64)
2021-12-01 11:52:19 +08:00
arch = "loongarch"
; ;
2012-10-23 23:34:35 +01:00
mips*| IP*)
2016-01-18 17:03:28 +01:00
case " $arch " in
*el)
add_cppflags -EL
add_ldflags -EL
; ;
*eb)
add_cppflags -EB
add_ldflags -EB
; ;
esac
2010-01-18 21:05:01 +00:00
arch = "mips"
; ;
2012-10-24 00:21:15 +01:00
parisc*| hppa*)
2010-01-18 21:05:01 +00:00
arch = "parisc"
; ;
2012-10-23 23:39:40 +01:00
"Power Macintosh" | ppc*| powerpc*)
2010-01-18 21:05:01 +00:00
arch = "ppc"
; ;
2021-07-25 18:31:27 -04:00
riscv*)
arch = "riscv"
; ;
2010-01-18 21:05:01 +00:00
s390| s390x)
arch = "s390"
; ;
2016-08-14 18:23:40 +00:00
sun4*| sparc*)
2010-01-18 21:05:01 +00:00
arch = "sparc"
; ;
2012-10-16 18:21:06 +00:00
tilegx| tile-gx)
arch = "tilegx"
; ;
2024-11-20 20:44:59 +08:00
wasm*)
arch = "wasm"
; ;
2014-05-26 18:07:55 +02:00
i[ 3-6] 86*| i86pc| BePC| x86pc| x86_64| x86_32| amd64)
2010-01-18 21:05:01 +00:00
arch = "x86"
; ;
esac
2010-06-24 20:49:39 +00:00
is_in $arch $ARCH_LIST || warn " unknown architecture $arch "
2010-01-18 21:05:05 +00:00
enable $arch
2010-01-18 21:05:01 +00:00
2009-07-17 08:21:41 +00:00
# Add processor-specific flags
2012-12-03 19:21:42 +00:00
if enabled aarch64; then
2010-01-18 21:05:05 +00:00
2010-01-18 21:05:08 +00:00
case $cpu in
2012-11-18 15:22:04 +00:00
armv*)
2010-01-18 21:05:08 +00:00
cpuflags = " -march= $cpu "
; ;
2012-11-18 15:22:04 +00:00
*)
cpuflags = " -mcpu= $cpu "
2010-01-18 21:05:08 +00:00
; ;
esac
2010-01-18 21:05:05 +00:00
elif enabled arm; then
2012-11-30 21:14:25 +00:00
check_arm_arch( ) {
2018-02-04 20:21:57 +01:00
test_cpp_condition stddef.h \
2012-11-30 21:14:25 +00:00
" defined __ARM_ARCH_ ${ 1 } __ || defined __TARGET_ARCH_ ${ 2 :- $1 } " \
$cpuflags
}
probe_arm_arch( ) {
2016-04-04 20:16:54 +02:00
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
2017-12-15 15:05:13 +08:00
elif check_arm_arch 6KZ; then echo armv6zk
2016-04-04 20:16:54 +02:00
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 7S; 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
2012-11-30 21:14:25 +00:00
fi
}
2010-01-18 21:05:12 +00:00
case $cpu in
2021-09-20 12:45:12 +03:00
generic)
subarch = $( probe_arm_arch | sed 's/[^a-z0-9]//g' )
; ;
2010-01-18 21:05:12 +00:00
armv*)
cpuflags = " -march= $cpu "
2010-07-31 08:51:39 +00:00
subarch = $( echo $cpu | sed 's/[^a-z0-9]//g' )
2010-01-18 21:05:12 +00:00
; ;
*)
cpuflags = " -mcpu= $cpu "
2010-07-31 08:51:39 +00:00
case $cpu in
cortex-a*) subarch = armv7a ; ;
cortex-r*) subarch = armv7r ; ;
2011-06-23 15:42:19 +01:00
cortex-m*) enable thumb; subarch = armv7m ; ;
2010-07-31 08:51:39 +00:00
arm11*) subarch = armv6 ; ;
arm[ 79] *e*| arm9[ 24] 6*| arm96*| arm102[ 26] ) subarch = armv5te ; ;
armv4*| arm7*| arm9[ 24] *) subarch = armv4 ; ;
2012-11-30 21:14:25 +00:00
*) subarch = $( probe_arm_arch) ; ;
2010-07-31 08:51:39 +00:00
esac
2010-01-18 21:05:12 +00:00
; ;
esac
2010-01-18 21:05:05 +00:00
2012-12-03 21:47:17 +00:00
case " $subarch " in
armv5t*) enable fast_clz ; ;
2014-05-20 10:14:05 +08:00
armv[ 6-8] *)
enable fast_clz
disabled fast_unaligned || enable fast_unaligned
; ;
2012-12-03 21:47:17 +00:00
esac
2022-08-10 02:23:26 +02:00
test_cflags -mfp16-format= ieee && add_cflags -mfp16-format= ieee
2021-12-01 11:52:19 +08:00
elif enabled loongarch; then
enable simd_align_32
enable fast_64bit
enable fast_clz
enable fast_unaligned
case $cpu in
la464)
cpuflags = " -march= $cpu "
; ;
esac
2010-01-18 21:05:05 +00:00
elif enabled mips; then
2016-03-07 19:49:10 +05:30
if [ " $cpu " != "generic" ] ; then
disable mips32r2
disable mips32r5
disable mips64r2
disable mips32r6
disable mips64r6
disable loongson2
disable loongson3
2020-07-18 23:35:37 +08:00
disable mipsdsp
disable mipsdspr2
cpuflags = " -march= $cpu "
2016-03-07 19:49:10 +05:30
case $cpu in
2020-07-18 23:35:37 +08:00
# General ISA levels
mips1| mips3)
; ;
mips32r2)
2016-03-07 19:49:10 +05:30
enable mips32r2
; ;
2020-07-18 23:35:37 +08:00
mips32r5)
enable mips32r2
enable mips32r5
2016-03-07 19:49:10 +05:30
; ;
2020-07-18 23:35:37 +08:00
mips64r2| mips64r5)
enable mips64r2
2016-03-07 19:49:10 +05:30
enable loongson3
2020-07-18 23:35:37 +08:00
; ;
# Cores from MIPS(MTI)
24kc)
disable mipsfpu
enable mips32r2
; ;
24kf*| 24kec| 34kc| 74Kc| 1004kc)
enable mips32r2
; ;
24kef*| 34kf*| 1004kf*)
enable mipsdsp
enable mips32r2
; ;
p5600)
enable mips32r2
enable mips32r5
check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
; ;
i6400)
enable mips64r6
check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
; ;
p6600)
enable mips64r6
check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
; ;
# Cores from Loongson
loongson2e| loongson2f| loongson3*)
2016-03-07 19:49:10 +05:30
enable simd_align_16
enable fast_64bit
enable fast_clz
enable fast_cmov
enable fast_unaligned
disable aligned_stack
2018-08-24 17:22:12 +08:00
# When gcc version less than 5.3.0, add -fno-expensive-optimizations flag.
2020-07-18 23:35:37 +08:00
if test " $cc_type " = "gcc" ; then
case $gcc_basever in
2| 2.*| 3.*| 4.*| 5.0| 5.1| 5.2)
2018-08-24 17:22:12 +08:00
expensive_optimization_flag = "-fno-expensive-optimizations"
2020-07-18 23:35:37 +08:00
; ;
*)
expensive_optimization_flag = ""
; ;
esac
2018-08-24 17:22:12 +08:00
fi
2020-07-18 23:35:37 +08:00
2016-03-07 19:49:10 +05:30
case $cpu in
loongson3*)
2020-07-18 23:35:37 +08:00
enable loongson3
2018-08-24 17:22:12 +08:00
cpuflags = " -march=loongson3a -mhard-float $expensive_optimization_flag "
2016-03-07 19:49:10 +05:30
; ;
loongson2e)
2020-07-18 23:35:37 +08:00
enable loongson2
2018-08-24 17:22:12 +08:00
cpuflags = " -march=loongson2e -mhard-float $expensive_optimization_flag "
2016-03-07 19:49:10 +05:30
; ;
loongson2f)
2020-07-18 23:35:37 +08:00
enable loongson2
2018-08-24 17:22:12 +08:00
cpuflags = " -march=loongson2f -mhard-float $expensive_optimization_flag "
2016-03-07 19:49:10 +05:30
; ;
esac
; ;
*)
2020-07-18 23:35:37 +08:00
warn "unknown MIPS CPU"
2016-03-07 19:49:10 +05:30
; ;
esac
else
2020-07-18 23:35:37 +08:00
disable mipsdsp
disable mipsdspr2
# Disable DSP stuff for generic CPU, it can't be detected at runtime.
2016-03-07 19:49:10 +05:30
warn 'generic cpu selected'
fi
2012-06-04 18:02:56 +02:00
2010-01-18 21:32:57 +00:00
elif enabled ppc; then
2010-01-18 21:05:05 +00:00
2014-03-14 17:20:59 +01:00
disable ldbrx
2010-01-30 18:07:05 +00:00
case $( tolower $cpu ) in
601| ppc601| powerpc601)
2010-01-18 21:05:08 +00:00
cpuflags = "-mcpu=601"
2010-01-30 18:50:28 +00:00
disable altivec
2010-01-18 21:05:08 +00:00
; ;
2010-01-30 18:07:05 +00:00
603*| ppc603*| powerpc603*)
2010-01-18 21:05:08 +00:00
cpuflags = "-mcpu=603"
2010-01-30 18:50:28 +00:00
disable altivec
2010-01-18 21:05:08 +00:00
; ;
2010-01-30 18:07:05 +00:00
604*| ppc604*| powerpc604*)
2010-01-18 21:05:08 +00:00
cpuflags = "-mcpu=604"
2010-01-30 18:50:28 +00:00
disable altivec
2010-01-18 21:05:08 +00:00
; ;
2010-01-30 18:07:05 +00:00
g3| 75*| ppc75*| powerpc75*)
2012-11-14 00:07:13 +00:00
cpuflags = "-mcpu=750"
2010-01-30 18:50:28 +00:00
disable altivec
2010-01-18 21:05:08 +00:00
; ;
2010-01-30 18:07:05 +00:00
g4| 745*| ppc745*| powerpc745*)
2012-11-14 00:07:13 +00:00
cpuflags = "-mcpu=7450"
2015-05-10 02:47:31 +02:00
disable vsx
2010-01-18 21:05:08 +00:00
; ;
2010-01-30 18:07:05 +00:00
74*| ppc74*| powerpc74*)
2012-11-14 00:07:13 +00:00
cpuflags = "-mcpu=7400"
2015-05-10 02:47:31 +02:00
disable vsx
2010-01-18 21:05:08 +00:00
; ;
2012-04-27 14:47:58 +01:00
g5| 970| ppc970| powerpc970)
2012-11-14 00:07:13 +00:00
cpuflags = "-mcpu=970"
2015-05-10 02:47:31 +02:00
disable vsx
2010-01-18 21:05:08 +00:00
; ;
2015-05-10 02:47:31 +02:00
power[ 3-6] *)
2010-01-18 21:05:08 +00:00
cpuflags = " -mcpu= $cpu "
2015-05-10 02:47:31 +02:00
disable vsx
; ;
power[ 7-8] *)
cpuflags = " -mcpu= $cpu "
2010-01-18 21:05:08 +00:00
; ;
2010-01-30 18:07:05 +00:00
cell)
2010-01-18 21:05:08 +00:00
cpuflags = "-mcpu=cell"
enable ldbrx
2015-05-10 02:47:31 +02:00
disable vsx
2010-01-18 21:05:08 +00:00
; ;
2012-08-07 12:49:01 -04:00
e500mc)
cpuflags = "-mcpu=e500mc"
disable altivec
; ;
2010-01-30 18:07:07 +00:00
e500v2)
cpuflags = "-mcpu=8548 -mhard-float -mfloat-gprs=double"
disable altivec
2014-02-06 12:51:39 +00:00
disable dcbzl
2010-01-30 18:07:07 +00:00
; ;
e500)
cpuflags = "-mcpu=8540 -mhard-float"
disable altivec
2014-02-06 12:51:39 +00:00
disable dcbzl
2010-01-18 21:05:08 +00:00
; ;
esac
2009-07-17 08:21:41 +00:00
2022-09-12 18:53:18 +03:00
elif enabled riscv; then
2024-05-03 20:08:03 +03:00
check_headers asm/hwprobe.h
2023-11-18 22:09:57 +02:00
check_headers sys/hwprobe.h
2022-09-12 18:53:18 +03:00
if test_cpp_condition stddef.h "__riscv_zbb" ; then
enable fast_clz
fi
2023-11-16 20:36:05 +02:00
if test_cpp_condition stddef.h "__riscv_zfhmin" ; then
enable fast_float16
fi
2022-09-12 18:53:18 +03:00
2012-11-18 15:22:04 +00:00
elif enabled sparc; then
2012-11-16 21:02:53 +00:00
case $cpu in
2012-11-18 15:22:04 +00:00
cypress| f93[ 04] | tsc701| sparcl*| supersparc| hypersparc| niagara| v[ 789] )
cpuflags = " -mcpu= $cpu "
2012-11-16 21:02:53 +00:00
; ;
2012-11-18 15:22:04 +00:00
ultrasparc*| niagara[ 234] )
2012-11-16 21:02:53 +00:00
cpuflags = " -mcpu= $cpu "
; ;
esac
2010-01-18 21:05:05 +00:00
elif enabled x86; then
2010-01-18 21:05:08 +00:00
case $cpu in
i[ 345] 86| pentium)
cpuflags = " -march= $cpu "
2014-09-12 22:29:29 +02:00
disable i686
2010-01-18 21:05:08 +00:00
disable mmx
; ;
2013-04-26 16:49:02 +02:00
# targets that do NOT support nopl and conditional mov (cmov)
2010-01-18 21:05:08 +00:00
pentium-mmx| k6| k6-[ 23] | winchip-c6| winchip2| c3)
cpuflags = " -march= $cpu "
2013-04-26 16:49:02 +02:00
disable i686
2010-01-18 21:05:08 +00:00
; ;
# targets that do support conditional mov but on which it's slow
pentium4| pentium4m| prescott| nocona)
cpuflags = " -march= $cpu "
2013-04-26 16:49:02 +02:00
enable i686
2010-01-18 21:05:08 +00:00
disable fast_cmov
; ;
2023-09-17 15:43:23 -03:00
# everything else should support nopl and conditional mov (cmov)
*)
cpuflags = " -march= $cpu "
enable i686
enable fast_cmov
; ;
2010-01-18 21:05:08 +00:00
esac
2010-01-18 21:05:05 +00:00
2024-06-11 19:46:13 +03:00
else
if test_cpp_condition inttypes.h "UINTPTR_MAX >= UINT64_MAX" ; then
enable fast_64bit
fi
2010-01-18 21:05:05 +00:00
fi
2012-12-03 19:21:42 +00:00
if [ " $cpu " != generic ] ; then
add_cflags $cpuflags
add_asflags $cpuflags
2015-09-25 08:56:25 +02:00
test " $cc_type " = " $ld_type " && add_ldflags $cpuflags
2012-12-03 19:21:42 +00:00
fi
2009-07-17 08:21:41 +00:00
2009-02-04 21:28:54 +00:00
# compiler sanity check
2018-02-04 20:21:57 +01:00
test_exec <<EOF
2009-02-04 21:28:54 +00:00
int main(void){ return 0; }
EOF
if test " $? " != 0; then
echo " $cc is unable to create an executable file. "
if test -z " $cross_prefix " && ! enabled cross_compile ; then
echo " If $cc is a cross-compiler, use the --enable-cross-compile option. "
echo "Only do this if you know what cross compiling means."
fi
die "C compiler test failed."
fi
2024-02-03 17:44:43 +01:00
add_cppflags -D_ISOC11_SOURCE
2011-08-31 04:11:25 +05:30
add_cxxflags -D__STDC_CONSTANT_MACROS
2024-03-19 15:40:14 -03:00
check_cxxflags_cc -std= $stdcxx ctype.h "__cplusplus >= 201103L" ||
{ check_cxxflags -std= c++11 && stdcxx = "c++11" || { check_cxxflags -std= c++0x && stdcxx = "c++0x" ; } ; }
2016-11-23 21:54:53 -08:00
# some compilers silently accept -std=c11, so we also need to check that the
# version macro is defined properly
2024-03-19 15:40:14 -03:00
check_cflags_cc -std= $stdc ctype.h "__STDC_VERSION__ >= 201112L" ||
{ check_cflags_cc -std= c11 ctype.h "__STDC_VERSION__ >= 201112L" && stdc = "c11" || die "Compiler lacks C11 support" ; }
2016-11-23 21:54:53 -08:00
2024-03-21 16:27:58 +01:00
test_cc <<EOF || die "Compiler lacks support for C11 static assertions"
#include <assert.h>
#include <stddef.h>
struct Foo {
int a;
void *ptr;
} obj;
static_assert(offsetof(struct Foo, a) == 0,
"First element of struct does not have offset 0");
_Static_assert(offsetof(struct Foo, ptr) >= offsetof(struct Foo, a) + sizeof(obj.a),
"elements not properly ordered in struct");
EOF
2017-01-20 15:29:07 +01:00
check_cppflags -D_FILE_OFFSET_BITS= 64
check_cppflags -D_LARGEFILE_SOURCE
2008-08-14 23:38:09 +00:00
2024-02-03 17:44:43 +01:00
add_host_cppflags -D_ISOC11_SOURCE
2024-03-19 15:40:14 -03:00
check_host_cflags_cc -std= $stdc ctype.h "__STDC_VERSION__ >= 201112L" ||
check_host_cflags_cc -std= c11 ctype.h "__STDC_VERSION__ >= 201112L" || die "Host compiler lacks C11 support"
2011-05-16 16:16:14 +02:00
check_host_cflags -Wall
2017-01-19 11:36:52 +01:00
check_host_cflags $host_cflags_speed
2009-10-28 20:19:15 +00:00
2012-10-23 23:33:44 +01:00
check_64bit( ) {
arch32 = $1
arch64 = $2
2017-10-20 04:42:13 +02:00
expr = ${ 3 :- 'sizeof(void *) > 4' }
2018-02-04 20:21:57 +01:00
test_code cc "" " int test[2*( $expr ) - 1] " &&
2012-10-23 23:33:44 +01:00
subarch = $arch64 || subarch = $arch32
2017-10-06 23:06:45 +02:00
enable $subarch
2012-10-23 23:33:44 +01:00
}
2008-05-13 16:32:51 +00:00
case " $arch " in
2024-06-09 13:20:24 -04:00
aarch64| ia64)
2017-10-06 23:06:45 +02:00
enabled shared && enable_weak pic
2008-05-13 16:32:51 +00:00
; ;
2021-12-01 11:52:19 +08:00
loongarch)
check_64bit loongarch32 loongarch64
enabled loongarch64 && disable loongarch32
enabled shared && enable_weak pic
; ;
2012-10-23 23:34:35 +01:00
mips)
check_64bit mips mips64 '_MIPS_SIM > 1'
2017-10-06 23:06:45 +02:00
enabled shared && enable_weak pic
2008-05-13 16:32:51 +00:00
; ;
2012-10-24 00:21:15 +01:00
parisc)
2017-10-20 04:42:13 +02:00
check_64bit parisc parisc64
2017-10-06 23:06:45 +02:00
enabled shared && enable_weak pic
2012-10-24 00:21:15 +01:00
; ;
2012-10-23 23:39:40 +01:00
ppc)
2017-10-20 04:42:13 +02:00
check_64bit ppc ppc64
2017-10-06 23:06:45 +02:00
enabled shared && enable_weak pic
2012-10-23 23:39:40 +01:00
; ;
2021-07-25 18:31:27 -04:00
riscv)
check_64bit riscv32 riscv64
enabled shared && enable_weak pic
; ;
2014-03-02 02:11:05 -05:00
s390)
2017-10-20 04:42:13 +02:00
check_64bit s390 s390x
2017-10-06 23:06:45 +02:00
enabled shared && enable_weak pic
2014-03-02 02:11:05 -05:00
; ;
2012-10-24 18:34:21 +01:00
sparc)
2017-10-20 04:42:13 +02:00
check_64bit sparc sparc64
2017-10-06 23:06:45 +02:00
enabled shared && enable_weak pic
2012-10-24 18:34:21 +01:00
; ;
2010-01-18 21:05:01 +00:00
x86)
2017-10-20 04:42:13 +02:00
check_64bit x86_32 x86_64
2017-11-16 13:11:52 -03:00
# Treat x32 as x64 for now. Note it also needs pic if shared
2018-03-15 18:22:51 -03:00
test " $subarch " = "x86_32" && test_cpp_condition stddef.h 'defined(__x86_64__)' &&
2017-11-16 13:11:52 -03:00
subarch = x86_64 && enable x86_64 && disable x86_32
2017-10-06 23:06:45 +02:00
if enabled x86_64; then
enabled shared && enable_weak pic
objformat = elf64
2009-10-01 21:38:25 +00:00
fi
2008-05-13 16:32:51 +00:00
; ;
esac
2007-11-23 11:09:28 +00:00
# OS specific
2008-03-25 15:17:47 +00:00
case $target_os in
2013-06-30 13:47:10 +02:00
aix)
2013-07-25 11:37:20 -04:00
SHFLAGS = -shared
2013-07-04 21:53:08 +02:00
add_cppflags '-I\$(SRC_PATH)/compat/aix'
2013-07-25 11:37:20 -04:00
enabled shared && add_ldflags -Wl,-brtl
2017-11-04 18:50:30 +01:00
arflags = '-Xany -r -c'
2018-04-12 02:30:21 +02:00
striptype = ""
2013-06-30 13:47:10 +02:00
; ;
2014-06-13 15:14:10 +02:00
android)
disable symver
2014-11-16 12:51:54 +02:00
enable section_data_rel_ro
2018-07-25 20:43:02 +02:00
add_cflags -fPIE
add_ldexeflags -fPIE -pie
2014-06-13 15:14:10 +02:00
SLIB_INSTALL_NAME = '$(SLIBNAME)'
SLIB_INSTALL_LINKS =
2015-10-29 14:01:07 +01:00
SHFLAGS = '-shared -Wl,-soname,$(SLIBNAME)'
2014-06-13 15:14:10 +02:00
; ;
2010-06-10 16:51:14 +00:00
haiku)
2010-06-10 16:58:04 +00:00
prefix_default = "/boot/common"
2010-06-10 17:20:05 +00:00
network_extralibs = "-lnetwork"
2016-12-06 18:19:09 +01:00
host_extralibs =
2010-06-10 16:51:14 +00:00
; ;
2007-11-23 11:09:28 +00:00
sunos)
2008-04-10 19:44:29 +00:00
SHFLAGS = '-shared -Wl,-h,$$(@F)'
2017-09-24 18:46:47 +02:00
enabled x86 && append SHFLAGS -mimpure-text
2007-11-23 11:09:28 +00:00
network_extralibs = "-lsocket -lnsl"
2015-03-10 13:36:49 +01:00
add_cppflags -D__EXTENSIONS__
2011-09-17 00:36:37 -04:00
# When using suncc to build, the Solaris linker will mark
# an executable with each instruction set encountered by
# the Solaris assembler. As our libraries contain their own
# guards for processor-specific code, instead suppress
# generation of the HWCAPS ELF section on Solaris x86 only.
2013-06-20 13:42:21 +02:00
enabled_all suncc x86 &&
echo "hwcap_1 = OVERRIDE;" > mapfile &&
add_ldflags -Wl,-M,mapfile
2012-09-16 21:47:16 +01:00
nm_default = 'nm -P -g'
2018-11-18 04:25:29 +01:00
striptype = ""
2016-05-27 11:38:38 +02:00
version_script = '-M'
VERSION_SCRIPT_POSTPROCESS_CMD = 'perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
2007-11-23 11:09:28 +00:00
; ;
netbsd)
2011-01-23 20:48:51 +00:00
disable symver
2023-12-24 14:33:31 -05:00
enable section_data_rel_ro
2009-06-29 20:45:49 +00:00
oss_indev_extralibs = "-lossaudio"
oss_outdev_extralibs = "-lossaudio"
2012-09-12 19:37:29 +02:00
enabled gcc || check_ldflags -Wl,-zmuldefs
2007-11-23 11:09:28 +00:00
; ;
2023-12-31 02:23:11 -05:00
openbsd)
2011-01-23 20:48:51 +00:00
disable symver
2020-02-23 16:15:35 -05:00
enable section_data_rel_ro
2018-04-07 18:52:02 -03:00
striptype = ""
2007-11-23 11:09:28 +00:00
SHFLAGS = '-shared'
2013-02-03 15:02:31 +01:00
SLIB_INSTALL_NAME = '$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
2012-08-26 16:23:06 -04:00
SLIB_INSTALL_LINKS =
2009-06-29 20:45:49 +00:00
oss_indev_extralibs = "-lossaudio"
oss_outdev_extralibs = "-lossaudio"
2007-11-23 11:09:28 +00:00
; ;
2011-01-23 20:48:51 +00:00
dragonfly)
disable symver
; ;
freebsd)
2023-12-24 14:33:31 -05:00
enable section_data_rel_ro
2007-11-23 11:09:28 +00:00
; ;
bsd/os)
2010-07-05 17:31:18 +00:00
add_extralibs -lpoll -lgnugetopt
2011-04-01 00:24:12 +02:00
strip = "strip -d"
2007-11-23 11:09:28 +00:00
; ;
darwin)
2010-07-01 23:21:33 +00:00
enabled ppc && add_asflags -force_cpusubtype_ALL
2016-02-19 16:34:30 +01:00
install_name_dir_default = '$(SHLIBDIR)'
SHFLAGS = '-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2011-03-16 01:01:17 +00:00
enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2011-04-01 00:24:12 +02:00
strip = " ${ strip } -x "
2010-07-05 17:31:18 +00:00
add_ldflags -Wl,-dynamic,-search_paths_first
2017-03-15 00:07:23 +01:00
check_cflags -Werror= partial-availability
2007-11-23 11:09:28 +00:00
SLIBSUF = ".dylib"
SLIBNAME_WITH_VERSION = '$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR = '$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2017-03-01 18:42:21 +00:00
enabled x86_64 && objformat = "macho64" || objformat = "macho32"
2015-02-08 00:11:13 +01:00
enabled_any pic shared x86_64 ||
2009-08-10 08:18:05 +00:00
{ check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2018-02-13 09:31:57 +01:00
check_headers dispatch/dispatch.h &&
2016-03-26 15:27:23 +00:00
add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
2017-06-21 16:54:22 +03:00
if test -n " $sysroot " ; then
is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot
is_in -isysroot $ld $LDFLAGS || check_ldflags -isysroot $sysroot
fi
2016-09-09 18:12:34 -05:00
version_script = '-exported_symbols_list'
VERSION_SCRIPT_POSTPROCESS_CMD = 'tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"'
2020-04-14 18:42:09 +01:00
# Workaround for Xcode 11 -fstack-check bug
if enabled clang; then
clang_version = $( $cc -dumpversion)
test ${ clang_version %%.* } -eq 11 && add_cflags -fno-stack-check
fi
2025-04-29 10:42:48 +03:00
# Xcode Clang doesn't default to -fno-common while upstream llvm.org
# Clang (and GCC) do. This avoids linker warnings on Xcode 16.3 about
# "reducing alignment of section __DATA,__common from 0x8000 to 0x4000
# because it exceeds segment maximum alignment".
check_cflags -fno-common
2007-11-23 11:09:28 +00:00
; ;
2015-11-21 18:51:11 +01:00
msys*)
2016-04-04 20:16:54 +02:00
die "Native MSYS builds are discouraged, please use the MINGW environment."
2015-11-21 18:51:11 +01:00
; ;
2015-09-12 15:23:52 +02:00
mingw32*| mingw64*)
2017-08-30 22:04:30 +03:00
target_os = mingw32
2018-02-16 21:24:59 +01:00
LIBTARGET = i386
if enabled x86_64; then
LIBTARGET = "i386:x86-64"
2018-02-17 00:17:21 +02:00
elif enabled arm; then
LIBTARGET = "arm"
elif enabled aarch64; then
LIBTARGET = "arm64"
2018-02-16 21:24:59 +01:00
fi
2017-08-24 23:27:16 +03:00
if enabled shared; then
2017-09-14 08:33:05 +03:00
# Cannot build both shared and static libs when using dllimport.
2017-08-24 23:27:16 +03:00
disable static
fi
2022-08-07 15:26:06 +02:00
! enabled small && test_cmd $windres --version && enable gnu_windres
2014-10-05 11:10:37 +11:00
enabled x86_32 && check_ldflags -Wl,--large-address-aware
2023-08-14 08:53:37 -03:00
add_cppflags -DWIN32_LEAN_AND_MEAN
2008-06-08 21:34:19 +00:00
shlibdir_default = " $bindir_default "
2007-11-23 11:09:28 +00:00
SLIBPREF = ""
SLIBSUF = ".dll"
SLIBNAME_WITH_VERSION = '$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR = '$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2018-03-15 18:22:51 -03:00
if test_cmd lib.exe -list; then
2018-02-16 21:24:59 +01:00
SLIB_EXTRA_CMD = -'lib.exe -nologo -machine:$(LIBTARGET) -def:$$(@:$(SLIBSUF)=.def) -out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
if enabled x86_64; then
LIBTARGET = x64
fi
else
SLIB_EXTRA_CMD = -'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
fi
2011-07-07 15:25:30 +01:00
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)'
2017-11-16 09:32:15 +02:00
SLIB_CREATE_DEF_CMD = 'EXTERN_PREFIX="$(EXTERN_PREFIX)" AR="$(AR_CMD)" NM="$(NM_CMD)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
2017-11-11 11:40:06 -03:00
SHFLAGS = '-shared -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--disable-auto-image-base $$(@:$(SLIBSUF)=.def)'
2017-03-01 18:42:21 +00:00
enabled x86_64 && objformat = "win64" || objformat = "win32"
2018-02-16 21:24:59 +01:00
dlltool = " ${ cross_prefix } dlltool "
2012-09-04 15:20:45 +01:00
ranlib = :
2008-10-10 16:59:37 +00:00
enable dos_paths
2015-09-26 02:15:24 -04:00
check_ldflags -Wl,--nxcompat,--dynamicbase
2015-09-21 00:41:36 -04:00
# Lets work around some stupidity in binutils.
# ld will strip relocations from executables even though we need them
# for dynamicbase (ASLR). Using -pie does retain the reloc section
# however ld then forgets what the entry point should be (oops) so we
# have to manually (re)set it.
if enabled x86_32; then
2016-03-29 01:30:50 -04:00
disabled debug && add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup
2015-09-21 00:41:36 -04:00
elif enabled x86_64; then
2016-03-29 01:30:50 -04:00
disabled debug && add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup
2015-09-26 02:43:23 -04:00
check_ldflags -Wl,--high-entropy-va # binutils 2.25
# Set image base >4GB for extra entropy with HEASLR
add_ldexeflags -Wl,--image-base,0x140000000
append SHFLAGS -Wl,--image-base,0x180000000
2015-09-21 00:41:36 -04:00
fi
2007-11-23 11:09:28 +00:00
; ;
2012-10-13 15:57:56 +03:00
win32| win64)
2013-11-19 17:53:00 +00:00
disable symver
2012-10-18 11:53:19 +03:00
if enabled shared; then
# Link to the import library instead of the normal static library
# for shared libs.
LD_LIB = '%.lib'
2013-09-10 12:28:19 +02:00
# Cannot build both shared and static libs with MSVC or icl.
2012-10-18 11:53:19 +03:00
disable static
fi
2022-08-07 16:31:51 +02:00
! enabled small && test_cmd $windres --version && enable gnu_windres
2014-10-05 11:10:37 +11:00
enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
2023-08-14 08:53:37 -03:00
add_cppflags -DWIN32_LEAN_AND_MEAN
2012-10-18 11:53:19 +03:00
shlibdir_default = " $bindir_default "
SLIBPREF = ""
SLIBSUF = ".dll"
SLIBNAME_WITH_VERSION = '$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR = '$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2017-11-16 09:32:15 +02:00
SLIB_CREATE_DEF_CMD = 'EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
2012-10-18 11:53:19 +03:00
SLIB_INSTALL_NAME = '$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS =
SLIB_INSTALL_EXTRA_SHLIB = '$(SLIBNAME:$(SLIBSUF)=.lib)'
SLIB_INSTALL_EXTRA_LIB = '$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2025-06-20 01:52:05 +02:00
if test $ld_type = "clang" ; then
SHFLAGS = '-Wl,-dll -Wl,-def:$$(@:$(SLIBSUF)=.def) -Wl,-implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
else
SHFLAGS = '-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
fi
2017-03-01 18:42:21 +00:00
enabled x86_64 && objformat = "win64" || objformat = "win32"
2012-10-13 15:57:56 +03:00
ranlib = :
enable dos_paths
; ;
2007-11-23 11:09:28 +00:00
cygwin*)
2008-03-25 15:17:47 +00:00
target_os = cygwin
2008-06-08 21:34:19 +00:00
shlibdir_default = " $bindir_default "
2007-11-23 11:09:28 +00:00
SLIBPREF = "cyg"
SLIBSUF = ".dll"
SLIBNAME_WITH_VERSION = '$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR = '$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2012-08-07 00:32:48 +01:00
SLIB_INSTALL_NAME = '$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS =
SLIB_INSTALL_EXTRA_LIB = 'lib$(FULLNAME).dll.a'
SHFLAGS = '-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
2017-03-01 18:42:21 +00:00
enabled x86_64 && objformat = "win64" || objformat = "win32"
2008-10-10 16:59:37 +00:00
enable dos_paths
2022-08-07 15:26:06 +02:00
! enabled small && test_cmd $windres --version && enable gnu_windres
2023-08-14 08:53:37 -03:00
add_cppflags -DWIN32_LEAN_AND_MEAN
2016-09-30 12:17:16 +02:00
add_cppflags -D_POSIX_C_SOURCE= 200112 -D_XOPEN_SOURCE= 600
2007-11-23 11:09:28 +00:00
; ;
2007-12-24 12:49:27 +00:00
*-dos| freedos| opendos)
network_extralibs = "-lsocket"
2009-01-11 02:19:33 +00:00
objformat = "coff"
2008-10-10 16:59:37 +00:00
enable dos_paths
2007-12-24 12:49:27 +00:00
; ;
2007-11-23 11:09:28 +00:00
linux)
2014-11-16 12:51:54 +02:00
enable section_data_rel_ro
2017-09-01 15:11:18 +02:00
enabled_any arm aarch64 && enable_weak linux_perf
2007-11-23 11:09:28 +00:00
; ;
irix*)
2008-03-25 15:17:47 +00:00
target_os = irix
2007-11-23 11:09:28 +00:00
ranlib = "echo ignoring ranlib"
; ;
2007-12-05 23:15:24 +00:00
os/2*)
2011-04-01 00:24:12 +02:00
strip = "lxlite -CS"
2017-10-06 22:15:35 +02:00
striptype = ""
2011-05-20 17:26:52 +02:00
objformat = "aout"
2011-05-26 14:21:04 +02:00
add_cppflags -D_GNU_SOURCE
2017-01-20 22:19:56 -08:00
add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
2008-04-07 21:16:31 +00:00
SHFLAGS = '$(SUBDIR)$(NAME).def -Zdll -Zomf'
2008-03-20 19:26:24 +00:00
LIBSUF = "_s.a"
2007-12-05 23:15:24 +00:00
SLIBPREF = ""
SLIBSUF = ".dll"
2016-04-14 01:45:01 +04:00
SLIBNAME_WITH_VERSION = '$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR = '$(SLIBPREF)$(shell echo $(FULLNAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
SLIB_CREATE_DEF_CMD = 'echo LIBRARY $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(FULLNAME).def; \
echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(FULLNAME).def; \
echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(FULLNAME).def; \
echo EXPORTS >> $(SUBDIR)$(FULLNAME).def; \
emxexp $(OBJS) >> $(SUBDIR)$(FULLNAME).def'
SLIB_EXTRA_CMD = 'emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.a $(SUBDIR)$(FULLNAME).def; \
emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.lib $(SUBDIR)$(FULLNAME).def;'
SLIB_INSTALL_NAME = '$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS =
SLIB_INSTALL_EXTRA_LIB = '$(LIBPREF)$(FULLNAME)_dll.a $(LIBPREF)$(FULLNAME)_dll.lib'
2008-10-10 16:59:37 +00:00
enable dos_paths
2011-11-02 00:00:21 +09:00
enable_weak os2threads
2007-12-05 23:15:24 +00:00
; ;
2009-05-14 11:45:41 +00:00
gnu/kfreebsd)
2012-10-13 18:21:34 +01:00
add_cppflags -D_BSD_SOURCE
2009-05-14 11:45:41 +00:00
; ;
2009-05-25 05:39:58 +00:00
gnu)
; ;
2011-01-30 01:05:39 +00:00
qnx)
add_cppflags -D_QNX_SOURCE
network_extralibs = "-lsocket"
; ;
2011-01-25 10:48:38 +02:00
symbian)
SLIBSUF = ".dll"
enable dos_paths
2011-07-15 10:53:12 +03:00
add_cflags --include= $sysinclude /gcce/gcce.h -fvisibility= default
add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
add_ldflags -Wl,--target1-abs,--no-undefined \
-Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
-Wl,--entry= _E32Startup -Wl,-u,_E32Startup
add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
-l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
-l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2011-01-25 10:48:38 +02:00
; ;
2012-10-12 21:42:27 +00:00
minix)
; ;
2010-02-09 22:55:08 +00:00
none)
; ;
2007-11-23 11:09:28 +00:00
*)
2009-01-26 14:32:01 +00:00
die " Unknown OS ' $target_os '. "
2007-11-23 11:09:28 +00:00
; ;
esac
2016-01-25 01:42:23 +01:00
# test if creating links works
link_dest = $( mktemp -u $TMPDIR /dest_XXXXXXXX)
link_name = $( mktemp -u $TMPDIR /name_XXXXXXXX)
mkdir " $link_dest "
$ln_s " $link_dest " " $link_name "
touch " $link_dest /test_file "
2019-04-25 00:42:48 +02:00
if [ " $source_path " != "." ] && [ " $source_path " != "src" ] && ( [ ! -d src ] || [ -L src ] ) && [ -e " $link_name /test_file " ] ; then
2016-01-25 01:42:23 +01:00
# create link to source path
[ -e src ] && rm src
$ln_s " $source_path " src
source_link = src
else
# creating directory links doesn't work
# fall back to using the full source path
source_link = " $source_path "
fi
# cleanup
rm -r " $link_dest "
rm -r " $link_name "
2012-09-04 13:57:37 +01:00
# determine libc flavour
2013-02-28 16:16:10 +01:00
probe_libc( ) {
pfx = $1
2013-12-13 23:19:55 +01:00
pfx_no_ = ${ pfx %_ }
2013-02-28 16:16:10 +01:00
# uclibc defines __GLIBC__, so it needs to be checked before glibc.
2018-02-04 20:21:57 +01:00
if test_${ pfx } cpp_condition features.h "defined __UCLIBC__" ; then
2013-02-28 16:16:10 +01:00
eval ${ pfx } libc_type = uclibc
add_${ pfx } cppflags -D_POSIX_C_SOURCE= 200112 -D_XOPEN_SOURCE= 600
2018-02-04 20:21:57 +01:00
elif test_${ pfx } cpp_condition features.h "defined __GLIBC__" ; then
2013-02-28 16:16:10 +01:00
eval ${ pfx } libc_type = glibc
add_${ pfx } cppflags -D_POSIX_C_SOURCE= 200112 -D_XOPEN_SOURCE= 600
# MinGW headers can be installed on Cygwin, so check for newlib first.
2018-02-04 20:21:57 +01:00
elif test_${ pfx } cpp_condition newlib.h "defined _NEWLIB_VERSION" ; then
2013-02-28 16:16:10 +01:00
eval ${ pfx } libc_type = newlib
2016-12-09 15:45:05 +01:00
add_${ pfx } cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE= 600
2013-02-28 16:16:10 +01:00
# MinGW64 is backwards compatible with MinGW32, so check for it first.
2018-02-04 20:21:57 +01:00
elif test_${ pfx } cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR" ; then
2013-02-28 16:16:10 +01:00
eval ${ pfx } libc_type = mingw64
2018-03-15 18:22:51 -03:00
if test_${ pfx } cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3" ; then
2013-12-10 01:56:49 +01:00
add_compat msvcrt/snprintf.o
add_cflags " -include $source_path /compat/msvcrt/snprintf.h "
fi
2013-12-09 00:50:39 +01:00
add_${ pfx } cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO= 1
2013-12-13 23:19:55 +01:00
eval test \$ ${ pfx_no_ } cc_type = "gcc" &&
add_${ pfx } cppflags -D__printf__= __gnu_printf__
2018-03-15 18:22:51 -03:00
test_${ pfx } cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
2017-12-21 20:23:14 +01:00
add_${ pfx } cppflags -D_WIN32_WINNT= 0x0600
2019-04-10 11:27:06 +03:00
add_${ pfx } cppflags -D_POSIX_C_SOURCE= 200112 -D_XOPEN_SOURCE= 600
2018-02-04 20:21:57 +01:00
elif test_${ pfx } cpp_condition _mingw.h "defined __MINGW_VERSION" ||
test_${ pfx } cpp_condition _mingw.h "defined __MINGW32_VERSION" ; then
2013-02-28 16:16:10 +01:00
eval ${ pfx } libc_type = mingw32
2018-02-04 20:21:57 +01:00
test_${ pfx } cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
2013-02-28 16:16:10 +01:00
(__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
die "ERROR: MinGW32 runtime version must be >= 3.15."
2013-12-12 00:39:43 +01:00
add_${ pfx } cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO= 1
2018-02-04 20:21:57 +01:00
test_${ pfx } cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" &&
2016-08-04 17:01:03 +02:00
add_${ pfx } cppflags -D__MSVCRT_VERSION__= 0x0700
2018-03-15 18:22:51 -03:00
test_${ pfx } cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
2017-12-21 20:23:14 +01:00
add_${ pfx } cppflags -D_WIN32_WINNT= 0x0600
2013-12-13 23:19:55 +01:00
eval test \$ ${ pfx_no_ } cc_type = "gcc" &&
add_${ pfx } cppflags -D__printf__= __gnu_printf__
2019-04-10 11:27:06 +03:00
add_${ pfx } cppflags -D_POSIX_C_SOURCE= 200112 -D_XOPEN_SOURCE= 600
2018-02-04 20:21:57 +01:00
elif test_${ pfx } cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION" ; then
2013-02-28 16:16:10 +01:00
eval ${ pfx } libc_type = msvcrt
2018-02-04 20:21:57 +01:00
if test_${ pfx } cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14" ; then
2015-06-05 15:07:06 +02:00
if [ " $pfx " = host_ ] ; then
add_host_cppflags -Dsnprintf= _snprintf
else
add_compat strtod.o strtod = avpriv_strtod
add_compat msvcrt/snprintf.o snprintf = avpriv_snprintf \
_snprintf = avpriv_snprintf \
vsnprintf = avpriv_vsnprintf
fi
fi
2016-07-21 00:04:35 +03:00
add_${ pfx } cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
2013-02-28 16:16:10 +01:00
# The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
# 0x601 by default unless something else is set by the user.
# This can easily lead to us detecting functions only present
# in such new versions and producing binaries requiring windows 7.0.
2017-12-21 20:23:14 +01:00
# Therefore explicitly set the default to Vista unless the user has
2013-02-28 16:16:10 +01:00
# set something else on the command line.
2015-07-24 23:12:43 +03:00
# Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
# family. For these cases, configure is free to use any functions
# found in the SDK headers by default. (Alternatively, we could force
# _WIN32_WINNT to 0x0602 in that case.)
2018-02-04 20:21:57 +01:00
test_${ pfx } cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
2018-03-15 18:22:51 -03:00
{ test_${ pfx } cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0600; }
2015-07-24 23:12:43 +03:00
#ifdef WINAPI_FAMILY
#include <winapifamily.h>
#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#error not desktop
#endif
#endif
EOF
2016-07-20 23:39:20 +03:00
if [ " $pfx " = "" ] ; then
check_func strtoll || add_cflags -Dstrtoll= _strtoi64
2017-03-15 12:39:34 +01:00
check_func strtoull || add_cflags -Dstrtoull= _strtoui64
2016-07-20 23:39:20 +03:00
fi
2018-02-04 20:21:57 +01:00
elif test_${ pfx } cpp_condition stddef.h "defined __KLIBC__" ; then
2013-02-28 16:16:10 +01:00
eval ${ pfx } libc_type = klibc
2018-02-04 20:21:57 +01:00
elif test_${ pfx } cpp_condition sys/cdefs.h "defined __BIONIC__" ; then
2013-02-28 16:16:10 +01:00
eval ${ pfx } libc_type = bionic
2018-02-04 20:21:57 +01:00
elif test_${ pfx } cpp_condition sys/brand.h "defined LABELED_BRAND_NAME" ; then
2013-02-28 16:16:10 +01:00
eval ${ pfx } libc_type = solaris
add_${ pfx } cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE= 600
2018-11-11 22:02:56 +11:00
elif test_${ pfx } cpp_condition sys/version.h "defined __DJGPP__" ; then
eval ${ pfx } libc_type = djgpp
add_cppflags -U__STRICT_ANSI__
2018-11-11 21:49:29 +11:00
add_cflags " -include $source_path /compat/djgpp/math.h "
add_compat djgpp/math.o
2013-12-08 16:13:07 -03:00
fi
2018-03-15 18:22:51 -03:00
test_${ pfx } cc <<EOF
2014-09-24 05:04:24 +02:00
#include <time.h>
void *v = localtime_r;
EOF
2018-03-15 18:22:51 -03:00
test " $? " != 0 && test_${ pfx } cc -D_POSIX_C_SOURCE= 200112 -D_XOPEN_SOURCE= 600 <<EOF && add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2014-09-24 05:04:24 +02:00
#include <time.h>
void *v = localtime_r;
EOF
2017-09-23 16:35:49 +02:00
eval test -n " \${ ${ pfx } libc_type} " && enable ${ pfx } libc_${ libc_type }
2013-02-28 16:16:10 +01:00
}
2012-09-04 13:57:37 +01:00
2013-02-28 16:16:10 +01:00
probe_libc
probe_libc host_
2012-09-04 13:57:37 +01:00
2017-01-20 15:29:57 +01:00
# hacks for compiler/libc/os combinations
2013-12-01 23:06:02 -05:00
case $libc_type in
bionic)
add_compat strtod.o strtod = avpriv_strtod
; ;
esac
2013-11-14 12:19:04 +01:00
check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
add_cppflags '-I\$(SRC_PATH)/compat/float'
2018-02-04 20:21:57 +01:00
test_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
2010-03-30 16:28:00 +00:00
2014-12-21 03:46:53 +01:00
set_default libdir
: ${ shlibdir_default : = " $libdir " }
2015-05-29 16:08:36 +02:00
: ${ pkgconfigdir_default : = " $libdir /pkgconfig " }
2014-12-21 03:46:53 +01:00
2008-06-02 23:51:36 +00:00
set_default $PATHS_LIST
2012-09-16 21:47:16 +01:00
set_default nm
2008-06-02 23:51:36 +00:00
2017-05-04 13:56:40 +02:00
disabled optimizations || enabled ossfuzz || check_cflags -fomit-frame-pointer
2003-10-18 18:47:06 +00:00
2013-05-09 15:39:25 +03:00
enable_weak_pic( ) {
disabled pic && return
2009-10-11 14:32:18 +00:00
enable pic
2009-08-23 13:46:07 +00:00
add_cppflags -DPIC
2013-06-05 14:51:28 +03:00
case " $target_os " in
2017-10-12 11:03:08 +03:00
mingw*| cygwin*| win*)
2013-06-05 14:51:28 +03:00
; ;
*)
add_cflags -fPIC
2017-10-12 11:04:53 +03:00
add_asflags -fPIC
2013-06-05 14:51:28 +03:00
; ;
esac
2009-10-11 14:32:18 +00:00
}
2013-05-09 15:39:25 +03:00
enabled pic && enable_weak_pic
2009-08-23 13:46:07 +00:00
2018-02-04 20:21:57 +01:00
test_cc <<EOF || die "Symbol mangling check failed."
2008-03-18 02:01:20 +00:00
int ff_extern;
EOF
2024-09-19 22:22:46 +02:00
sym = $( $nm $TMPO | awk '/[ \t]+[^ \t]?ff_extern$/{ print substr($0, match($0, /[^ \t]?ff_extern$/)) }' )
2008-03-18 02:01:20 +00:00
extern_prefix = ${ sym %%ff_extern* }
2024-09-11 23:09:34 +02:00
log " Symbol prefix detected as: ' ${ extern_prefix } ' "
2017-03-24 20:24:08 +01:00
! disabled inline_asm && check_inline_asm inline_asm '"" ::'
2008-02-27 22:06:48 +00:00
2023-10-29 18:46:16 +01:00
check_cc pragma_deprecated "" '_Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")'
2013-03-27 18:23:01 +01:00
2024-03-27 05:53:16 +01:00
test_cpp_condition stdlib.h "defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)" && enable bigendian
2009-07-22 20:41:41 +00:00
2018-03-28 15:03:56 -03:00
check_cc const_nan math.h "struct { double d; } static const bar[] = { { NAN } }"
2017-09-13 14:07:21 -03:00
2015-06-13 13:09:21 +02:00
if ! enabled ppc64 || enabled bigendian; then
disable vsx
fi
2014-06-18 04:51:35 -04:00
2014-08-05 12:08:09 +02:00
check_gas( ) {
log " check_gas using ' $as ' as AS "
# :vararg is used on aarch64, arm and ppc altivec
2018-03-08 15:42:32 +01:00
check_as vararg "
2014-08-05 12:08:09 +02:00
.macro m n, y:vararg=0
\n: .int \y
2014-05-29 14:21:05 +02:00
.endm
2018-03-08 15:42:32 +01:00
m x" || return 1
2014-08-05 12:08:09 +02:00
# .altmacro is only used in arm asm
2017-10-20 04:43:13 +02:00
! enabled arm || check_as gnu_as ".altmacro"
2014-08-05 12:08:09 +02:00
}
2014-08-06 05:55:33 -07:00
if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
2014-08-09 08:06:12 -07:00
nogas = :
2014-08-06 05:38:43 -07:00
enabled_any arm aarch64 && nogas = die
2014-08-05 19:31:08 +02:00
enabled_all ppc altivec && [ $target_os_default != aix ] && nogas = warn
2014-08-09 08:06:12 -07:00
as_noop = -v
case $as_type in
arm*) gaspp_as_type = armasm; as_noop = -h ; ;
gcc) gaspp_as_type = gas ; ;
*) gaspp_as_type = $as_type ; ;
esac
[ $target_os = "darwin" ] && gaspp_as_type = " apple- $gaspp_as_type "
2014-08-10 19:16:42 +02:00
test " ${ as #*gas-preprocessor.pl } " != " $as " ||
2018-03-15 18:22:51 -03:00
test_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${ as : = $cc } $as_noop &&
2014-08-10 19:16:42 +02:00
gas = " ${ gas : =gas-preprocessor.pl } -arch $arch -as-type $gaspp_as_type -- ${ as : = $cc } "
2014-08-05 12:08:09 +02:00
if ! check_gas ; then
as = ${ gas : = $as }
check_gas || \
2014-08-10 16:05:41 +03:00
$nogas "GNU assembler not found, install/update gas-preprocessor"
2014-08-05 12:08:09 +02:00
fi
2014-05-30 09:58:43 +02:00
2017-10-20 04:43:13 +02:00
check_as as_func ".func test
.endfunc"
2014-05-29 14:21:05 +02:00
fi
2013-07-09 20:51:00 +03:00
check_inline_asm inline_asm_labels '"1:\n"'
2014-03-18 15:29:14 +11:00
check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
2013-12-10 20:13:32 +01:00
if enabled aarch64; then
2023-05-25 14:57:37 +03:00
as_arch_level = "armv8-a"
check_as as_arch_directive " .arch $as_arch_level "
2023-10-17 10:47:17 +03:00
if enabled as_arch_directive; then
# Check for higher .arch levels. We only need armv8.2-a in order to
# enable the extensions we want below - we primarily want to control
# them via .arch_extension. However:
#
# Clang before version 17 (Xcode versions up to and including 15.0)
# didn't support controlling the dotprod/i8mm extensions via
# .arch_extension; thus try to enable them via the .arch level as well.
for level in armv8.2-a armv8.4-a armv8.6-a; do
check_arch_level $level
done
# Clang before version 17 (Xcode versions up to and including 15.0)
# also had a bug (https://github.com/llvm/llvm-project/issues/32220)
# causing a plain ".arch <level>" to not have any effect unless it
2024-02-21 14:22:06 +02:00
# had an extra "+<feature>" included - but it was activated on the next
2023-10-17 10:47:17 +03:00
# ".arch_extension" directive. Check if we can include "+crc" as dummy
# feature to make the .arch directive behave as expected and take
# effect right away.
check_arch_level " ${ as_arch_level } +crc "
fi
2023-05-25 14:57:37 +03:00
2014-04-05 13:46:51 +02:00
enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
2013-12-10 20:13:32 +01:00
# internal assembler in clang 3.3 does not support this instruction
enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
2023-10-12 23:18:28 +03:00
archext_list = "dotprod i8mm sve sve2"
2023-05-25 14:57:37 +03:00
enabled dotprod && check_archext_insn dotprod 'udot v0.4s, v0.16b, v0.16b'
enabled i8mm && check_archext_insn i8mm 'usdot v0.4s, v0.16b, v0.16b'
2023-10-12 23:18:28 +03:00
enabled sve && check_archext_insn sve 'whilelt p0.s, x0, x1'
enabled sve2 && check_archext_insn sve2 'sqrdmulh z0.s, z0.s, z0.s'
2023-05-25 14:57:37 +03:00
# Disable the main feature (e.g. HAVE_NEON) if neither inline nor external
# assembly support the feature out of the box. Skip this for the features
# checked with check_archext_insn above, as that function takes care of
# updating all the variables as necessary.
for v in $ARCH_EXT_LIST_ARM ; do
is_in $v $archext_list && continue
enabled_any ${ v } _external ${ v } _inline || disable $v
done
2013-12-10 20:13:32 +01:00
2010-01-18 21:05:01 +00:00
elif enabled arm; then
2009-07-23 23:30:50 +00:00
2017-10-07 21:20:36 +02:00
enabled msvc && check_cpp_condition thumb stddef.h "defined _M_ARMT"
2018-03-15 18:22:51 -03:00
test_cpp_condition stddef.h "defined __thumb__" && test_cc <<EOF && enable_weak thumb
2012-12-04 05:35:11 +01:00
float func(float a, float b){ return a+b; }
EOF
2011-06-14 11:29:48 +01:00
enabled thumb && check_cflags -mthumb || check_cflags -marm
2009-10-02 08:41:52 +00:00
2017-10-07 21:20:36 +02:00
if check_cpp_condition vfp_args stddef.h "defined __ARM_PCS_VFP" ; then
:
elif check_cpp_condition vfp_args stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30" ; then
:
2018-02-04 20:21:57 +01:00
elif ! test_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ] ; then
2011-01-16 18:42:36 +00:00
case " ${ cross_prefix :- $cc } " in
2017-10-20 03:43:58 +02:00
*hardfloat*) enable vfp_args; fpabi = vfp ; ;
2018-03-28 15:19:35 -03:00
*) check_ld "cc" vfp_args <<EOF && fpabi=vfp || fpabi=soft ;;
2009-07-22 16:05:24 +00:00
__asm__ (".eabi_attribute 28, 1");
int main(void) { return 0; }
EOF
2011-01-16 18:42:36 +00:00
esac
warn " Compiler does not indicate floating-point ABI, guessing $fpabi . "
fi
2009-07-22 16:05:24 +00:00
2023-05-25 14:57:37 +03:00
# Test for various instruction sets, testing support both in inline and
# external assembly. This sets the ${v}_inline or ${v}_external flags
# if the instruction can be used unconditionally in either inline or
# external assembly. This means that if the ${v}_external feature is set,
# that feature can be used unconditionally in various support macros
# anywhere in external assembly, in any function.
2012-12-01 15:19:10 +00:00
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'
2012-12-04 23:29:34 +00:00
enabled vfp && check_insn vfp 'fadds s0, s0, s0'
2012-12-01 15:19:10 +00:00
enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
2014-08-07 18:34:35 +02:00
enabled setend && check_insn setend 'setend be'
2012-12-01 15:19:10 +00:00
2023-05-25 14:57:37 +03:00
# If neither inline nor external assembly can use the feature by default,
# disable the main unsuffixed feature (e.g. HAVE_NEON).
#
# For targets that support runtime CPU feature detection, don't disable
# the main feature flag - there we assume that all supported toolchains
# can assemble code for all instruction set features (e.g. NEON) with
# suitable assembly flags (such as ".fpu neon"); we don't check
# specifically that they really do.
2014-07-16 19:43:12 +03:00
[ $target_os = linux ] || [ $target_os = android ] ||
2012-12-05 02:11:22 +00:00
map 'enabled_any ${v}_external ${v}_inline || disable $v' \
$ARCH_EXT_LIST_ARM
2009-07-23 23:30:50 +00:00
2012-08-07 23:46:52 +02:00
check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
2011-10-02 23:38:32 +01:00
2017-10-20 04:43:13 +02:00
check_as as_arch_directive ".arch armv7-a"
2018-03-31 21:54:32 +03:00
check_as as_dn_directive "ra .dn d0.i16"
2017-10-20 04:43:13 +02:00
check_as as_fpu_directive ".fpu neon"
2015-03-05 23:38:00 +02:00
# llvm's integrated assembler supports .object_arch from llvm 3.5
2017-03-01 18:42:21 +00:00
[ " $objformat " = elf32 ] || [ " $objformat " = elf64 ] &&
2017-10-20 04:43:13 +02:00
check_as as_object_arch ".object_arch armv4"
2014-05-29 14:21:05 +02:00
2017-10-12 11:08:32 +03:00
# MS armasm fails to assemble our PIC constructs
2013-05-28 15:08:57 +03:00
[ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
2009-10-11 14:32:18 +00:00
2009-07-22 16:05:24 +00:00
elif enabled mips; then
2009-07-23 23:30:50 +00:00
2020-07-18 23:35:37 +08:00
# Check toolchain ISA level
2016-02-24 16:38:20 +00:00
if enabled mips64; then
2020-07-18 23:35:37 +08:00
enabled mips64r6 && check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' &&
disable mips64r2
enabled mips64r2 && check_inline_asm mips64r2 '"dext $0, $0, 0, 1"'
disable mips32r6 && disable mips32r5 && disable mips32r2
2016-02-24 16:38:20 +00:00
else
2020-07-18 23:35:37 +08:00
enabled mips32r6 && check_inline_asm mips32r6 '"aui $0, $0, 0"' &&
disable mips32r5 && disable mips32r2
enabled mips32r5 && check_inline_asm mips32r5 '"eretnc"'
enabled mips32r2 && check_inline_asm mips32r2 '"ext $0, $0, 0, 1"'
disable mips64r6 && disable mips64r5 && disable mips64r2
2015-03-05 17:40:14 +00:00
fi
2020-07-18 23:35:37 +08:00
enabled mipsfpu && check_inline_asm mipsfpu '"cvt.d.l $f0, $f2"'
2016-03-11 13:46:42 +05:30
enabled mipsfpu && ( enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64'
2020-07-18 23:35:37 +08:00
2016-03-07 19:49:10 +05:30
enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp'
enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2'
2020-07-18 23:35:37 +08:00
2021-04-12 23:37:05 +08:00
# MSA can be detected at runtime so we supply extra flags here
2020-07-18 23:35:37 +08:00
enabled mipsfpu && enabled msa && check_inline_asm msa '"addvi.b $w0, $w1, 1"' '-mmsa' && append MSAFLAGS '-mmsa'
# loongson2 have no switch cflag so we can only probe toolchain ability
enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"' && disable loongson3
# loongson3 is paired with MMI
enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"' '-mloongson-ext' && append MMIFLAGS '-mloongson-ext'
# MMI can be detected at runtime too
2021-08-03 12:05:21 +08:00
enabled mmi && check_inline_asm mmi '"pxor $f0, $f0, $f0"' '-mloongson-mmi' && append MMIFLAGS '-mloongson-mmi'
2009-07-23 23:30:50 +00:00
2017-06-01 14:07:19 +05:30
if enabled bigendian && enabled msa; then
disable msa
fi
2012-11-14 15:56:46 +00:00
elif enabled parisc; then
if enabled gcc; then
case $( $cc -dumpversion) in
2014-11-05 01:35:48 +01:00
4.[ 3-9] .*) check_cflags -fno-optimize-sibling-calls ; ;
2012-11-14 15:56:46 +00:00
esac
fi
2009-07-22 16:05:24 +00:00
elif enabled ppc; then
2009-07-23 23:30:50 +00:00
2012-08-07 23:46:52 +02:00
check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
check_inline_asm ibm_asm '"add 0, 0, 0"'
check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2009-07-22 16:05:24 +00:00
if enabled altivec; then
2017-06-12 11:48:57 +02:00
check_cflags -maltivec -mabi= altivec
2009-07-22 16:05:24 +00:00
# check if our compiler supports Motorola AltiVec C API
2017-10-17 03:00:50 +02:00
check_cc altivec altivec.h "vector signed int v1 = (vector signed int) { 0 };
vector signed int v2 = (vector signed int) { 1 };
v1 = vec_add(v1, v2);"
2009-07-22 16:05:24 +00:00
2012-08-16 00:10:33 +01:00
enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
2009-07-22 16:05:24 +00:00
fi
2009-07-23 23:30:50 +00:00
2014-06-18 04:51:35 -04:00
if enabled vsx; then
2015-05-10 02:47:31 +02:00
check_cflags -mvsx &&
2017-10-17 03:00:50 +02:00
check_cc vsx altivec.h "int v[4] = { 0 };
vector signed int v1 = vec_vsx_ld(0, v);"
2014-06-18 04:51:35 -04:00
fi
2015-05-10 02:47:31 +02:00
if enabled power8; then
2018-03-17 15:01:29 -03:00
check_cpp_condition power8 "altivec.h" "defined(_ARCH_PWR8)"
2015-05-10 02:47:31 +02:00
fi
2025-03-11 00:31:47 -04:00
if enabled altivec; then
2023-08-18 15:32:39 -04:00
check_cc vec_xl altivec.h "const unsigned char *y1i = { 0 };
vector unsigned char y0 = vec_xl(0, y1i);"
fi
2022-09-26 17:52:26 +03:00
elif enabled riscv; then
2023-12-05 17:54:26 +02:00
enabled rv && check_inline_asm rv '".option arch, +zbb\nrev8 t0, t1"'
2022-09-26 17:52:26 +03:00
enabled rvv && check_inline_asm rvv '".option arch, +v\nvsetivli zero, 0, e8, m1, ta, ma"'
2022-09-23 18:09:18 +03:00
enabled rv_zicbop && check_inline_asm rv_zicbop '".option arch, +zicbop\nprefetch.r 64(a0)"'
2024-05-07 22:08:38 +03:00
enabled rv_zvbb && check_inline_asm rv_zvbb '".option arch, +zvbb\nvclz.v v0, v8"'
2022-09-26 17:52:26 +03:00
2024-11-20 20:44:59 +08:00
elif enabled wasm; then
enabled simd128 && check_cc simd128 wasm_simd128.h "v128_t v = wasm_v128_load(0);"
2009-07-22 16:05:24 +00:00
elif enabled x86; then
2009-07-23 23:30:50 +00:00
2013-03-04 23:02:02 +01:00
check_builtin rdtsc intrin.h "__rdtsc()"
check_builtin mm_empty mmintrin.h "_mm_empty()"
2012-07-09 01:24:37 +02:00
2007-03-29 14:20:30 +00:00
# check whether EBP is available on x86
# As 'i' is stored on the stack, this program will crash
# if the base pointer is used to access it because the
# base pointer is cleared in the inline assembly code.
2007-04-13 20:16:13 +00:00
check_exec_crash <<EOF && enable ebp_available
2012-08-19 21:35:30 +02:00
volatile int i=0;
__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
return i;
2007-03-29 14:20:30 +00:00
EOF
2009-09-30 12:39:18 +00:00
# check whether EBX is available on x86
2012-08-07 23:46:52 +02:00
check_inline_asm ebx_available '""::"b"(0)' &&
check_inline_asm ebx_available '"":::"%ebx"'
2007-05-12 03:20:41 +00:00
2010-10-06 01:26:13 +00:00
# check whether xmm clobbers are supported
2012-08-07 23:46:52 +02:00
check_inline_asm xmm_clobbers '"":::"%xmm0"'
2010-10-06 01:26:13 +00:00
2014-03-20 13:14:33 +01:00
check_inline_asm inline_asm_direct_symbol_refs '"movl ' $extern_prefix 'test, %eax"' ||
check_inline_asm inline_asm_direct_symbol_refs '"movl ' $extern_prefix 'test(%rip), %eax"'
2014-03-18 15:53:26 +11:00
2014-06-28 11:05:52 -04:00
# check whether binutils is new enough to compile SSSE3/MMXEXT
2012-08-27 03:07:11 +02:00
enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
2008-03-08 18:33:07 +00:00
2017-06-20 19:14:32 -03:00
probe_x86asm( ) {
x86asmexe_probe = $1
2018-02-04 20:21:57 +01:00
if test_cmd $x86asmexe_probe -v; then
2017-06-20 19:14:32 -03:00
x86asmexe = $x86asmexe_probe
2016-10-08 14:18:33 +00:00
x86asm_debug = "-g -F dwarf"
2017-06-24 17:51:02 +02:00
X86ASMDEP =
2016-10-13 02:45:09 +02:00
X86ASM_DEPFLAGS = '-MD $(@:.o=.d)'
2010-09-26 21:01:24 +00:00
fi
2017-10-21 01:07:34 +02:00
check_x86asm x86asm "movbe ecx, [5]"
2017-06-20 19:14:32 -03:00
}
2010-09-26 21:01:24 +00:00
2017-06-20 19:14:32 -03:00
if ! disabled_any asm mmx x86asm; then
2017-05-22 12:48:15 +00:00
disable x86asm
2024-10-03 15:25:37 +02:00
for program in $x86asmexe nasm; do
2017-05-22 12:48:15 +00:00
probe_x86asm $program && break
2017-06-20 19:14:32 -03:00
done
2024-10-12 17:41:29 -05:00
disabled x86asm && die "nasm not found or too old. Please install/update nasm or use --disable-x86asm for a build without hand-optimized assembly."
2017-03-01 18:42:21 +00:00
X86ASMFLAGS = " -f $objformat "
2016-10-08 14:18:33 +00:00
test -n " $extern_prefix " && append X86ASMFLAGS "-DPREFIX"
2010-09-26 21:01:24 +00:00
case " $objformat " in
2016-10-08 14:18:33 +00:00
elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ; ;
2010-09-26 21:01:24 +00:00
esac
2022-02-23 16:57:30 +08:00
enabled avx512 && check_x86asm avx512_external "vmovdqa32 [eax]{k1}{z}, zmm0"
enabled avx512icl && check_x86asm avx512icl_external "vpdpwssds zmm31{k1}{z}, zmm29, zmm28"
enabled avx2 && check_x86asm avx2_external "vextracti128 xmm0, ymm0, 0"
enabled xop && check_x86asm xop_external "vpmacsdd xmm0, xmm1, xmm2, xmm3"
enabled fma4 && check_x86asm fma4_external "vfmaddps ymm0, ymm1, ymm2, ymm3"
2010-06-24 20:49:37 +00:00
fi
2009-07-23 23:30:50 +00:00
2010-01-14 19:58:09 +00:00
case " $cpu " in
athlon*| opteron*| k8*| pentium| pentium-mmx| prescott| nocona| atom| geode)
disable fast_clz
; ;
esac
2021-12-15 11:51:04 +08:00
elif enabled loongarch; then
enabled lsx && check_inline_asm lsx '"vadd.b $vr0, $vr1, $vr2"' '-mlsx' && append LSXFLAGS '-mlsx'
enabled lasx && check_inline_asm lasx '"xvadd.b $xr0, $xr1, $xr2"' '-mlasx' && append LASXFLAGS '-mlasx'
2007-03-29 14:20:30 +00:00
fi
2017-10-17 03:00:50 +02:00
check_cc intrinsics_neon arm_neon.h "int16x8_t test = vdupq_n_s16(0)"
2022-11-14 02:32:33 -03:00
check_cc intrinsics_sse2 emmintrin.h "__m128i test = _mm_setzero_si128()"
2014-05-13 23:03:28 +02:00
2011-03-06 13:57:34 +00:00
check_ldflags -Wl,--as-needed
2014-09-21 09:58:10 +01:00
check_ldflags -Wl,-z,noexecstack
2024-10-14 23:43:11 +03:00
if [ $target_os = "darwin" ] ; then
check_ldflags -Wl,-no_warn_duplicate_libraries
fi
2011-03-06 13:57:34 +00:00
2012-12-07 15:03:40 +01:00
if ! disabled network; then
2014-03-06 14:52:03 +01:00
check_func getaddrinfo $network_extralibs
check_func inet_aton $network_extralibs
2011-01-25 09:28:01 +00:00
check_type netdb.h "struct addrinfo"
2012-06-21 14:19:56 +03:00
check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
2011-01-25 09:28:01 +00:00
check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2012-06-25 12:08:44 +03:00
check_type poll.h "struct pollfd"
2012-08-08 16:01:01 +02:00
check_type netinet/sctp.h "struct sctp_event_subscribe"
2016-03-09 14:17:46 +01:00
check_struct "sys/socket.h" "struct msghdr" msg_flags
2014-03-06 14:52:03 +01:00
check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
check_type netinet/in.h "struct sockaddr_in6"
check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
check_type "sys/types.h sys/socket.h" socklen_t
2011-01-25 09:28:01 +00:00
# Prefer arpa/inet.h over winsock2
2018-02-13 09:31:57 +01:00
if check_headers arpa/inet.h ; then
2011-01-25 09:28:01 +00:00
check_func closesocket
2018-02-13 09:31:57 +01:00
elif check_headers winsock2.h ; then
2012-07-16 16:51:33 +02:00
check_func_headers winsock2.h closesocket -lws2 &&
network_extralibs = "-lws2" ||
{ check_func_headers winsock2.h closesocket -lws2_32 &&
2013-12-31 10:11:24 +02:00
network_extralibs = "-lws2_32" ; } || disable winsock2_h network
2012-07-16 01:11:18 +03:00
check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
2014-03-06 14:52:03 +01:00
2011-01-25 09:28:01 +00:00
check_type ws2tcpip.h socklen_t
check_type ws2tcpip.h "struct addrinfo"
2012-06-21 14:19:56 +03:00
check_type ws2tcpip.h "struct group_source_req"
check_type ws2tcpip.h "struct ip_mreq_source"
2011-01-25 09:28:01 +00:00
check_type ws2tcpip.h "struct ipv6_mreq"
2012-06-25 12:08:44 +03:00
check_type winsock2.h "struct pollfd"
2014-03-06 14:52:03 +01:00
check_struct winsock2.h "struct sockaddr" sa_len
2011-01-25 09:28:01 +00:00
check_type ws2tcpip.h "struct sockaddr_in6"
check_type ws2tcpip.h "struct sockaddr_storage"
else
disable network
fi
fi
2014-03-06 14:52:03 +01:00
check_builtin MemoryBarrier windows.h "MemoryBarrier()"
2015-06-06 01:55:06 -03:00
check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
2014-03-06 14:52:03 +01:00
2022-08-10 02:23:26 +02:00
check_builtin float16 "" "_Float16 f16var"
if enabled float16; then
if enabled x86; then
test_cpp_condition stddef.h "defined(__F16C__)" && enable fast_float16
elif enabled arm || enabled aarch64; then
enable fast_float16
fi
fi
2015-09-03 11:55:48 +02:00
case " $custom_allocator " in
2023-08-23 23:44:47 +02:00
"" )
; ;
2015-09-03 11:55:48 +02:00
jemalloc)
2023-08-23 23:44:47 +02:00
test -n " $malloc_prefix " ||
malloc_prefix = $( $pkg_config --variable= jemalloc_prefix $pkg_config_flags jemalloc 2>/dev/null)
require_pkg_config custom_allocator jemalloc jemalloc/jemalloc.h ${ malloc_prefix } malloc
2015-09-03 11:55:48 +02:00
; ;
tcmalloc)
2023-08-23 23:44:47 +02:00
require_pkg_config custom_allocator libtcmalloc gperftools/tcmalloc.h tc_malloc
2015-09-03 11:55:48 +02:00
malloc_prefix = tc_
; ;
2023-08-23 23:44:47 +02:00
*)
require_pkg_config custom_allocator " $custom_allocator " stdlib.h malloc
; ;
2015-09-03 11:55:48 +02:00
esac
2023-08-23 23:44:47 +02:00
if test -n " $custom_allocator " ; then
add_extralibs " $custom_allocator_extralibs "
fi
2024-10-07 11:31:27 +02:00
# Unlike other feature flags or libraries, spirv_compiler is not defined
# within any of our predefined categories of components.
# It gets defined if either libshaderc or libglslang check succeeds.
# As such, its in a state of neither being explicitly enabled, nor
# explicitly disabled, but even in this state, being mentioned in
# _deps results in it always passing.
# Disable it explicitly to fix this.
disable spirv_compiler
2014-03-06 14:52:03 +01:00
check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
check_func ${ malloc_prefix } memalign && enable memalign
check_func ${ malloc_prefix } posix_memalign && enable posix_memalign
2009-02-23 01:56:08 +00:00
2012-11-27 04:55:26 +01:00
check_func access
2023-07-08 11:48:13 -06:00
check_func_headers stdlib.h arc4random_buf
2017-10-12 17:44:06 -03:00
check_lib clock_gettime time.h clock_gettime || check_lib clock_gettime time.h clock_gettime -lrt
2010-06-30 10:38:01 +00:00
check_func fcntl
2007-11-23 11:09:28 +00:00
check_func fork
check_func gethrtime
2012-07-03 20:14:09 -07:00
check_func getopt
2007-11-23 11:09:28 +00:00
check_func getrusage
2012-06-20 13:46:52 +01:00
check_func gettimeofday
2009-07-24 00:12:55 +00:00
check_func isatty
2007-11-23 11:09:28 +00:00
check_func mkstemp
2010-12-22 14:13:04 +00:00
check_func mmap
2012-10-13 02:40:48 +00:00
check_func mprotect
2014-03-06 14:52:03 +01:00
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2016-12-08 10:16:34 +01:00
check_func_headers time.h nanosleep || check_lib nanosleep time.h nanosleep -lrt
2022-10-18 18:10:01 +02:00
check_func_headers sys/prctl.h prctl
2014-03-06 14:52:03 +01:00
check_func sched_getaffinity
2010-02-09 22:55:11 +00:00
check_func setrlimit
2013-05-25 15:32:14 +02:00
check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
2010-03-25 22:46:35 +00:00
check_func strerror_r
2011-12-24 00:27:12 +01:00
check_func sysconf
2011-12-22 21:10:07 +01:00
check_func sysctl
2024-06-30 18:33:18 +08:00
check_func tempnam
2012-06-21 17:00:25 +01:00
check_func usleep
2014-03-06 14:52:03 +01:00
2011-03-22 03:47:48 +00:00
check_func_headers conio.h kbhit
2009-01-11 22:05:43 +00:00
check_func_headers io.h setmode
2009-04-09 14:55:05 +00:00
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2017-10-07 03:16:11 +02:00
check_func_headers mach/mach_time.h mach_absolute_time
2014-03-06 14:52:03 +01:00
check_func_headers stdlib.h getenv
2015-08-25 12:48:12 +02:00
check_func_headers sys/stat.h lstat
2022-02-04 12:14:57 -08:00
check_func_headers sys/auxv.h getauxval
2024-09-09 06:34:42 -04:00
check_func_headers sys/auxv.h elf_aux_info
2023-05-26 10:20:21 +03:00
check_func_headers sys/sysctl.h sysctlbyname
2014-03-06 14:52:03 +01:00
2019-12-11 22:53:28 +02:00
check_func_headers windows.h GetModuleHandle
2012-01-01 23:54:40 +00:00
check_func_headers windows.h GetProcessAffinityMask
2008-09-20 16:17:27 +00:00
check_func_headers windows.h GetProcessTimes
2020-01-21 14:47:57 +02:00
check_func_headers windows.h GetStdHandle
2012-06-20 13:46:52 +01:00
check_func_headers windows.h GetSystemTimeAsFileTime
2016-09-01 13:50:38 -03:00
check_func_headers windows.h LoadLibrary
2011-01-05 05:16:33 +00:00
check_func_headers windows.h MapViewOfFile
2014-03-14 18:30:03 +01:00
check_func_headers windows.h PeekNamedPipe
2012-11-30 16:56:57 +02:00
check_func_headers windows.h SetConsoleTextAttribute
2015-06-30 16:31:19 -06:00
check_func_headers windows.h SetConsoleCtrlHandler
2019-12-11 22:53:28 +02:00
check_func_headers windows.h SetDllDirectory
2012-06-21 17:00:25 +01:00
check_func_headers windows.h Sleep
2009-03-19 21:52:01 +00:00
check_func_headers windows.h VirtualAlloc
2012-02-27 10:27:17 +01:00
check_func_headers glob.h glob
2021-07-15 15:44:05 -03:00
if enabled xlib; then
check_pkg_config xlib_x11 x11 "X11/Xlib.h" XPending ||
check_lib xlib_x11 "X11/Xlib.h" XPending -lX11 ||
disable xlib
check_pkg_config xlib_xext xext "X11/Xlib.h X11/extensions/XShm.h" XShmAttach ||
2021-07-15 16:52:35 -03:00
check_lib xlib_xext "X11/Xlib.h X11/extensions/XShm.h" XShmAttach -lXext ||
2021-07-15 15:44:05 -03:00
disable xlib
check_pkg_config xlib_xv xv "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute ||
check_lib xlib_xv "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv ||
disable xlib
fi
2007-07-11 13:57:22 +00:00
2018-02-13 09:31:57 +01:00
check_headers direct.h
2018-09-02 17:29:54 -03:00
check_headers dirent.h
2018-02-13 09:31:57 +01:00
check_headers dxgidebug.h
check_headers dxva.h
2018-09-02 17:29:54 -03:00
check_headers dxva2api.h -D_WIN32_WINNT= 0x0600
2018-02-13 09:31:57 +01:00
check_headers io.h
2020-12-30 22:19:16 +01:00
enabled libdrm &&
check_headers linux/dma-buf.h
2018-09-02 17:29:54 -03:00
check_headers linux/perf_event.h
2018-02-13 09:31:57 +01:00
check_headers malloc.h
2017-04-04 07:45:41 +02:00
check_headers mftransform.h
2018-09-02 17:29:54 -03:00
check_headers net/udplite.h
2018-02-13 09:31:57 +01:00
check_headers poll.h
2024-01-07 00:55:51 -05:00
check_headers pthread_np.h
2018-02-13 09:31:57 +01:00
check_headers sys/param.h
check_headers sys/resource.h
check_headers sys/select.h
check_headers sys/time.h
check_headers sys/un.h
2018-09-02 17:29:54 -03:00
check_headers termios.h
2018-02-13 09:31:57 +01:00
check_headers unistd.h
check_headers valgrind/valgrind.h
2016-03-02 20:11:40 +08:00
check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox
2025-03-25 22:57:58 +02:00
check_func_headers VideoToolbox/VideoToolbox.h VTDecompressionSessionDecodeFrame -framework VideoToolbox
2023-12-13 21:08:30 +08:00
check_func_headers VideoToolbox/VideoToolbox.h VTPixelTransferSessionCreate -framework VideoToolbox
2023-07-16 17:13:29 +08:00
check_func_headers VideoToolbox/VideoToolbox.h VTPixelRotationSessionCreate -framework VideoToolbox
2018-02-13 09:31:57 +01:00
check_headers windows.h
2018-09-02 17:29:54 -03:00
check_headers asm/types.h
2007-09-24 15:52:06 +00:00
2016-11-23 21:54:53 -08:00
# it seems there are versions of clang in some distros that try to use the
# gcc headers, which explodes for stdatomic
# so we also check that atomics actually work here
2022-01-19 12:50:41 +01:00
#
# some configurations also require linking to libatomic, so try
# both with -latomic and without
for LATOMIC in "-latomic" "" ; do
2024-03-23 13:38:06 +01:00
check_builtin stdatomic stdatomic.h \
"atomic_int foo, bar = -1; atomic_store(&foo, 0); foo += bar" \
2022-01-19 12:50:41 +01:00
$LATOMIC && eval stdatomic_extralibs = "\$LATOMIC" && break
done
2016-11-23 21:54:53 -08:00
2017-11-09 14:27:33 -03:00
check_lib advapi32 "windows.h" RegCloseKey -ladvapi32
2018-04-15 20:33:37 -03:00
check_lib bcrypt "windows.h bcrypt.h" BCryptGenRandom -lbcrypt &&
check_cpp_condition bcrypt bcrypt.h "defined BCRYPT_RNG_ALGORITHM"
2023-08-20 00:09:38 +03:00
check_lib ole32 "windows.h objbase.h" CoTaskMemFree -lole32
2016-12-08 10:16:34 +01:00
check_lib shell32 "windows.h shellapi.h" CommandLineToArgvW -lshell32
check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2014-03-06 14:52:03 +01:00
2018-02-20 09:41:46 +01:00
check_lib android android/native_window.h ANativeWindow_acquire -landroid
2024-04-17 12:37:35 +08:00
check_lib mediandk "stdint.h media/NdkMediaFormat.h" AMediaFormat_new -lmediandk
2018-02-20 09:41:46 +01:00
check_lib camera2ndk "stdbool.h stdint.h camera/NdkCameraManager.h" ACameraManager_create -lcamera2ndk
2017-09-15 14:27:36 +02:00
enabled appkit && check_apple_framework AppKit
2017-09-06 11:42:54 +02:00
enabled audiotoolbox && check_apple_framework AudioToolbox
2017-09-06 11:31:40 +02:00
enabled avfoundation && check_apple_framework AVFoundation
2017-09-06 11:33:20 +02:00
enabled coreimage && check_apple_framework CoreImage
2021-12-18 21:34:10 -08:00
enabled metal && check_apple_framework Metal
2017-09-06 11:53:48 +02:00
enabled videotoolbox && check_apple_framework VideoToolbox
2017-09-06 11:31:40 +02:00
2017-10-11 17:55:25 -03:00
check_apple_framework CoreFoundation
check_apple_framework CoreMedia
check_apple_framework CoreVideo
2020-06-15 15:09:33 +02:00
check_apple_framework CoreAudio
2017-10-11 17:55:25 -03:00
2025-03-25 19:26:07 +02:00
enabled audiotoolbox && {
check_type AudioToolbox/AudioToolbox.h AudioObjectPropertyAddress
}
2017-09-06 11:31:40 +02:00
enabled avfoundation && {
2017-10-11 17:55:25 -03:00
disable coregraphics applicationservices
2017-10-12 20:05:39 -03:00
check_lib coregraphics CoreGraphics/CoreGraphics.h CGGetActiveDisplayList "-framework CoreGraphics" ||
2025-03-25 22:12:26 +02:00
check_lib applicationservices ApplicationServices/ApplicationServices.h CGGetActiveDisplayList "-framework ApplicationServices"
check_objc_class AVFoundation/AVFoundation.h AVCaptureSession
}
2017-09-06 11:31:40 +02:00
2017-09-26 11:30:28 -07:00
enabled videotoolbox && {
2017-09-06 11:53:48 +02:00
check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices"
2017-09-26 11:30:28 -07:00
check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia"
2021-02-23 14:02:27 +09:00
check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVCWithAlpha "-framework CoreMedia"
2021-11-13 02:43:06 -06:00
check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_VP9 "-framework CoreMedia"
2023-11-10 22:11:44 +02:00
check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_AV1 "-framework CoreMedia"
2019-04-13 16:36:00 +02:00
check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework CoreVideo"
2021-11-13 00:30:28 -06:00
check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange "-framework CoreVideo"
check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange "-framework CoreVideo"
check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange "-framework CoreVideo"
check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange "-framework CoreVideo"
check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange "-framework CoreVideo"
check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange "-framework CoreVideo"
2019-06-26 18:57:59 +08:00
check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ "-framework CoreVideo"
check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_ITU_R_2100_HLG "-framework CoreVideo"
check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_Linear "-framework CoreVideo"
2021-10-31 19:34:33 +08:00
check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferYCbCrMatrix_ITU_R_2020 "-framework CoreVideo"
check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferColorPrimaries_ITU_R_2020 "-framework CoreVideo"
check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_ITU_R_2020 "-framework CoreVideo"
check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_SMPTE_ST_428_1 "-framework CoreVideo"
2024-12-16 10:28:29 +01:00
check_func_headers VideoToolbox/VTCompressionProperties.h kVTQPModulationLevel_Default "-framework CoreVideo"
2017-09-26 11:30:28 -07:00
}
2017-09-06 11:31:40 +02:00
2021-12-21 02:35:40 -06:00
enabled metal && test_cmd $metalcc -v || disable metal
2014-03-06 14:52:03 +01:00
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2020-11-05 14:13:14 +01:00
check_type "windows.h dxva.h" "DXVA_PicParams_AV1" -DWINAPI_FAMILY= WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP= 0
2015-07-26 13:35:47 +02:00
check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY= WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP= 0
2015-12-03 11:09:51 +01:00
check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY= WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP= 0
2022-08-01 15:30:59 +03:00
check_type "windows.h dxgi1_2.h" "DXGI_OUTDUPL_FRAME_INFO"
2022-07-08 18:02:40 +02:00
check_type "windows.h dxgi1_2.h" "IDXGIOutput1"
check_type "windows.h dxgi1_5.h" "IDXGIOutput5"
2015-05-26 00:14:58 +02:00
check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
2015-09-11 18:23:30 -03:00
check_type "windows.h d3d11.h" "ID3D11VideoContext"
2023-12-05 14:46:43 +08:00
check_type "windows.h d3d12.h" "ID3D12Device"
check_type "windows.h d3d12video.h" "ID3D12VideoDecoder"
2023-08-22 13:26:36 +08:00
check_type "windows.h d3d12video.h" "ID3D12VideoEncoder"
test_code cc "windows.h d3d12video.h" "D3D12_FEATURE_VIDEO feature = D3D12_FEATURE_VIDEO_ENCODER_CODEC" && \
test_code cc "windows.h d3d12video.h" "D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS req" && enable d3d12_encoder_feature
2022-07-19 13:44:58 +02:00
check_type "windows.h" "DPI_AWARENESS_CONTEXT" -D_WIN32_WINNT= 0x0A00
2025-07-13 16:56:20 -03:00
check_type "windows.h security.h schnlsp.h" SecPkgContext_KeyingMaterialInfo -DSECURITY_WIN32
2015-07-25 20:30:31 +03:00
check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT= 0x0602
2017-04-04 07:45:41 +02:00
check_func_headers mfapi.h MFCreateAlignedMemoryBuffer -lmfplat
2015-01-25 13:01:11 +01:00
2015-06-13 09:42:48 -07:00
check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
2019-10-25 11:00:13 +05:30
check_type "vdpau/vdpau.h" "VdpPictureInfoVP9"
2022-05-16 18:45:58 +05:30
check_type "vdpau/vdpau.h" "VdpPictureInfoAV1"
2015-06-13 09:42:48 -07:00
2019-07-30 02:51:42 -05:00
if [ -z " $nvccflags " ] ; then
nvccflags = $nvccflags_default
fi
2021-06-24 01:53:10 +02:00
nvccflags = " $nvccflags -std=c++11 "
2019-07-30 02:51:42 -05:00
if enabled x86_64 || enabled ppc64 || enabled aarch64; then
nvccflags = " $nvccflags -m64 "
else
nvccflags = " $nvccflags -m32 "
fi
if enabled cuda_nvcc; then
nvccflags = " $nvccflags -ptx "
else
2021-02-13 02:59:42 +11:00
nvccflags = " $nvccflags -S -nocudalib -nocudainc --cuda-device-only -Wno-c++11-narrowing -include ${ source_link } /compat/cuda/cuda_runtime.h "
2019-07-30 02:51:42 -05:00
check_nvcc cuda_llvm
2019-02-20 19:57:53 -08:00
fi
2018-03-03 21:28:26 +01:00
if ! disabled ffnvcodec; then
2019-02-26 17:24:49 +01:00
ffnv_hdr_list = "ffnvcodec/nvEncodeAPI.h ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h ffnvcodec/dynlink_nvcuvid.h"
2023-09-12 17:31:30 +03:00
check_pkg_config ffnvcodec "ffnvcodec >= 12.1.14.0" " $ffnv_hdr_list " "" || \
check_pkg_config ffnvcodec "ffnvcodec >= 12.0.16.1 ffnvcodec < 12.1" " $ffnv_hdr_list " "" || \
check_pkg_config ffnvcodec "ffnvcodec >= 11.1.5.3 ffnvcodec < 12.0" " $ffnv_hdr_list " "" || \
check_pkg_config ffnvcodec "ffnvcodec >= 11.0.10.3 ffnvcodec < 11.1" " $ffnv_hdr_list " "" || \
check_pkg_config ffnvcodec "ffnvcodec >= 8.1.24.15 ffnvcodec < 8.2" " $ffnv_hdr_list " ""
2018-03-03 21:28:26 +01:00
fi
2018-02-26 01:20:51 +01:00
2021-11-19 13:45:21 +01:00
if enabled_all libglslang libshaderc; then
die "ERROR: libshaderc and libglslang are mutually exclusive, if in doubt, disable libglslang"
fi
2018-03-17 15:01:29 -03:00
check_cpp_condition winrt windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"
2015-09-29 18:11:03 +08:00
2011-11-01 20:41:43 +01:00
if ! disabled w32threads && ! enabled pthreads; then
2013-12-23 04:24:52 +01:00
check_func_headers "windows.h process.h" _beginthreadex &&
2017-12-21 20:23:14 +01:00
check_type "windows.h" CONDITION_VARIABLE &&
2018-04-08 14:00:47 -03:00
check_type "windows.h" INIT_ONCE &&
2013-12-23 04:24:52 +01:00
enable w32threads || disable w32threads
2015-09-29 18:11:03 +08:00
if ! enabled w32threads && enabled winrt; then
check_func_headers "windows.h" CreateThread &&
enable w32threads || disable w32threads
fi
2011-11-01 20:41:43 +01:00
fi
2006-06-16 19:26:31 +00:00
# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
2011-11-02 00:00:21 +09:00
if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
2017-04-26 16:57:11 +02:00
if check_lib pthreads pthread.h pthread_join -pthread &&
check_lib pthreads pthread.h pthread_create -pthread; then
2006-11-18 16:16:58 +00:00
add_cflags -pthread
2017-04-26 16:57:11 +02:00
elif check_lib pthreads pthread.h pthread_join -pthreads &&
check_lib pthreads pthread.h pthread_create -pthreads; then
2006-11-18 16:16:58 +00:00
add_cflags -pthreads
2017-04-26 16:57:11 +02:00
elif check_lib pthreads pthread.h pthread_join -ldl -pthread &&
check_lib pthreads pthread.h pthread_create -ldl -pthread; then
2014-05-26 15:21:03 +02:00
add_cflags -ldl -pthread
2017-04-26 16:57:11 +02:00
elif check_lib pthreads pthread.h pthread_join -lpthreadGC2 &&
check_lib pthreads pthread.h pthread_create -lpthreadGC2; then
2013-12-12 17:05:34 +01:00
:
2017-04-26 16:57:11 +02:00
elif check_lib pthreads pthread.h pthread_join -lpthread &&
check_lib pthreads pthread.h pthread_create -lpthread; then
2013-12-12 17:05:34 +01:00
:
2017-04-26 16:57:11 +02:00
elif check_func pthread_join && check_func pthread_create; then
2016-12-08 10:16:34 +01:00
enable pthreads
2006-11-18 16:16:58 +00:00
fi
2018-03-28 15:03:56 -03:00
check_cc pthreads "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER"
2006-06-16 19:26:31 +00:00
2017-11-16 13:11:24 -03:00
if enabled pthreads; then
2017-09-24 18:46:47 +02:00
check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" $pthreads_extralibs
2017-11-16 13:11:24 -03:00
check_func pthread_cancel $pthreads_extralibs
2024-01-07 00:55:51 -05:00
hdrs = pthread.h
if enabled pthread_np_h; then
hdrs = " $hdrs pthread_np.h "
fi
check_lib pthread_set_name_np " $hdrs " pthread_set_name_np -lpthread
check_lib pthread_setname_np " $hdrs " pthread_setname_np -lpthread
2017-11-16 13:11:24 -03:00
fi
2012-05-08 19:02:33 +02:00
fi
2018-05-05 21:57:44 +03:00
enabled zlib && { check_pkg_config zlib zlib "zlib.h" zlibVersion ||
check_lib zlib zlib.h zlibVersion -lz; }
2017-07-28 12:18:59 +02:00
enabled bzlib && check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
enabled lzma && check_lib lzma lzma.h lzma_version_number -llzma
2013-12-11 14:21:48 +01:00
2021-06-11 23:54:34 +02:00
enabled zlib && test_exec $zlib_extralibs <<EOF && enable zlib_gzip
#include <zlib.h>
int main(void) {
if (zlibCompileFlags() & (1 << 17)) return 1;
return 0;
}
EOF
[ -x " $( command -v gzip) " ] && enable gzip
enabled zlib_gzip && enabled gzip || disable ptx_compression
2025-05-15 23:07:54 +02:00
enabled zlib_gzip && enabled gzip || disable resource_compression
2017-01-24 13:57:52 +01:00
# On some systems dynamic loading requires no extra linker flags
2017-10-04 18:55:32 -03:00
check_lib libdl dlfcn.h "dlopen dlsym" || check_lib libdl dlfcn.h "dlopen dlsym" -ldl
2017-01-24 13:57:52 +01:00
2017-01-22 16:42:36 +01:00
check_lib libm math.h sin -lm
2007-09-29 20:25:06 +00:00
2012-10-26 14:42:47 +01:00
atan2f_args = 2
2015-07-20 04:04:46 -03:00
copysign_args = 2
2015-11-14 11:57:28 -05:00
hypot_args = 2
2012-10-26 14:42:47 +01:00
ldexpf_args = 2
powf_args = 2
2007-06-18 21:42:38 +00:00
2012-10-19 18:58:39 +02:00
for func in $MATH_FUNCS ; do
2017-01-22 16:42:36 +01:00
eval check_mathfunc $func \$ { ${ func } _args:-1} $libm_extralibs
2012-10-24 13:15:42 +02:00
done
2006-06-16 19:26:31 +00:00
# these are off by default, so fail if requested and not available
2021-12-21 00:00:19 -05:00
enabled avisynth && { require_headers "avisynth/avisynth_c.h avisynth/avs/version.h" &&
2023-06-11 20:26:06 -04:00
{ test_cpp_condition avisynth/avs/version.h "AVS_MAJOR_VER >= 3 && AVS_MINOR_VER >= 7 && AVS_BUGFIX_VER >= 3 || AVS_MAJOR_VER >= 3 && AVS_MINOR_VER > 7 || AVS_MAJOR_VER > 3" ||
die "ERROR: AviSynth+ header version must be >= 3.7.3" ; } }
2019-07-30 02:51:42 -05:00
enabled cuda_nvcc && { check_nvcc cuda_nvcc || die "ERROR: failed checking for nvcc." ; }
2022-11-02 14:10:05 +01:00
enabled chromaprint && { check_pkg_config chromaprint libchromaprint "chromaprint.h" chromaprint_get_version ||
require chromaprint chromaprint.h chromaprint_get_version -lchromaprint; }
2018-09-02 17:29:54 -03:00
enabled decklink && { require_headers DeckLinkAPI.h &&
2021-08-09 08:15:02 +08:00
{ test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a0b0000" || die "ERROR: Decklink API version must be >= 10.11" ; } }
2021-09-05 16:34:37 +02:00
enabled frei0r && require_headers "frei0r.h"
2017-03-20 12:18:45 +01:00
enabled gmp && require gmp gmp.h mpz_export -lgmp
2017-02-16 17:37:25 +01:00
enabled gnutls && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init
2018-09-02 17:29:54 -03:00
enabled jni && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found" ; }
2018-12-02 18:50:21 +01:00
enabled ladspa && require_headers "ladspa.h dlfcn.h"
2022-04-09 19:58:55 +02:00
enabled lcms2 && require_pkg_config lcms2 "lcms2 >= 2.13" lcms2.h cmsCreateContext
2024-04-05 14:15:54 -03:00
enabled libaom && require_pkg_config libaom "aom >= 2.0.0" aom/aom_codec.h aom_codec_version
2025-06-11 12:41:31 +02:00
enabled liboapv && require_pkg_config liboapv "oapv >= 0.1.13.1" "oapv/oapv.h" oapve_encode
2019-01-14 21:52:23 +02:00
enabled libaribb24 && { check_pkg_config libaribb24 "aribb24 > 1.0.3" "aribb24/aribb24.h" arib_instance_new ||
{ enabled gpl && require_pkg_config libaribb24 aribb24 "aribb24/aribb24.h" arib_instance_new; } ||
die "ERROR: libaribb24 requires version higher than 1.0.3 or --enable-gpl." ; }
2023-10-17 22:13:34 +09:00
enabled libaribcaption && require_pkg_config libaribcaption "libaribcaption >= 1.1.1" "aribcaption/aribcaption.h" aribcc_context_alloc
2018-05-13 17:07:48 +02:00
enabled lv2 && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new
2013-06-24 10:40:15 +02:00
enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
2021-11-25 11:52:55 +01:00
enabled libass && require_pkg_config libass "libass >= 0.11.0" ass/ass.h ass_library_init
2017-09-28 13:46:31 -03:00
enabled libbluray && require_pkg_config libbluray libbluray libbluray/bluray.h bd_open
2017-02-16 17:37:25 +01:00
enabled libbs2b && require_pkg_config libbs2b libbs2b bs2b.h bs2b_open
2013-06-24 10:40:15 +02:00
enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
2017-04-26 16:57:11 +02:00
{ check_lib libcelt celt/celt.h celt_decoder_create_custom -lcelt0 ||
2013-06-24 10:40:15 +02:00
die "ERROR: libcelt must be installed and version must be >= 0.11.0." ; }
2017-09-27 16:45:32 -03:00
enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas
2017-08-08 15:27:27 +02:00
enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2
2020-08-07 16:05:13 -03:00
enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.5.0" "dav1d/dav1d.h" dav1d_version
2018-12-03 14:37:05 +08:00
enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" davs2.h davs2_decoder_open
2017-01-23 11:57:14 +01:00
enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new
2023-12-29 12:23:26 +08:00
enabled libdrm && check_pkg_config libdrm libdrm xf86drm.h drmGetVersion
2024-02-18 22:01:44 -06:00
enabled libdvdnav && require_pkg_config libdvdnav "dvdnav >= 6.1.1" dvdnav/dvdnav.h dvdnav_open2
2024-03-04 11:36:22 -06:00
enabled libdvdread && require_pkg_config libdvdread "dvdread >= 6.1.2" dvdread/dvd_reader.h DVDOpen2
2017-11-11 15:35:32 -03:00
enabled libfdk_aac && { check_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
2015-06-02 19:14:40 +02:00
{ require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
warn "using libfdk without pkg-config" ; } }
2017-04-17 10:22:52 +02:00
flite_extralibs = "-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
enabled libflite && require libflite "flite/flite.h" flite_init $flite_extralibs
2014-04-17 03:42:17 +02:00
enabled fontconfig && enable libfontconfig
2017-01-23 11:57:14 +01:00
enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit
enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
2017-09-27 16:45:32 -03:00
enabled libfribidi && require_pkg_config libfribidi fribidi fribidi.h fribidi_version_info
2023-05-26 12:11:41 +02:00
enabled libharfbuzz && require_pkg_config libharfbuzz harfbuzz hb.h hb_buffer_create
2021-11-19 13:45:21 +01:00
enabled libglslang && { check_lib spirv_compiler glslang/Include/glslang_c_interface.h glslang_initialize_process \
2024-01-31 17:28:56 +01:00
-lglslang -lMachineIndependent -lGenericCodeGen \
2021-11-08 09:31:05 +01:00
-lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm ||
2021-11-19 13:45:21 +01:00
require spirv_compiler glslang/Include/glslang_c_interface.h glslang_initialize_process \
2024-01-31 17:28:56 +01:00
-lglslang -lMachineIndependent -lOSDependent -lHLSL -lOGLCompiler -lGenericCodeGen \
-lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm ; }
2017-11-11 15:35:32 -03:00
enabled libgme && { check_pkg_config libgme libgme gme/gme.h gme_new_emu ||
2017-06-23 01:53:37 +01:00
require libgme gme/gme.h gme_new_emu -lgme -lstdc++; }
2017-11-11 18:04:22 -03:00
enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h" ; do
check_lib libgsm " ${ gsm_hdr } " gsm_create -lgsm && break;
done || die "ERROR: libgsm not found" ; }
2017-10-13 19:50:37 -03:00
enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc $pthreads_extralibs
2022-04-17 09:22:34 -04:00
enabled libjxl && require_pkg_config libjxl "libjxl >= 0.7.0" jxl/decode.h JxlDecoderVersion &&
require_pkg_config libjxl_threads "libjxl_threads >= 0.7.0" jxl/thread_parallel_runner.h JxlThreadParallelRunner
2018-09-07 15:40:25 -04:00
enabled libklvanc && require libklvanc libklvanc/vanc.h klvanc_context_create -lklvanc
2023-10-02 13:03:28 -04:00
enabled libkvazaar && require_pkg_config libkvazaar "kvazaar >= 2.0.0" kvazaar.h kvz_api_get
2024-04-01 21:32:04 +00:00
enabled liblc3 && require_pkg_config liblc3 "lc3 >= 1.1.0" lc3.h lc3_hr_setup_encoder
2023-12-31 12:44:20 +05:30
enabled liblensfun && require_pkg_config liblensfun lensfun lensfun.h lf_db_create
2024-03-19 10:07:18 -03:00
enabled liblcevc_dec && require_pkg_config liblcevc_dec "lcevc_dec >= 2.0.0" "LCEVC/lcevc_dec.h" LCEVC_CreateDecoder
2021-02-03 14:49:46 +08:00
if enabled libmfx && enabled libvpl; then
die "ERROR: can not use libmfx and libvpl together"
2017-05-05 18:16:03 -07:00
# While it may appear that require is being used as a pkg-config
# fallback for libmfx, it is actually being used to detect a different
# installation route altogether. If libmfx is installed via the Intel
# Media SDK or Intel Media Server Studio, these don't come with
# pkg-config support. Instead, users should make sure that the build
# can find the libraries and headers through other means.
2021-02-03 14:49:46 +08:00
elif enabled libmfx; then
{ check_pkg_config libmfx "libmfx >= 1.28 libmfx < 2.0" "mfxvideo.h" MFXInit ||
2020-09-08 11:17:27 +08:00
# Some old versions of libmfx have the following settings in libmfx.pc:
# includedir=/usr/include
# Cflags: -I${includedir}
# So add -I${includedir}/mfx to CFLAGS
2021-02-03 14:49:46 +08:00
{ check_pkg_config libmfx "libmfx >= 1.28 libmfx < 2.0" "mfx/mfxvideo.h" MFXInit && add_cflags -I${ libmfx_incdir } /mfx; } ||
{ require libmfx "mfxvideo.h mfxdefs.h" MFXInit " -llibmfx $advapi32_extralibs " &&
{ test_cpp_condition mfxdefs.h "MFX_VERSION >= 1028 && MFX_VERSION < 2000" || die "ERROR: libmfx version must be >= 1.28 and < 2.0" ; } &&
warn "using libmfx without pkg-config" ; } } &&
2023-10-06 08:59:25 -04:00
warn "libmfx is deprecated. Please run configure with --enable-libvpl to use libvpl instead."
2021-02-03 14:49:46 +08:00
elif enabled libvpl; then
# Consider pkg-config only. The name of libmfx is still passed to check_pkg_config function for --enable-libvpl option
# because QSV has dependency on libmfx, we can use the same dependency if using libmfx in this check. The package name
# is extracted from "vpl >= 2.6"
check_pkg_config libmfx "vpl >= 2.6" "mfxvideo.h mfxdispatcher.h" MFXLoad || \
die "ERROR: libvpl >= 2.6 not found"
2023-11-27 16:11:52 +08:00
add_cflags -DMFX_DEPRECATED_OFF
2024-02-29 13:34:34 +08:00
check_type "vpl/mfxdefs.h vpl/mfxvideo.h" "struct mfxConfigInterface"
2021-02-03 14:49:46 +08:00
fi
2022-05-22 20:19:11 +08:00
2019-10-26 22:18:31 +08:00
if enabled libmfx; then
2020-09-08 11:17:27 +08:00
check_cc MFX_CODEC_VP9 "mfxdefs.h mfxstructures.h" "MFX_CODEC_VP9"
2019-10-26 22:18:31 +08:00
fi
2017-09-28 13:46:31 -03:00
enabled libmodplug && require_pkg_config libmodplug libmodplug libmodplug/modplug.h ModPlug_Load
2017-12-16 16:50:45 +01:00
enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs
2019-08-28 23:16:35 +03:00
enabled libmysofa && { check_pkg_config libmysofa libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine ||
require libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine -lmysofa $zlib_extralibs ; }
2021-09-06 14:26:27 +03:00
enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc -lnppidei -lnppif ||
check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppif -lnppc -lnppidei ||
2017-08-29 13:30:29 +02:00
die "ERROR: libnpp not found" ; }
2013-06-20 13:42:21 +02:00
enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2018-09-02 17:29:54 -03:00
enabled libopencv && { check_headers opencv2/core/core_c.h &&
2017-11-11 15:35:32 -03:00
{ check_pkg_config libopencv opencv opencv2/core/core_c.h cvCreateImageHeader ||
2017-10-11 17:55:25 -03:00
require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
2017-09-27 16:45:32 -03:00
require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
2023-12-09 22:07:31 +01:00
enabled libopenh264 && require_pkg_config libopenh264 "openh264 >= 1.3.0" wels/codec_api.h WelsGetCodecVersion
2017-11-11 15:35:32 -03:00
enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
2017-10-18 11:34:06 -07:00
{ require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
2017-10-13 15:16:55 -03:00
enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
2023-08-15 16:26:31 +08:00
enabled libopenvino && { { check_pkg_config libopenvino openvino openvino/c/openvino.h ov_core_create && enable openvino2; } ||
{ check_pkg_config libopenvino openvino c_api/ie_c_api.h ie_c_api_version ||
require libopenvino c_api/ie_c_api.h ie_c_api_version -linference_engine_c_api; } }
2017-05-04 00:26:13 -03:00
enabled libopus && {
enabled libopus_decoder && {
2017-09-27 16:45:32 -03:00
require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
2017-05-04 00:26:13 -03:00
}
enabled libopus_encoder && {
2017-09-27 16:45:32 -03:00
require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create
2017-05-04 00:26:13 -03:00
}
}
2025-02-16 16:17:21 +01:00
enabled libplacebo && require_pkg_config libplacebo "libplacebo >= 5.229.0" libplacebo/vulkan.h pl_vulkan_create
2017-09-28 13:46:31 -03:00
enabled libpulse && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new
2023-11-28 23:58:15 +01:00
enabled libqrencode && require_pkg_config libqrencode libqrencode qrencode.h QRcode_encodeString
2023-12-26 16:19:10 +01:00
enabled libquirc && require libquirc quirc.h quirc_decode -lquirc
2020-03-08 17:25:31 -04:00
enabled librabbitmq && require_pkg_config librabbitmq "librabbitmq >= 0.7.1" amqp.h amqp_new_connection
2022-10-10 23:43:31 -03:00
enabled librav1e && require_pkg_config librav1e "rav1e >= 0.5.0" rav1e.h rav1e_context_new
2022-06-10 00:16:51 +02:00
enabled librist && require_pkg_config librist "librist >= 0.2.7" librist/librist.h rist_receiver_create
2023-10-07 21:36:23 -04:00
enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_new_from_data
2017-02-16 17:37:25 +01:00
enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
2017-10-13 15:16:55 -03:00
enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++"
2021-11-19 13:45:21 +01:00
enabled libshaderc && require_pkg_config spirv_compiler "shaderc >= 2019.1" shaderc/shaderc.h shaderc_compiler_initialize
2017-09-27 16:45:32 -03:00
enabled libshine && require_pkg_config libshine shine shine/layer3.h shine_encode_buffer
2017-11-11 15:35:32 -03:00
enabled libsmbclient && { check_pkg_config libsmbclient smbclient libsmbclient.h smbc_init ||
2017-10-11 17:55:25 -03:00
require libsmbclient libsmbclient.h smbc_init -lsmbclient; }
2017-10-13 15:16:55 -03:00
enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy -lstdc++
2017-10-11 17:55:25 -03:00
enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
2023-09-13 06:31:16 -04:00
enabled libssh && require_pkg_config libssh "libssh >= 0.6.0" libssh/sftp.h sftp_init
2017-10-04 20:07:47 +02:00
enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init
2018-09-01 19:02:47 +02:00
enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket
2022-02-24 20:36:46 -03:00
enabled libsvtav1 && require_pkg_config libsvtav1 "SvtAv1Enc >= 0.9.0" EbSvtAv1Enc.h svt_av1_enc_init_handle
2018-06-03 20:22:50 +03:00
enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow
2017-09-27 16:45:32 -03:00
enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate
2013-06-20 13:42:21 +02:00
enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2017-12-19 18:45:27 +01:00
enabled libtls && require_pkg_config libtls libtls tls.h tls_configure
2024-03-15 12:42:49 +08:00
enabled libtorch && check_cxxflags -std= c++17 && require_cpp libtorch torch/torch.h "torch::Tensor" -ltorch -lc10 -ltorch_cpu -lstdc++ -lpthread
2013-06-24 10:40:15 +02:00
enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
2017-04-26 16:57:11 +02:00
{ check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
2013-06-24 10:40:15 +02:00
die "ERROR: libtwolame must be installed and version must be >= 0.3.10" ; }
2020-10-05 20:16:25 +08:00
enabled libuavs3d && require_pkg_config libuavs3d "uavs3d >= 1.1.41" uavs3d.h uavs3d_decode
2017-09-28 13:46:31 -03:00
enabled libv4l2 && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl
2017-09-27 16:45:32 -03:00
enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
2021-12-24 12:43:50 -08:00
enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 2.0.0" libvmaf.h vmaf_init
2023-09-25 13:14:13 +01:00
enabled libvmaf && check_pkg_config libvmaf_cuda "libvmaf >= 2.0.0" libvmaf_cuda.h vmaf_cuda_state_init
2013-06-20 13:42:21 +02:00
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
2017-09-27 16:45:32 -03:00
enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init &&
require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init
2015-06-21 21:48:44 +02:00
2013-06-20 13:42:21 +02:00
enabled libvpx && {
2015-06-11 16:56:31 +02:00
enabled libvpx_vp8_decoder && {
2017-11-17 17:24:07 -08:00
check_pkg_config libvpx_vp8_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
2019-03-04 11:50:53 -03:00
check_lib libvpx_vp8_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp8_dx VPX_IMG_FMT_HIGHBITDEPTH" " -lvpx $libm_extralibs $pthreads_extralibs "
2015-06-11 16:56:31 +02:00
}
enabled libvpx_vp8_encoder && {
2017-11-17 17:24:07 -08:00
check_pkg_config libvpx_vp8_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
2019-03-04 11:50:53 -03:00
check_lib libvpx_vp8_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp8_cx VPX_IMG_FMT_HIGHBITDEPTH" " -lvpx $libm_extralibs $pthreads_extralibs "
2015-06-11 16:56:31 +02:00
}
enabled libvpx_vp9_decoder && {
2017-11-17 17:24:07 -08:00
check_pkg_config libvpx_vp9_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
2019-03-05 06:09:11 +08:00
check_lib libvpx_vp9_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx VPX_IMG_FMT_HIGHBITDEPTH" " -lvpx $libm_extralibs $pthreads_extralibs "
2015-06-11 16:56:31 +02:00
}
enabled libvpx_vp9_encoder && {
2017-11-17 17:24:07 -08:00
check_pkg_config libvpx_vp9_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
2019-03-05 06:09:11 +08:00
check_lib libvpx_vp9_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VPX_IMG_FMT_HIGHBITDEPTH" " -lvpx $libm_extralibs $pthreads_extralibs "
2015-06-11 16:56:31 +02:00
}
if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
die "libvpx enabled but no supported decoders found"
fi
}
2015-06-21 21:48:44 +02:00
2024-06-05 21:51:46 +02:00
enabled libvvenc && require_pkg_config libvvenc "libvvenc >= 1.6.1" "vvenc/vvenc.h" vvenc_get_version
2015-05-19 18:04:07 -07:00
enabled libwebp && {
2017-09-27 16:45:32 -03:00
enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
2017-11-11 15:35:32 -03:00
enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; }
2022-07-24 12:11:49 +02:00
enabled libx264 && require_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode &&
2024-04-09 15:09:40 +02:00
require_cpp_condition libx264 x264.h "X264_BUILD >= 155" && {
2022-06-09 23:27:08 +00:00
[ " $toolchain " != "msvc" ] ||
require_cpp_condition libx264 x264.h "X264_BUILD >= 158" ; } &&
2023-03-11 11:51:13 +02:00
check_cpp_condition libx264_hdr10 x264.h "X264_BUILD >= 163" &&
2017-10-07 21:20:36 +02:00
check_cpp_condition libx262 x264.h "X264_MPEG2"
2017-01-23 11:57:14 +01:00
enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get &&
2022-11-03 22:20:09 +08:00
require_cpp_condition libx265 x265.h "X265_BUILD >= 89"
2017-10-11 22:28:29 -03:00
enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode " -lxavs $pthreads_extralibs $libm_extralibs "
2018-11-18 15:19:02 +08:00
enabled libxavs2 && require_pkg_config libxavs2 "xavs2 >= 1.3.0" "stdint.h xavs2.h" xavs2_api_get
2023-09-19 13:34:58 +02:00
enabled libxevd && require_pkg_config libxevd "xevd >= 0.4.1" "xevd.h" xevd_decode
2024-06-25 14:20:16 +02:00
enabled libxeve && require_pkg_config libxeve "xeve >= 0.5.1" "xeve.h" xeve_encode
2013-06-20 13:42:21 +02:00
enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2017-12-21 00:47:51 -03:00
enabled libzimg && require_pkg_config libzimg "zimg >= 2.7.0" zimg.h zimg_get_api_version
2019-07-30 14:39:32 -04:00
enabled libzmq && require_pkg_config libzmq "libzmq >= 4.2.1" zmq.h zmq_ctx_new
2017-10-13 19:52:27 -03:00
enabled libzvbi && require_pkg_config libzvbi zvbi-0.2 libzvbi.h vbi_decoder_new &&
2018-03-15 18:22:51 -03:00
{ test_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
2016-01-14 03:34:57 +01:00
enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl." ; }
2017-09-27 16:45:32 -03:00
enabled libxml2 && require_pkg_config libxml2 libxml-2.0 libxml2/libxml/xmlversion.h xmlCheckVersion
2018-04-21 15:53:31 +02:00
enabled mbedtls && { check_pkg_config mbedtls mbedtls mbedtls/x509_crt.h mbedtls_x509_crt_init ||
check_pkg_config mbedtls mbedtls mbedtls/ssl.h mbedtls_ssl_init ||
2018-05-23 02:11:30 +02:00
check_lib mbedtls mbedtls/ssl.h mbedtls_ssl_init -lmbedtls -lmbedx509 -lmbedcrypto ||
2018-04-21 15:53:31 +02:00
die "ERROR: mbedTLS not found" ; }
2016-01-21 09:29:39 +01:00
enabled mediacodec && { enabled jni || die "ERROR: mediacodec requires --enable-jni" ; }
2016-12-08 10:16:34 +01:00
enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
2016-12-04 13:40:13 +01:00
{ ! enabled cross_compile &&
add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
add_ldflags -L/opt/vc/lib/ &&
2016-12-08 10:16:34 +01:00
check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
2016-12-04 13:40:13 +01:00
die "ERROR: mmal not found" &&
check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS" ; }
2025-07-06 16:05:38 +08:00
enabled ohcodec && { check_lib ohcodec "multimedia/player_framework/native_avcodec_videodecoder.h" \
OH_VideoDecoder_CreateByName -lnative_media_codecbase -lnative_media_core -lnative_media_vdec ||
die "ERROR: missing native_media libs" ; }
2022-10-29 18:55:44 +02:00
enabled openal && { check_pkg_config openal "openal >= 1.1" "AL/al.h" alGetError ||
{ for al_extralibs in " ${ OPENAL_LIBS } " "-lopenal" "-lOpenAL32" ; do
2017-04-26 16:57:11 +02:00
check_lib openal 'AL/al.h' alGetError " ${ al_extralibs } " && break; done } ||
2013-06-24 10:40:15 +02:00
die "ERROR: openal not found" ; } &&
2018-03-15 18:22:51 -03:00
{ test_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
2013-06-24 10:40:15 +02:00
die "ERROR: openal must be installed and version must be 1.1 or compatible" ; }
2018-06-02 11:02:38 +08:00
enabled opencl && { check_pkg_config opencl OpenCL CL/cl.h clEnqueueNDRangeKernel ||
2024-06-28 12:46:00 +08:00
check_lib opencl OpenCL/cl.h clEnqueueNDRangeKernel "-framework OpenCL" ||
2017-04-26 16:57:11 +02:00
check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
2013-06-24 10:40:15 +02:00
die "ERROR: opencl not found" ; } &&
2018-03-15 18:22:51 -03:00
{ test_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
test_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
2013-06-24 10:40:15 +02:00
die "ERROR: opencl must be installed and version must be 1.2 or compatible" ; }
2017-04-26 16:57:11 +02:00
enabled opengl && { check_lib opengl GL/glx.h glXGetProcAddress "-lGL" ||
check_lib opengl windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
2024-06-28 12:46:00 +08:00
check_lib opengl OpenGL/gl3.h glGetError "-framework OpenGL" ||
check_lib opengl ES2/gl.h glGetError " -isysroot= ${ sysroot } -framework OpenGLES " ||
2013-11-24 20:13:27 +01:00
die "ERROR: opengl not found."
}
2019-09-02 21:04:42 +01:00
enabled omx_rpi && { test_code cc OMX_Core.h OMX_IndexConfigBrcmVideoRequestIFrame ||
{ ! enabled cross_compile &&
add_cflags -isystem/opt/vc/include/IL &&
test_code cc OMX_Core.h OMX_IndexConfigBrcmVideoRequestIFrame; } ||
die "ERROR: OpenMAX IL headers from raspberrypi/firmware not found" ; } &&
enable omx
2024-10-26 11:23:49 +02:00
enabled omx && require_headers OMX_Core.h && \
warn "The OpenMAX encoders are deprecated and will be removed in future versions"
2021-09-07 19:35:31 +02:00
enabled openssl && { { check_pkg_config openssl "openssl >= 3.0.0" openssl/ssl.h OPENSSL_init_ssl &&
{ enabled gplv3 || ! enabled gpl || enabled nonfree || die "ERROR: OpenSSL >=3.0.0 requires --enable-version3" ; } ; } ||
{ enabled gpl && ! enabled nonfree && die "ERROR: OpenSSL <3.0.0 is incompatible with the gpl" ; } ||
2025-06-25 21:02:58 +02:00
check_pkg_config openssl "openssl >= 1.1.0" openssl/ssl.h OPENSSL_init_ssl ||
2019-12-10 17:32:33 +08:00
check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto ||
2025-06-25 21:02:58 +02:00
check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto -lws2_32 -lgdi32 ||
die "ERROR: openssl (>= 1.1.0) not found" ; }
2019-05-05 15:01:53 +02:00
enabled pocketsphinx && require_pkg_config pocketsphinx pocketsphinx pocketsphinx/pocketsphinx.h ps_init
2018-01-06 09:36:58 +01:00
enabled rkmpp && { require_pkg_config rkmpp rockchip_mpp rockchip/rk_mpi.h mpp_create &&
require_pkg_config rockchip_mpp "rockchip_mpp >= 1.3.7" rockchip/rk_mpi.h mpp_create &&
2017-09-24 05:39:45 +00:00
{ enabled libdrm ||
die "ERROR: rkmpp requires --enable-libdrm" ; }
}
2024-07-29 05:12:31 +02:00
enabled vapoursynth && require_headers "vapoursynth/VSScript4.h vapoursynth/VapourSynth4.h"
2018-04-27 21:35:56 +02:00
2025-05-16 20:15:05 +08:00
enabled openssl && {
enabled whip_muxer && {
$pkg_config --exists --print-errors "openssl >= 1.0.1k" ||
require_pkg_config openssl "openssl >= 1.0.1k" openssl/ssl.h SSL_library_init ||
require_pkg_config openssl "openssl >= 1.0.1k" openssl/ssl.h OPENSSL_init_ssl
}
}
2006-08-29 07:34:58 +00:00
2015-12-29 22:47:05 +00:00
if enabled gcrypt; then
GCRYPT_CONFIG = " ${ cross_prefix } libgcrypt-config "
if " ${ GCRYPT_CONFIG } " --version > /dev/null 2>& 1; then
2016-01-08 23:40:50 +00:00
gcrypt_cflags = $( " ${ GCRYPT_CONFIG } " --cflags)
2017-04-17 10:22:52 +02:00
gcrypt_extralibs = $( " ${ GCRYPT_CONFIG } " --libs)
check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_extralibs ||
2016-01-08 23:40:50 +00:00
die "ERROR: gcrypt not found"
2017-10-11 17:55:25 -03:00
add_cflags $gcrypt_cflags
2015-12-29 22:47:05 +00:00
else
2017-03-20 12:18:45 +01:00
require gcrypt gcrypt.h gcry_mpi_new -lgcrypt
2015-12-29 22:47:05 +00:00
fi
fi
2017-08-30 13:13:08 +02:00
if enabled sdl2; then
2016-02-24 23:31:02 +00:00
SDL2_CONFIG = " ${ cross_prefix } sdl2-config "
2022-05-11 15:11:04 -05:00
test_pkg_config sdl2 "sdl2 >= 2.0.1 sdl2 < 3.0.0" SDL_events.h SDL_PollEvent
2018-01-07 17:58:33 -03:00
if disabled sdl2 && " ${ SDL2_CONFIG } " --version > /dev/null 2>& 1; then
2016-02-24 23:31:02 +00:00
sdl2_cflags = $( " ${ SDL2_CONFIG } " --cflags)
2017-04-17 10:22:52 +02:00
sdl2_extralibs = $( " ${ SDL2_CONFIG } " --libs)
2018-03-15 18:22:51 -03:00
test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
2022-06-18 01:46:12 +09:00
test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x030000" $sdl2_cflags &&
2018-01-07 17:58:33 -03:00
check_func_headers SDL_events.h SDL_PollEvent $sdl2_extralibs $sdl2_cflags &&
2017-09-28 21:34:38 -03:00
enable sdl2
2016-02-24 23:31:02 +00:00
fi
if test $target_os = "mingw32" ; then
2017-10-08 16:54:18 -03:00
sdl2_extralibs = $( filter_out '-mwindows' $sdl2_extralibs )
2016-02-24 23:31:02 +00:00
fi
fi
2017-05-05 17:59:21 -07:00
if enabled decklink; then
case $target_os in
mingw32*| mingw64*| win32| win64)
decklink_outdev_extralibs = " $decklink_outdev_extralibs -lole32 -loleaut32 "
decklink_indev_extralibs = " $decklink_indev_extralibs -lole32 -loleaut32 "
; ;
esac
fi
2017-07-28 13:22:40 +02:00
enabled securetransport &&
2024-06-28 12:46:00 +08:00
check_func SecIdentityCreate "-framework CoreFoundation -framework Security" &&
check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext" "-framework CoreFoundation -framework Security" ||
2017-07-28 13:22:40 +02:00
disable securetransport
2015-05-28 14:46:16 -05:00
2017-10-25 11:03:14 -07:00
enabled securetransport &&
2024-06-28 12:46:00 +08:00
check_func SecItemImport "-framework CoreFoundation -framework Security"
2017-10-25 11:03:14 -07:00
2017-07-28 13:22:40 +02:00
enabled schannel &&
check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 &&
2025-06-24 19:30:19 +02:00
check_func_headers "windows.h ncrypt.h" NCryptOpenStorageProvider -DSECURITY_WIN32 -lncrypt &&
check_func_headers "windows.h wincrypt.h" CertCreateSelfSignCertificate -DSECURITY_WIN32 -lcrypt32 &&
2018-03-17 16:49:15 -03:00
test_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" &&
2025-06-24 19:30:19 +02:00
schannel_extralibs = "-lsecur32 -lncrypt -lcrypt32" ||
2018-03-17 16:49:15 -03:00
disable schannel
2015-10-04 14:48:49 +02:00
2025-07-13 16:56:20 -03:00
enabled schannel && check_cc dtls_protocol "windows.h security.h schnlsp.h" "int i = SP_PROT_DTLS1_X_CLIENT;" -DSECURITY_WIN32
2011-12-20 00:28:47 +01:00
makeinfo --version > /dev/null 2>& 1 && enable makeinfo || disable makeinfo
2015-06-13 20:24:27 +02:00
enabled makeinfo \
&& [ 0$( makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/' ) -ge 5 ] \
2014-08-31 19:39:35 -07:00
&& enable makeinfo_html || disable makeinfo_html
disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
2013-11-21 16:57:56 -08:00
perl -v > /dev/null 2>& 1 && enable perl || disable perl
2013-11-26 11:37:54 -08:00
pod2man --help > /dev/null 2>& 1 && enable pod2man || disable pod2man
2025-01-24 23:32:52 +02:00
rsync --help 2> /dev/null | grep -q 'contimeout=' && enable rsync_contimeout || disable rsync_contimeout
2021-04-16 10:46:41 +02:00
xmllint --version > /dev/null 2>& 1 && enable xmllint || disable xmllint
2004-07-05 18:06:16 +00:00
2024-07-03 00:30:08 +02:00
check_headers linux/fb.h
check_headers linux/videodev2.h
test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
2025-06-06 16:09:34 -04:00
test_code cc sys/ioctl.h "int ioctl(int, int, ...)" && enable ioctl_posix
2024-07-03 00:30:08 +02:00
2017-09-20 18:55:40 -07:00
# check V4L2 codecs available in the API
2019-09-04 17:39:59 +08:00
if enabled v4l2_m2m; then
check_cc v4l2_m2m linux/videodev2.h "int i = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_VIDEO_M2M | V4L2_BUF_FLAG_LAST;"
check_cc vc1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VC1_ANNEX_G;"
check_cc mpeg1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG1;"
check_cc mpeg2_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG2;"
check_cc mpeg4_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG4;"
check_cc hevc_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_HEVC;"
check_cc h263_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H263;"
check_cc h264_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H264;"
check_cc vp8_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP8;"
check_cc vp9_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP9;"
fi
2011-12-27 06:31:41 +01:00
2018-02-13 09:31:57 +01:00
check_headers sys/videoio.h
2018-03-15 18:22:51 -03:00
test_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
2006-02-08 15:55:41 +00:00
2016-12-08 10:16:34 +01:00
check_lib user32 "windows.h winuser.h" GetShellWindow -luser32
check_lib vfw32 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2010-07-11 22:17:17 +00:00
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
# w32api 3.12 had it defined wrong
2017-10-07 21:20:36 +02:00
check_cpp_condition vfwcap_defines vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER"
2008-03-08 22:10:28 +00:00
2011-05-21 14:24:50 +02:00
check_type "dshow.h" IBaseFilter
2011-04-24 13:23:51 +02:00
if check_struct sys/soundcard.h audio_buf_info bytes; then
2017-10-26 16:14:54 -03:00
enable_sanitized sys/soundcard.h
2011-04-24 13:23:51 +02:00
else
2018-03-15 18:22:51 -03:00
test_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_sanitized sys/soundcard.h
2011-04-24 13:23:51 +02:00
#include <sys/soundcard.h>
audio_buf_info abc;
EOF
fi
2007-02-10 22:24:45 +00:00
2019-09-04 17:27:09 +08:00
enabled alsa && { check_pkg_config alsa alsa "alsa/asoundlib.h" snd_pcm_htimestamp ||
check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound; }
2009-01-26 09:16:09 +00:00
2017-03-21 12:10:40 +01:00
enabled libjack &&
require_pkg_config libjack jack jack/jack.h jack_port_get_latency_range
2009-04-02 23:53:47 +00:00
2023-06-17 18:48:38 -04:00
enabled sndio && check_pkg_config sndio sndio sndio.h sio_open
2011-03-26 19:03:41 -04:00
2013-01-17 11:24:01 +01:00
if enabled libcdio; then
2017-11-11 15:35:32 -03:00
check_pkg_config libcdio libcdio_paranoia "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open ||
check_pkg_config libcdio libcdio_paranoia "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open ||
2016-12-08 10:16:34 +01:00
check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
check_lib libcdio "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
2015-02-22 19:49:52 +00:00
die "ERROR: No usable libcdio/cdparanoia found"
2013-01-17 11:24:01 +01:00
fi
2011-09-13 17:23:06 +02:00
2017-11-11 15:35:32 -03:00
enabled libxcb && check_pkg_config libxcb "xcb >= 1.4" xcb/xcb.h xcb_connect ||
2017-10-08 18:46:21 -03:00
disable libxcb_shm libxcb_shape libxcb_xfixes
2014-08-24 14:18:22 +02:00
2014-10-30 00:26:27 +01:00
if enabled libxcb; then
2017-11-11 15:35:32 -03:00
enabled libxcb_shm && check_pkg_config libxcb_shm xcb-shm xcb/shm.h xcb_shm_attach
enabled libxcb_shape && check_pkg_config libxcb_shape xcb-shape xcb/shape.h xcb_shape_get_rectangles
enabled libxcb_xfixes && check_pkg_config libxcb_xfixes xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image
2014-08-24 14:18:22 +02:00
fi
2014-04-02 14:53:10 -04:00
check_func_headers "windows.h" CreateDIBSection " $gdigrab_indev_extralibs "
2023-12-21 23:22:29 +02:00
# check if building for desktop or uwp
test_cpp <<EOF && enable uwp
2017-07-04 20:03:00 +03:00
#ifdef WINAPI_FAMILY
#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#error desktop, not uwp
#else
// WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP
#endif
#else
#error no family set
#endif
EOF
2017-06-09 12:05:00 +03:00
2023-12-21 23:22:29 +02:00
mediafoundation_extralibs = "-lmfuuid -lole32 -lstrmiids"
2023-04-14 10:39:04 -04:00
2023-12-21 23:22:29 +02:00
if enabled uwp; then
# In UWP mode, we can't use LoadLibrary+GetProcAddress to conditionally
# try to load these APIs at runtime, like we do in regular desktop mode -
# therefore, we need to link directly against these APIs.
d3d11va_extralibs = "-ldxgi -ld3d11"
2023-12-21 23:25:00 +02:00
d3d12va_extralibs = "-ldxgi -ld3d12"
2023-12-21 23:22:29 +02:00
vaapi_win32_extralibs = "-ldxgi"
mediafoundation_extralibs = " -lmfplat $mediafoundation_extralibs "
fi
2022-05-25 12:54:01 +02:00
2020-07-05 16:49:44 +01:00
enabled libdrm &&
check_pkg_config libdrm_getfb2 libdrm "xf86drmMode.h" drmModeGetFB2
2013-05-17 02:32:21 +02:00
enabled vaapi &&
2018-09-18 23:30:39 +01:00
check_pkg_config vaapi "libva >= 0.35.0" "va/va.h" vaInitialize
2016-02-15 19:32:45 +00:00
2017-10-17 03:00:50 +02:00
if enabled vaapi; then
2023-04-14 10:39:04 -04:00
case $target_os in
mingw32*| mingw64*| win32| win64)
check_pkg_config vaapi_win32 "libva-win32" "va/va_win32.h" vaGetDisplayWin32
; ;
*)
check_pkg_config vaapi_drm "libva-drm" "va/va_drm.h" vaGetDisplayDRM
; ;
esac
2018-09-18 23:30:39 +01:00
2021-07-15 15:44:05 -03:00
if enabled xlib_x11; then
2018-09-18 23:30:39 +01:00
check_pkg_config vaapi_x11 "libva-x11" "va/va_x11.h" vaGetDisplay
fi
2016-11-23 12:15:00 +01:00
2018-03-17 15:01:29 -03:00
check_cpp_condition vaapi_1 "va/va.h" "VA_CHECK_VERSION(1, 0, 0)"
2019-03-20 14:51:12 +08:00
check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
2024-10-28 16:55:25 +08:00
check_type "va/va.h va/va_dec_vvc.h" "VAPictureParameterBufferVVC"
2019-03-20 14:51:12 +08:00
check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth
2020-10-29 14:54:25 +08:00
check_struct "va/va.h" "VADecPictureParameterBufferAV1" bit_depth_idx
2019-12-30 15:32:56 +08:00
check_type "va/va.h va/va_vpp.h" "VAProcFilterParameterBufferHDRToneMapping"
2019-03-20 14:51:12 +08:00
check_struct "va/va.h va/va_vpp.h" "VAProcPipelineCaps" rotation_flags
2021-11-22 15:53:50 +08:00
check_struct "va/va.h va/va_vpp.h" "VAProcPipelineCaps" blend_flags
2019-03-20 14:51:12 +08:00
check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
check_type "va/va.h va/va_enc_vp8.h" "VAEncPictureParameterBufferVP8"
check_type "va/va.h va/va_enc_vp9.h" "VAEncPictureParameterBufferVP9"
2023-09-11 15:52:31 +08:00
check_type "va/va.h va/va_enc_av1.h" "VAEncPictureParameterBufferAV1"
2018-09-18 23:30:39 +01:00
fi
2017-10-01 22:51:07 +01:00
2018-03-11 21:19:20 +00:00
if enabled_all opencl libdrm ; then
2017-03-04 23:57:48 +00:00
check_type "CL/cl_intel.h" "clCreateImageFromFdINTEL_fn" &&
2018-03-11 21:19:20 +00:00
enable opencl_drm_beignet
check_func_headers "CL/cl_ext.h" clImportMemoryARM &&
enable opencl_drm_arm
fi
if enabled_all opencl vaapi ; then
2019-03-26 23:39:19 +00:00
if enabled opencl_drm_beignet ; then
enable opencl_vaapi_beignet
else
check_type "CL/cl.h CL/cl_va_api_media_sharing_intel.h" "clCreateFromVA_APIMediaSurfaceINTEL_fn" &&
enable opencl_vaapi_intel_media
fi
2017-03-04 23:57:48 +00:00
fi
2017-03-05 16:21:41 +00:00
if enabled_all opencl dxva2 ; then
check_type "CL/cl_dx9_media_sharing.h" cl_dx9_surface_info_khr &&
enable opencl_dxva2
fi
2017-06-25 22:34:40 +01:00
if enabled_all opencl d3d11va ; then
check_type "CL/cl_d3d11.h" clGetDeviceIDsFromD3D11KHR_fn &&
enable opencl_d3d11
fi
2024-02-23 22:11:43 +08:00
if enabled_all opencl videotoolbox ; then
check_func_headers OpenCL/cl_gl_ext.h clCreateImageFromIOSurfaceWithPropertiesAPPLE -framework VideoToolbox -framework OpenCL &&
enable opencl_videotoolbox
fi
2013-02-21 12:34:42 +01:00
enabled vdpau &&
2017-10-07 21:20:36 +02:00
check_cpp_condition vdpau vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP"
2009-12-14 06:33:43 +00:00
2016-11-23 12:15:00 +01:00
enabled vdpau &&
2016-12-08 10:16:34 +01:00
check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11
2013-11-03 19:21:00 +01:00
2024-12-18 17:27:46 +09:00
if enabled_all vulkan vulkan_static; then
check_pkg_config vulkan "vulkan >= 1.3.277" "vulkan/vulkan.h" "defined VK_VERSION_1_3" ||
check_lib vulkan "vulkan/vulkan.h" vkGetInstanceProcAddr -lvulkan
elif enabled vulkan; then
2024-01-19 10:49:02 +10:00
check_pkg_config_header_only vulkan "vulkan >= 1.3.277" "vulkan/vulkan.h" "defined VK_VERSION_1_3" ||
check_cpp_condition vulkan "vulkan/vulkan.h" "defined(VK_VERSION_1_4) || (defined(VK_VERSION_1_3) && VK_HEADER_VERSION >= 277)"
2021-04-29 21:22:11 -03:00
fi
2019-08-28 21:58:10 +01:00
2023-10-14 18:36:46 +02:00
if disabled vulkan; then
disable libglslang libshaderc spirv_compiler
fi
2016-08-31 15:40:00 +02:00
if enabled x86; then
case $target_os in
2024-05-18 19:55:30 -04:00
freebsd| mingw32*| mingw64*| win32| win64| linux| cygwin*)
2016-08-31 15:40:00 +02:00
; ;
*)
2018-03-03 21:28:26 +01:00
disable ffnvcodec cuvid nvdec nvenc
2016-08-31 15:40:00 +02:00
; ;
esac
2020-04-23 09:33:35 +05:30
elif enabled_any aarch64 ppc64 && ! enabled bigendian; then
2019-03-12 13:54:04 +05:30
case $target_os in
linux)
; ;
*)
disable ffnvcodec cuvid nvdec nvenc
; ;
esac
2016-08-31 15:40:00 +02:00
else
2018-03-03 21:28:26 +01:00
disable ffnvcodec cuvid nvdec nvenc
2016-08-27 14:39:35 +02:00
fi
2018-03-03 21:28:26 +01:00
enabled ffnvcodec && enable cuda
2016-08-31 15:40:00 +02:00
enabled nvenc &&
2018-03-15 18:22:51 -03:00
test_cc -I$source_path <<EOF || disable nvenc
2018-02-26 01:20:51 +01:00
#include <ffnvcodec/nvEncodeAPI.h>
2016-08-31 15:40:00 +02:00
NV_ENCODE_API_FUNCTION_LIST flist;
2023-06-01 23:24:43 +02:00
void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_CODEC_H264_GUID } }; }
2016-08-31 15:40:00 +02:00
int main(void) { return 0; }
EOF
2022-11-05 21:17:37 +01:00
if enabled nvenc; then
check_type "ffnvcodec/nvEncodeAPI.h" "NV_ENC_PIC_PARAMS_AV1"
fi
2020-10-15 23:25:05 +02:00
if enabled_any nvdec cuvid; then
check_type "ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h" "CUVIDAV1PICPARAMS"
fi
2017-11-26 21:36:06 -05:00
enabled amf &&
2018-03-17 15:01:29 -03:00
check_cpp_condition amf "AMF/core/Version.h" \
2025-03-28 12:19:58 +01:00
"(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400240000"
2017-11-26 21:36:06 -05:00
2013-03-06 00:57:51 +01:00
# Funny iconv installations are not unusual, so check it after all flags have been set
2017-08-30 12:26:01 +02:00
if enabled libc_iconv; then
check_func_headers iconv.h iconv
elif enabled iconv; then
check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv
fi
2013-03-06 00:57:51 +01:00
2009-09-10 02:42:19 +00:00
enabled debug && add_cflags -g" $debuglevel " && add_asflags -g" $debuglevel "
2006-06-16 19:26:31 +00:00
# add some useful compiler flags if supported
2006-06-01 19:28:41 +00:00
check_cflags -Wall
2006-08-30 23:02:52 +00:00
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
2008-02-03 21:33:26 +00:00
check_cflags -Wwrite-strings
2008-02-03 22:31:25 +00:00
check_cflags -Wtype-limits
2009-01-16 00:37:38 +00:00
check_cflags -Wundef
2010-02-23 21:03:25 +00:00
check_cflags -Wmissing-prototypes
2011-10-10 10:31:31 +02:00
check_cflags -Wstrict-prototypes
2014-04-04 01:18:02 +02:00
check_cflags -Wempty-body
2015-03-16 19:21:14 +01:00
if enabled extra_warnings; then
check_cflags -Wcast-qual
check_cflags -Wextra
check_cflags -Wpedantic
fi
2003-10-18 18:47:06 +00:00
2013-10-31 20:14:37 +01:00
check_disable_warning( ) {
warning_flag = -W${ 1 #-Wno- }
2017-10-13 12:34:34 -03:00
test_cflags $unknown_warning_flags $warning_flag && add_cflags $1
2013-10-31 20:14:37 +01:00
}
2017-10-13 12:34:34 -03:00
test_cflags -Werror= unused-command-line-argument &&
append unknown_warning_flags "-Werror=unused-command-line-argument"
test_cflags -Werror= unknown-warning-option &&
append unknown_warning_flags "-Werror=unknown-warning-option"
2013-10-31 20:14:37 +01:00
check_disable_warning -Wno-parentheses
check_disable_warning -Wno-switch
check_disable_warning -Wno-format-zero-length
check_disable_warning -Wno-pointer-sign
2016-01-18 16:25:11 -03:00
check_disable_warning -Wno-unused-const-variable
2017-10-09 02:21:08 +02:00
check_disable_warning -Wno-bool-operation
2018-11-18 04:32:07 +01:00
check_disable_warning -Wno-char-subscripts
2024-10-02 15:00:33 +03:00
check_disable_warning -Wno-implicit-const-int-float-conversion
2013-10-31 20:14:37 +01:00
2016-03-09 15:39:29 +01:00
check_disable_warning_headers( ) {
warning_flag = -W${ 1 #-Wno- }
2016-12-04 11:06:47 +01:00
test_cflags $warning_flag && add_cflags_headers $1
2016-03-09 15:39:29 +01:00
}
check_disable_warning_headers -Wno-deprecated-declarations
check_disable_warning_headers -Wno-unused-variable
2018-02-04 20:21:57 +01:00
test_cc <<EOF && enable blocks_extension
2017-01-25 18:40:51 +01:00
void (^block)(void);
EOF
2006-06-16 19:26:31 +00:00
# add some linker flags
2025-05-05 19:40:24 +02:00
check_ldflags -Wl,-rpath-link= :libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
2017-06-20 19:25:43 +02:00
enabled rpath && add_ldexeflags -Wl,-rpath,$libdir && add_ldsoflags -Wl,-rpath,$libdir
2010-10-15 11:31:58 +01:00
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
2003-06-10 08:32:12 +00:00
2013-11-25 08:46:14 +00:00
# add some strip flags
2017-05-16 12:08:37 +01:00
check_stripflags -x
2013-11-25 08:46:14 +00:00
2013-12-20 13:51:50 +02:00
enabled neon_clobber_test &&
check_ldflags -Wl,--wrap,avcodec_open2 \
-Wl,--wrap,avcodec_decode_subtitle2 \
2014-01-11 22:43:26 +02:00
-Wl,--wrap,avcodec_encode_subtitle \
2016-07-03 16:43:08 -03:00
-Wl,--wrap,avcodec_send_packet \
2016-10-01 13:23:56 -03:00
-Wl,--wrap,avcodec_receive_packet \
2016-09-21 20:44:36 +02:00
-Wl,--wrap,avcodec_send_frame \
-Wl,--wrap,avcodec_receive_frame \
2021-04-14 04:33:24 +02:00
-Wl,--wrap,swr_convert ||
2013-12-20 13:51:50 +02:00
disable neon_clobber_test
2012-07-16 16:51:33 +02:00
enabled xmm_clobber_test &&
2012-02-02 11:48:13 -08:00
check_ldflags -Wl,--wrap,avcodec_open2 \
-Wl,--wrap,avcodec_decode_subtitle2 \
-Wl,--wrap,avcodec_encode_subtitle \
2016-07-03 16:43:08 -03:00
-Wl,--wrap,avcodec_send_packet \
2016-10-01 13:23:56 -03:00
-Wl,--wrap,avcodec_receive_packet \
2016-09-21 20:44:36 +02:00
-Wl,--wrap,avcodec_send_frame \
-Wl,--wrap,avcodec_receive_frame \
2014-01-18 18:17:54 +01:00
-Wl,--wrap,swr_convert \
2012-07-16 16:51:33 +02:00
-Wl,--wrap,sws_scale ||
2012-02-02 11:48:13 -08:00
disable xmm_clobber_test
2018-03-28 15:19:35 -03:00
check_ld "cc" proper_dce <<EOF
2016-05-27 20:14:21 +02:00
extern const int array[512];
static inline int func(void) { return array[0]; }
int main(void) { return 0; }
EOF
if enabled proper_dce; then
echo "X { local: *; };" > $TMPV
if test_ldflags -Wl,${ version_script } ,$TMPV ; then
append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
2017-09-24 18:46:47 +02:00
quotes = '""'
2018-02-04 20:21:57 +01:00
test_cc <<EOF && enable symver_asm_label
2010-06-15 13:26:52 +00:00
void ff_foo(void) __asm__ ("av_foo@VERSION");
2010-06-15 18:06:28 +00:00
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2010-06-15 13:26:52 +00:00
EOF
2018-02-04 20:21:57 +01:00
test_cc <<EOF && enable symver_gnu_asm
2010-06-15 13:26:52 +00:00
__asm__(".symver ff_foo,av_foo@VERSION");
void ff_foo(void) {}
EOF
2016-05-27 20:14:21 +02:00
fi
2016-05-27 11:38:38 +02:00
fi
2010-01-16 04:49:02 +00:00
2012-09-20 15:50:14 +01:00
if [ -z " $optflags " ] ; then
if enabled small; then
optflags = $cflags_size
elif enabled optimizations; then
optflags = $cflags_speed
else
optflags = $cflags_noopt
fi
2003-09-09 19:03:14 +00:00
fi
2012-09-20 15:50:14 +01:00
check_optflags( ) {
check_cflags " $@ "
2023-03-23 14:38:51 +01:00
[ -n " $lto " ] && check_ldflags " $@ "
2012-09-20 15:50:14 +01:00
}
2016-12-15 12:20:06 +01:00
check_optflags $optflags
check_optflags -fno-math-errno
check_optflags -fno-signed-zeros
2012-09-20 15:50:14 +01:00
2023-03-23 14:38:51 +01:00
if [ -n " $lto " ] ; then
2012-09-20 15:50:14 +01:00
test " $cc_type " != " $ld_type " && die "LTO requires same compiler and linker"
2023-03-23 14:38:51 +01:00
check_cflags $lto
check_ldflags $lto $cpuflags
2014-05-04 17:09:21 +02:00
disable inline_asm_direct_symbol_refs
2023-12-20 14:39:50 +02:00
if test " $cc_type " = "clang" ; then
# Clang's LTO fails on Windows, when there are references outside
# of inline assembly to nonlocal labels defined within inline assembly,
# see https://github.com/llvm/llvm-project/issues/76046.
case $target_os in
mingw32| win32)
disable inline_asm_nonlocal_labels
; ;
esac
fi
2003-09-09 19:03:14 +00:00
fi
2012-09-20 15:50:14 +01:00
2012-10-09 05:43:30 +02:00
enabled ftrapv && check_cflags -ftrapv
2018-03-15 18:22:51 -03:00
test_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
2011-09-21 19:10:58 +02:00
int x;
EOF
2003-09-09 19:03:14 +00:00
2009-02-21 21:07:32 +00:00
if enabled icc; then
2009-02-21 22:12:47 +00:00
# Just warnings, no remarks
check_cflags -w1
# -wd: Disable following warnings
# 144, 167, 556: -Wno-pointer-sign
2013-01-03 15:57:42 +01:00
# 188: enumerated type mixed with another type
2011-03-23 11:24:10 +00:00
# 1292: attribute "foo" ignored
2012-04-25 21:15:39 +01:00
# 1419: external declaration in primary source file
2009-02-21 22:12:47 +00:00
# 10006: ignoring unknown option -fno-signed-zeros
2010-11-04 10:38:39 +00:00
# 10148: ignoring unknown option -Wno-parentheses
2009-02-21 22:12:47 +00:00
# 10156: ignoring option '-W'; no argument required
2015-03-16 15:38:36 +01:00
# 13200: No EMMS instruction before call to function
# 13203: No EMMS instruction before return from function
check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
2009-02-21 22:12:47 +00:00
# 11030: Warning unknown option --as-needed
# 10156: ignoring option '-export'; no argument required
check_ldflags -wd10156,11030
2009-03-15 13:22:41 +00:00
# icc 11.0 and 11.1 work with ebp_available, but don't pass the test
enable ebp_available
2014-05-12 14:51:21 +02:00
# The test above does not test linking
2023-03-23 14:38:51 +01:00
[ -n " $lto " ] && disable symver_asm_label
2010-09-21 17:57:17 +00:00
if enabled x86_32; then
2012-07-18 20:40:38 +01:00
icc_version = $( $cc -dumpversion)
2012-07-16 16:51:33 +02:00
test ${ icc_version %%.* } -ge 11 &&
check_cflags -falign-stack= maintain-16-byte ||
2010-09-21 17:57:17 +00:00
disable aligned_stack
fi
2009-07-15 19:02:07 +00:00
elif enabled gcc; then
2016-07-09 16:00:06 -03:00
check_optflags -fno-tree-vectorize
2014-07-12 22:11:56 +02:00
check_cflags -Werror= format-security
2014-07-12 23:24:16 +02:00
check_cflags -Werror= implicit-function-declaration
2010-03-08 02:36:27 +00:00
check_cflags -Werror= missing-prototypes
2013-01-14 20:38:33 +01:00
check_cflags -Werror= return -type
2012-10-06 14:03:32 +02:00
check_cflags -Werror= vla
2014-07-12 22:11:56 +02:00
check_cflags -Wformat
2015-03-09 01:02:01 +00:00
check_cflags -fdiagnostics-color= auto
2013-11-02 12:16:00 +01:00
enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
2018-03-15 23:47:22 +02:00
if enabled x86_32; then
case $target_os in
*bsd*)
# BSDs don't guarantee a 16 byte aligned stack, but we can
# request GCC to try to maintain 16 byte alignment throughout
# function calls. Library entry points that might call assembly
# functions align the stack. (The parameter means 2^4 bytes.)
check_cflags -mpreferred-stack-boundary= 4
; ;
esac
fi
2010-09-02 21:41:07 +00:00
elif enabled llvm_gcc; then
check_cflags -mllvm -stack-alignment= 16
2009-10-22 21:19:13 +00:00
elif enabled clang; then
2018-03-15 23:47:22 +02:00
if enabled x86_32; then
2018-03-13 00:13:55 +02:00
# Clang doesn't support maintaining alignment without assuming the
# same alignment in every function. If 16 byte alignment would be
# enabled, one would also have to either add attribute_align_arg on
# every single entry point into the libraries or enable -mstackrealign
# (doing stack realignment in every single function).
2018-03-15 23:47:22 +02:00
case $target_os in
mingw32| win32| *bsd*)
disable aligned_stack
; ;
*)
check_cflags -mllvm -stack-alignment= 16
2018-03-29 20:40:07 -03:00
check_cflags -mstack-alignment= 16
2018-03-15 23:47:22 +02:00
; ;
esac
2018-03-13 00:13:55 +02:00
else
check_cflags -mllvm -stack-alignment= 16
2018-03-29 20:31:03 -03:00
check_cflags -mstack-alignment= 16
2018-03-13 00:13:55 +02:00
fi
2009-10-22 21:19:13 +00:00
check_cflags -Qunused-arguments
2012-11-13 19:01:51 +02:00
check_cflags -Werror= implicit-function-declaration
check_cflags -Werror= missing-prototypes
2013-01-14 20:38:33 +01:00
check_cflags -Werror= return -type
2013-09-12 20:17:15 +02:00
elif enabled cparser; then
add_cflags -Wno-missing-variable-declarations
add_cflags -Wno-empty-statement
2010-01-20 20:06:11 +00:00
elif enabled armcc; then
2014-04-18 23:40:59 +03:00
add_cflags -W${ armcc_opt } ,--diag_suppress= 4343 # hardfp compat
add_cflags -W${ armcc_opt } ,--diag_suppress= 3036 # using . as system include dir
2014-06-18 16:21:00 +02:00
# 2523: use of inline assembly is deprecated
2010-08-26 12:52:10 +00:00
add_cflags -W${ armcc_opt } ,--diag_suppress= 2523
add_cflags -W${ armcc_opt } ,--diag_suppress= 1207
2011-01-15 14:55:08 +00:00
add_cflags -W${ armcc_opt } ,--diag_suppress= 1293 # assignment in condition
2011-01-16 12:50:49 +00:00
add_cflags -W${ armcc_opt } ,--diag_suppress= 3343 # hardfp compat
2011-06-25 18:51:00 +01:00
add_cflags -W${ armcc_opt } ,--diag_suppress= 167 # pointer sign
add_cflags -W${ armcc_opt } ,--diag_suppress= 513 # pointer sign
2011-01-23 23:13:33 +00:00
elif enabled pathscale; then
add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt= OFF
2017-03-24 20:30:22 +01:00
disable inline_asm
2013-06-19 21:07:49 +00:00
elif enabled_any msvc icl; then
2012-09-11 11:10:12 +03:00
enabled x86_32 && disable aligned_stack
2013-06-24 21:10:12 +00:00
enabled_all x86_32 debug && add_cflags -Oy-
2013-07-19 15:44:39 +02:00
enabled debug && add_ldflags -debug
2013-09-19 16:58:21 -04:00
enable pragma_deprecated
2013-06-19 21:07:49 +00:00
if enabled icl; then
2013-09-24 04:30:38 -04:00
# -Qansi-alias is basically -fstrict-aliasing, but does not work
# (correctly) on icl 13.x.
2018-02-04 20:21:57 +01:00
test_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
2013-09-24 04:30:38 -04:00
add_cflags -Qansi-alias
2014-05-03 19:37:53 +10:00
# Some inline asm is not compilable in debug
if enabled debug; then
disable ebp_available
disable ebx_available
fi
2013-06-19 21:07:49 +00:00
fi
2014-05-11 17:40:20 +10:00
# msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
2017-10-07 21:20:36 +02:00
check_cpp_condition log2 crtversion.h "_VC_CRT_MAJOR_VERSION >= 12"
2016-06-28 11:48:29 +02:00
# the new SSA optimzer in VS2015 U3 is mis-optimizing some parts of the code
2017-01-12 01:02:23 +01:00
# Issue has been fixed in MSVC v19.00.24218.
2018-03-15 18:22:51 -03:00
test_cpp_condition windows.h "_MSC_FULL_VER >= 190024218" ||
2017-01-12 01:02:23 +01:00
check_cflags -d2SSAOptimizer-
2017-02-03 09:37:53 +01:00
# enable utf-8 source processing on VS2015 U2 and newer
2018-03-15 18:22:51 -03:00
test_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" &&
2017-02-03 09:37:53 +01:00
add_cflags -utf-8
2008-05-11 13:08:18 +00:00
fi
2015-07-25 22:47:47 +03:00
for pfx in "" host_; do
2015-07-27 09:40:28 +03:00
varname = ${ pfx %_ } cc_type
2015-07-25 22:47:47 +03:00
eval " type=\$ $varname "
2017-01-25 15:11:23 +02:00
if [ " $type " = "msvc" ] ; then
2018-02-04 20:21:57 +01:00
test_${ pfx } cc <<EOF || add_${pfx}cflags -Dinline=__inline
2015-07-25 22:47:47 +03:00
static inline int foo(int a) { return a; }
EOF
fi
done
2014-02-07 19:23:28 +01:00
case $as_type in
clang)
add_asflags -Qunused-arguments
; ;
esac
case $ld_type in
clang)
check_ldflags -Qunused-arguments
; ;
esac
2025-03-21 13:10:40 +05:30
if [ " $response_files " != "no" ] ; then
ar_out = ${ FFTMPDIR } /test$LIBSUF
respfile = "@/dev/null"
out_arg = " $( echo $ar_o | sed " s;\$@; $ar_out ;g " ) "
if test_cmd $ar $arflags $out_arg $respfile ; then
response_files = "yes"
elif [ " $response_files " = "auto" ] ; then
response_files = "no"
else
die "Response files are not available with this toolchain. Exiting"
fi
fi
2025-03-18 19:19:56 +05:30
2013-03-13 21:59:33 -07:00
enable frame_thread_encoder
2013-10-25 16:54:45 +02:00
2012-08-31 01:56:03 +01:00
enabled asm || { arch = c; disable $ARCH_LIST $ARCH_EXT_LIST ; }
2007-11-23 11:09:28 +00:00
check_deps $CONFIG_LIST \
2008-10-24 23:18:21 +00:00
$CONFIG_EXTRA \
2007-11-23 11:09:28 +00:00
$HAVE_LIST \
2011-09-12 17:52:44 +02:00
$ALL_COMPONENTS \
2007-02-11 16:24:15 +00:00
2013-12-20 12:48:16 +01:00
enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"
2010-01-18 23:12:55 +00:00
2023-10-03 15:32:30 +02:00
enabled threads || warn \
"Threading support was disabled or is not available on the target platform." \
"This means that not only is this build not multi-threaded, but also" \
"that the libraries from this build MUST NOT be used in a multi-threaded" \
"environment."
2018-11-13 21:32:23 +11:00
case $target_os in
haiku)
2011-06-21 16:36:23 +02:00
disable memalign
disable posix_memalign
2018-11-13 21:32:23 +11:00
; ;
*-dos| freedos| opendos)
if test_cpp_condition sys/version.h "defined(__DJGPP__) && __DJGPP__ == 2 && __DJGPP_MINOR__ == 5" ; then
disable memalign
fi
; ;
esac
2011-06-21 16:36:23 +02:00
2017-01-22 16:42:36 +01:00
flatten_extralibs( ) {
2018-07-30 22:39:15 +03:00
nested_entries =
2017-01-22 16:42:36 +01:00
list_name = $1
eval list = \$ ${ 1 }
for entry in $list ; do
entry_copy = $entry
resolve entry_copy
2018-07-30 22:39:15 +03:00
flat_entries =
for e in $entry_copy ; do
case $e in
*_extralibs) nested_entries = " $nested_entries $e " ; ;
*) flat_entries = " $flat_entries $e " ; ;
esac
done
2017-01-22 16:42:36 +01:00
eval $entry = "\$flat_entries"
2012-02-05 16:52:26 +01:00
done
2017-01-22 16:42:36 +01:00
append $list_name " $nested_entries "
resolve nested_entries
if test -n " $( filter '*_extralibs' $nested_entries ) " ; then
flatten_extralibs $list_name
fi
2012-02-05 16:52:26 +01:00
}
2017-11-13 23:43:51 +01:00
flatten_extralibs_wrapper( ) {
list_name = $1
flatten_extralibs $list_name
unique $list_name
resolve $list_name
eval $list_name = \$ \( \$ ldflags_filter \$ $list_name \)
eval printf \' '%s' \' \" " \$ $list_name " \"
}
2017-01-22 16:42:36 +01:00
for linkunit in $LIBRARY_LIST ; do
unset current_extralibs
eval components = \$ $( toupper ${ linkunit } ) _COMPONENTS_LIST
for comp in ${ components } ; do
enabled $comp || continue
comp_extralibs = " ${ comp } _extralibs "
append current_extralibs $comp_extralibs
done
eval prepend ${ linkunit } _extralibs $current_extralibs
done
for linkunit in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST ; do
2017-11-13 23:43:51 +01:00
eval ${ linkunit } _extralibs = \$ \( flatten_extralibs_wrapper ${ linkunit } _extralibs\)
2017-01-22 16:42:36 +01:00
done
2012-02-05 16:52:26 +01:00
2014-05-13 23:03:28 +02:00
map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
2013-12-23 04:24:53 +01:00
for thread in $THREADS_LIST ; do
if enabled $thread ; then
test -n " $thread_type " &&
die "ERROR: Only one thread type must be selected." ||
thread_type = " $thread "
fi
done
2017-09-24 20:10:02 +02:00
if disabled stdatomic; then
2024-09-09 15:59:33 +02:00
if enabled atomics_win32; then
2016-11-28 15:29:53 -08:00
add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
2016-11-28 15:29:56 -08:00
else
enabled threads && die "Threading is enabled, but no atomics are available"
add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
2016-11-28 13:24:22 -08:00
fi
fi
2024-09-09 16:15:18 +02:00
check_builtin stdbit "stdbit.h assert.h" \
'static_assert(__STDC_VERSION_STDBIT_H__ >= 202311L, "Compiler lacks stdbit.h")' || \
add_cppflags '-I\$(SRC_PATH)/compat/stdbit'
2016-11-30 23:50:17 +01:00
# Check if requested libraries were found.
for lib in $AUTODETECT_LIBS ; do
requested $lib && ! enabled $lib && die " ERROR: $lib requested but not found " ;
done
2014-07-30 05:10:18 -07:00
enabled zlib && add_cppflags -DZLIB_CONST
2018-08-28 17:14:55 +03:00
# conditional library dependencies, in any order
2014-05-13 21:36:14 +02:00
enabled amovie_filter && prepend avfilter_deps "avformat avcodec"
enabled aresample_filter && prepend avfilter_deps "swresample"
2015-05-03 01:42:51 +02:00
enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec"
2014-05-13 23:13:44 +02:00
enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
2014-05-13 21:36:14 +02:00
enabled elbg_filter && prepend avfilter_deps "avcodec"
2015-05-03 01:42:51 +02:00
enabled find_rect_filter && prepend avfilter_deps "avformat avcodec"
2023-12-02 18:46:16 +01:00
enabled fsync_filter && prepend avfilter_deps "avformat"
2014-05-13 21:36:14 +02:00
enabled mcdeint_filter && prepend avfilter_deps "avcodec"
2024-06-21 16:16:26 +05:30
enabled movie_filter && prepend avfilter_deps "avformat avcodec"
2014-05-13 21:36:14 +02:00
enabled pan_filter && prepend avfilter_deps "swresample"
2024-06-21 16:14:34 +05:30
enabled qrencode_filter && prepend avfilter_deps "swscale"
enabled qrencodesrc_filter && prepend avfilter_deps "swscale"
2014-05-13 21:36:14 +02:00
enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale"
enabled sab_filter && prepend avfilter_deps "swscale"
2024-06-21 16:16:26 +05:30
enabled scale_filter && prepend avfilter_deps "swscale"
2015-08-15 18:38:06 +02:00
enabled scale2ref_filter && prepend avfilter_deps "swscale"
2021-07-27 21:16:28 +02:00
enabled showcqt_filter && prepend avfilter_deps "avformat swscale"
2017-05-06 23:52:38 -03:00
enabled signature_filter && prepend avfilter_deps "avcodec avformat"
2014-05-13 21:36:14 +02:00
enabled smartblur_filter && prepend avfilter_deps "swscale"
2017-05-06 23:52:38 -03:00
enabled spp_filter && prepend avfilter_deps "avcodec"
2018-07-02 22:18:47 -03:00
enabled sr_filter && prepend avfilter_deps "avformat swscale"
2014-05-13 21:36:14 +02:00
enabled subtitles_filter && prepend avfilter_deps "avformat avcodec"
2014-12-12 01:45:49 +01:00
enabled uspp_filter && prepend avfilter_deps "avcodec"
2017-05-06 23:52:38 -03:00
enabled zoompan_filter && prepend avfilter_deps "swscale"
2014-05-13 21:36:14 +02:00
enabled lavfi_indev && prepend avdevice_deps "avfilter"
2014-05-01 13:18:57 +02:00
2014-05-15 18:28:45 +02:00
enabled opus_decoder && prepend avcodec_deps "swresample"
2014-04-17 12:51:03 +02:00
2018-08-28 17:14:55 +03:00
# reorder the items at var $1 to align with the items order at var $2 .
# die if an item at $1 is not at $2 .
reorder_by( ) {
eval rb_in = \$ $1
eval rb_ordered = \$ $2
for rb in $rb_in ; do
is_in $rb $rb_ordered || die " $rb at \$ $1 is not at \$ $2 "
done
rb_out =
for rb in $rb_ordered ; do
is_in $rb $rb_in && rb_out = " $rb_out $rb "
done
eval $1 = \$ rb_out
}
# deps-expand fflib $1: N x {append all expanded deps; unique}
# within a set of N items, N expansions are enough to expose a cycle.
2014-05-01 13:18:57 +02:00
expand_deps( ) {
2018-08-28 17:14:55 +03:00
unique ${ 1 } _deps # required for the early break test.
for dummy in $LIBRARY_LIST ; do # N iteratios
eval deps = \$ ${ 1 } _deps
append ${ 1 } _deps $( map 'eval echo \$${v}_deps' $deps )
unique ${ 1 } _deps
eval '[ ${#deps} = ${#' ${ 1 } _deps'} ]' && break # doesn't expand anymore
done
eval is_in $1 \$ ${ 1 } _deps && die " Dependency cycle at ${ 1 } _deps "
reorder_by ${ 1 } _deps LIBRARY_LIST # linking order is expected later
2014-05-01 13:18:57 +02:00
}
map 'expand_deps $v' $LIBRARY_LIST
2016-11-06 18:33:05 +01:00
if test " $quiet " != "yes" ; then
2008-03-25 22:49:54 +00:00
echo " install prefix $prefix "
2007-01-06 21:53:48 +00:00
echo " source path $source_path "
echo " C compiler $cc "
2013-02-28 16:16:10 +01:00
echo " C library $libc_type "
2013-02-28 16:06:39 +01:00
if test " $host_cc " != " $cc " ; then
echo " host C compiler $host_cc "
2013-02-28 16:16:10 +01:00
echo " host C library $host_libc_type "
2013-02-28 16:06:39 +01:00
fi
2007-01-06 21:53:48 +00:00
echo " ARCH $arch ( $cpu ) "
2008-03-25 22:49:51 +00:00
if test " $build_suffix " != "" ; then
echo " build suffix $build_suffix "
2005-05-08 15:04:59 +00:00
fi
2011-08-29 17:52:03 +02:00
if test " $progs_suffix " != "" ; then
echo " progs suffix $progs_suffix "
fi
2008-09-26 21:37:50 +00:00
if test " $extra_version " != "" ; then
echo " version string suffix $extra_version "
fi
2007-06-17 23:14:08 +00:00
echo " big-endian ${ bigendian -no } "
2009-04-08 20:26:18 +00:00
echo " runtime cpu detection ${ runtime_cpudetect -no } "
2009-01-11 21:55:14 +00:00
if enabled x86; then
2016-10-08 14:18:33 +00:00
echo " standalone assembly ${ x86asm -no } "
2017-06-20 19:14:32 -03:00
echo " x86 assembler ${ x86asmexe } "
2007-06-17 23:14:08 +00:00
echo " MMX enabled ${ mmx -no } "
2012-07-08 18:42:12 +02:00
echo " MMXEXT enabled ${ mmxext -no } "
2009-01-25 19:48:26 +00:00
echo " 3DNow! enabled ${ amd3dnow -no } "
2009-02-18 00:03:09 +00:00
echo " 3DNow! extended enabled ${ amd3dnowext -no } "
2009-01-07 23:38:54 +00:00
echo " SSE enabled ${ sse -no } "
2009-01-25 18:15:41 +00:00
echo " SSSE3 enabled ${ ssse3 -no } "
2015-10-26 02:08:58 -05:00
echo " AESNI enabled ${ aesni -no } "
2011-05-15 11:46:18 +02:00
echo " AVX enabled ${ avx -no } "
2017-08-26 21:26:00 +02:00
echo " AVX2 enabled ${ avx2 -no } "
2017-10-26 19:45:50 +02:00
echo " AVX-512 enabled ${ avx512 -no } "
2022-02-23 16:57:30 +08:00
echo " AVX-512ICL enabled ${ avx512icl -no } "
2014-02-06 01:33:59 -03:00
echo " XOP enabled ${ xop -no } "
2014-02-22 02:47:01 -03:00
echo " FMA3 enabled ${ fma3 -no } "
2012-06-18 23:39:14 -04:00
echo " FMA4 enabled ${ fma4 -no } "
2013-04-26 16:49:02 +02:00
echo " i686 features enabled ${ i686 -no } "
2007-06-17 23:14:08 +00:00
echo " CMOV is fast ${ fast_cmov -no } "
2007-08-26 23:09:34 +00:00
echo " EBX available ${ ebx_available -no } "
echo " EBP available ${ ebp_available -no } "
2002-10-01 08:46:41 +00:00
fi
2013-12-10 20:13:32 +01:00
if enabled aarch64; then
echo " NEON enabled ${ neon -no } "
2023-05-25 14:57:37 +03:00
echo " DOTPROD enabled ${ dotprod -no } "
echo " I8MM enabled ${ i8mm -no } "
2023-10-12 23:18:28 +03:00
echo " SVE enabled ${ sve -no } "
echo " SVE2 enabled ${ sve2 -no } "
2013-12-10 20:13:32 +01:00
fi
2009-01-11 21:55:14 +00:00
if enabled arm; then
2007-06-17 23:14:08 +00:00
echo " ARMv5TE enabled ${ armv5te -no } "
echo " ARMv6 enabled ${ armv6 -no } "
2008-12-30 03:13:44 +00:00
echo " ARMv6T2 enabled ${ armv6t2 -no } "
2012-12-04 23:29:34 +00:00
echo " VFP enabled ${ vfp -no } "
2008-06-05 19:51:15 +00:00
echo " NEON enabled ${ neon -no } "
2012-12-14 02:37:32 +01:00
echo " THUMB enabled ${ thumb -no } "
2005-06-28 22:46:36 +00:00
fi
2009-01-11 21:55:14 +00:00
if enabled mips; then
2012-06-04 18:02:56 +02:00
echo " MIPS FPU enabled ${ mipsfpu -no } "
2015-12-03 13:22:16 +00:00
echo " MIPS DSP R1 enabled ${ mipsdsp -no } "
2012-06-04 18:02:56 +02:00
echo " MIPS DSP R2 enabled ${ mipsdspr2 -no } "
2015-04-09 19:46:24 +05:30
echo " MIPS MSA enabled ${ msa -no } "
2015-07-03 18:11:27 +08:00
echo " LOONGSON MMI enabled ${ mmi -no } "
2002-10-01 08:46:41 +00:00
fi
2009-01-11 21:55:14 +00:00
if enabled ppc; then
2007-06-17 23:14:08 +00:00
echo " AltiVec enabled ${ altivec -no } "
2015-05-10 02:47:31 +02:00
echo " VSX enabled ${ vsx -no } "
echo " POWER8 enabled ${ power8 -no } "
2009-01-25 18:15:41 +00:00
echo " PPC 4xx optimizations ${ ppc4xx -no } "
2007-06-17 23:14:08 +00:00
echo " dcbzl available ${ dcbzl -no } "
2023-08-18 15:32:39 -04:00
echo " vec_xl available ${ vec_xl -no } "
2009-01-25 18:15:41 +00:00
fi
2021-12-15 11:51:04 +08:00
if enabled loongarch; then
echo " LSX enabled ${ lsx -no } "
echo " LASX enabled ${ lasx -no } "
fi
2022-09-26 17:52:26 +03:00
if enabled riscv; then
2022-09-23 18:09:18 +03:00
echo " RISC-V CBO Prefetch ${ rv_zicbop -no } "
2022-09-26 17:52:26 +03:00
echo " RISC-V Vector enabled ${ rvv -no } "
fi
2007-06-17 23:14:08 +00:00
echo " debug symbols ${ debug -no } "
2011-04-01 00:24:12 +02:00
echo " strip symbols ${ stripping -no } "
2011-06-19 18:41:14 +01:00
echo " optimize for size ${ small -no } "
2007-10-24 19:17:15 +00:00
echo " optimizations ${ optimizations -no } "
2007-06-17 23:14:08 +00:00
echo " static ${ static -no } "
echo " shared ${ shared -no } "
echo " network support ${ network -no } "
echo " threading support ${ thread_type -no } "
2011-12-21 15:32:39 +02:00
echo " safe bitstream reader ${ safe_bitstream_reader -no } "
2012-07-16 14:45:41 +02:00
echo " texi2html enabled ${ texi2html -no } "
2012-08-09 23:37:28 +02:00
echo " perl enabled ${ perl -no } "
2012-07-16 14:45:41 +02:00
echo " pod2man enabled ${ pod2man -no } "
echo " makeinfo enabled ${ makeinfo -no } "
2014-08-31 19:39:35 -07:00
echo " makeinfo supports HTML ${ makeinfo_html -no } "
2021-04-16 10:46:41 +02:00
echo " xmllint enabled ${ xmllint -no } "
2012-05-09 04:29:53 +01:00
test -n " $random_seed " &&
echo " random seed ${ random_seed } "
2008-02-27 22:41:14 +00:00
echo
2001-07-22 14:18:56 +00:00
2012-10-27 22:25:27 +01:00
echo "External libraries:"
2017-10-11 17:55:25 -03:00
print_enabled '' $EXTERNAL_LIBRARY_LIST $EXTERNAL_AUTODETECT_LIBRARY_LIST | print_in_columns
2012-10-27 22:25:27 +01:00
echo
2016-05-03 08:06:15 +02:00
echo "External libraries providing hardware acceleration:"
2017-10-11 17:55:25 -03:00
print_enabled '' $HWACCEL_LIBRARY_LIST $HWACCEL_AUTODETECT_LIBRARY_LIST | print_in_columns
2016-05-03 08:06:15 +02:00
echo
2012-10-27 22:25:27 +01:00
2016-01-23 19:35:21 +01:00
echo "Libraries:"
2016-02-17 15:30:44 +00:00
print_enabled '' $LIBRARY_LIST | print_in_columns
2016-01-23 19:35:21 +01:00
echo
2016-11-07 22:12:23 +01:00
echo "Programs:"
2017-03-31 11:24:11 +02:00
print_enabled '' $PROGRAM_LIST | print_in_columns
2016-11-07 22:12:23 +01:00
echo
2009-04-02 08:48:06 +00:00
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2007-11-04 02:20:12 +00:00
echo " Enabled ${ type } s: "
2008-02-26 21:50:06 +00:00
eval list = \$ $( toupper $type ) _LIST
2015-09-14 16:34:50 -07:00
print_enabled '_*' $list | print_in_columns
2008-02-26 21:50:06 +00:00
echo
2007-11-04 02:20:12 +00:00
done
2016-12-28 00:19:49 +02:00
if test -n " $ignore_tests " ; then
ignore_tests = $( echo $ignore_tests | tr ',' ' ' )
echo "Ignored FATE tests:"
2017-05-05 09:19:41 +02:00
echo $ignore_tests | print_in_columns
2016-12-28 00:19:49 +02:00
echo
fi
2008-05-16 16:12:55 +00:00
echo " License: $license "
2008-01-07 21:37:18 +00:00
2016-11-06 18:33:05 +01:00
fi # test "$quiet" != "yes"
2019-01-28 01:49:46 +01:00
if test -n " $WARN_IF_GETS_DISABLED_LIST " ; then
for cfg in $WARN_IF_GETS_DISABLED_LIST ; do
if disabled $cfg ; then
varname = ${ cfg } _disable_reason
eval " warn \"Disabled $cfg because \$ $varname \" "
fi
done
fi
2017-11-12 00:39:41 -03:00
if test -n " $WARNINGS " ; then
printf " \n%s%s $WARNINGS %s " " $warn_color " " $bold_color " " $reset_color "
enabled fatal_warnings && exit 1
fi
2017-09-23 16:42:11 +02:00
2013-11-14 13:22:11 +02:00
test -e Makefile || echo " include $source_path /Makefile " > Makefile
2010-01-19 04:40:10 +00:00
2017-09-23 16:42:11 +02:00
esc( ) {
echo " $* " | sed 's/%/%25/g;s/:/%3a/g'
}
2017-11-12 00:39:41 -03:00
echo " config: $arch : $subarch : $cpu : $target_os : $( esc $cc_ident ) : $( esc $FFMPEG_CONFIGURATION ) " > ffbuild/config.fate
2011-04-01 00:24:12 +02:00
enabled stripping || strip = "echo skipping strip"
2017-10-06 22:15:35 +02:00
enabled stripping || striptype = ""
2011-04-01 00:24:12 +02:00
2017-05-03 12:51:48 +02:00
config_files = " $TMPH ffbuild/config.mak doc/config.texi "
2010-09-03 21:27:12 +00:00
2017-05-03 12:51:48 +02:00
cat > ffbuild/config.mak <<EOF
2009-10-31 15:59:03 +00:00
# Automatically generated by configure - do not modify!
2011-06-26 09:44:31 +02:00
ifndef FFMPEG_CONFIG_MAK
FFMPEG_CONFIG_MAK=1
2011-03-17 17:01:10 +01:00
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2009-10-31 15:59:03 +00:00
prefix=$prefix
LIBDIR=\$(DESTDIR)$libdir
SHLIBDIR=\$(DESTDIR)$shlibdir
INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir
2013-08-28 10:30:14 +02:00
DOCDIR=\$(DESTDIR)$docdir
2009-10-31 15:59:03 +00:00
MANDIR=\$(DESTDIR)$mandir
2015-05-29 16:08:36 +02:00
PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
2016-02-19 16:34:30 +01:00
INSTALL_NAME_DIR=$install_name_dir
2011-06-06 22:38:38 +01:00
SRC_PATH=$source_path
2016-01-25 01:42:23 +01:00
SRC_LINK=$source_link
2011-06-30 00:01:14 +02:00
ifndef MAIN_MAKEFILE
SRC_PATH:=\$(SRC_PATH:.%=..%)
endif
2010-07-26 23:44:02 +00:00
CC_IDENT=$cc_ident
2009-10-31 15:59:03 +00:00
ARCH=$arch
2014-05-13 23:03:28 +02:00
INTRINSICS=$intrinsics
2017-11-16 09:32:15 +02:00
EXTERN_PREFIX=$extern_prefix
2009-10-31 15:59:03 +00:00
CC=$cc
2011-08-31 04:11:25 +05:30
CXX=$cxx
2009-10-31 15:59:03 +00:00
AS=$as
2015-11-23 17:08:49 -05:00
OBJCC=$objcc
2009-10-31 15:59:03 +00:00
LD=$ld
DEPCC=$dep_cc
2012-07-20 13:43:07 +01:00
DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
DEPAS=$as
DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
2016-10-08 14:18:33 +00:00
X86ASM=$x86asmexe
DEPX86ASM=$x86asmexe
2016-10-13 00:45:09 +00:00
DEPX86ASMFLAGS=\$(X86ASMFLAGS)
2009-10-31 15:59:03 +00:00
AR=$ar
2012-09-17 23:56:32 +01:00
ARFLAGS=$arflags
2025-03-21 13:10:40 +05:30
RESPONSE_FILES=$response_files
2012-09-17 23:56:32 +01:00
AR_O=$ar_o
2017-08-24 23:27:16 +03:00
AR_CMD=$ar
NM_CMD=$nm
2021-12-16 11:28:01 -08:00
METALCC=$metalcc
METALLIB=$metallib
2009-10-31 15:59:03 +00:00
RANLIB=$ranlib
2013-09-12 18:06:23 +00:00
STRIP=$strip
2017-10-06 22:15:35 +02:00
STRIPTYPE=$striptype
2017-05-11 22:53:41 +02:00
NVCC=$nvcc
2011-04-01 00:24:12 +02:00
CP=cp -p
2009-10-31 15:59:03 +00:00
LN_S=$ln_s
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
2011-08-31 04:11:25 +05:30
CXXFLAGS=$CXXFLAGS
2024-09-26 01:41:15 +02:00
OBJCFLAGS=$OBJCFLAGS
2009-10-31 15:59:03 +00:00
ASFLAGS=$ASFLAGS
2017-05-11 22:53:41 +02:00
NVCCFLAGS=$nvccflags
2012-07-20 23:43:27 +01:00
AS_C=$AS_C
2012-07-20 13:43:07 +01:00
AS_O=$AS_O
2015-11-23 17:08:49 -05:00
OBJCC_C=$OBJCC_C
OBJCC_E=$OBJCC_E
OBJCC_O=$OBJCC_O
2012-07-20 23:43:27 +01:00
CC_C=$CC_C
2012-10-03 13:48:27 +01:00
CC_E=$CC_E
2009-10-31 15:59:03 +00:00
CC_O=$CC_O
2012-07-30 17:44:56 +02:00
CXX_C=$CXX_C
2011-08-31 04:11:25 +05:30
CXX_O=$CXX_O
2017-05-11 22:53:41 +02:00
NVCC_C=$NVCC_C
NVCC_O=$NVCC_O
2012-07-20 13:43:07 +01:00
LD_O=$LD_O
2016-10-13 00:45:09 +00:00
X86ASM_O=$X86ASM_O
2012-08-28 16:06:56 +01:00
LD_LIB=$LD_LIB
LD_PATH=$LD_PATH
2018-02-16 21:24:59 +01:00
DLLTOOL=$dlltool
2013-12-05 17:50:14 -03:00
WINDRES=$windres
2014-07-07 15:24:48 -07:00
DOXYGEN=$doxygen
2009-10-31 15:59:03 +00:00
LDFLAGS=$LDFLAGS
2014-07-16 17:00:11 +02:00
LDEXEFLAGS=$LDEXEFLAGS
2017-06-20 19:25:43 +02:00
LDSOFLAGS=$LDSOFLAGS
2013-01-14 12:52:00 -05:00
SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
2013-11-28 21:29:13 +01:00
ASMSTRIPFLAGS=$ASMSTRIPFLAGS
2016-10-08 14:18:33 +00:00
X86ASMFLAGS=$X86ASMFLAGS
2020-07-18 23:35:37 +08:00
MSAFLAGS=$MSAFLAGS
MMIFLAGS=$MMIFLAGS
2021-12-15 11:51:04 +08:00
LSXFLAGS=$LSXFLAGS
LASXFLAGS=$LASXFLAGS
2009-10-31 15:59:03 +00:00
BUILDSUF=$build_suffix
2011-08-29 17:52:03 +02:00
PROGSSUF=$progs_suffix
2009-10-31 15:59:03 +00:00
FULLNAME=$FULLNAME
LIBPREF=$LIBPREF
LIBSUF=$LIBSUF
LIBNAME=$LIBNAME
SLIBPREF=$SLIBPREF
SLIBSUF=$SLIBSUF
EXESUF=$EXESUF
EXTRA_VERSION=$extra_version
CCDEP=$CCDEP
2011-08-31 04:11:25 +05:30
CXXDEP=$CXXDEP
2012-07-20 13:43:07 +01:00
CCDEP_FLAGS=$CCDEP_FLAGS
2009-10-31 15:59:03 +00:00
ASDEP=$ASDEP
2012-07-20 13:43:07 +01:00
ASDEP_FLAGS=$ASDEP_FLAGS
2016-10-13 00:45:09 +00:00
X86ASMDEP=$X86ASMDEP
X86ASMDEP_FLAGS=$X86ASMDEP_FLAGS
2009-10-31 15:59:03 +00:00
CC_DEPFLAGS=$CC_DEPFLAGS
2021-12-20 17:21:52 -06:00
CXX_DEPFLAGS=$CXX_DEPFLAGS
OBJCC_DEPFLAGS=$OBJC_DEPFLAGS
2009-10-31 15:59:03 +00:00
AS_DEPFLAGS=$AS_DEPFLAGS
2016-10-13 00:45:09 +00:00
X86ASM_DEPFLAGS=$X86ASM_DEPFLAGS
2009-10-31 15:59:03 +00:00
HOSTCC=$host_cc
2012-08-28 13:02:35 +01:00
HOSTLD=$host_ld
2009-10-31 15:59:03 +00:00
HOSTCFLAGS=$host_cflags
2013-02-03 15:13:17 +01:00
HOSTCPPFLAGS=$host_cppflags
2009-10-31 15:59:03 +00:00
HOSTEXESUF=$HOSTEXESUF
HOSTLDFLAGS=$host_ldflags
2016-12-06 18:19:09 +01:00
HOSTEXTRALIBS=$host_extralibs
2012-07-20 13:43:07 +01:00
DEPHOSTCC=$host_cc
DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
HOSTCCDEP=$HOSTCCDEP
HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
2012-07-20 23:43:27 +01:00
HOSTCC_C=$HOSTCC_C
2012-07-20 13:43:07 +01:00
HOSTCC_O=$HOSTCC_O
2012-08-28 13:02:35 +01:00
HOSTLD_O=$HOSTLD_O
2013-05-04 10:25:41 +02:00
TARGET_EXEC=$target_exec $target_exec_args
2009-10-31 15:59:03 +00:00
TARGET_PATH=$target_path
2013-05-20 01:55:32 +03:00
TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
2016-02-23 20:43:41 +00:00
CFLAGS-ffplay=${sdl2_cflags}
2016-12-04 11:06:47 +01:00
CFLAGS_HEADERS=$CFLAGS_HEADERS
2009-10-31 15:59:03 +00:00
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
EXTRALIBS=$extralibs
2012-10-14 17:56:00 +01:00
COMPAT_OBJS=$compat_objs
2011-05-18 00:03:19 +02:00
INSTALL=$install
2018-02-16 21:24:59 +01:00
LIBTARGET=${LIBTARGET}
2010-03-09 14:58:22 +00:00
SLIBNAME=${SLIBNAME}
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2011-07-07 15:25:30 +01:00
SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
2016-05-27 11:38:38 +02:00
VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
2011-04-03 23:12:16 +01:00
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
2011-09-21 19:10:58 +02:00
NOREDZONE_FLAGS=$noredzone_flags
2017-04-21 23:58:32 +02:00
LIBFUZZER_PATH=$libfuzzer_path
2016-12-28 00:19:49 +02:00
IGNORE_TESTS=$ignore_tests
2023-12-15 13:03:49 +02:00
VERSION_TRACKING=$version_tracking
2009-10-31 15:59:03 +00:00
EOF
2005-12-10 17:14:24 +00:00
2017-05-03 12:51:48 +02:00
map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST
2014-05-01 13:18:57 +02:00
2017-01-22 16:42:36 +01:00
for entry in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST ; do
2017-10-11 17:55:25 -03:00
eval echo " EXTRALIBS- ${ entry } =\$ ${ entry } _extralibs " >> ffbuild/config.mak
2017-01-22 16:42:36 +01:00
done
2014-02-13 00:44:08 +01:00
2009-10-31 15:59:03 +00:00
cat > $TMPH <<EOF
/* Automatically generated by configure - do not modify! */
2011-03-17 17:01:10 +01:00
#ifndef FFMPEG_CONFIG_H
#define FFMPEG_CONFIG_H
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2011-03-17 16:57:37 +01:00
#define FFMPEG_LICENSE "$(c_escape $license)"
2025-01-01 18:03:33 +09:00
#define CONFIG_THIS_YEAR 2025
2009-10-31 15:59:03 +00:00
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2011-07-27 20:56:59 +02:00
#define AVCONV_DATADIR "$(eval c_escape $datadir)"
2012-07-18 17:57:57 +01:00
#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
2021-02-02 07:17:44 +08:00
#define OS_NAME $target_os
2009-10-31 15:59:03 +00:00
#define EXTERN_PREFIX "${extern_prefix}"
#define EXTERN_ASM ${extern_prefix}
2013-12-05 17:50:14 -03:00
#define BUILDSUF "$build_suffix"
2010-10-03 09:49:36 +00:00
#define SLIBSUF "$SLIBSUF"
2014-06-11 17:51:49 +01:00
#define SWS_MAX_FILTER_SIZE $sws_max_filter_size
2009-10-31 15:59:03 +00:00
EOF
2009-09-21 12:51:45 +00:00
2012-04-07 09:20:54 +02:00
test -n " $assert_level " &&
echo " #define ASSERT_LEVEL $assert_level " >>$TMPH
2010-01-28 13:06:31 +00:00
test -n " $malloc_prefix " &&
echo " #define MALLOC_PREFIX $malloc_prefix " >>$TMPH
2023-05-25 14:57:37 +03:00
enabled aarch64 &&
echo " #define AS_ARCH_LEVEL $as_arch_level " >>$TMPH
2016-10-08 14:18:33 +00:00
if enabled x86asm; then
2010-09-03 21:27:19 +00:00
append config_files $TMPASM
2017-09-23 16:42:11 +02:00
cat > $TMPASM <<EOF
; Automatically generated by configure - do not modify!
EOF
2010-09-03 21:27:19 +00:00
fi
2012-11-30 11:16:58 +02:00
enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
2013-05-02 11:01:43 +03:00
2013-03-19 20:54:26 +01:00
mkdir -p doc
2014-12-15 04:32:23 +01:00
mkdir -p tests
2015-06-28 02:41:48 +02:00
mkdir -p tests/api
2015-10-08 09:01:20 -04:00
echo "@c auto-generated by configure - do not modify! " > doc/config.texi
2013-03-19 20:54:26 +01:00
2010-09-03 21:27:12 +00:00
print_config ARCH_ " $config_files " $ARCH_LIST
print_config HAVE_ " $config_files " $HAVE_LIST
print_config CONFIG_ " $config_files " $CONFIG_LIST \
2010-09-03 21:27:15 +00:00
$CONFIG_EXTRA \
2006-08-29 07:34:58 +00:00
2011-03-17 17:01:10 +01:00
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2007-10-17 22:38:37 +00:00
2008-03-10 22:59:05 +00:00
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2010-01-19 04:40:08 +00:00
cp_if_changed $TMPH config.h
2017-05-03 12:51:48 +02:00
touch ffbuild/.config
2001-09-13 07:16:59 +00:00
2022-02-23 14:56:49 +02:00
# Copy config.asm before printing ALL_COMPONENTS; that's not needed in assembly.
2016-10-08 14:18:33 +00:00
enabled x86asm && cp_if_changed $TMPASM config.asm
2010-09-03 21:27:19 +00:00
2022-02-23 14:56:49 +02:00
# Reopen a new TMPH for config_components.h.
cat > $TMPH <<EOF
/* Automatically generated by configure - do not modify! */
#ifndef FFMPEG_CONFIG_COMPONENTS_H
#define FFMPEG_CONFIG_COMPONENTS_H
EOF
print_config CONFIG_ " $config_files " $ALL_COMPONENTS
echo "#endif /* FFMPEG_CONFIG_COMPONENTS_H */" >> $TMPH
echo "endif # FFMPEG_CONFIG_MAK" >> ffbuild/config.mak
cp_if_changed $TMPH config_components.h
2010-01-19 04:40:16 +00:00
cat > $TMPH <<EOF
2017-11-12 00:39:41 -03:00
/* Generated by ffmpeg configure */
2010-01-19 04:40:16 +00:00
#ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H
EOF
2010-09-03 21:27:12 +00:00
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
2010-01-19 04:40:16 +00:00
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
cp_if_changed $TMPH libavutil/avconfig.h
2018-07-30 22:48:04 +03:00
# full_filter_name_foo=vf_foo
# full_filter_name_bar=asrc_bar
# ...
2025-01-09 02:42:11 +01:00
eval " $( sed -n "s/^extern const FFFilter ff_\([avfsinkrc]\{2,5\}\)_\(.*\);/full_filter_name_\2=\1_\2/p" $source_path /libavfilter/allfilters.c) "
2018-02-18 17:20:26 +00:00
2016-03-20 10:00:58 +01:00
# generate the lists of enabled components
print_enabled_components( ) {
file = $1
struct_name = $2
name = $3
shift 3
2016-07-03 10:09:36 +02:00
echo " static const $struct_name * const $name [] = { " > $TMPH
2016-03-20 10:00:58 +01:00
for c in $* ; do
2018-01-02 14:34:18 +00:00
if enabled $c ; then
case $name in
2018-02-18 17:20:26 +00:00
filter_list)
2018-07-30 22:48:04 +03:00
eval c = \$ full_filter_name_${ c %_filter }
2018-02-18 17:20:26 +00:00
; ;
2018-03-23 20:38:25 +00:00
indev_list)
2018-07-30 22:48:04 +03:00
c = ${ c %_indev } _demuxer
2018-03-23 20:38:25 +00:00
; ;
outdev_list)
2018-07-30 22:48:04 +03:00
c = ${ c %_outdev } _muxer
2018-03-23 20:38:25 +00:00
; ;
2018-01-02 14:34:18 +00:00
esac
printf " &ff_%s,\n" $c >> $TMPH
fi
2016-03-20 10:00:58 +01:00
done
2018-04-01 02:34:28 +02:00
if [ " $name " = "filter_list" ] ; then
2018-02-18 17:20:26 +00:00
for c in asrc_abuffer vsrc_buffer asink_abuffer vsink_buffer; do
printf " &ff_%s,\n" $c >> $TMPH
done
fi
2016-03-20 10:00:58 +01:00
echo " NULL };" >> $TMPH
cp_if_changed $TMPH $file
}
2025-01-09 02:42:11 +01:00
print_enabled_components libavfilter/filter_list.c FFFilter filter_list $FILTER_LIST
2022-03-16 21:09:54 +01:00
print_enabled_components libavcodec/codec_list.c FFCodec codec_list $CODEC_LIST
2017-12-22 22:17:00 +00:00
print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST
2022-03-21 22:25:27 +01:00
print_enabled_components libavcodec/bsf_list.c FFBitStreamFilter bitstream_filters $BSF_LIST
2024-02-10 15:50:43 +01:00
print_enabled_components libavformat/demuxer_list.c FFInputFormat demuxer_list $DEMUXER_LIST
2023-01-27 15:06:00 +01:00
print_enabled_components libavformat/muxer_list.c FFOutputFormat muxer_list $MUXER_LIST
2024-02-10 15:50:43 +01:00
print_enabled_components libavdevice/indev_list.c FFInputFormat indev_list $INDEV_LIST
2023-01-27 15:06:00 +01:00
print_enabled_components libavdevice/outdev_list.c FFOutputFormat outdev_list $OUTDEV_LIST
2016-03-20 10:00:58 +01:00
print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
2017-05-04 19:59:30 -03:00
# Settings for pkg-config files
2005-05-19 00:17:50 +00:00
2017-11-06 17:57:25 +01:00
cat > $TMPH <<EOF
2016-12-20 14:27:19 +01:00
# Automatically generated by configure - do not modify!
shared=$shared
2017-05-04 19:59:30 -03:00
build_suffix=$build_suffix
2008-03-25 22:49:54 +00:00
prefix=$prefix
2008-04-16 21:46:34 +00:00
libdir=$libdir
2017-05-04 19:59:30 -03:00
incdir=$incdir
rpath=$(enabled rpath && echo "-Wl,-rpath,\${libdir}")
2016-12-20 14:27:19 +01:00
source_path=${source_path}
LIBPREF=${LIBPREF}
LIBSUF=${LIBSUF}
2017-01-22 16:42:36 +01:00
extralibs_avutil="$avutil_extralibs"
extralibs_avcodec="$avcodec_extralibs"
extralibs_avformat="$avformat_extralibs"
extralibs_avdevice="$avdevice_extralibs"
extralibs_avfilter="$avfilter_extralibs"
extralibs_swscale="$swscale_extralibs"
2017-10-11 17:55:25 -03:00
extralibs_swresample="$swresample_extralibs"
2005-05-19 00:17:50 +00:00
EOF
2012-05-10 09:53:36 +02:00
2017-05-04 19:59:30 -03:00
for lib in $LIBRARY_LIST ; do
lib_deps = " $( eval echo \$ ${ lib } _deps) "
2017-11-12 22:59:34 -03:00
echo ${ lib } _deps = \" $lib_deps \" >> $TMPH
2017-05-04 19:59:30 -03:00
done
2017-11-06 17:57:25 +01:00
2017-11-12 01:02:02 -03:00
cp_if_changed $TMPH ffbuild/config.sh