avprobe: Print the display matrix from per-stream sidedata
[libav.git] / configure
CommitLineData
aeb29222 1#!/bin/sh
0f3cb305 2#
070c5d0f 3# Libav configure script
f57620d5 4#
949906ea
DB
5# Copyright (c) 2000-2002 Fabrice Bellard
6# Copyright (c) 2005-2008 Diego Biurrun
7# Copyright (c) 2005-2008 Mans Rullgard
0f3cb305 8#
cf9d24ad 9
31e647f8 10# Prevent locale nonsense from breaking basic text processing.
79ab96ba
DB
11LC_ALL=C
12export LC_ALL
31e647f8 13
cde2d79a 14# make sure we are running under a compatible shell
c21d6325
MR
15# try to make this part work with most shells
16
17try_exec(){
0dbe81bb 18 echo "Trying shell $1"
2270b4b2 19 type "$1" > /dev/null 2>&1 && exec "$@"
c21d6325
MR
20}
21
5237ce67 22unset foo
2270b4b2 23(: ${foo%%bar}) 2> /dev/null
0dbe81bb
MR
24E1="$?"
25
2270b4b2 26(: ${foo?}) 2> /dev/null
0dbe81bb
MR
27E2="$?"
28
29if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
c21d6325
MR
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
cde2d79a
MR
43 fi
44 echo "No compatible shell script interpreter found."
fc53da20 45 echo "This configure script requires a POSIX-compatible shell"
c21d6325 46 echo "such as bash or ksh."
070c5d0f 47 echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
505dfb09 48 echo "Instead, install a working POSIX-compatible shell."
070c5d0f 49 echo "Disabling this configure test will create a broken Libav."
c21d6325
MR
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
53 fi
cde2d79a
MR
54 exit 1
55fi
56
a77f01c7
MR
57test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
74c53c2d 59show_help(){
f69f51b3 60 cat <<EOF
06454877
MR
61Usage: configure [options]
62Options: [defaults in brackets after descriptions]
63
3b327a4b 64Help options:
06454877 65 --help print this message
3b327a4b
DB
66 --list-decoders show all available decoders
67 --list-encoders show all available encoders
68 --list-hwaccels show all available hardware accelerators
69 --list-demuxers show all available demuxers
70 --list-muxers show all available muxers
71 --list-parsers show all available parsers
72 --list-protocols show all available protocols
73 --list-bsfs show all available bitstream filters
74 --list-indevs show all available input devices
75 --list-outdevs show all available output devices
76 --list-filters show all available filters
77
78Standard options:
19bd477d 79 --logfile=FILE log tests and output to FILE [config.log]
06454877
MR
80 --disable-logging do not log configure debug information
81 --prefix=PREFIX install in PREFIX [$prefix]
82 --bindir=DIR install binaries in DIR [PREFIX/bin]
6291d7e4 83 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
f4ca970d 84 --docdir=DIR install documentation in DIR [PREFIX/share/doc/libav]
06454877
MR
85 --libdir=DIR install libs in DIR [PREFIX/lib]
86 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
87 --incdir=DIR install includes in DIR [PREFIX/include]
88 --mandir=DIR install man page in DIR [PREFIX/share/man]
749b1f13 89 --enable-rpath use rpath when linking programs [USE WITH CARE]
06454877 90
3b327a4b 91Licensing options:
06454877
MR
92 --enable-gpl allow use of GPL code, the resulting libs
93 and binaries will be under GPL [no]
94 --enable-version3 upgrade (L)GPL to version 3 [no]
95 --enable-nonfree allow use of nonfree code, the resulting libs
96 and binaries will be unredistributable [no]
3b327a4b
DB
97
98Configuration options:
99 --disable-static do not build static libraries [no]
100 --enable-shared build shared libraries [no]
101 --enable-small optimize for size instead of speed
102 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
103 --enable-gray enable full grayscale support (slower color)
104 --disable-swscale-alpha disable alpha channel support in swscale
844c6852 105 --disable-all disable building components, libraries and programs
3b327a4b 106
e28b7553
DB
107Program options:
108 --disable-programs do not build command line programs
6291d7e4 109 --disable-avconv disable avconv build
266463da 110 --disable-avplay disable avplay build
9e12f0bf 111 --disable-avprobe disable avprobe build
894682a9 112 --disable-avserver deprecated, does nothing
e28b7553
DB
113
114Component options:
115 --disable-doc do not build documentation
5a0f7131
MR
116 --disable-avdevice disable libavdevice build
117 --disable-avcodec disable libavcodec build
118 --disable-avformat disable libavformat build
d89f2fa9 119 --disable-avutil disable libavutil build
5a0f7131 120 --disable-swscale disable libswscale build
cccc039f 121 --disable-avfilter disable video filter support [no]
c8af852b 122 --disable-avresample disable libavresample build [no]
0dbfc1db 123 --disable-pthreads disable pthreads [auto]
7b7b220c 124 --disable-w32threads disable Win32 threads [auto]
06454877 125 --disable-network disable network support [no]
7f3f5f46 126 --disable-dct disable DCT code
0b499c9b 127 --disable-error-resilience disable error resilience code
193cdd9a 128 --disable-lsp disable LSP code
2a91ada8 129 --disable-lzo disable LZO decoder code
06454877
MR
130 --disable-mdct disable MDCT code
131 --disable-rdft disable RDFT code
3b327a4b 132 --disable-fft disable FFT code
1274ea8d 133 --disable-faan disable floating point AAN (I)DCT code
70b348ec
DB
134
135Hardware accelerators:
3b327a4b 136 --enable-dxva2 enable DXVA2 code
dcb73592 137 --enable-vaapi enable VAAPI code
ac3dbb4d 138 --enable-vda enable VDA code
e8f6bd4b 139 --enable-vdpau enable VDPAU code
3b327a4b
DB
140
141Individual component options:
bb55e3a3 142 --disable-everything disable all components listed below
06454877
MR
143 --disable-encoder=NAME disable encoder NAME
144 --enable-encoder=NAME enable encoder NAME
145 --disable-encoders disable all encoders
146 --disable-decoder=NAME disable decoder NAME
147 --enable-decoder=NAME enable decoder NAME
148 --disable-decoders disable all decoders
149 --disable-hwaccel=NAME disable hwaccel NAME
150 --enable-hwaccel=NAME enable hwaccel NAME
151 --disable-hwaccels disable all hwaccels
152 --disable-muxer=NAME disable muxer NAME
153 --enable-muxer=NAME enable muxer NAME
154 --disable-muxers disable all muxers
155 --disable-demuxer=NAME disable demuxer NAME
156 --enable-demuxer=NAME enable demuxer NAME
157 --disable-demuxers disable all demuxers
158 --enable-parser=NAME enable parser NAME
159 --disable-parser=NAME disable parser NAME
160 --disable-parsers disable all parsers
161 --enable-bsf=NAME enable bitstream filter NAME
162 --disable-bsf=NAME disable bitstream filter NAME
163 --disable-bsfs disable all bitstream filters
164 --enable-protocol=NAME enable protocol NAME
165 --disable-protocol=NAME disable protocol NAME
166 --disable-protocols disable all protocols
3b327a4b 167 --enable-indev=NAME enable input device NAME
06454877 168 --disable-indev=NAME disable input device NAME
06454877 169 --disable-indevs disable input devices
3b327a4b
DB
170 --enable-outdev=NAME enable output device NAME
171 --disable-outdev=NAME disable output device NAME
06454877
MR
172 --disable-outdevs disable output devices
173 --disable-devices disable all devices
174 --enable-filter=NAME enable filter NAME
175 --disable-filter=NAME disable filter NAME
176 --disable-filters disable all filters
06454877
MR
177
178External library support:
03039f4c 179 --enable-avisynth enable reading of AviSynth script files [no]
06454877 180 --enable-bzlib enable bzlib [autodetect]
47941088 181 --enable-frei0r enable frei0r video filtering
bc8c1395 182 --enable-gnutls enable gnutls [no]
1c0210c7 183 --enable-libbs2b enable bs2b DSP library [no]
e417d80d 184 --enable-libcdio enable audio CD grabbing with libcdio
06454877
MR
185 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
186 and libraw1394 [no]
72025ac3 187 --enable-libdcadec enable DCA decoding via libdcadec [no]
c547e5ff 188 --enable-libfaac enable AAC encoding via libfaac [no]
4f2b469d 189 --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
a5b64584 190 --enable-libfreetype enable libfreetype [no]
c547e5ff 191 --enable-libgsm enable GSM de/encoding via libgsm [no]
3641b048 192 --enable-libilbc enable iLBC de/encoding via libilbc [no]
4e08c821 193 --enable-libmfx enable HW acceleration through libmfx
06454877 194 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
becc3c62
MS
195 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
196 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
197 --enable-libopencv enable video filtering via libopencv [no]
3852e2c9 198 --enable-libopenh264 enable H.264 encoding via OpenH264 [no]
453c02f9 199 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
7c5ca546 200 --enable-libopus enable Opus de/encoding via libopus [no]
7c922411 201 --enable-libpulse enable Pulseaudio input via libpulse [no]
0f943ce6 202 --enable-librtmp enable RTMP[E] support via librtmp [no]
c547e5ff
DB
203 --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
204 --enable-libspeex enable Speex de/encoding via libspeex [no]
06454877 205 --enable-libtheora enable Theora encoding via libtheora [no]
718907cd 206 --enable-libtwolame enable MP2 encoding via libtwolame [no]
d89e738a 207 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
f502ff3f 208 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
c547e5ff 209 --enable-libvorbis enable Vorbis encoding via libvorbis [no]
3f111804 210 --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
84d3ff50 211 --enable-libwavpack enable wavpack encoding via libwavpack [no]
be7c3231 212 --enable-libwebp enable WebP encoding via libwebp [no]
06454877 213 --enable-libx264 enable H.264 encoding via x264 [no]
50ea9315 214 --enable-libx265 enable HEVC encoding via x265 [no]
de295976 215 --enable-libxavs enable AVS encoding via xavs [no]
a6674d2e
LB
216 --enable-libxcb enable X11 grabbing using XCB [no]
217 --enable-libxcb-shm enable X11 grabbing shm communication [auto]
218 --enable-libxcb-xfixes enable X11 grabbing mouse rendering [auto]
06454877
MR
219 --enable-libxvid enable Xvid encoding via xvidcore,
220 native MPEG-4/Xvid encoder exists [no]
c4845616 221 --enable-mmal enable decoding via MMAL [no]
a060866f 222 --enable-openssl enable openssl [no]
a6674d2e 223 --enable-x11grab enable X11 grabbing (legacy) [no]
06454877
MR
224 --enable-zlib enable zlib [autodetect]
225
b3c6ee19
DB
226Toolchain options:
227 --arch=ARCH select architecture [$arch]
228 --cpu=CPU select the minimum required CPU (affects
229 instruction selection, may crash on older CPUs)
06454877
MR
230 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
231 --enable-cross-compile assume a cross-compiler is used
232 --sysroot=PATH root of cross-build tree
233 --sysinclude=PATH location of cross-build system headers
234 --target-os=OS compiler targets OS [$target_os]
235 --target-exec=CMD command to run executables on target
236 --target-path=DIR path to view of build directory on target
ba13606c 237 --target-samples=DIR path to samples directory on target
aeeb782c 238 --toolchain=NAME set tool defaults according to NAME
06454877 239 --nm=NM use nm tool
121d78d0 240 --ar=AR use archive tool AR [$ar_default]
06454877
MR
241 --as=AS use assembler AS [$as_default]
242 --cc=CC use C compiler CC [$cc_default]
193cdd9a 243 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
06454877 244 --ld=LD use linker LD
852c329a 245 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
390acbea 246 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
06454877
MR
247 --host-cc=HOSTCC use host C compiler HOSTCC
248 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
4cc4b33f 249 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
095792f2 250 --host-ld=HOSTLD use host linker HOSTLD
06454877
MR
251 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
252 --host-libs=HLIBS use libs HLIBS when linking for host
193cdd9a 253 --host-os=OS compiler host OS [$target_os]
06454877
MR
254 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
255 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
bb0babd7 256 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
06454877
MR
257 --extra-libs=ELIBS add ELIBS [$ELIBS]
258 --extra-version=STRING version string suffix []
193cdd9a 259 --optflags=OPTFLAGS override optimization-related compiler flags
06454877 260 --build-suffix=SUFFIX library name suffix []
3b327a4b 261 --enable-pic build position-independent code
193cdd9a 262 --enable-thumb compile for Thumb instruction set
b3c6ee19
DB
263 --enable-lto use link-time optimization
264
265Advanced options (experts only):
266 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
3b327a4b 267 --disable-symver disable symbol versioning
3b327a4b
DB
268 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
269 --disable-safe-bitstream-reader
270 disable buffer boundary checking in bitreaders
271 (faster, but may crash)
272 --enable-memalign-hack emulate memalign, interferes with memory debuggers
b3c6ee19 273 --enable-sram allow use of on-chip SRAM
3b327a4b
DB
274
275Optimization options (experts only):
463a7cde 276 --disable-asm disable all assembly optimizations
06454877
MR
277 --disable-altivec disable AltiVec optimizations
278 --disable-amd3dnow disable 3DNow! optimizations
279 --disable-amd3dnowext disable 3DNow! extended optimizations
280 --disable-mmx disable MMX optimizations
239fdf1b 281 --disable-mmxext disable MMXEXT optimizations
06454877 282 --disable-sse disable SSE optimizations
50cd43f2
DB
283 --disable-sse2 disable SSE2 optimizations
284 --disable-sse3 disable SSE3 optimizations
06454877 285 --disable-ssse3 disable SSSE3 optimizations
50cd43f2
DB
286 --disable-sse4 disable SSE4 optimizations
287 --disable-sse42 disable SSE4.2 optimizations
87f1355f 288 --disable-avx disable AVX optimizations
10b0161d 289 --disable-xop disable XOP optimizations
1b932eb1 290 --disable-fma3 disable FMA3 optimizations
79687079 291 --disable-fma4 disable FMA4 optimizations
4d6ee072 292 --disable-avx2 disable AVX2 optimizations
06454877
MR
293 --disable-armv5te disable armv5te optimizations
294 --disable-armv6 disable armv6 optimizations
295 --disable-armv6t2 disable armv6t2 optimizations
b3267559 296 --disable-vfp disable VFP optimizations
5ea20630 297 --disable-neon disable NEON optimizations
463a7cde
DB
298 --disable-inline-asm disable use of inline assembly
299 --disable-yasm disable use of nasm/yasm assembly
06454877 300
070c5d0f 301Developer options (useful when working on Libav itself):
06454877
MR
302 --disable-debug disable debugging symbols
303 --enable-debug=LEVEL set the debug level [$debuglevel]
06454877
MR
304 --disable-optimizations disable compiler optimizations
305 --enable-extra-warnings enable more compiler warnings
52b3cc60 306 --samples=PATH location of test samples for FATE, if not set use
9309bdfe 307 \$LIBAV_SAMPLES at make invocation time.
44a0a98f
MS
308 --enable-neon-clobber-test check NEON registers for clobbering (should be
309 used only for debugging purposes)
7e4d9d5d
RB
310 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
311 should be used only for debugging purposes)
154caa67
MR
312 --enable-random randomly enable/disable components
313 --disable-random
314 --enable-random=LIST randomly enable/disable specific components or
315 --disable-random=LIST component groups. LIST is a comma-separated list
316 of NAME[:PROB] entries where NAME is a component
317 (group) and PROB the probability associated with
318 NAME (default 0.5).
319 --random-seed=VALUE seed value for --enable/disable-random
eaa2d123
VG
320 --disable-valgrind-backtrace do not print a backtrace under Valgrind
321 (only applies to --disable-optimizations builds)
06454877
MR
322
323NOTE: Object files are built at the place where configure is launched.
324EOF
60e8bc13 325 exit 0
74c53c2d 326}
cf9d24ad 327
0884fadf
MR
328quotes='""'
329
57bd82d4 330log(){
2270b4b2 331 echo "$@" >> $logfile
57bd82d4
MR
332}
333
720c69da 334log_file(){
c8e9f801 335 log BEGIN $1
2270b4b2 336 pr -n -t $1 >> $logfile
c8e9f801
MR
337 log END $1
338}
339
2ba042a7 340echolog(){
c8e9f801 341 log "$@"
57bd82d4 342 echo "$@"
2ba042a7
MR
343}
344
7bfc8ae6
MR
345warn(){
346 log "WARNING: $*"
347 WARNINGS="${WARNINGS}WARNING: $*\n"
348}
349
2ba042a7
MR
350die(){
351 echolog "$@"
352 cat <<EOF
d326cf7f 353
2ba042a7 354If you think configure made a mistake, make sure you are using the latest
4a6a21f5 355version from Git. If the latest version fails, report the problem to the
5045f6bd 356libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
2ba042a7 357EOF
e155a21a 358 if disabled logging; then
2ba042a7 359 cat <<EOF
e155a21a
DB
360Rerun configure with logging enabled (do not use --disable-logging), and
361include the log this produces with your report.
2ba042a7
MR
362EOF
363 else
f69f51b3 364 cat <<EOF
e155a21a
DB
365Include the log file "$logfile" produced by configure as this will help
366solving the problem.
2ba042a7
MR
367EOF
368 fi
57bd82d4
MR
369 exit 1
370}
371
6c6007d6 372# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 373toupper(){
6c6007d6 374 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
375}
376
4a5444db 377tolower(){
6c6007d6 378 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
379}
380
14a8acf1
MR
381c_escape(){
382 echo "$*" | sed 's/["\\]/\\\0/g'
383}
384
b04251c5
MR
385sh_quote(){
386 v=$(echo "$1" | sed "s/'/'\\\\''/g")
d72c981c 387 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
b04251c5
MR
388 echo "$v"
389}
390
bb7a22b5
MR
391cleanws(){
392 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
393}
394
be8f2501
MR
395filter(){
396 pat=$1
397 shift
398 for v; do
98ef6079 399 eval "case $v in $pat) echo $v ;; esac"
be8f2501
MR
400 done
401}
402
9d201b26
MR
403filter_out(){
404 pat=$1
405 shift
406 for v; do
407 eval "case $v in $pat) ;; *) echo $v ;; esac"
408 done
409}
410
36e2dea0
MR
411map(){
412 m=$1
413 shift
e0e335a0 414 for v; do eval $m; done
36e2dea0
MR
415}
416
43b73d59
DB
417add_suffix(){
418 suffix=$1
419 shift
420 for v; do echo ${v}${suffix}; done
421}
422
a8d04fba
MR
423set_all(){
424 value=$1
425 shift
426 for var in $*; do
427 eval $var=$value
428 done
429}
430
72a43668
MR
431set_weak(){
432 value=$1
433 shift
434 for var; do
435 eval : \${$var:=$value}
436 done
437}
438
f868b24d
DB
439sanitize_var_name(){
440 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
441}
442
3f8040db
MR
443set_safe(){
444 var=$1
445 shift
f868b24d 446 eval $(sanitize_var_name "$var")='$*'
3f8040db
MR
447}
448
449get_safe(){
f868b24d 450 eval echo \$$(sanitize_var_name "$1")
3f8040db
MR
451}
452
799c9e9b 453pushvar(){
4d810ad2
MS
454 for pvar in $*; do
455 eval level=\${${pvar}_level:=0}
456 eval ${pvar}_${level}="\$$pvar"
457 eval ${pvar}_level=$(($level+1))
799c9e9b
MR
458 done
459}
460
461popvar(){
4d810ad2
MS
462 for pvar in $*; do
463 eval level=\${${pvar}_level:-0}
799c9e9b
MR
464 test $level = 0 && continue
465 eval level=$(($level-1))
4d810ad2
MS
466 eval $pvar="\${${pvar}_${level}}"
467 eval ${pvar}_level=$level
468 eval unset ${pvar}_${level}
799c9e9b
MR
469 done
470}
471
a8d04fba
MR
472enable(){
473 set_all yes $*
474}
475
476disable(){
477 set_all no $*
478}
479
72a43668
MR
480enable_weak(){
481 set_weak yes $*
482}
483
484disable_weak(){
485 set_weak no $*
486}
487
72702705 488enable_safe(){
fd07f803
MR
489 for var; do
490 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
491 done
72702705
MR
492}
493
494disable_safe(){
fd07f803
MR
495 for var; do
496 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
497 done
72702705
MR
498}
499
f9d328da
MR
500do_enable_deep(){
501 for var; do
502 enabled $var && continue
503 eval sel="\$${var}_select"
c510c7b5
MR
504 eval sgs="\$${var}_suggest"
505 pushvar var sgs
f9d328da 506 enable_deep $sel
c510c7b5
MR
507 popvar sgs
508 enable_deep_weak $sgs
f9d328da
MR
509 popvar var
510 done
511}
512
513enable_deep(){
514 do_enable_deep $*
515 enable $*
516}
517
72a43668 518enable_deep_weak(){
ffb068ce
MS
519 for var; do
520 disabled $var && continue
521 pushvar var
522 do_enable_deep $var
523 popvar var
524 enable_weak $var
525 done
72a43668
MR
526}
527
57bd82d4 528enabled(){
3250003c
MR
529 test "${1#!}" = "$1" && op== || op=!=
530 eval test "x\$${1#!}" $op "xyes"
44161118
MR
531}
532
37970ebf 533disabled(){
3250003c
MR
534 test "${1#!}" = "$1" && op== || op=!=
535 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
536}
537
44161118
MR
538enabled_all(){
539 for opt; do
540 enabled $opt || return 1
541 done
542}
543
85bca2c5
DB
544disabled_all(){
545 for opt; do
546 disabled $opt || return 1
547 done
548}
549
44161118
MR
550enabled_any(){
551 for opt; do
552 enabled $opt && return 0
553 done
554}
555
85bca2c5
DB
556disabled_any(){
557 for opt; do
558 disabled $opt && return 0
559 done
f7b230a7 560 return 1
85bca2c5
DB
561}
562
c9d19248
MR
563set_default(){
564 for opt; do
88268e94 565 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
566 done
567}
568
4a0d6686
AJ
569is_in(){
570 value=$1
571 shift
572 for var in $*; do
573 [ $var = $value ] && return 0
574 done
575 return 1
576}
577
d4f8cecc 578do_check_deps(){
30fd06be 579 for cfg; do
3250003c 580 cfg="${cfg#!}"
799c9e9b
MR
581 enabled ${cfg}_checking && die "Circular dependency for $cfg."
582 disabled ${cfg}_checking && continue
583 enable ${cfg}_checking
d4f8cecc 584 append allopts $cfg
799c9e9b 585
30fd06be
MR
586 eval dep_all="\$${cfg}_deps"
587 eval dep_any="\$${cfg}_deps_any"
7ef3425f 588 eval dep_sel="\$${cfg}_select"
c510c7b5 589 eval dep_sgs="\$${cfg}_suggest"
3d7453e0
MR
590 eval dep_ifa="\$${cfg}_if"
591 eval dep_ifn="\$${cfg}_if_any"
799c9e9b 592
3d7453e0 593 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
d4f8cecc 594 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
3d7453e0 595 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
799c9e9b 596
3d7453e0
MR
597 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
598 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
6a702d4c
MR
599 enabled_all $dep_all || disable $cfg
600 enabled_any $dep_any || disable $cfg
7ef3425f 601 disabled_any $dep_sel && disable $cfg
799c9e9b 602
4ec45764 603 if enabled $cfg; then
f9d328da 604 enable_deep $dep_sel
c510c7b5 605 enable_deep_weak $dep_sgs
4ec45764
RP
606 fi
607
799c9e9b 608 disable ${cfg}_checking
30fd06be
MR
609 done
610}
611
d4f8cecc
MR
612check_deps(){
613 unset allopts
614
615 do_check_deps "$@"
616
617 for cfg in $allopts; do
618 enabled $cfg || continue
619 eval dep_extralibs="\$${cfg}_extralibs"
620 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
621 done
622}
623
44161118
MR
624print_config(){
625 pfx=$1
72cfcf41
MR
626 files=$2
627 shift 2
f454e879
MR
628 map 'eval echo "$v \${$v:-no}"' "$@" |
629 awk "BEGIN { split(\"$files\", files) }
630 {
631 c = \"$pfx\" toupper(\$1);
632 v = \$2;
633 sub(/yes/, 1, v);
634 sub(/no/, 0, v);
635 for (f in files) {
636 file = files[f];
637 if (file ~ /\\.h\$/) {
638 printf(\"#define %s %d\\n\", c, v) >>file;
639 } else if (file ~ /\\.asm\$/) {
640 printf(\"%%define %s %d\\n\", c, v) >>file;
641 } else if (file ~ /\\.mak\$/) {
d16c4aeb 642 n = -v ? \"\" : \"!\";
f454e879
MR
643 printf(\"%s%s=yes\\n\", n, c) >>file;
644 }
645 }
646 }"
57bd82d4
MR
647}
648
31c0121d 649print_enabled(){
31c0121d
MR
650 suf=$1
651 shift
652 for v; do
9eda2a85 653 enabled $v && printf "%s\n" ${v%$suf};
31c0121d
MR
654 done
655}
656
57bd82d4
MR
657append(){
658 var=$1
659 shift
57bd82d4
MR
660 eval "$var=\"\$$var $*\""
661}
662
60361817
MR
663prepend(){
664 var=$1
665 shift
666 eval "$var=\"$* \$$var\""
667}
668
44951174
JG
669unique(){
670 var=$1
671 uniq_list=""
672 for tok in $(eval echo \$$var); do
673 uniq_list="$(filter_out $tok $uniq_list) $tok"
674 done
675 eval "$var=\"${uniq_list}\""
676}
677
50a334e4 678add_cppflags(){
cd52ec95 679 append CPPFLAGS "$@"
50a334e4
MR
680}
681
57bd82d4 682add_cflags(){
01d31e16 683 append CFLAGS $($cflags_filter "$@")
57bd82d4
MR
684}
685
2f2e6c7c 686add_asflags(){
01d31e16 687 append ASFLAGS $($asflags_filter "$@")
2f2e6c7c
MR
688}
689
57bd82d4 690add_ldflags(){
64933b6c 691 append LDFLAGS $($ldflags_filter "$@")
57bd82d4
MR
692}
693
bb0babd7
LB
694add_ldexeflags(){
695 append LDEXEFLAGS $($ldflags_filter "$@")
696}
697
0673ede9
VG
698add_stripflags(){
699 append STRIPFLAGS "$@"
700}
701
57bd82d4 702add_extralibs(){
64933b6c 703 prepend extralibs $($ldflags_filter "$@")
57bd82d4
MR
704}
705
4cc4b33f
DB
706add_host_cppflags(){
707 append host_cppflags "$@"
708}
709
6c3fa06a
MR
710add_host_cflags(){
711 append host_cflags $($host_cflags_filter "$@")
712}
713
714add_host_ldflags(){
715 append host_ldflags $($host_ldflags_filter "$@")
716}
717
84e65c76
MR
718add_compat(){
719 append compat_objs $1
720 shift
721 map 'add_cppflags -D$v' "$@"
722}
723
b0cfb663 724check_cmd(){
b3cb5d51 725 log "$@"
2270b4b2 726 "$@" >> $logfile 2>&1
b0cfb663
MR
727}
728
b2704a65
MR
729cc_o(){
730 eval printf '%s\\n' $CC_O
731}
732
18031c49
MR
733cc_e(){
734 eval printf '%s\\n' $CC_E
735}
736
dcd479c0 737check_cc(){
57bd82d4 738 log check_cc "$@"
2270b4b2 739 cat > $TMPC
720c69da 740 log_file $TMPC
23565c26 741 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
57bd82d4
MR
742}
743
744check_cpp(){
745 log check_cpp "$@"
2270b4b2 746 cat > $TMPC
720c69da 747 log_file $TMPC
18031c49 748 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
dcd479c0
MR
749}
750
df0d6341
MR
751as_o(){
752 eval printf '%s\\n' $AS_O
753}
754
f65883c8
MR
755check_as(){
756 log check_as "$@"
7fd90119
MR
757 cat > $TMPS
758 log_file $TMPS
759 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
f65883c8
MR
760}
761
575db883
DB
762check_inline_asm(){
763 log check_inline_asm "$@"
940f335a 764 name="$1"
3784e82e 765 code="$2"
940f335a 766 shift 2
49214f61 767 disable $name
7fd90119 768 check_cc "$@" <<EOF && enable $name
3784e82e 769void foo(void){ __asm__ volatile($code); }
940f335a
MR
770EOF
771}
772
c6ebc9fa
MR
773check_insn(){
774 log check_insn "$@"
775 check_inline_asm ${1}_inline "\"$2\""
776 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
777}
778
304d586d
LM
779check_yasm(){
780 log check_yasm "$@"
781 echo "$1" > $TMPS
782 log_file $TMPS
783 shift 1
784 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
785}
786
29b64b68
MR
787ld_o(){
788 eval printf '%s\\n' $LD_O
789}
790
dcd479c0 791check_ld(){
57bd82d4 792 log check_ld "$@"
66a1ccd7
MR
793 flags=$(filter_out '-l*' "$@")
794 libs=$(filter '-l*' "$@")
01d31e16 795 check_cc $($cflags_filter $flags) || return
64933b6c
MR
796 flags=$($ldflags_filter $flags)
797 libs=$($ldflags_filter $libs)
29b64b68 798 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
dcd479c0
MR
799}
800
52ccc4a0
DB
801print_include(){
802 hdr=$1
803 test "${hdr%.h}" = "${hdr}" &&
804 echo "#include $hdr" ||
805 echo "#include <$hdr>"
806}
807
5adc829e
MR
808check_code(){
809 log check_code "$@"
810 check=$1
811 headers=$2
812 code=$3
813 shift 3
814 {
815 for hdr in $headers; do
52ccc4a0 816 print_include $hdr
5adc829e
MR
817 done
818 echo "int main(void) { $code; return 0; }"
819 } | check_$check "$@"
820}
821
50a334e4
MR
822check_cppflags(){
823 log check_cppflags "$@"
caf458dd 824 check_cc "$@" <<EOF && append CPPFLAGS "$@"
50a334e4
MR
825int x;
826EOF
827}
828
23157d72
DB
829test_cflags(){
830 log test_cflags "$@"
01d31e16 831 set -- $($cflags_filter "$@")
23157d72 832 check_cc "$@" <<EOF
dcd479c0
MR
833int x;
834EOF
835}
836
23157d72
DB
837check_cflags(){
838 log check_cflags "$@"
839 test_cflags "$@" && add_cflags "$@"
840}
841
2ed46eea
MR
842test_ldflags(){
843 log test_ldflags "$@"
844 check_ld "$@" <<EOF
c23a0ac8 845int main(void){ return 0; }
dcd479c0
MR
846EOF
847}
848
2ed46eea
MR
849check_ldflags(){
850 log check_ldflags "$@"
851 test_ldflags "$@" && add_ldflags "$@"
852}
853
0673ede9
VG
854test_stripflags(){
855 log test_stripflags "$@"
856 # call check_cc to get a fresh TMPO
857 check_cc <<EOF
858int main(void) { return 0; }
859EOF
860 check_cmd $strip $STRIPFLAGS "$@" $TMPO
861}
862
863check_stripflags(){
864 log check_stripflags "$@"
865 test_stripflags "$@" && add_stripflags "$@"
866}
867
dcd479c0 868check_header(){
57bd82d4 869 log check_header "$@"
dcd479c0
MR
870 header=$1
871 shift
b77df637
MR
872 disable_safe $header
873 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
874#include <$header>
875int x;
876EOF
877}
878
879check_func(){
57bd82d4 880 log check_func "$@"
dcd479c0
MR
881 func=$1
882 shift
d8bc5f06
MR
883 disable $func
884 check_ld "$@" <<EOF && enable $func
dcd479c0 885extern int $func();
c23a0ac8 886int main(void){ $func(); }
dcd479c0
MR
887EOF
888}
889
645d2652 890check_mathfunc(){
6b73c0ae 891 log check_mathfunc "$@"
645d2652 892 func=$1
1aa07aa2
MR
893 narg=$2
894 shift 2
895 test $narg = 2 && args="f, g" || args="f"
645d2652
MR
896 disable $func
897 check_ld "$@" <<EOF && enable $func
898#include <math.h>
1aa07aa2 899float foo(float f, float g) { return $func($args); }
33bd38db 900int main(void){ return 0; }
645d2652
MR
901EOF
902}
903
2446d3d6
DB
904check_func_headers(){
905 log check_func_headers "$@"
f8d7b072 906 headers=$1
edaf1ae2 907 funcs=$2
f8d7b072 908 shift 2
edaf1ae2
MR
909 {
910 for hdr in $headers; do
52ccc4a0 911 print_include $hdr
edaf1ae2
MR
912 done
913 for func in $funcs; do
914 echo "long check_$func(void) { return (long) $func; }"
915 done
916 echo "int main(void) { return 0; }"
917 } | check_ld "$@" && enable $funcs && enable_safe $headers
f8d7b072
MR
918}
919
a5344cf7
SS
920check_cpp_condition(){
921 log check_cpp_condition "$@"
922 header=$1
923 condition=$2
f855b7b9 924 shift 2
cd52ec95 925 check_cpp "$@" <<EOF
a5344cf7
SS
926#include <$header>
927#if !($condition)
928#error "unsatisfied condition: $condition"
929#endif
930EOF
931}
932
57bd82d4
MR
933check_lib(){
934 log check_lib "$@"
935 header="$1"
936 func="$2"
937 shift 2
84400e9d 938 check_header $header && check_func $func "$@" && add_extralibs "$@"
57bd82d4
MR
939}
940
f8d7b072
MR
941check_lib2(){
942 log check_lib2 "$@"
943 headers="$1"
edaf1ae2 944 funcs="$2"
f8d7b072 945 shift 2
edaf1ae2 946 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
f8d7b072
MR
947}
948
3f8040db
MR
949check_pkg_config(){
950 log check_pkg_config "$@"
951 pkg="$1"
952 headers="$2"
953 funcs="$3"
954 shift 3
7f9e893f 955 check_cmd $pkg_config --exists --print-errors $pkg || return
390acbea
LB
956 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
957 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
3f8040db
MR
958 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
959 set_safe ${pkg}_cflags $pkg_cflags &&
960 set_safe ${pkg}_libs $pkg_libs
961}
962
dcd479c0 963check_exec(){
2270b4b2 964 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
965}
966
7dfef245 967check_exec_crash(){
5e622c40 968 code=$(cat)
7dfef245
MR
969
970 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
971 # are safe but may not be available everywhere. Thus we use
972 # raise(SIGTERM) instead. The check is run in a subshell so we
973 # can redirect the "Terminated" message from the shell. SIGBUS
974 # is not defined by standard C so it is used conditionally.
975
2270b4b2 976 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
977#include <signal.h>
978static void sighandler(int sig){
979 raise(SIGTERM);
980}
692dd8ed
MR
981int foo(void){
982 $code
983}
9495cd17 984int (*func_ptr)(void) = foo;
e5af4a11 985int main(void){
7dfef245
MR
986 signal(SIGILL, sighandler);
987 signal(SIGFPE, sighandler);
988 signal(SIGSEGV, sighandler);
989#ifdef SIGBUS
990 signal(SIGBUS, sighandler);
991#endif
9495cd17 992 return func_ptr();
7dfef245
MR
993}
994EOF
995}
996
72be9e73
DY
997check_type(){
998 log check_type "$@"
999 headers=$1
1000 type=$2
1001 shift 2
ae550ce9 1002 disable_safe "$type"
5adc829e 1003 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
72be9e73
DY
1004}
1005
14d36751 1006check_struct(){
813b82b9 1007 log check_struct "$@"
14d36751
MR
1008 headers=$1
1009 struct=$2
1010 member=$3
1011 shift 3
1012 disable_safe "${struct}_${member}"
5adc829e
MR
1013 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1014 enable_safe "${struct}_${member}"
14d36751
MR
1015}
1016
9c7d85b3
DB
1017check_builtin(){
1018 log check_builtin "$@"
1019 name=$1
1020 headers=$2
1021 builtin=$3
1022 shift 3
1023 disable "$name"
1024 check_code ld "$headers" "$builtin" "$@" && enable "$name"
1025}
1026
e854b8f9
AK
1027check_compile_assert(){
1028 log check_compile_assert "$@"
1029 name=$1
1030 headers=$2
1031 condition=$3
1032 shift 3
1033 disable "$name"
1034 check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1035}
1036
57bd82d4
MR
1037require(){
1038 name="$1"
1039 header="$2"
1040 func="$3"
1041 shift 3
1042 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
1043}
1044
f8d7b072
MR
1045require2(){
1046 name="$1"
1047 headers="$2"
1048 func="$3"
1049 shift 3
1050 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1051}
1052
3f8040db
MR
1053require_pkg_config(){
1054 pkg="$1"
1055 check_pkg_config "$@" || die "ERROR: $pkg not found"
1056 add_cflags $(get_safe ${pkg}_cflags)
1057 add_extralibs $(get_safe ${pkg}_libs)
1058}
1059
27565164
DB
1060hostcc_e(){
1061 eval printf '%s\\n' $HOSTCC_E
1062}
1063
ae43c4c0
MR
1064hostcc_o(){
1065 eval printf '%s\\n' $HOSTCC_O
1066}
1067
f0125de9
MR
1068check_host_cc(){
1069 log check_host_cc "$@"
1070 cat > $TMPC
1071 log_file $TMPC
ae43c4c0 1072 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
f0125de9
MR
1073}
1074
27565164
DB
1075check_host_cpp(){
1076 log check_host_cpp "$@"
1077 cat > $TMPC
1078 log_file $TMPC
3f2c7035 1079 check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
27565164
DB
1080}
1081
4cc4b33f
DB
1082check_host_cppflags(){
1083 log check_host_cppflags "$@"
1084 check_host_cc "$@" <<EOF && append host_cppflags "$@"
1085int x;
1086EOF
1087}
1088
f0125de9
MR
1089check_host_cflags(){
1090 log check_host_cflags "$@"
6c3fa06a 1091 set -- $($host_cflags_filter "$@")
f0125de9
MR
1092 check_host_cc "$@" <<EOF && append host_cflags "$@"
1093int x;
1094EOF
1095}
1096
27565164
DB
1097check_host_cpp_condition(){
1098 log check_host_cpp_condition "$@"
1099 header=$1
1100 condition=$2
1101 shift 2
1102 check_host_cpp "$@" <<EOF
1103#include <$header>
1104#if !($condition)
1105#error "unsatisfied condition: $condition"
1106#endif
1107EOF
1108}
1109
c505dd31
MR
1110apply(){
1111 file=$1
1112 shift
1113 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1114}
1115
c34681df 1116cp_if_changed(){
5e27ec28
MR
1117 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1118 mkdir -p "$(dirname $2)"
4ebc6a74 1119 $cp_f "$1" "$2"
c34681df
MR
1120}
1121
dcd61286
DB
1122# CONFIG_LIST contains configurable options, while HAVE_LIST is for
1123# system-dependent things.
1124
4a0d6686
AJ
1125COMPONENT_LIST="
1126 bsfs
1127 decoders
1128 demuxers
1129 encoders
3cde40aa 1130 filters
5666fd73 1131 hwaccels
c552605c 1132 indevs
4a0d6686 1133 muxers
c552605c 1134 outdevs
4a0d6686
AJ
1135 parsers
1136 protocols
1137"
1138
ab81f24a 1139EXAMPLE_LIST="
b339182e 1140 avcodec_example
e7dfaf16 1141 filter_audio_example
b339182e 1142 metadata_example
ab81f24a 1143 output_example
990e4a66 1144 qsvdec_example
10421bcf 1145 transcode_aac_example
ab81f24a
DB
1146"
1147
3fc09b00
MR
1148EXTERNAL_LIBRARY_LIST="
1149 avisynth
1150 bzlib
1151 frei0r
1152 gnutls
1c0210c7 1153 libbs2b
3fc09b00
MR
1154 libcdio
1155 libdc1394
72025ac3 1156 libdcadec
3fc09b00
MR
1157 libfaac
1158 libfdk_aac
f1b239ec 1159 libfontconfig
3fc09b00
MR
1160 libfreetype
1161 libgsm
1162 libilbc
4e08c821 1163 libmfx
3fc09b00
MR
1164 libmp3lame
1165 libopencore_amrnb
1166 libopencore_amrwb
1167 libopencv
8a3d9ca6 1168 libopenh264
3fc09b00
MR
1169 libopenjpeg
1170 libopus
1171 libpulse
1172 librtmp
1173 libschroedinger
1174 libspeex
1175 libtheora
718907cd 1176 libtwolame
3fc09b00
MR
1177 libvo_aacenc
1178 libvo_amrwbenc
1179 libvorbis
1180 libvpx
84d3ff50 1181 libwavpack
be7c3231 1182 libwebp
3fc09b00 1183 libx264
50ea9315 1184 libx265
3fc09b00 1185 libxavs
a6674d2e
LB
1186 libxcb
1187 libxcb_shm
1188 libxcb_xfixes
3fc09b00 1189 libxvid
c4845616 1190 mmal
3fc09b00
MR
1191 openssl
1192 x11grab
1193 zlib
1194"
1195
d0adf55c
DB
1196FEATURE_LIST="
1197 gray
1198 hardcoded_tables
1199 runtime_cpudetect
1200 safe_bitstream_reader
1201 shared
1202 small
1203 sram
1204 static
1205 swscale_alpha
1206"
1207
70b348ec
DB
1208HWACCEL_LIST="
1209 dxva2
1210 vaapi
1211 vda
1212 vdpau
1213"
7caf48e0 1214
d89f2fa9
DB
1215LIBRARY_LIST="
1216 avcodec
1217 avdevice
1218 avfilter
1219 avformat
1220 avresample
1221 avutil
1222 swscale
1223"
1224
d0adf55c
DB
1225LICENSE_LIST="
1226 gpl
1227 nonfree
1228 version3
1229"
1230
055c61b8
DB
1231PROGRAM_LIST="
1232 avconv
1233 avplay
1234 avprobe
055c61b8
DB
1235"
1236
d0adf55c 1237SUBSYSTEM_LIST="
7f3f5f46 1238 dct
4da3f410 1239 doc
0b499c9b 1240 error_resilience
1274ea8d 1241 faan
1848f7d9 1242 fft
b781cc12 1243 lsp
2a91ada8 1244 lzo
47a158cb 1245 mdct
d0adf55c
DB
1246 network
1247 rdft
1248"
1249
1250CONFIG_LIST="
1251 $COMPONENT_LIST
1252 $EXAMPLE_LIST
1253 $EXTERNAL_LIBRARY_LIST
1254 $FEATURE_LIST
1255 $HWACCEL_LIST
1256 $LICENSE_LIST
1257 $LIBRARY_LIST
1258 $PROGRAM_LIST
1259 $SUBSYSTEM_LIST
c88f5d72 1260 memalign_hack
44a0a98f 1261 neon_clobber_test
8a3c8627 1262 pic
7caf48e0 1263 pod2man
f187557a 1264 texi2html
8986fddc 1265 thumb
eaa2d123 1266 valgrind_backtrace
7e4d9d5d 1267 xmm_clobber_test
4a0d6686 1268"
c88f5d72 1269
7caf48e0 1270THREADS_LIST="
8eee7025
DB
1271 pthreads
1272 w32threads
7caf48e0 1273"
8eee7025 1274
7caf48e0 1275ATOMICS_LIST="
f9f6402e 1276 atomics_gcc
f9f6402e 1277 atomics_suncc
93e65e9a 1278 atomics_win32
7caf48e0 1279"
f9f6402e 1280
7caf48e0 1281ARCH_LIST="
5873b623 1282 aarch64
3f5b56e5 1283 alpha
a2fc0f6a 1284 arm
fdcd782d
MR
1285 avr32
1286 avr32_ap
1287 avr32_uc
3f5b56e5
MR
1288 bfin
1289 ia64
1290 m68k
1291 mips
bae3abb0 1292 mips64
3f5b56e5 1293 parisc
79cb09b2 1294 ppc
34d11b87 1295 ppc64
3f5b56e5
MR
1296 s390
1297 sh4
1298 sparc
1299 sparc64
c75848cd
DB
1300 tilegx
1301 tilepro
0844bae1 1302 tomi
3f5b56e5
MR
1303 x86
1304 x86_32
1305 x86_64
7caf48e0 1306"
3f5b56e5 1307
7caf48e0 1308ARCH_EXT_LIST_ARM="
81dfa21e
MR
1309 armv5te
1310 armv6
1311 armv6t2
8675bcb0 1312 armv8
81dfa21e 1313 neon
b3267559 1314 vfp
81dfa21e 1315 vfpv3
7caf48e0 1316"
81dfa21e 1317
7caf48e0 1318ARCH_EXT_LIST_X86_SIMD="
3bf96eec 1319 amd3dnow
a1ef9f08 1320 amd3dnowext
50cd43f2 1321 avx
4d6ee072 1322 avx2
1b932eb1 1323 fma3
50cd43f2
DB
1324 fma4
1325 mmx
1326 mmxext
1327 sse
1328 sse2
1329 sse3
1330 sse4
1331 sse42
1332 ssse3
7caf48e0
DB
1333 xop
1334"
50cd43f2 1335
7a650caf
DB
1336ARCH_EXT_LIST_PPC="
1337 altivec
1338 dcbzl
1339 ldbrx
1340 ppc4xx
1341"
1342
84bf8817
DB
1343ARCH_EXT_LIST_X86="
1344 $ARCH_EXT_LIST_X86_SIMD
1345 cpunop
1346 i686
1347"
1348
50cd43f2 1349ARCH_EXT_LIST="
81dfa21e 1350 $ARCH_EXT_LIST_ARM
7a650caf 1351 $ARCH_EXT_LIST_PPC
50cd43f2 1352 $ARCH_EXT_LIST_X86
7a650caf
DB
1353 loongson
1354 vis
50cd43f2 1355"
3f5b56e5 1356
7a650caf
DB
1357ARCH_FEATURES="
1358 aligned_stack
1359 fast_64bit
1360 fast_clz
1361 fast_cmov
1362 local_aligned_8
1363 local_aligned_16
eba2233b 1364 simd_align_16
7a650caf
DB
1365"
1366
1367BUILTIN_LIST="
1368 atomic_cas_ptr
1369 machine_rw_barrier
1370 MemoryBarrier
1371 mm_empty
1372 rdtsc
1373 sync_val_compare_and_swap
1374"
7caf48e0 1375HAVE_LIST_CMDLINE="
fd712a55
DB
1376 inline_asm
1377 symver
1378 yasm
7caf48e0 1379"
fd712a55 1380
7caf48e0 1381HAVE_LIST_PUB="
a3e02a8c 1382 bigendian
d268eee9 1383 fast_unaligned
7caf48e0 1384"
a3e02a8c 1385
7a650caf
DB
1386HEADERS_LIST="
1387 alsa_asoundlib_h
1388 altivec_h
1389 arpa_inet_h
1390 cdio_paranoia_h
1391 cdio_paranoia_paranoia_h
1392 dev_bktr_ioctl_bt848_h
1393 dev_bktr_ioctl_meteor_h
1394 dev_ic_bt8xx_h
1395 dev_video_bktr_ioctl_bt848_h
1396 dev_video_meteor_ioctl_meteor_h
1397 direct_h
1398 dlfcn_h
1399 dxva_h
1400 gsm_h
1401 io_h
1402 mach_mach_time_h
1403 machine_ioctl_bt848_h
1404 machine_ioctl_meteor_h
1405 malloc_h
1406 poll_h
1407 sndio_h
1408 soundcard_h
1409 sys_mman_h
1410 sys_param_h
1411 sys_resource_h
1412 sys_select_h
1413 sys_soundcard_h
1414 sys_time_h
1415 sys_un_h
1416 sys_videoio_h
1417 unistd_h
eaa2d123 1418 valgrind_valgrind_h
7a650caf
DB
1419 windows_h
1420 winsock2_h
1421"
1422
d45ebd48
JG
1423INTRINSICS_LIST="
1424 intrinsics_neon
1425"
1426
79042ab3 1427MATH_FUNCS="
fab0a8b2
MR
1428 atanf
1429 atan2f
79042ab3 1430 cbrtf
fab0a8b2 1431 cosf
79042ab3
DB
1432 exp2
1433 exp2f
fab0a8b2 1434 expf
79042ab3
DB
1435 isinf
1436 isnan
fab0a8b2 1437 ldexpf
79042ab3
DB
1438 llrint
1439 llrintf
1440 log2
1441 log2f
fab0a8b2 1442 log10f
79042ab3
DB
1443 lrint
1444 lrintf
fab0a8b2 1445 powf
79042ab3
DB
1446 rint
1447 round
1448 roundf
fab0a8b2 1449 sinf
79042ab3
DB
1450 trunc
1451 truncf
1452"
1453
7a650caf 1454SYSTEM_FUNCS="
be1a839c 1455 aligned_malloc
ebef9f5a 1456 clock_gettime
ecf97f22 1457 closesocket
15caccb9 1458 CommandLineToArgvW
a61c2115 1459 CoTaskMemFree
1093383d 1460 CryptGenRandom
c88f5d72 1461 dlopen
534a2231 1462 fcntl
e854b8f9 1463 flt_lim
9d99cc5a 1464 fork
84882df6 1465 getaddrinfo
da9e86f8 1466 gethrtime
667fb97a 1467 getopt
02e8f427 1468 GetProcessAffinityMask
fc5607f8 1469 GetProcessMemoryInfo
4e68cb8a 1470 GetProcessTimes
66be5b45 1471 getrusage
c3e73100 1472 getservbyport
7caf48e0 1473 GetSystemTimeAsFileTime
61183b5a 1474 gettimeofday
3f8f1c6f 1475 gmtime_r
2e1913b1 1476 inet_aton
abfc8d05 1477 isatty
8772997d 1478 jack_port_get_latency_range
a5b64584 1479 localtime_r
c708b540 1480 mach_absolute_time
73f6d31e 1481 MapViewOfFile
c88f5d72 1482 memalign
6ffa87d3 1483 mkstemp
0328b9ea 1484 mmap
e98b02de 1485 mprotect
d3d3a32c 1486 nanosleep
1f91cdce 1487 posix_memalign
ea4d5f48 1488 sched_getaffinity
7e6a11bc 1489 SetConsoleTextAttribute
b507ebd1 1490 setmode
3e0b1c9a 1491 setrlimit
d3d3a32c 1492 Sleep
87958234 1493 strerror_r
7a650caf
DB
1494 sysconf
1495 sysctl
1496 usleep
1497 VirtualAlloc
1498"
1499
1500TOOLCHAIN_FEATURES="
896a5bff 1501 as_dn_directive
d5a55981 1502 as_func
dcae2e32 1503 as_object_arch
7a650caf
DB
1504 asm_mod_q
1505 attribute_may_alias
1506 attribute_packed
1507 ebp_available
1508 ebx_available
1509 gnu_as
1510 ibm_asm
1511 inline_asm_labels
1512 pragma_deprecated
1513 symver_asm_label
1514 symver_gnu_asm
1515 vfp_args
1516 xform_asm
1517 xmm_clobbers
1518"
1519
1520TYPES_LIST="
73ea3ffc 1521 CONDITION_VARIABLE_Ptr
7e850fa6 1522 DXVA_PicParams_HEVC
7a650caf 1523 socklen_t
c0018613 1524 struct_addrinfo
75d339e0
MS
1525 struct_group_source_req
1526 struct_ip_mreq_source
b4d68544 1527 struct_ipv6_mreq
cdee08e3 1528 struct_pollfd
3e0b1c9a 1529 struct_rusage_ru_maxrss
b4d68544 1530 struct_sockaddr_in6
3b2372bf 1531 struct_sockaddr_sa_len
33a4dbdd 1532 struct_sockaddr_storage
a6a4793d 1533 struct_v4l2_frmivalenum_discrete
7a650caf
DB
1534"
1535
1536HAVE_LIST="
1537 $ARCH_EXT_LIST
1538 $(add_suffix _external $ARCH_EXT_LIST)
1539 $(add_suffix _inline $ARCH_EXT_LIST)
1540 $ARCH_FEATURES
1541 $ATOMICS_LIST
1542 $BUILTIN_LIST
1543 $HAVE_LIST_CMDLINE
1544 $HAVE_LIST_PUB
1545 $HEADERS_LIST
d45ebd48 1546 $INTRINSICS_LIST
7a650caf
DB
1547 $MATH_FUNCS
1548 $SYSTEM_FUNCS
1549 $THREADS_LIST
1550 $TOOLCHAIN_FEATURES
1551 $TYPES_LIST
1552 atomics_native
1553 dos_paths
a61c2115 1554 dxva2_lib
7a650caf
DB
1555 libc_msvcrt
1556 libdc1394_1
1557 libdc1394_2
1558 sdl
f963f803 1559 section_data_rel_ro
b265431e 1560 threads
990e4a66 1561 vaapi_x11
7671dd7c 1562 vdpau_x11
7671dd7c 1563 xlib
0cb78cef 1564"
44161118 1565
511cf612 1566# options emitted with CONFIG_ prefix but not available on the command line
b6bb00b0 1567CONFIG_EXTRA="
87849592 1568 aandcttables
bfe9f48a 1569 ac3dsp
aa11cb79 1570 audio_frame_queue
9a9e2f1c 1571 audiodsp
e74433a8 1572 blockdsp
c67b449b 1573 bswapdsp
8ef33497 1574 cabac
f6ee61fb 1575 dvprofile
1274ea8d
DB
1576 faandct
1577 faanidct
a9aee08d 1578 fdctdsp
71f1ad37 1579 fmtconvert
bfe9f48a 1580 gcrypt
478fd534 1581 golomb
9cad0e4e 1582 gplv3
0338c396 1583 h263dsp
478fd534
DB
1584 h264chroma
1585 h264dsp
1586 h264pred
915a2a0a 1587 h264qpel
68d8238c 1588 hpeldsp
478fd534 1589 huffman
0d439fbe 1590 huffyuvdsp
512f3ffe 1591 huffyuvencdsp
e3fcb143 1592 idctdsp
bd499d9a 1593 iirfilter
3d5d4623 1594 imdct15
dc4d726b 1595 intrax8
4978850c 1596 jpegtables
9cad0e4e 1597 lgplv3
478fd534 1598 lpc
2d604443 1599 me_cmp
7b9ef8d7 1600 mpeg_er
1e164c0b 1601 mpegaudio
bfe9f48a 1602 mpegaudiodsp
18bbca1f 1603 mpegvideo
ad08dfd5 1604 mpegvideoenc
bfe9f48a 1605 nettle
f46bb608 1606 pixblockdsp
368f5035 1607 qpeldsp
d0a63d8b 1608 qsv
b04d009b 1609 qsvdec
72b7441a 1610 qsvenc
f704a079 1611 rangecoder
255d9c57 1612 riffdec
3dd5c95d 1613 riffenc
bfe9f48a 1614 rtpdec
5ad2f0bf 1615 rtpenc_chain
bfe9f48a 1616 sinewin
db7f1c7c 1617 startcode
57f09608 1618 tpeldsp
8c53d39e 1619 videodsp
ab9f9876 1620 vp3dsp
f2051856 1621 wma_freqs
b6bb00b0
MR
1622"
1623
520cc7f1 1624CMDLINE_SELECT="
3f5b56e5 1625 $ARCH_EXT_LIST
520cc7f1 1626 $CONFIG_LIST
fd712a55 1627 $HAVE_LIST_CMDLINE
8eee7025 1628 $THREADS_LIST
c8a4ae00 1629 asm
db6107b6 1630 cross_compile
520cc7f1
MR
1631 debug
1632 extra_warnings
8c6afa4d 1633 logging
65d12900 1634 lto
d2bbb2f7 1635 optimizations
749b1f13 1636 rpath
520cc7f1 1637"
426be5dc 1638
7caf48e0 1639PATHS_LIST="
d156bede 1640 bindir
14a8acf1 1641 datadir
f4ca970d 1642 docdir
26759c44
MR
1643 incdir
1644 libdir
26759c44
MR
1645 mandir
1646 prefix
1647 shlibdir
7caf48e0 1648"
426be5dc
DB
1649
1650CMDLINE_SET="
1651 $PATHS_LIST
121d78d0 1652 ar
426be5dc 1653 arch
313c46a6 1654 as
426be5dc
DB
1655 build_suffix
1656 cc
1657 cpu
1658 cross_prefix
50567afa 1659 dep_cc
ac63af34 1660 extra_version
9da6609f
MR
1661 host_cc
1662 host_cflags
095792f2 1663 host_ld
9da6609f
MR
1664 host_ldflags
1665 host_libs
82bb3329 1666 host_os
684b28e0 1667 ld
426be5dc 1668 logfile
4ae40685 1669 malloc_prefix
89641463 1670 nm
9cd7b854 1671 optflags
3f8040db 1672 pkg_config
390acbea 1673 pkg_config_flags
154caa67 1674 random_seed
2fad0977 1675 samples
c5200f17
MR
1676 sysinclude
1677 sysroot
a7ada2ba 1678 target_exec
26759c44 1679 target_os
a7ada2ba 1680 target_path
ba13606c 1681 target_samples
aeeb782c 1682 toolchain
426be5dc 1683"
520cc7f1 1684
89f2932b
MR
1685CMDLINE_APPEND="
1686 extra_cflags
4cc4b33f 1687 host_cppflags
89f2932b
MR
1688"
1689
912f3148
DB
1690# code dependency declarations
1691
9eeed841 1692# architecture extensions
808fa33c 1693
a2fc0f6a
MR
1694armv5te_deps="arm"
1695armv6_deps="arm"
ab5cb084 1696armv6t2_deps="arm"
8675bcb0 1697armv8_deps="aarch64"
b7b17ed6 1698neon_deps_any="aarch64 arm"
d45ebd48 1699intrinsics_neon_deps="neon"
b7b17ed6 1700vfp_deps_any="aarch64 arm"
b3267559 1701vfpv3_deps="vfp"
808fa33c 1702
637606de
MR
1703map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1704
808fa33c
MR
1705altivec_deps="ppc"
1706ppc4xx_deps="ppc"
1707
84146963
DB
1708cpunop_deps="i686"
1709x86_64_select="i686"
1710x86_64_suggest="fast_cmov"
50cd43f2 1711
808fa33c
MR
1712amd3dnow_deps="mmx"
1713amd3dnowext_deps="amd3dnow"
fb87e69f 1714i686_deps="x86"
9eeed841 1715mmx_deps="x86"
239fdf1b 1716mmxext_deps="mmx"
50cd43f2
DB
1717sse_deps="mmxext"
1718sse2_deps="sse"
1719sse3_deps="sse2"
1720ssse3_deps="sse3"
1721sse4_deps="ssse3"
1722sse42_deps="sse4"
1723avx_deps="sse42"
10b0161d 1724xop_deps="avx"
1b932eb1 1725fma3_deps="avx"
79687079 1726fma4_deps="avx"
4d6ee072 1727avx2_deps="avx"
9eeed841 1728
43b73d59
DB
1729mmx_external_deps="yasm"
1730mmx_inline_deps="inline_asm"
1731mmx_suggest="mmx_external mmx_inline"
1732
84bf8817 1733for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
43b73d59
DB
1734 eval dep=\$${ext}_deps
1735 eval ${ext}_external_deps='"${dep}_external"'
1736 eval ${ext}_inline_deps='"${dep}_inline"'
1737 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1738done
1739
032d4da8
JG
1740aligned_stack_if_any="aarch64 ppc x86"
1741fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1742fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1743fast_unaligned_if_any="aarch64 ppc x86"
eba2233b 1744simd_align_16_if_any="altivec neon sse"
89e053f8 1745
1a5fdf95
DB
1746# system capabilities
1747log2_deps="!libc_msvcrt"
1748
b462d132 1749symver_if_any="symver_asm_label symver_gnu_asm"
eaa2d123 1750valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
b462d132 1751
8558595a
DB
1752# threading support
1753atomics_gcc_if="sync_val_compare_and_swap"
1754atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1755atomics_win32_if="MemoryBarrier"
1756atomics_native_if_any="$ATOMICS_LIST"
874c751c 1757w32threads_deps="atomics_native"
8558595a
DB
1758threads_if_any="$THREADS_LIST"
1759
26fbcc85 1760# subsystems
dc609252 1761dct_select="rdft"
2d604443 1762error_resilience_select="me_cmp"
1274ea8d
DB
1763faandct_deps="faan fdctdsp"
1764faanidct_deps="faan idctdsp"
fbf4d219 1765intrax8_select="error_resilience"
26fbcc85
MR
1766mdct_select="fft"
1767rdft_select="fft"
2d604443 1768me_cmp_select="fdctdsp idctdsp pixblockdsp"
7b9ef8d7 1769mpeg_er_select="error_resilience"
1e164c0b 1770mpegaudio_select="mpegaudiodsp"
c4f5c2d6 1771mpegaudiodsp_select="dct"
2d604443
DB
1772mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp videodsp"
1773mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
d0a63d8b 1774qsvdec_select="qsv"
72b7441a 1775qsvenc_select="qsv"
26fbcc85 1776
ed40b6bf 1777# decoders / encoders
d615187f 1778aac_decoder_select="imdct15 mdct sinewin"
bd499d9a 1779aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
136e19e1 1780aac_latm_decoder_select="aac_decoder aac_latm_parser"
71f1ad37 1781ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2d604443
DB
1782ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1783ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
e3fcb143 1784aic_decoder_select="golomb idctdsp"
f4d608e3 1785alac_encoder_select="lpc"
c67b449b 1786als_decoder_select="bswapdsp"
b781cc12 1787amrnb_decoder_select="lsp"
2b2a597e 1788amrwb_decoder_select="lsp"
0a36988e 1789amv_decoder_select="sp5x_decoder"
c67b449b 1790ape_decoder_select="bswapdsp"
e3fcb143 1791asv1_decoder_select="blockdsp bswapdsp idctdsp"
f46bb608 1792asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
e3fcb143 1793asv2_decoder_select="blockdsp bswapdsp idctdsp"
f46bb608 1794asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
4538729a 1795atrac1_decoder_select="mdct sinewin"
26fbcc85 1796atrac3_decoder_select="mdct"
e6f0bb65 1797atrac3p_decoder_select="mdct sinewin"
e74433a8 1798bink_decoder_select="blockdsp hpeldsp"
f2051856
DB
1799binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
1800binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
e3fcb143 1801cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
c67b449b 1802cllc_decoder_select="bswapdsp"
9b500b8f 1803comfortnoise_encoder_select="lpc"
9a9e2f1c 1804cook_decoder_select="audiodsp mdct sinewin"
2a91ada8 1805cscd_decoder_select="lzo"
2eef7c62 1806cscd_decoder_suggest="zlib"
71f1ad37 1807dca_decoder_select="fmtconvert mdct"
e3fcb143 1808dnxhd_decoder_select="blockdsp idctdsp"
f46bb608 1809dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
f6ee61fb 1810dvvideo_decoder_select="dvprofile idctdsp"
2d604443 1811dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
61c31e4e 1812dxa_decoder_deps="zlib"
baf91bb9 1813eac3_decoder_select="ac3_decoder"
4264a0dd 1814eac3_encoder_select="ac3_encoder"
e3fcb143
DB
1815eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1816eatgq_decoder_select="aandcttables idctdsp"
1817eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
38389058 1818exr_decoder_deps="zlib"
cd832f03
DB
1819ffv1_decoder_select="golomb rangecoder"
1820ffv1_encoder_select="rangecoder"
2f02bbcc
DB
1821ffvhuff_decoder_select="huffyuv_decoder"
1822ffvhuff_encoder_select="huffyuv_encoder"
93e15a32 1823fic_decoder_select="golomb"
4f034993 1824flac_decoder_select="golomb"
c67b449b 1825flac_encoder_select="bswapdsp golomb lpc"
61c31e4e
DB
1826flashsv_decoder_deps="zlib"
1827flashsv_encoder_deps="zlib"
1828flashsv2_decoder_deps="zlib"
4414137e 1829flv_decoder_select="h263_decoder"
4d4b4bd1 1830flv_encoder_select="h263_encoder"
c67b449b
DB
1831fourxm_decoder_select="blockdsp bswapdsp"
1832fraps_decoder_select="bswapdsp huffman"
61c31e4e 1833g2m_decoder_deps="zlib"
4978850c 1834g2m_decoder_select="blockdsp idctdsp jpegtables"
7b9ef8d7 1835h261_decoder_select="mpeg_er mpegvideo"
ad08dfd5 1836h261_encoder_select="aandcttables mpegvideoenc"
7b9ef8d7 1837h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
0338c396 1838h263_encoder_select="aandcttables h263dsp mpegvideoenc"
4414137e 1839h263i_decoder_select="h263_decoder"
fe629c2d 1840h263p_encoder_select="h263_encoder"
db7f1c7c 1841h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
0b499c9b 1842h264_decoder_suggest="error_resilience"
4e08c821 1843h264_qsv_decoder_deps="libmfx"
b04d009b 1844h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
72b7441a
AK
1845h264_qsv_encoder_deps="libmfx"
1846h264_qsv_encoder_select="qsvenc"
c67b449b
DB
1847hevc_decoder_select="bswapdsp cabac golomb videodsp"
1848huffyuv_decoder_select="bswapdsp huffyuvdsp"
1849huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
34150be5 1850iac_decoder_select="imc_decoder"
c67b449b 1851imc_decoder_select="bswapdsp fft mdct sinewin"
8f992dc8 1852indeo3_decoder_select="hpeldsp"
8071264f 1853interplay_video_decoder_select="hpeldsp"
8e0cf39f 1854jpegls_decoder_select="golomb mjpeg_decoder"
4f034993 1855jpegls_encoder_select="golomb"
e74433a8 1856jv_decoder_select="blockdsp"
0d439fbe 1857lagarith_decoder_select="huffyuvdsp"
4978850c 1858ljpeg_encoder_select="aandcttables idctdsp jpegtables"
4f034993 1859loco_decoder_select="golomb"
e3fcb143 1860mdec_decoder_select="blockdsp idctdsp mpegvideo"
3e589878 1861metasound_decoder_select="lsp mdct sinewin"
e3fcb143 1862mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
4978850c
DB
1863mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
1864mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
7caf48e0 1865mjpegb_decoder_select="mjpeg_decoder"
9ecf1b62 1866mlp_decoder_select="mlp_parser"
c67b449b 1867motionpixels_decoder_select="bswapdsp"
1e164c0b
DB
1868mp1_decoder_select="mpegaudio"
1869mp1float_decoder_select="mpegaudio"
1870mp2_decoder_select="mpegaudio"
1871mp2float_decoder_select="mpegaudio"
1872mp3_decoder_select="mpegaudio"
1873mp3adu_decoder_select="mpegaudio"
1874mp3adufloat_decoder_select="mpegaudio"
1875mp3float_decoder_select="mpegaudio"
1876mp3on4_decoder_select="mpegaudio"
1877mp3on4float_decoder_select="mpegaudio"
c67b449b 1878mpc7_decoder_select="bswapdsp mpegaudiodsp"
88b24064 1879mpc8_decoder_select="mpegaudiodsp"
3e0b1c9a 1880mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
d767e2f9 1881mpeg_xvmc_decoder_select="mpeg2video_decoder"
7b9ef8d7 1882mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
06b54e84 1883mpeg1video_encoder_select="aandcttables mpegvideoenc"
7b9ef8d7 1884mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
06b54e84 1885mpeg2video_encoder_select="aandcttables mpegvideoenc"
3e0b1c9a
DB
1886mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1887mpeg4_encoder_select="h263_encoder"
4414137e 1888msmpeg4v1_decoder_select="h263_decoder"
4414137e 1889msmpeg4v2_decoder_select="h263_decoder"
4e169d89 1890msmpeg4v2_encoder_select="h263_encoder"
4414137e 1891msmpeg4v3_decoder_select="h263_decoder"
4e169d89 1892msmpeg4v3_encoder_select="h263_encoder"
7b9ef8d7 1893mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
8e0cf39f 1894mxpeg_decoder_select="mjpeg_decoder"
4538729a 1895nellymoser_decoder_select="mdct sinewin"
aa11cb79 1896nellymoser_encoder_select="audio_frame_queue mdct sinewin"
e3fcb143 1897nuv_decoder_select="idctdsp lzo"
e2834567 1898on2avc_decoder_select="mdct"
b70d7a4a 1899opus_decoder_deps="avresample"
3d5d4623 1900opus_decoder_select="imdct15"
61c31e4e 1901png_decoder_deps="zlib"
61c31e4e 1902png_encoder_deps="zlib"
512f3ffe 1903png_encoder_select="huffyuvencdsp"
e3fcb143 1904prores_decoder_select="idctdsp"
a9aee08d 1905prores_encoder_select="fdctdsp"
b781cc12 1906qcelp_decoder_select="lsp"
c4f5c2d6 1907qdm2_decoder_select="mdct rdft mpegaudiodsp"
aa11cb79 1908ra_144_encoder_select="audio_frame_queue lpc"
9f43fdda 1909ralf_decoder_select="golomb"
7b9ef8d7 1910rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
b2bf38b4 1911rv10_encoder_select="h263_encoder"
7b9ef8d7 1912rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
b2bf38b4 1913rv20_encoder_select="h263_encoder"
7b9ef8d7
DB
1914rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
1915rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
4f034993 1916shorten_decoder_select="golomb"
b781cc12 1917sipr_decoder_select="lsp"
8e0cf39f 1918sp5x_decoder_select="mjpeg_decoder"
6caa44aa 1919svq1_decoder_select="hpeldsp"
2d604443 1920svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
57f09608 1921svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
d48430c3 1922svq3_decoder_suggest="zlib"
9a9e2f1c 1923tak_decoder_select="audiodsp"
247e370e
VG
1924tdsc_decoder_deps="zlib"
1925tdsc_decoder_select="mjpeg_decoder"
4eef77c1 1926theora_decoder_select="vp3_decoder"
7caf48e0 1927thp_decoder_select="mjpeg_decoder"
2eef7c62
AJ
1928tiff_decoder_suggest="zlib"
1929tiff_encoder_suggest="zlib"
aec09a00 1930truehd_decoder_select="mlp_decoder"
c67b449b
DB
1931truemotion2_decoder_select="bswapdsp"
1932truespeech_decoder_select="bswapdsp"
61c31e4e 1933tscc_decoder_deps="zlib"
4538729a 1934twinvq_decoder_select="mdct lsp sinewin"
c67b449b
DB
1935utvideo_decoder_select="bswapdsp"
1936utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
0d439fbe 1937vble_decoder_select="huffyuvdsp"
adf8227c 1938vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
45ecda85 1939vc1image_decoder_select="vc1_decoder"
26fbcc85
MR
1940vorbis_decoder_select="mdct"
1941vorbis_encoder_select="mdct"
3bd062bf 1942vp3_decoder_select="hpeldsp vp3dsp videodsp"
cb7ecb75
RB
1943vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1944vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
e82dc4c9
DB
1945vp6a_decoder_select="vp6_decoder"
1946vp6f_decoder_select="vp6_decoder"
ac4b32df 1947vp7_decoder_select="h264pred videodsp"
8c53d39e 1948vp8_decoder_select="h264pred videodsp"
72ca830f 1949vp9_decoder_select="videodsp"
c4bfa098 1950webp_decoder_select="vp8_decoder"
f2051856
DB
1951wmapro_decoder_select="mdct sinewin wma_freqs"
1952wmav1_decoder_select="mdct sinewin wma_freqs"
1953wmav1_encoder_select="mdct sinewin wma_freqs"
1954wmav2_decoder_select="mdct sinewin wma_freqs"
1955wmav2_encoder_select="mdct sinewin wma_freqs"
4538729a 1956wmavoice_decoder_select="lsp rdft dct mdct sinewin"
f95bfab0 1957wmv1_decoder_select="h263_decoder"
665507aa 1958wmv1_encoder_select="h263_encoder"
e3fcb143 1959wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
1746e2a9 1960wmv2_encoder_select="h263_encoder"
015f8ee0 1961wmv3_decoder_select="vc1_decoder"
45ecda85 1962wmv3image_decoder_select="wmv3_decoder"
61c31e4e
DB
1963zerocodec_decoder_deps="zlib"
1964zlib_decoder_deps="zlib"
1965zlib_encoder_deps="zlib"
1966zmbv_decoder_deps="zlib"
1967zmbv_encoder_deps="zlib"
30fd06be 1968
ed40b6bf 1969# hardware accelerators
215cdd35 1970dxva2_deps="dxva2api_h"
0afab17e 1971vaapi_deps="va_va_h"
ac3dbb4d 1972vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
9840130e 1973vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
c89c96e9
MR
1974vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1975
82ca17ac
DB
1976h263_vaapi_hwaccel_deps="vaapi"
1977h263_vaapi_hwaccel_select="h263_decoder"
1978h263_vdpau_hwaccel_deps="vdpau"
1979h263_vdpau_hwaccel_select="h263_decoder"
215cdd35
DB
1980h264_dxva2_hwaccel_deps="dxva2"
1981h264_dxva2_hwaccel_select="h264_decoder"
c4845616 1982h264_mmal_decoder_deps="mmal"
1983h264_mmal_hwaccel_deps="mmal"
1984h264_mmal_decoder_select="h264_decoder"
1985h264_mmal_encoder_deps="mmal"
11c22dfd 1986h264_qsv_hwaccel_deps="libmfx"
82ca17ac
DB
1987h264_vaapi_hwaccel_deps="vaapi"
1988h264_vaapi_hwaccel_select="h264_decoder"
1989h264_vda_hwaccel_deps="vda"
1990h264_vda_hwaccel_select="h264_decoder"
67afcefb
AK
1991h264_vda_old_hwaccel_deps="vda"
1992h264_vda_old_hwaccel_select="h264_decoder"
82ca17ac
DB
1993h264_vdpau_hwaccel_deps="vdpau"
1994h264_vdpau_hwaccel_select="h264_decoder"
7e850fa6
HL
1995hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
1996hevc_dxva2_hwaccel_select="hevc_decoder"
82ca17ac
DB
1997mpeg1_vdpau_hwaccel_deps="vdpau"
1998mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
215cdd35
DB
1999mpeg2_dxva2_hwaccel_deps="dxva2"
2000mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
82ca17ac
DB
2001mpeg2_vaapi_hwaccel_deps="vaapi"
2002mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2003mpeg2_vdpau_hwaccel_deps="vdpau"
2004mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2005mpeg4_vaapi_hwaccel_deps="vaapi"
2006mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
82ca17ac
DB
2007mpeg4_vdpau_hwaccel_deps="vdpau"
2008mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
215cdd35
DB
2009vc1_dxva2_hwaccel_deps="dxva2"
2010vc1_dxva2_hwaccel_select="vc1_decoder"
82ca17ac
DB
2011vc1_vaapi_hwaccel_deps="vaapi"
2012vc1_vaapi_hwaccel_select="vc1_decoder"
82ca17ac
DB
2013vc1_vdpau_hwaccel_deps="vdpau"
2014vc1_vdpau_hwaccel_select="vc1_decoder"
ed40b6bf
DB
2015wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2016wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
77525327 2017wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
ed40b6bf 2018
28b80940 2019# parsers
fb7127b2 2020h264_parser_select="h264_decoder"
a6a675a7 2021mpegvideo_parser_select="mpegvideo"
7b9ef8d7 2022mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
28df0151 2023vc1_parser_select="mpegvideo startcode vc1_decoder"
28b80940 2024
4978850c
DB
2025# bitstream_filters
2026mjpeg2jpeg_bsf_select="jpegtables"
2027
912f3148 2028# external libraries
72025ac3 2029libdcadec_decoder_deps="libdcadec"
c9171a83 2030libfaac_encoder_deps="libfaac"
aa11cb79 2031libfaac_encoder_select="audio_frame_queue"
4f2b469d 2032libfdk_aac_decoder_deps="libfdk_aac"
37eeb5e2 2033libfdk_aac_encoder_deps="libfdk_aac"
aa11cb79 2034libfdk_aac_encoder_select="audio_frame_queue"
299c77d5
MR
2035libgsm_decoder_deps="libgsm"
2036libgsm_encoder_deps="libgsm"
8ffed8d8
MR
2037libgsm_ms_decoder_deps="libgsm"
2038libgsm_ms_encoder_deps="libgsm"
3641b048
MS
2039libilbc_decoder_deps="libilbc"
2040libilbc_encoder_deps="libilbc"
1cc60c47 2041libmp3lame_encoder_deps="libmp3lame"
aa11cb79 2042libmp3lame_encoder_select="audio_frame_queue"
0b175caa
DB
2043libopencore_amrnb_decoder_deps="libopencore_amrnb"
2044libopencore_amrnb_encoder_deps="libopencore_amrnb"
aa11cb79 2045libopencore_amrnb_encoder_select="audio_frame_queue"
0b175caa 2046libopencore_amrwb_decoder_deps="libopencore_amrwb"
8a3d9ca6 2047libopenh264_encoder_deps="libopenh264"
9a77d59a 2048libopenjpeg_decoder_deps="libopenjpeg"
453c02f9 2049libopenjpeg_encoder_deps="libopenjpeg"
44617d6e 2050libopus_decoder_deps="libopus"
6cb8c854 2051libopus_encoder_deps="libopus"
aa11cb79 2052libopus_encoder_select="audio_frame_queue"
f7cd9eed
AS
2053libschroedinger_decoder_deps="libschroedinger"
2054libschroedinger_encoder_deps="libschroedinger"
ae14f311 2055libspeex_decoder_deps="libspeex"
b606a017 2056libspeex_encoder_deps="libspeex"
aa11cb79 2057libspeex_encoder_select="audio_frame_queue"
150d2772 2058libtheora_encoder_deps="libtheora"
718907cd 2059libtwolame_encoder_deps="libtwolame"
d89e738a 2060libvo_aacenc_encoder_deps="libvo_aacenc"
aa11cb79 2061libvo_aacenc_encoder_select="audio_frame_queue"
f502ff3f 2062libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
b0caf888 2063libvorbis_encoder_deps="libvorbis"
aa11cb79 2064libvorbis_encoder_select="audio_frame_queue"
3f111804
LB
2065libvpx_vp8_decoder_deps="libvpx"
2066libvpx_vp8_encoder_deps="libvpx"
2067libvpx_vp9_decoder_deps="libvpx"
2068libvpx_vp9_encoder_deps="libvpx"
84d3ff50 2069libwavpack_encoder_deps="libwavpack"
be7c3231 2070libwebp_encoder_deps="libwebp"
1cc60c47 2071libx264_encoder_deps="libx264"
50ea9315 2072libx265_encoder_deps="libx265"
de295976 2073libxavs_encoder_deps="libxavs"
1cc60c47 2074libxvid_encoder_deps="libxvid"
30fd06be 2075
912f3148 2076# demuxers / muxers
c2dd0e9e 2077ac3_demuxer_select="ac3_parser"
255d9c57 2078asf_demuxer_select="riffdec"
3dd5c95d 2079asf_muxer_select="riffenc"
647c2356 2080asf_stream_muxer_select="asf_muxer"
255d9c57 2081avi_demuxer_select="riffdec"
3dd5c95d 2082avi_muxer_select="riffenc"
4e622dea 2083avisynth_demuxer_deps="avisynth"
255d9c57
DB
2084avisynth_demuxer_select="riffdec"
2085caf_demuxer_select="riffdec"
fe5e6e34 2086dash_muxer_select="mp4_muxer"
c2dd0e9e 2087dirac_demuxer_select="dirac_parser"
f6ee61fb
AK
2088dv_demuxer_select="dvprofile"
2089dv_muxer_select="dvprofile"
255d9c57 2090dxa_demuxer_select="riffdec"
5b423887 2091eac3_demuxer_select="ac3_parser"
e01fba55 2092f4v_muxer_select="mov_muxer"
c2dd0e9e 2093flac_demuxer_select="flac_parser"
435214a7 2094hds_muxer_select="flv_muxer"
c9031c7c 2095hls_muxer_select="mpegts_muxer"
647c2356 2096ipod_muxer_select="mov_muxer"
31f16dc1 2097ismv_muxer_select="mov_muxer"
647c2356 2098matroska_audio_muxer_select="matroska_muxer"
255d9c57 2099matroska_demuxer_select="riffdec"
2a91ada8 2100matroska_demuxer_suggest="bzlib lzo zlib"
3dd5c95d
DB
2101matroska_muxer_select="riffenc"
2102mmf_muxer_select="riffenc"
255d9c57 2103mov_demuxer_select="riffdec"
4e622dea 2104mov_demuxer_suggest="zlib"
3dd5c95d 2105mov_muxer_select="riffenc rtpenc_chain"
c2dd0e9e 2106mp3_demuxer_select="mpegaudio_parser"
647c2356 2107mp4_muxer_select="mov_muxer"
75644335 2108mpegts_muxer_select="adts_muxer latm_muxer"
647c2356
DB
2109mpegtsraw_demuxer_select="mpegts_demuxer"
2110mxf_d10_muxer_select="mxf_muxer"
3dd5c95d 2111nut_muxer_select="riffenc"
255d9c57 2112nuv_demuxer_select="riffdec"
051aadee 2113oga_muxer_select="ogg_muxer"
24ca518b 2114ogg_demuxer_select="golomb"
051aadee 2115opus_muxer_select="ogg_muxer"
647c2356 2116psp_muxer_select="mov_muxer"
44594cc7 2117rtp_demuxer_select="sdp_demuxer"
4978850c 2118rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
44b70ce5 2119rtsp_demuxer_select="http_protocol rtpdec"
5ad2f0bf 2120rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
01c8d258 2121sap_demuxer_select="sdp_demuxer"
5ad2f0bf 2122sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
44b70ce5 2123sdp_demuxer_select="rtpdec"
e772f9fa 2124smoothstreaming_muxer_select="ismv_muxer"
f1e94694 2125spdif_muxer_select="aac_parser"
051aadee 2126spx_muxer_select="ogg_muxer"
57231e4d 2127tak_demuxer_select="tak_parser"
647c2356
DB
2128tg2_muxer_select="mov_muxer"
2129tgp_muxer_select="mov_muxer"
a7d45e06 2130w64_demuxer_select="wav_demuxer"
255d9c57 2131wav_demuxer_select="riffdec"
3dd5c95d
DB
2132wav_muxer_select="riffenc"
2133webm_muxer_select="riffenc"
255d9c57
DB
2134wtv_demuxer_select="riffdec"
2135xmv_demuxer_select="riffdec"
2136xwma_demuxer_select="riffdec"
4e622dea
SS
2137
2138# indevs / outdevs
38e54a75 2139alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
38e54a75 2140alsa_outdev_deps="alsa_asoundlib_h"
38e54a75 2141bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
6fb65973
DB
2142dv1394_indev_deps="dv1394"
2143dv1394_indev_select="dv_demuxer"
c6f95144 2144fbdev_indev_deps="linux_fb_h"
a3fc62e8 2145jack_indev_deps="jack_jack_h pthreads"
e417d80d 2146libcdio_indev_deps="libcdio"
38e54a75 2147libdc1394_indev_deps="libdc1394"
38e54a75
SS
2148oss_indev_deps_any="soundcard_h sys_soundcard_h"
2149oss_outdev_deps_any="soundcard_h sys_soundcard_h"
0de9c41f 2150pulse_indev_deps="libpulse"
15d59d2c
B
2151sndio_indev_deps="sndio_h"
2152sndio_outdev_deps="sndio_h"
38e54a75 2153v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
ec1ee802 2154vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
a1b3c5a3 2155vfwcap_indev_extralibs="-lavicap32"
a6674d2e
LB
2156x11grab_indev_deps="x11grab"
2157x11grab_xcb_indev_deps="libxcb"
30fd06be 2158
912f3148 2159# protocols
acd554c1
SP
2160ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2161ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2162ffrtmpcrypt_protocol_select="tcp_protocol"
775c4d36
SP
2163ffrtmphttp_protocol_deps="!librtmp_protocol"
2164ffrtmphttp_protocol_select="http_protocol"
998c1ee1 2165gopher_protocol_select="network"
279a0c97 2166http_protocol_select="tcp_protocol"
7caf48e0 2167httpproxy_protocol_select="tcp_protocol"
183baead 2168https_protocol_select="tls_protocol"
eb9244f2 2169icecast_protocol_select="http_protocol"
c3b57d6e
DB
2170librtmp_protocol_deps="librtmp"
2171librtmpe_protocol_deps="librtmp"
2172librtmps_protocol_deps="librtmp"
2173librtmpt_protocol_deps="librtmp"
2174librtmpte_protocol_deps="librtmp"
c60a2d70 2175mmsh_protocol_select="http_protocol"
998c1ee1 2176mmst_protocol_select="network"
c3b57d6e 2177rtmp_protocol_deps="!librtmp_protocol"
deeb7012 2178rtmp_protocol_select="tcp_protocol"
acd554c1 2179rtmpe_protocol_select="ffrtmpcrypt_protocol"
6aedabc9
SP
2180rtmps_protocol_deps="!librtmp_protocol"
2181rtmps_protocol_select="tls_protocol"
775c4d36 2182rtmpt_protocol_select="ffrtmphttp_protocol"
08cd95e8 2183rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
6c1ed454 2184rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
deeb7012 2185rtp_protocol_select="udp_protocol"
998c1ee1
DB
2186sctp_protocol_deps="struct_sctp_event_subscribe"
2187sctp_protocol_select="network"
0eecafc9 2188srtp_protocol_select="rtp_protocol"
998c1ee1 2189tcp_protocol_select="network"
558d192d
MS
2190tls_protocol_deps_any="openssl gnutls"
2191tls_protocol_select="tcp_protocol"
998c1ee1 2192udp_protocol_select="network"
60538758
LB
2193unix_protocol_deps="sys_un_h"
2194unix_protocol_select="network"
c08fb000 2195
6ebf0bfc 2196# filters
13fabd7a 2197blackframe_filter_deps="gpl"
ce6b6ef6 2198boxblur_filter_deps="gpl"
1c0210c7 2199bs2b_filter_deps="libbs2b"
68b79bfc 2200cropdetect_filter_deps="gpl"
b157be1f 2201delogo_filter_deps="gpl"
a5b64584 2202drawtext_filter_deps="libfreetype"
61b323ce 2203frei0r_filter_deps="frei0r dlopen"
cfec77aa 2204frei0r_filter_extralibs='$ldl'
61b323ce 2205frei0r_src_filter_deps="frei0r dlopen"
cfec77aa 2206frei0r_src_filter_extralibs='$ldl'
a4dc7aa5 2207hqdn3d_filter_deps="gpl"
3fce1367 2208interlace_filter_deps="gpl"
cf69ad35 2209ocv_filter_deps="libopencv"
7caf48e0 2210resample_filter_deps="avresample"
2f296e39 2211scale_filter_deps="swscale"
6ebf0bfc 2212
ab81f24a 2213# examples
b339182e 2214avcodec_example_deps="avcodec avutil"
e7dfaf16 2215filter_audio_example_deps="avfilter avutil"
b339182e 2216metadata_example_deps="avformat avutil"
ab81f24a 2217output_example_deps="avcodec avformat avutil swscale"
990e4a66 2218qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
10421bcf 2219transcode_aac_example_deps="avcodec avformat avresample"
ab81f24a 2220
44951174 2221# libraries, in linking order
d89f2fa9 2222avcodec_deps="avutil"
44951174 2223avdevice_deps="avformat avcodec avutil"
d89f2fa9 2224avfilter_deps="avutil"
44951174 2225avformat_deps="avcodec avutil"
d89f2fa9
DB
2226avresample_deps="avutil"
2227swscale_deps="avutil"
f7679c54 2228
912f3148 2229# programs
54fd593a 2230avconv_deps="avcodec avfilter avformat avresample swscale"
bce70f81 2231avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
0a0e340f 2232 fps_filter null_filter resample_filter scale_filter
bce70f81 2233 setpts_filter trim_filter"
d173ede1 2234avplay_deps="avcodec avformat avresample swscale sdl"
d2617193 2235avplay_libs='$sdl_libs'
e2d50fc2 2236avplay_select="rdft transpose_filter hflip_filter vflip_filter"
9e12f0bf 2237avprobe_deps="avcodec avformat"
a2830dca 2238
4da3f410 2239# documentation
92f0abb2 2240pod2man_deps="doc"
4da3f410
DB
2241texi2html_deps="doc"
2242
de6d9b64 2243# default parameters
8a608357 2244
19bd477d 2245logfile="config.log"
8a608357
MR
2246
2247# installation paths
c9d19248
MR
2248prefix_default="/usr/local"
2249bindir_default='${prefix}/bin'
6291d7e4 2250datadir_default='${prefix}/share/avconv'
f4ca970d 2251docdir_default='${prefix}/share/doc/libav'
c9d19248
MR
2252incdir_default='${prefix}/include'
2253libdir_default='${prefix}/lib'
2254mandir_default='${prefix}/share/man'
2255shlibdir_default="$libdir_default"
8a608357
MR
2256
2257# toolchain
121d78d0 2258ar_default="ar"
13c7df3d 2259cc_default="gcc"
9da6609f 2260host_cc_default="gcc"
4ebc6a74 2261cp_f="cp -f"
b58b00ae 2262ln_s="ln -s -f"
2a8a860a 2263nm_default="nm -g"
11e6d03a 2264objformat="elf"
3f8040db 2265pkg_config_default=pkg-config
be7109c1 2266ranlib="ranlib"
e52567c2 2267strip="strip"
11e6d03a 2268yasmexe="yasm"
8a608357
MR
2269
2270# machine
8d4c00ed 2271arch_default=$(uname -m)
38d0a8aa 2272cpu="generic"
d45ebd48 2273intrinsics="none"
8a608357 2274
8a608357 2275# OS
8d4c00ed
MR
2276target_os_default=$(tolower $(uname -s))
2277host_os=$target_os_default
8a608357 2278
8a608357 2279# configurable options
ab81f24a 2280enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
3e0b1c9a 2281
3e0b1c9a
DB
2282enable asm
2283enable debug
2284enable doc
1274ea8d 2285enable faan faandct faanidct
8400d6b8 2286enable optimizations
8cfbbd92 2287enable safe_bitstream_reader
530dc538 2288enable static
a9ddb5b1 2289enable swscale_alpha
eaa2d123 2290enable valgrind_backtrace
8a608357 2291
2e2ec667 2292# By default, enable only those hwaccels that have no external dependencies.
7834a54c 2293enable dxva2 vda vdpau
2e2ec667 2294
8a608357 2295# build settings
9987769a 2296SHFLAGS='-shared -Wl,-soname,$$(@F)'
f3ec2d46
SG
2297LIBPREF="lib"
2298LIBSUF=".a"
c5f14466
RP
2299FULLNAME='$(NAME)$(BUILDSUF)'
2300LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
2301SLIBPREF="lib"
2302SLIBSUF=".so"
c5f14466 2303SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
2304SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2305SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
6cfac0e9 2306LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2f138f0b
MR
2307SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2308SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
ef0bc4c9 2309
68485d1f
MR
2310asflags_filter=echo
2311cflags_filter=echo
64933b6c
MR
2312ldflags_filter=echo
2313
23565c26 2314AS_C='-c'
bc877faf 2315AS_O='-o $@'
23565c26 2316CC_C='-c'
18031c49 2317CC_E='-E -o $@'
7e6c86e6 2318CC_O='-o $@'
a758c5e2 2319LD_O='-o $@'
8db73c61
MR
2320LD_LIB='-l%'
2321LD_PATH='-L'
23565c26 2322HOSTCC_C='-c'
27565164 2323HOSTCC_E='-E -o $@'
a758c5e2 2324HOSTCC_O='-o $@'
095792f2 2325HOSTLD_O='-o $@'
7e6c86e6 2326
9da6609f 2327host_libs='-lm'
6c3fa06a
MR
2328host_cflags_filter=echo
2329host_ldflags_filter=echo
9da6609f 2330
9b861379 2331target_path='$(CURDIR)'
a7ada2ba 2332
a158446b
MR
2333# since the object filename is not given with the -MM flag, the compiler
2334# is only able to print the basename, and we must add the path ourselves
a758c5e2
MR
2335DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2336DEPFLAGS='-MM'
315c741d 2337
c597172e 2338# find source path
24524f36 2339if test -f configure; then
f038cf3c 2340 source_path=.
c597172e 2341else
8477f2de 2342 source_path=$(cd $(dirname "$0"); pwd)
c597172e 2343 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 2344 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
2345 test -e "$source_path/config.h" &&
2346 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
2347fi
2348
13cbe2c0 2349for v in "$@"; do
b04251c5
MR
2350 r=${v#*=}
2351 l=${v%"$r"}
2352 r=$(sh_quote "$r")
29ba0911 2353 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
13cbe2c0 2354done
c597172e 2355
73ef8980
MR
2356find_things(){
2357 thing=$1
2358 pattern=$2
2359 file=$source_path/$3
932ccf39 2360 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
2361}
2362
2363ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2364DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 2365HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
2366PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2367BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
2368MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2369DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
38e54a75
SS
2370OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2371INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
73ef8980 2372PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 2373FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 2374
54e75be4
DB
2375ALL_COMPONENTS="
2376 $BSF_LIST
2377 $DECODER_LIST
2378 $DEMUXER_LIST
2379 $ENCODER_LIST
2380 $FILTER_LIST
2381 $HWACCEL_LIST
2382 $INDEV_LIST
2383 $MUXER_LIST
2384 $OUTDEV_LIST
2385 $PARSER_LIST
2386 $PROTOCOL_LIST
2387"
2388
8469ae22
MR
2389for n in $COMPONENT_LIST; do
2390 v=$(toupper ${n%s})_LIST
2391 eval enable \$$v
2392 eval ${n}_if_any="\$$v"
2393done
2394
206a070d 2395enable $ARCH_EXT_LIST
c597172e
MR
2396
2397die_unknown(){
2398 echo "Unknown option \"$1\"."
2399 echo "See $0 --help for available options."
2400 exit 1
2401}
2402
7432e872
DB
2403print_3_columns() {
2404 cat | tr ' ' '\n' | sort | pr -r -3 -t
2405}
2406
794f8e97 2407show_list() {
bf0c4afa
RP
2408 suffix=_$1
2409 shift
7432e872 2410 echo $* | sed s/$suffix//g | print_3_columns
794f8e97
PI
2411 exit 0
2412}
2413
154caa67
MR
2414rand_list(){
2415 IFS=', '
2416 set -- $*
2417 unset IFS
2418 for thing; do
2419 comp=${thing%:*}
2420 prob=${thing#$comp}
2421 prob=${prob#:}
2422 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2423 echo "prob ${prob:-0.5}"
2424 printf '%s\n' $comp
2425 done
2426}
2427
2428do_random(){
2429 action=$1
2430 shift
2431 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2432 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2433}
2434
c597172e 2435for opt do
7483e694
DB
2436 optval="${opt#*=}"
2437 case "$opt" in
ea061af1
DB
2438 --extra-ldflags=*)
2439 add_ldflags $optval
7e9e7cc2 2440 ;;
bb0babd7
LB
2441 --extra-ldexeflags=*)
2442 add_ldexeflags $optval
2443 ;;
ea061af1
DB
2444 --extra-libs=*)
2445 add_extralibs $optval
7e9e7cc2 2446 ;;
ea061af1
DB
2447 --disable-devices)
2448 disable $INDEV_LIST $OUTDEV_LIST
7e9e7cc2 2449 ;;
ea061af1
DB
2450 --enable-debug=*)
2451 debuglevel="$optval"
7e9e7cc2
MR
2452 ;;
2453 --disable-programs)
2454 disable $PROGRAM_LIST
2455 ;;
2456 --disable-everything)
2457 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2458 ;;
844c6852
DB
2459 --disable-all)
2460 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2461 disable $LIBRARY_LIST $PROGRAM_LIST doc
2462 ;;
7e9e7cc2
MR
2463 --enable-random|--disable-random)
2464 action=${opt%%-random}
2465 do_random ${action#--} $COMPONENT_LIST
2466 ;;
2467 --enable-random=*|--disable-random=*)
2468 action=${opt%%-random=*}
2469 do_random ${action#--} $optval
2470 ;;
2471 --enable-*=*|--disable-*=*)
2472 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2473 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2474 eval list=\$$(toupper $thing)_LIST
2475 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2476 $action $(filter "$name" $list)
2477 ;;
894682a9
AK
2478 --enable-avserver|--disable-avserver*)
2479 warn "avserver has been removed, the ${opt} option is only"\
2480 "provided for compatibility and will be removed in the future"
2481 ;;
7e9e7cc2
MR
2482 --enable-?*|--disable-?*)
2483 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2484 if is_in $option $COMPONENT_LIST; then
2485 test $action = disable && action=unset
2486 eval $action \$$(toupper ${option%s})_LIST
2487 elif is_in $option $CMDLINE_SELECT; then
2488 $action $option
2489 else
2490 die_unknown $opt
2491 fi
2492 ;;
2493 --list-*)
2494 NAME="${opt#--list-}"
2495 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2496 NAME=${NAME%s}
2497 eval show_list $NAME \$$(toupper $NAME)_LIST
2498 ;;
2499 --help|-h) show_help
2500 ;;
2501 *)
2502 optname="${opt%%=*}"
2503 optname="${optname#--}"
2504 optname=$(echo "$optname" | sed 's/-/_/g')
2505 if is_in $optname $CMDLINE_SET; then
2506 eval $optname='$optval'
2507 elif is_in $optname $CMDLINE_APPEND; then
2508 append $optname "$optval"
2509 else
2510 die_unknown $opt
2511 fi
2512 ;;
7483e694 2513 esac
c597172e
MR
2514done
2515
bcea99bb
MR
2516disabled logging && logfile=/dev/null
2517
29ba0911 2518echo "# $0 $LIBAV_CONFIGURATION" > $logfile
bcea99bb
MR
2519set >> $logfile
2520
aeeb782c 2521case "$toolchain" in
0fbb62a8
LB
2522 clang-asan)
2523 cc_default="clang"
19f251a2
LB
2524 add_cflags -fsanitize=address
2525 add_ldflags -fsanitize=address
0fbb62a8
LB
2526 ;;
2527 clang-tsan)
2528 cc_default="clang"
19f251a2
LB
2529 add_cflags -fsanitize=thread -pie
2530 add_ldflags -fsanitize=thread -pie
0fbb62a8 2531 ;;
d6a27f88
LB
2532 clang-usan)
2533 cc_default="clang"
4d25c2bc 2534 add_cflags -fsanitize=undefined -O1
d6a27f88
LB
2535 add_ldflags -fsanitize=undefined
2536 ;;
0ba49d28
LB
2537 gcc-asan)
2538 cc_default="gcc"
2539 add_cflags -fsanitize=address
2540 add_ldflags -fsanitize=address
2541 ;;
2542 gcc-tsan)
2543 cc_default="gcc"
2544 add_cflags -fsanitize=thread -pie -fPIC
2545 add_ldflags -fsanitize=thread -pie -fPIC
2546 ;;
d6a27f88
LB
2547 gcc-usan)
2548 cc_default="gcc"
2549 add_cflags -fsanitize=undefined
2550 add_ldflags -fsanitize=undefined
2551 ;;
edfe609f
LB
2552 valgrind-massif)
2553 target_exec_default="valgrind"
2554 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2555 ;;
b1ee8eec
RT
2556 valgrind-memcheck)
2557 target_exec_default="valgrind"
2558 target_exec_args="--track-origins=yes --leak-check=full"
2559 ;;
aeeb782c 2560 msvc)
16381923
MS
2561 # Check whether the current MSVC version needs the C99 converter.
2562 # From MSVC 2013 (compiler major version 18) onwards, it does actually
ea9f7173 2563 # support enough of C99 to build libav. Default to the new
16381923
MS
2564 # behaviour if the regexp was unable to match anything, since this
2565 # successfully parses the version number of existing supported
2566 # versions that require the converter (MSVC 2010 and 2012).
2567 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2568 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
ea9f7173 2569 cc_default="cl"
16381923
MS
2570 else
2571 cc_default="c99wrap cl"
2572 fi
ea9f7173 2573 ld_default="link"
aeeb782c 2574 nm_default="dumpbin -symbols"
ac3a9b51 2575 ar_default="lib"
53e8cd68 2576 target_os_default="win32"
ea9f7173
MS
2577 # Use a relative path for TMPDIR. This makes sure all the
2578 # ffconf temp files are written with a relative path, avoiding
2579 # issues with msys/win32 path conversion for MSVC parameters
2580 # such as -Fo<file> or -out:<file>.
2581 TMPDIR=.
aeeb782c 2582 ;;
322e4194 2583 icl)
ea9f7173
MS
2584 cc_default="icl"
2585 ld_default="xilink"
322e4194
AS
2586 nm_default="dumpbin -symbols"
2587 ar_default="xilib"
2588 target_os_default="win32"
ea9f7173 2589 TMPDIR=.
322e4194 2590 ;;
a862c7d3
RT
2591 gcov)
2592 add_cflags -fprofile-arcs -ftest-coverage
2593 add_ldflags -fprofile-arcs -ftest-coverage
2594 ;;
e7891305 2595 hardened)
2d589273
DB
2596 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2597 add_cflags -fno-strict-overflow -fstack-protector-all
2598 add_ldflags -Wl,-z,relro -Wl,-z,now
e7891305 2599 ;;
aeeb782c
MR
2600 ?*)
2601 die "Unknown toolchain $toolchain"
2602 ;;
2603esac
2604
faab8f9f
JG
2605test -n "$cross_prefix" && enable cross_compile
2606
2607if enabled cross_compile; then
2608 test -n "$arch" && test -n "$target_os" ||
2609 die "Must specify target arch and OS when cross-compiling"
2610fi
2611
82b6e451
LB
2612ar_default="${cross_prefix}${ar_default}"
2613cc_default="${cross_prefix}${cc_default}"
2614nm_default="${cross_prefix}${nm_default}"
2615pkg_config_default="${cross_prefix}${pkg_config_default}"
2616ranlib="${cross_prefix}${ranlib}"
2617strip="${cross_prefix}${strip}"
2618
2619sysinclude_default="${sysroot}/usr/include"
2620
b1ee8eec 2621set_default arch cc pkg_config sysinclude target_exec target_os
9da6609f
MR
2622enabled cross_compile || host_cc_default=$cc
2623set_default host_cc
13c7df3d 2624
762f95e4
MR
2625if ! $pkg_config --version >/dev/null 2>&1; then
2626 warn "$pkg_config not found, library detection may fail."
2627 pkg_config=false
2628fi
2629
82bb3329
MR
2630exesuf() {
2631 case $1 in
53e8cd68 2632 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
82bb3329
MR
2633 esac
2634}
2635
2636EXESUF=$(exesuf $target_os)
2637HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 2638
e4e69e0b 2639# set temporary file name
a49d42c2 2640: ${TMPDIR:=$TEMPDIR}
c51fafa1 2641: ${TMPDIR:=$TMP}
a49d42c2 2642: ${TMPDIR:=/tmp}
e4e69e0b 2643
a210bce2 2644if ! check_cmd mktemp -u XXXXXX; then
54460a83
MR
2645 # simple replacement for missing mktemp
2646 # NOT SAFE FOR GENERAL USE
2647 mktemp(){
09a5c245 2648 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
54460a83
MR
2649 }
2650fi
2651
2652tmpfile(){
2653 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2654 (set -C; exec > $tmp) 2>/dev/null ||
f7ba16a7 2655 die "Unable to create temporary file in $TMPDIR."
54460a83
MR
2656 append TMPFILES $tmp
2657 eval $1=$tmp
2658}
2659
2660trap 'rm -f -- $TMPFILES' EXIT
54460a83 2661
55127e7b 2662tmpfile TMPASM .asm
3e0b1c9a
DB
2663tmpfile TMPC .c
2664tmpfile TMPE $EXESUF
2665tmpfile TMPH .h
2666tmpfile TMPO .o
2667tmpfile TMPS .S
2668tmpfile TMPSH .sh
2669tmpfile TMPV .ver
54460a83
MR
2670
2671unset -f mktemp
e4e69e0b 2672
fb3c4ffc
MR
2673chmod +x $TMPE
2674
993f2d0f
MR
2675# make sure we can execute files in $TMPDIR
2676cat > $TMPSH 2>> $logfile <<EOF
2677#! /bin/sh
2678EOF
2679chmod +x $TMPSH >> $logfile 2>&1
2680if ! $TMPSH >> $logfile 2>&1; then
2681 cat <<EOF
2682Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2683variable to another directory and make sure that it is not mounted noexec.
2684EOF
2685 die "Sanity test failed."
2686fi
993f2d0f 2687
08b94f16
MS
2688armasm_flags(){
2689 for flag; do
2690 case $flag in
2691 # Filter out MSVC cl.exe options from cflags that shouldn't
2692 # be passed to gas-preprocessor
2693 -M[TD]*) ;;
2694 *) echo $flag ;;
2695 esac
2696 done
2697}
2698
457cc333
MR
2699ccc_flags(){
2700 for flag; do
2701 case $flag in
2702 -std=c99) echo -c99 ;;
2703 -mcpu=*) echo -arch ${flag#*=} ;;
2704 -mieee) echo -ieee ;;
2705 -O*|-fast) echo $flag ;;
2706 -fno-math-errno) echo -assume nomath_errno ;;
2707 -g) echo -g3 ;;
2708 -Wall) echo -msg_enable level2 ;;
2709 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2710 -Wl,*) echo $flag ;;
2711 -f*|-W*) ;;
2712 *) echo $flag ;;
2713 esac
2714 done
2715}
2716
e5d45e02
LB
2717cparser_flags(){
2718 for flag; do
2719 case $flag in
2720 -Wno-switch) echo -Wno-switch-enum ;;
2721 -Wno-format-zero-length) ;;
2722 -Wdisabled-optimization) ;;
2723 -Wno-pointer-sign) echo -Wno-other ;;
2724 *) echo $flag ;;
2725 esac
2726 done
2727}
2728
14fb9d3d 2729msvc_common_flags(){
dfa559bc
RB
2730 for flag; do
2731 case $flag in
14fb9d3d
AS
2732 # In addition to specifying certain flags under the compiler
2733 # specific filters, they must be specified here as well or else the
2734 # generic catch all at the bottom will print the original flag.
2735 -Wall) ;;
2736 -std=c99) ;;
2737 # Common flags
9f4a16c5 2738 -fomit-frame-pointer) ;;
dfa559bc 2739 -g) echo -Z7 ;;
dfa559bc
RB
2740 -fno-math-errno) ;;
2741 -fno-common) ;;
2742 -fno-signed-zeros) ;;
50640977 2743 -fPIC) ;;
9f30fb5a
MS
2744 -mthumb) ;;
2745 -march=*) ;;
dfa559bc 2746 -lz) echo zlib.lib ;;
bd680c7b
DB
2747 -lavifil32) echo vfw32.lib ;;
2748 -lavicap32) echo vfw32.lib user32.lib ;;
dfa559bc 2749 -l*) echo ${flag#-l}.lib ;;
f4d4e66a 2750 -L*) echo -libpath:${flag#-L} ;;
dfa559bc
RB
2751 *) echo $flag ;;
2752 esac
2753 done
2754}
2755
14fb9d3d
AS
2756msvc_flags(){
2757 msvc_common_flags "$@"
2758 for flag; do
2759 case $flag in
ace87c19 2760 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
14fb9d3d
AS
2761 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2762 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
91894f27 2763 -wd4273 -wd4554 -wd4701 ;;
14fb9d3d
AS
2764 esac
2765 done
2766}
2767
2768icl_flags(){
2769 msvc_common_flags "$@"
2770 for flag; do
2771 case $flag in
2772 # Despite what Intel's documentation says -Wall, which is supported
2773 # on Windows, does enable remarks so disable them here.
2774 -Wall) echo $flag -Qdiag-disable:remark ;;
2775 -std=c99) echo -Qstd=c99 ;;
2776 esac
2777 done
2778}
2779
d0c6d424
MR
2780pgi_flags(){
2781 for flag; do
2782 case $flag in
643933f5 2783 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
d0c6d424
MR
2784 -fomit-frame-pointer) echo -Mnoframe ;;
2785 -g) echo -gopt ;;
2786 *) echo $flag ;;
2787 esac
2788 done
2789}
2790
2791suncc_flags(){
2792 for flag; do
2793 case $flag in
2794 -march=*|-mcpu=*)
2795 case "${flag#*=}" in
2796 native) echo -xtarget=native ;;
2797 v9|niagara) echo -xarch=sparc ;;
2798 ultrasparc) echo -xarch=sparcvis ;;
2799 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2800 i586|pentium) echo -xchip=pentium ;;
2801 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2802 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2803 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2804 pentium4*) echo -xtarget=pentium4 ;;
2805 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2806 *-sse3) echo -xarch=sse3 ;;
2807 core2) echo -xarch=ssse3 -xchip=core2 ;;
f2ce813e
SM
2808 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2809 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
b36f87ff 2810 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
ace87c19 2811 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
d0c6d424 2812 k8|opteron|athlon64|athlon-fx)
ace87c19
DB
2813 echo -xarch=sse2a ;;
2814 athlon*) echo -xarch=pentium_proa ;;
d0c6d424
MR
2815 esac
2816 ;;
2817 -std=c99) echo -xc99 ;;
2818 -fomit-frame-pointer) echo -xregs=frameptr ;;
2819 -fPIC) echo -KPIC -xcode=pic32 ;;
2820 -W*,*) echo $flag ;;
5e753ed5
SM
2821 -f*-*|-W*|-mimpure-text) ;;
2822 -shared) echo -G ;;
d0c6d424
MR
2823 *) echo $flag ;;
2824 esac
2825 done
2826}
2827
2828tms470_flags(){
2829 for flag; do
2830 case $flag in
2831 -march=*|-mcpu=*)
2832 case "${flag#*=}" in
2833 armv7-a|cortex-a*) echo -mv=7a8 ;;
2834 armv7-r|cortex-r*) echo -mv=7r4 ;;
2835 armv7-m|cortex-m*) echo -mv=7m3 ;;
2836 armv6*|arm11*) echo -mv=6 ;;
2837 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2838 echo -mv=5e ;;
2839 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2840 esac
2841 ;;
2842 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2843 -mfpu=vfp) echo --float_support=vfpv2 ;;
2844 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
b5198a26 2845 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
d0c6d424
MR
2846 -msoft-float) echo --float_support=vfplib ;;
2847 -O[0-3]|-mf=*) echo $flag ;;
2848 -g) echo -g -mn ;;
2849 -pds=*) echo $flag ;;
ad93dccb
MR
2850 -D*|-I*) echo $flag ;;
2851 --gcc|--abi=*) echo $flag ;;
2852 -me) echo $flag ;;
d0c6d424
MR
2853 esac
2854 done
2855}
2856
a758c5e2
MR
2857probe_cc(){
2858 pfx=$1
2859 _cc=$2
2860
8db73c61
MR
2861 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2862 unset _ld_o _ldflags _ld_lib _ld_path
18031c49 2863 unset _depflags _DEPCMD _DEPFLAGS
a758c5e2
MR
2864 _flags_filter=echo
2865
2866 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2867 _type=llvm_gcc
2868 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2869 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2870 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2871 _cflags_speed='-O3'
2872 _cflags_size='-Os'
2873 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2874 _type=gcc
2875 gcc_version=$($_cc --version | head -n1)
2876 gcc_basever=$($_cc -dumpversion)
2877 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2878 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2879 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2880 if ! $_cc -dumpversion | grep -q '^2\.'; then
2881 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2882 fi
2883 _cflags_speed='-O3'
2884 _cflags_size='-Os'
b2d688ea 2885 elif $_cc --version 2>/dev/null | grep -q ^icc; then
a758c5e2
MR
2886 _type=icc
2887 _ident=$($_cc --version | head -n1)
2888 _depflags='-MMD'
2889 _cflags_speed='-O3'
2890 _cflags_size='-Os'
2891 _cflags_noopt='-O1'
2892 elif $_cc -v 2>&1 | grep -q xlc; then
2893 _type=xlc
2894 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2895 _cflags_speed='-O5'
2896 _cflags_size='-O5 -qcompact'
2897 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2898 _type=ccc
2899 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2900 _DEPFLAGS='-M'
a758c5e2
MR
2901 _cflags_speed='-fast'
2902 _cflags_size='-O1'
457cc333 2903 _flags_filter=ccc_flags
4936ef64 2904 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
a758c5e2
MR
2905 test -d "$sysroot" || die "No valid sysroot specified."
2906 _type=armcc
ed6d9ce9 2907 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
a758c5e2
MR
2908 armcc_conf="$PWD/armcc.conf"
2909 $_cc --arm_linux_configure \
2910 --arm_linux_config_file="$armcc_conf" \
2911 --configure_sysroot="$sysroot" \
2912 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2913 die "Error creating armcc configuration file."
2914 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2915 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2916 as_default="${cross_prefix}gcc"
2917 _depflags='-MMD'
2918 _cflags_speed='-O3'
2919 _cflags_size='-Os'
0122118e 2920 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
a758c5e2
MR
2921 _type=tms470
2922 _ident=$($_cc -version | head -n1 | tr -s ' ')
2923 _flags='--gcc --abi=eabi -me'
18031c49 2924 _cc_e='-ppl -fe=$@'
a758c5e2 2925 _cc_o='-fe=$@'
a758c5e2
MR
2926 _depflags='-ppa -ppd=$(@:.o=.d)'
2927 _cflags_speed='-O3 -mf=5'
2928 _cflags_size='-O3 -mf=2'
2929 _flags_filter=tms470_flags
2930 elif $_cc -v 2>&1 | grep -q clang; then
2931 _type=clang
2932 _ident=$($_cc --version | head -n1)
9e057f53 2933 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
a758c5e2
MR
2934 _cflags_speed='-O3'
2935 _cflags_size='-Os'
2936 elif $_cc -V 2>&1 | grep -q Sun; then
2937 _type=suncc
2938 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2939 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
c72f12cb 2940 _DEPFLAGS='-xM1 -xc99'
a758c5e2
MR
2941 _ldflags='-std=c99'
2942 _cflags_speed='-O5'
2943 _cflags_size='-O5 -xspace'
2944 _flags_filter=suncc_flags
2945 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2946 _type=pathscale
2947 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2948 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2949 _cflags_speed='-O2'
2950 _cflags_size='-Os'
2951 _flags_filter='filter_out -Wdisabled-optimization'
2952 elif $_cc -v 2>&1 | grep -q Open64; then
2953 _type=open64
2954 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2955 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2956 _cflags_speed='-O2'
2957 _cflags_size='-Os'
2958 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2959 elif $_cc -V 2>&1 | grep -q Portland; then
2960 _type=pgi
2961 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
8f23907f 2962 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
a758c5e2
MR
2963 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2964 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2965 _cflags_noopt="-O1"
2966 _flags_filter=pgi_flags
f4312352
MS
2967 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
2968 _type=armasm
2969 _ident=$($_cc | head -n1)
2970 # 4509: "This form of conditional instruction is deprecated"
2971 _flags="-nologo -ignore 4509"
08b94f16 2972 _flags_filter=armasm_flags
dfa559bc
RB
2973 elif $_cc 2>&1 | grep -q Microsoft; then
2974 _type=msvc
2975 _ident=$($cc 2>&1 | head -n1)
2976 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2977 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2978 _cflags_speed="-O2"
2979 _cflags_size="-O1"
dfa559bc 2980 if $_cc 2>&1 | grep -q Linker; then
ea9f7173 2981 _ld_o='-out:$@'
dfa559bc
RB
2982 else
2983 _ld_o='-Fe$@'
2984 fi
ea9f7173
MS
2985 _cc_o='-Fo$@'
2986 _cc_e='-P -Fi$@'
dfa559bc
RB
2987 _flags_filter=msvc_flags
2988 _ld_lib='lib%.a'
2989 _ld_path='-libpath:'
2990 _flags='-nologo'
09f2581d 2991 _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
dfa559bc 2992 if [ $pfx = hostcc ]; then
6a0200f2 2993 append _cflags -Dsnprintf=_snprintf
dfa559bc 2994 fi
322e4194
AS
2995 elif $_cc 2>&1 | grep -q Intel; then
2996 _type=icl
2997 _ident=$($cc 2>&1 | head -n1)
2998 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
ace87c19
DB
2999 # Not only is O3 broken on 13.x+ but it is slower on all previous
3000 # versions (tested) as well.
322e4194
AS
3001 _cflags_speed="-O2"
3002 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
322e4194 3003 if $_cc 2>&1 | grep -q Linker; then
ea9f7173 3004 _ld_o='-out:$@'
322e4194
AS
3005 else
3006 _ld_o='-Fe$@'
3007 fi
ea9f7173 3008 _cc_o='-Fo$@'
322e4194 3009 _cc_e='-P'
14fb9d3d 3010 _flags_filter=icl_flags
322e4194
AS
3011 _ld_lib='lib%.a'
3012 _ld_path='-libpath:'
ace87c19 3013 # -Qdiag-error to make icl error when seeing certain unknown arguments
60f09c04 3014 _flags='-nologo -Qdiag-error:4044,10157'
ace87c19
DB
3015 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3016 # with MSVC which enables it by default.
e0d6e2fc 3017 _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
322e4194
AS
3018 if [ $pfx = hostcc ]; then
3019 append _cflags -Dsnprintf=_snprintf
3020 fi
e5d45e02
LB
3021 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3022 _type=cparser
3023 _ident=$($_cc --version | head -n1)
3024 _depflags='-MMD'
3025 _cflags_speed='-O4'
3026 _cflags_size='-O2'
3027 _flags_filter=cparser_flags
aef6bd1b 3028 fi
a758c5e2
MR
3029
3030 eval ${pfx}_type=\$_type
3031 eval ${pfx}_ident=\$_ident
3032}
3033
3034set_ccvars(){
23565c26 3035 eval ${1}_C=\${_cc_c-\${${1}_C}}
18031c49 3036 eval ${1}_E=\${_cc_e-\${${1}_E}}
a758c5e2
MR
3037 eval ${1}_O=\${_cc_o-\${${1}_O}}
3038
3039 if [ -n "$_depflags" ]; then
3040 eval ${1}_DEPFLAGS=\$_depflags
3041 else
3042 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3043 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3044 eval DEP${1}FLAGS=\$_flags
3045 fi
3046}
3047
3048probe_cc cc "$cc"
3049cflags_filter=$_flags_filter
3050cflags_speed=$_cflags_speed
3051cflags_size=$_cflags_size
3052cflags_noopt=$_cflags_noopt
3053add_cflags $_flags $_cflags
3054cc_ldflags=$_ldflags
3055set_ccvars CC
3056
3057probe_cc hostcc "$host_cc"
3058host_cflags_filter=$_flags_filter
a758c5e2 3059add_host_cflags $_flags $_cflags
a758c5e2 3060set_ccvars HOSTCC
629687f6 3061
851ffa80
MR
3062test -n "$cc_type" && enable $cc_type ||
3063 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
629687f6 3064
75bafbac 3065: ${as_default:=$cc}
50567afa 3066: ${dep_cc_default:=$cc}
684b28e0 3067: ${ld_default:=$cc}
095792f2
MR
3068: ${host_ld_default:=$host_cc}
3069set_default ar as dep_cc ld host_ld
75800dce 3070
a758c5e2
MR
3071probe_cc as "$as"
3072asflags_filter=$_flags_filter
3073add_asflags $_flags $_cflags
3074set_ccvars AS
3075
3076probe_cc ld "$ld"
3077ldflags_filter=$_flags_filter
3078add_ldflags $_flags $_ldflags
3079test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2763587c 3080LD_O=${_ld_o-$LD_O}
8db73c61
MR
3081LD_LIB=${_ld_lib-$LD_LIB}
3082LD_PATH=${_ld_path-$LD_PATH}
a758c5e2 3083
095792f2
MR
3084probe_cc hostld "$host_ld"
3085host_ldflags_filter=$_flags_filter
3086add_host_ldflags $_flags $_ldflags
3087HOSTLD_O=${_ld_o-$HOSTLD_O}
3088
a758c5e2
MR
3089if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3090 probe_cc depcc "$dep_cc"
3091 CCDEP=${_DEPCMD:-$DEPCMD}
3092 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3093 DEPCCFLAGS=$_flags
3094fi
07dec06e 3095
3dbc777c
MR
3096if $ar 2>&1 | grep -q Microsoft; then
3097 arflags="-nologo"
3098 ar_o='-out:$@'
3099elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3100 arflags="rq"
3101 ar_o='$@'
4822ee3c
DB
3102elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3103 arflags='-Xany -r -c'
3104 ar_o='$@'
3dbc777c
MR
3105else
3106 arflags="rc"
3107 ar_o='$@'
3108fi
3109
7f32f40c 3110add_cflags $extra_cflags
2f2e6c7c 3111add_asflags $extra_cflags
7f32f40c 3112
154d432c
MR
3113if test -n "$sysroot"; then
3114 case "$cc_type" in
00ba041c 3115 gcc|llvm_gcc|clang)
467256f2 3116 add_cppflags --sysroot="$sysroot"
154d432c
MR
3117 add_ldflags --sysroot="$sysroot"
3118 ;;
6fec122a
MR
3119 tms470)
3120 add_cppflags -I"$sysinclude"
3121 add_ldflags --sysroot="$sysroot"
3122 ;;
154d432c
MR
3123 esac
3124fi
3125
d22c13a8 3126if test "$cpu" = host; then
ace87c19
DB
3127 enabled cross_compile &&
3128 die "--cpu=host makes no sense when cross-compiling."
d22c13a8
MR
3129
3130 case "$cc_type" in
613a4e3f 3131 gcc|llvm_gcc)
d22c13a8
MR
3132 check_native(){
3133 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
b695256e 3134 sed -n "/cc1.*$1=/{
27ce1be8
MR
3135 s/.*$1=\\([^ ]*\\).*/\\1/
3136 p
3137 q
3138 }" $TMPE
d22c13a8
MR
3139 }
3140 cpu=$(check_native -march || check_native -mcpu)
3141 ;;
3142 esac
3143
ace87c19
DB
3144 test "${cpu:-host}" = host &&
3145 die "--cpu=host not supported with compiler $cc"
d22c13a8
MR
3146fi
3147
e939cedd
MR
3148# Deal with common $arch aliases
3149case "$arch" in
5873b623
MR
3150 aarch64|arm64)
3151 arch="aarch64"
3152 ;;
e939cedd
MR
3153 arm*)
3154 arch="arm"
3155 ;;
2acda282 3156 mips*|IP*)
e939cedd
MR
3157 arch="mips"
3158 ;;
a6e9d649 3159 parisc*|hppa*)
e939cedd
MR
3160 arch="parisc"
3161 ;;
56203596 3162 "Power Macintosh"|ppc*|powerpc*)
e939cedd
MR
3163 arch="ppc"
3164 ;;
e939cedd
MR
3165 s390|s390x)
3166 arch="s390"
3167 ;;
3168 sh4|sh)
3169 arch="sh4"
3170 ;;
4cd217c0 3171 sun4u|sparc*)
e939cedd 3172 arch="sparc"
e939cedd 3173 ;;
c75848cd
DB
3174 tilegx|tile-gx)
3175 arch="tilegx"
3176 ;;
d33ed7b3 3177 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
e939cedd
MR
3178 arch="x86"
3179 ;;
3180esac
3181
851ffa80 3182is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
343aef9b 3183enable $arch
e939cedd 3184
df5cdc24 3185# Add processor-specific flags
9ebd45c2 3186if enabled aarch64; then
33db40f8
MR
3187
3188 case $cpu in
3189 armv*)
3190 cpuflags="-march=$cpu"
3191 ;;
3192 *)
3193 cpuflags="-mcpu=$cpu"
3194 ;;
3195 esac
3196
3197elif enabled alpha; then
3198
3199 cpuflags="-mcpu=$cpu"
3200
3201elif enabled arm; then
3202
1234c66a
MR
3203 check_arm_arch() {
3204 check_cpp_condition stddef.h \
3205 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3206 $cpuflags
3207 }
3208
3209 probe_arm_arch() {
3210 if check_arm_arch 4; then echo armv4;
3211 elif check_arm_arch 4T; then echo armv4t;
3212 elif check_arm_arch 5; then echo armv5;
3213 elif check_arm_arch 5E; then echo armv5e;
3214 elif check_arm_arch 5T; then echo armv5t;
3215 elif check_arm_arch 5TE; then echo armv5te;
3216 elif check_arm_arch 5TEJ; then echo armv5te;
3217 elif check_arm_arch 6; then echo armv6;
3218 elif check_arm_arch 6J; then echo armv6j;
3219 elif check_arm_arch 6K; then echo armv6k;
3220 elif check_arm_arch 6Z; then echo armv6z;
3221 elif check_arm_arch 6ZK; then echo armv6zk;
3222 elif check_arm_arch 6T2; then echo armv6t2;
3223 elif check_arm_arch 7; then echo armv7;
3224 elif check_arm_arch 7A 7_A; then echo armv7-a;
3e1b5cbc 3225 elif check_arm_arch 7S; then echo armv7-a;
1234c66a
MR
3226 elif check_arm_arch 7R 7_R; then echo armv7-r;
3227 elif check_arm_arch 7M 7_M; then echo armv7-m;
3228 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3229 elif check_arm_arch 8A 8_A; then echo armv8-a;
3230 fi
3231 }
3232
3233 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3234
33db40f8
MR
3235 case $cpu in
3236 armv*)
3237 cpuflags="-march=$cpu"
3238 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3239 ;;
3240 *)
3241 cpuflags="-mcpu=$cpu"
3242 case $cpu in
3243 cortex-a*) subarch=armv7a ;;
3244 cortex-r*) subarch=armv7r ;;
3245 cortex-m*) enable thumb; subarch=armv7m ;;
3246 arm11*) subarch=armv6 ;;
3247 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3248 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
1234c66a 3249 *) subarch=$(probe_arm_arch) ;;
33db40f8
MR
3250 esac
3251 ;;
3252 esac
3253
f0fe245b
MR
3254 case "$subarch" in
3255 armv5t*) enable fast_clz ;;
3256 armv[6-8]*) enable fast_clz fast_unaligned ;;
3257 esac
3258
33db40f8
MR
3259elif enabled avr32; then
3260
3261 case $cpu in
3262 ap7[02]0[0-2])
3263 subarch="avr32_ap"
3264 cpuflags="-mpart=$cpu"
3265 ;;
3266 ap)
3267 subarch="avr32_ap"
3268 cpuflags="-march=$cpu"
3269 ;;
3270 uc3[ab]*)
3271 subarch="avr32_uc"
3272 cpuflags="-mcpu=$cpu"
3273 ;;
3274 uc)
3275 subarch="avr32_uc"
3276 cpuflags="-march=$cpu"
3277 ;;
3278 esac
3279
3280elif enabled bfin; then
3281
3282 cpuflags="-mcpu=$cpu"
3283
3284elif enabled mips; then
3285
3286 cpuflags="-march=$cpu"
3287
5d54c126 3288elif enabled ppc; then
343aef9b 3289
606cc8af
DB
3290 disable ldbrx
3291
56348891
MR
3292 case $(tolower $cpu) in
3293 601|ppc601|powerpc601)
9dbd5c3d 3294 cpuflags="-mcpu=601"
64ad53ff 3295 disable altivec
9dbd5c3d 3296 ;;
56348891 3297 603*|ppc603*|powerpc603*)
9dbd5c3d 3298 cpuflags="-mcpu=603"
64ad53ff 3299 disable altivec
9dbd5c3d 3300 ;;
56348891 3301 604*|ppc604*|powerpc604*)
9dbd5c3d 3302 cpuflags="-mcpu=604"
64ad53ff 3303 disable altivec
9dbd5c3d 3304 ;;
56348891 3305 g3|75*|ppc75*|powerpc75*)
7f1fcaf0 3306 cpuflags="-mcpu=750"
64ad53ff 3307 disable altivec
9dbd5c3d 3308 ;;
56348891 3309 g4|745*|ppc745*|powerpc745*)
7f1fcaf0 3310 cpuflags="-mcpu=7450"
9dbd5c3d 3311 ;;
56348891 3312 74*|ppc74*|powerpc74*)
7f1fcaf0 3313 cpuflags="-mcpu=7400"
9dbd5c3d 3314 ;;
313f9fbf 3315 g5|970|ppc970|powerpc970)
7f1fcaf0 3316 cpuflags="-mcpu=970"
9dbd5c3d 3317 ;;
313f9fbf 3318 power[3-7]*)
7f1fcaf0 3319 cpuflags="-mcpu=$cpu"
313f9fbf 3320 ;;
56348891 3321 cell)
9dbd5c3d
MR
3322 cpuflags="-mcpu=cell"
3323 enable ldbrx
3324 ;;
4ab26cb4
DB
3325 e500mc)
3326 cpuflags="-mcpu=e500mc"
3327 disable altivec
3328