mpegvideo: Rework various functions not to use MpegEncContext directly
[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 1746# system capabilities
b462d132 1747symver_if_any="symver_asm_label symver_gnu_asm"
eaa2d123 1748valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
b462d132 1749
8558595a
DB
1750# threading support
1751atomics_gcc_if="sync_val_compare_and_swap"
1752atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1753atomics_win32_if="MemoryBarrier"
1754atomics_native_if_any="$ATOMICS_LIST"
874c751c 1755w32threads_deps="atomics_native"
8558595a
DB
1756threads_if_any="$THREADS_LIST"
1757
26fbcc85 1758# subsystems
dc609252 1759dct_select="rdft"
2d604443 1760error_resilience_select="me_cmp"
1274ea8d
DB
1761faandct_deps="faan fdctdsp"
1762faanidct_deps="faan idctdsp"
fbf4d219 1763intrax8_select="error_resilience"
26fbcc85
MR
1764mdct_select="fft"
1765rdft_select="fft"
2d604443 1766me_cmp_select="fdctdsp idctdsp pixblockdsp"
7b9ef8d7 1767mpeg_er_select="error_resilience"
1e164c0b 1768mpegaudio_select="mpegaudiodsp"
c4f5c2d6 1769mpegaudiodsp_select="dct"
2d604443
DB
1770mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp videodsp"
1771mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
d0a63d8b 1772qsvdec_select="qsv"
72b7441a 1773qsvenc_select="qsv"
26fbcc85 1774
ed40b6bf 1775# decoders / encoders
d615187f 1776aac_decoder_select="imdct15 mdct sinewin"
bd499d9a 1777aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
136e19e1 1778aac_latm_decoder_select="aac_decoder aac_latm_parser"
71f1ad37 1779ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2d604443
DB
1780ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1781ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
e3fcb143 1782aic_decoder_select="golomb idctdsp"
f4d608e3 1783alac_encoder_select="lpc"
c67b449b 1784als_decoder_select="bswapdsp"
b781cc12 1785amrnb_decoder_select="lsp"
2b2a597e 1786amrwb_decoder_select="lsp"
0a36988e 1787amv_decoder_select="sp5x_decoder"
c67b449b 1788ape_decoder_select="bswapdsp"
e3fcb143 1789asv1_decoder_select="blockdsp bswapdsp idctdsp"
f46bb608 1790asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
e3fcb143 1791asv2_decoder_select="blockdsp bswapdsp idctdsp"
f46bb608 1792asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
4538729a 1793atrac1_decoder_select="mdct sinewin"
26fbcc85 1794atrac3_decoder_select="mdct"
e6f0bb65 1795atrac3p_decoder_select="mdct sinewin"
e74433a8 1796bink_decoder_select="blockdsp hpeldsp"
f2051856
DB
1797binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
1798binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
e3fcb143 1799cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
c67b449b 1800cllc_decoder_select="bswapdsp"
9b500b8f 1801comfortnoise_encoder_select="lpc"
9a9e2f1c 1802cook_decoder_select="audiodsp mdct sinewin"
2a91ada8 1803cscd_decoder_select="lzo"
2eef7c62 1804cscd_decoder_suggest="zlib"
71f1ad37 1805dca_decoder_select="fmtconvert mdct"
e3fcb143 1806dnxhd_decoder_select="blockdsp idctdsp"
f46bb608 1807dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
f6ee61fb 1808dvvideo_decoder_select="dvprofile idctdsp"
2d604443 1809dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
61c31e4e 1810dxa_decoder_deps="zlib"
baf91bb9 1811eac3_decoder_select="ac3_decoder"
4264a0dd 1812eac3_encoder_select="ac3_encoder"
e3fcb143
DB
1813eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1814eatgq_decoder_select="aandcttables idctdsp"
1815eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
38389058 1816exr_decoder_deps="zlib"
cd832f03
DB
1817ffv1_decoder_select="golomb rangecoder"
1818ffv1_encoder_select="rangecoder"
2f02bbcc
DB
1819ffvhuff_decoder_select="huffyuv_decoder"
1820ffvhuff_encoder_select="huffyuv_encoder"
93e15a32 1821fic_decoder_select="golomb"
4f034993 1822flac_decoder_select="golomb"
c67b449b 1823flac_encoder_select="bswapdsp golomb lpc"
61c31e4e
DB
1824flashsv_decoder_deps="zlib"
1825flashsv_encoder_deps="zlib"
1826flashsv2_decoder_deps="zlib"
4414137e 1827flv_decoder_select="h263_decoder"
4d4b4bd1 1828flv_encoder_select="h263_encoder"
c67b449b
DB
1829fourxm_decoder_select="blockdsp bswapdsp"
1830fraps_decoder_select="bswapdsp huffman"
61c31e4e 1831g2m_decoder_deps="zlib"
4978850c 1832g2m_decoder_select="blockdsp idctdsp jpegtables"
7b9ef8d7 1833h261_decoder_select="mpeg_er mpegvideo"
ad08dfd5 1834h261_encoder_select="aandcttables mpegvideoenc"
7b9ef8d7 1835h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
0338c396 1836h263_encoder_select="aandcttables h263dsp mpegvideoenc"
4414137e 1837h263i_decoder_select="h263_decoder"
fe629c2d 1838h263p_encoder_select="h263_encoder"
db7f1c7c 1839h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
0b499c9b 1840h264_decoder_suggest="error_resilience"
4e08c821 1841h264_qsv_decoder_deps="libmfx"
b04d009b 1842h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
72b7441a
AK
1843h264_qsv_encoder_deps="libmfx"
1844h264_qsv_encoder_select="qsvenc"
c67b449b
DB
1845hevc_decoder_select="bswapdsp cabac golomb videodsp"
1846huffyuv_decoder_select="bswapdsp huffyuvdsp"
1847huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
34150be5 1848iac_decoder_select="imc_decoder"
c67b449b 1849imc_decoder_select="bswapdsp fft mdct sinewin"
8f992dc8 1850indeo3_decoder_select="hpeldsp"
8071264f 1851interplay_video_decoder_select="hpeldsp"
8e0cf39f 1852jpegls_decoder_select="golomb mjpeg_decoder"
4f034993 1853jpegls_encoder_select="golomb"
e74433a8 1854jv_decoder_select="blockdsp"
0d439fbe 1855lagarith_decoder_select="huffyuvdsp"
4978850c 1856ljpeg_encoder_select="aandcttables idctdsp jpegtables"
4f034993 1857loco_decoder_select="golomb"
e3fcb143 1858mdec_decoder_select="blockdsp idctdsp mpegvideo"
3e589878 1859metasound_decoder_select="lsp mdct sinewin"
e3fcb143 1860mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
4978850c
DB
1861mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
1862mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
7caf48e0 1863mjpegb_decoder_select="mjpeg_decoder"
9ecf1b62 1864mlp_decoder_select="mlp_parser"
c67b449b 1865motionpixels_decoder_select="bswapdsp"
1e164c0b
DB
1866mp1_decoder_select="mpegaudio"
1867mp1float_decoder_select="mpegaudio"
1868mp2_decoder_select="mpegaudio"
1869mp2float_decoder_select="mpegaudio"
1870mp3_decoder_select="mpegaudio"
1871mp3adu_decoder_select="mpegaudio"
1872mp3adufloat_decoder_select="mpegaudio"
1873mp3float_decoder_select="mpegaudio"
1874mp3on4_decoder_select="mpegaudio"
1875mp3on4float_decoder_select="mpegaudio"
c67b449b 1876mpc7_decoder_select="bswapdsp mpegaudiodsp"
88b24064 1877mpc8_decoder_select="mpegaudiodsp"
3e0b1c9a 1878mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
d767e2f9 1879mpeg_xvmc_decoder_select="mpeg2video_decoder"
7b9ef8d7 1880mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
06b54e84 1881mpeg1video_encoder_select="aandcttables mpegvideoenc"
7b9ef8d7 1882mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
06b54e84 1883mpeg2video_encoder_select="aandcttables mpegvideoenc"
3e0b1c9a
DB
1884mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1885mpeg4_encoder_select="h263_encoder"
4414137e 1886msmpeg4v1_decoder_select="h263_decoder"
4414137e 1887msmpeg4v2_decoder_select="h263_decoder"
4e169d89 1888msmpeg4v2_encoder_select="h263_encoder"
4414137e 1889msmpeg4v3_decoder_select="h263_decoder"
4e169d89 1890msmpeg4v3_encoder_select="h263_encoder"
7b9ef8d7 1891mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
8e0cf39f 1892mxpeg_decoder_select="mjpeg_decoder"
4538729a 1893nellymoser_decoder_select="mdct sinewin"
aa11cb79 1894nellymoser_encoder_select="audio_frame_queue mdct sinewin"
e3fcb143 1895nuv_decoder_select="idctdsp lzo"
e2834567 1896on2avc_decoder_select="mdct"
b70d7a4a 1897opus_decoder_deps="avresample"
3d5d4623 1898opus_decoder_select="imdct15"
61c31e4e 1899png_decoder_deps="zlib"
61c31e4e 1900png_encoder_deps="zlib"
512f3ffe 1901png_encoder_select="huffyuvencdsp"
e3fcb143 1902prores_decoder_select="idctdsp"
a9aee08d 1903prores_encoder_select="fdctdsp"
b781cc12 1904qcelp_decoder_select="lsp"
c4f5c2d6 1905qdm2_decoder_select="mdct rdft mpegaudiodsp"
aa11cb79 1906ra_144_encoder_select="audio_frame_queue lpc"
9f43fdda 1907ralf_decoder_select="golomb"
7b9ef8d7 1908rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
b2bf38b4 1909rv10_encoder_select="h263_encoder"
7b9ef8d7 1910rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
b2bf38b4 1911rv20_encoder_select="h263_encoder"
7b9ef8d7
DB
1912rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
1913rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
4f034993 1914shorten_decoder_select="golomb"
b781cc12 1915sipr_decoder_select="lsp"
8e0cf39f 1916sp5x_decoder_select="mjpeg_decoder"
6caa44aa 1917svq1_decoder_select="hpeldsp"
2d604443 1918svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
57f09608 1919svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
d48430c3 1920svq3_decoder_suggest="zlib"
9a9e2f1c 1921tak_decoder_select="audiodsp"
247e370e
VG
1922tdsc_decoder_deps="zlib"
1923tdsc_decoder_select="mjpeg_decoder"
4eef77c1 1924theora_decoder_select="vp3_decoder"
7caf48e0 1925thp_decoder_select="mjpeg_decoder"
2eef7c62
AJ
1926tiff_decoder_suggest="zlib"
1927tiff_encoder_suggest="zlib"
aec09a00 1928truehd_decoder_select="mlp_decoder"
c67b449b
DB
1929truemotion2_decoder_select="bswapdsp"
1930truespeech_decoder_select="bswapdsp"
61c31e4e 1931tscc_decoder_deps="zlib"
4538729a 1932twinvq_decoder_select="mdct lsp sinewin"
c67b449b
DB
1933utvideo_decoder_select="bswapdsp"
1934utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
0d439fbe 1935vble_decoder_select="huffyuvdsp"
adf8227c 1936vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
45ecda85 1937vc1image_decoder_select="vc1_decoder"
26fbcc85
MR
1938vorbis_decoder_select="mdct"
1939vorbis_encoder_select="mdct"
3bd062bf 1940vp3_decoder_select="hpeldsp vp3dsp videodsp"
cb7ecb75
RB
1941vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1942vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
e82dc4c9
DB
1943vp6a_decoder_select="vp6_decoder"
1944vp6f_decoder_select="vp6_decoder"
ac4b32df 1945vp7_decoder_select="h264pred videodsp"
8c53d39e 1946vp8_decoder_select="h264pred videodsp"
72ca830f 1947vp9_decoder_select="videodsp"
c4bfa098 1948webp_decoder_select="vp8_decoder"
f2051856
DB
1949wmapro_decoder_select="mdct sinewin wma_freqs"
1950wmav1_decoder_select="mdct sinewin wma_freqs"
1951wmav1_encoder_select="mdct sinewin wma_freqs"
1952wmav2_decoder_select="mdct sinewin wma_freqs"
1953wmav2_encoder_select="mdct sinewin wma_freqs"
4538729a 1954wmavoice_decoder_select="lsp rdft dct mdct sinewin"
f95bfab0 1955wmv1_decoder_select="h263_decoder"
665507aa 1956wmv1_encoder_select="h263_encoder"
e3fcb143 1957wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
1746e2a9 1958wmv2_encoder_select="h263_encoder"
015f8ee0 1959wmv3_decoder_select="vc1_decoder"
45ecda85 1960wmv3image_decoder_select="wmv3_decoder"
61c31e4e
DB
1961zerocodec_decoder_deps="zlib"
1962zlib_decoder_deps="zlib"
1963zlib_encoder_deps="zlib"
1964zmbv_decoder_deps="zlib"
1965zmbv_encoder_deps="zlib"
30fd06be 1966
ed40b6bf 1967# hardware accelerators
215cdd35 1968dxva2_deps="dxva2api_h"
0afab17e 1969vaapi_deps="va_va_h"
ac3dbb4d 1970vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
9840130e 1971vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
c89c96e9
MR
1972vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1973
82ca17ac
DB
1974h263_vaapi_hwaccel_deps="vaapi"
1975h263_vaapi_hwaccel_select="h263_decoder"
1976h263_vdpau_hwaccel_deps="vdpau"
1977h263_vdpau_hwaccel_select="h263_decoder"
215cdd35
DB
1978h264_dxva2_hwaccel_deps="dxva2"
1979h264_dxva2_hwaccel_select="h264_decoder"
c4845616 1980h264_mmal_decoder_deps="mmal"
1981h264_mmal_hwaccel_deps="mmal"
1982h264_mmal_decoder_select="h264_decoder"
1983h264_mmal_encoder_deps="mmal"
11c22dfd 1984h264_qsv_hwaccel_deps="libmfx"
82ca17ac
DB
1985h264_vaapi_hwaccel_deps="vaapi"
1986h264_vaapi_hwaccel_select="h264_decoder"
1987h264_vda_hwaccel_deps="vda"
1988h264_vda_hwaccel_select="h264_decoder"
67afcefb
AK
1989h264_vda_old_hwaccel_deps="vda"
1990h264_vda_old_hwaccel_select="h264_decoder"
82ca17ac
DB
1991h264_vdpau_hwaccel_deps="vdpau"
1992h264_vdpau_hwaccel_select="h264_decoder"
7e850fa6
HL
1993hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
1994hevc_dxva2_hwaccel_select="hevc_decoder"
82ca17ac
DB
1995mpeg1_vdpau_hwaccel_deps="vdpau"
1996mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
215cdd35
DB
1997mpeg2_dxva2_hwaccel_deps="dxva2"
1998mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
82ca17ac
DB
1999mpeg2_vaapi_hwaccel_deps="vaapi"
2000mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2001mpeg2_vdpau_hwaccel_deps="vdpau"
2002mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2003mpeg4_vaapi_hwaccel_deps="vaapi"
2004mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
82ca17ac
DB
2005mpeg4_vdpau_hwaccel_deps="vdpau"
2006mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
215cdd35
DB
2007vc1_dxva2_hwaccel_deps="dxva2"
2008vc1_dxva2_hwaccel_select="vc1_decoder"
82ca17ac
DB
2009vc1_vaapi_hwaccel_deps="vaapi"
2010vc1_vaapi_hwaccel_select="vc1_decoder"
82ca17ac
DB
2011vc1_vdpau_hwaccel_deps="vdpau"
2012vc1_vdpau_hwaccel_select="vc1_decoder"
ed40b6bf
DB
2013wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2014wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
77525327 2015wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
ed40b6bf 2016
28b80940 2017# parsers
fb7127b2 2018h264_parser_select="h264_decoder"
a6a675a7 2019mpegvideo_parser_select="mpegvideo"
7b9ef8d7 2020mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
28df0151 2021vc1_parser_select="mpegvideo startcode vc1_decoder"
28b80940 2022
4978850c
DB
2023# bitstream_filters
2024mjpeg2jpeg_bsf_select="jpegtables"
2025
912f3148 2026# external libraries
72025ac3 2027libdcadec_decoder_deps="libdcadec"
c9171a83 2028libfaac_encoder_deps="libfaac"
aa11cb79 2029libfaac_encoder_select="audio_frame_queue"
4f2b469d 2030libfdk_aac_decoder_deps="libfdk_aac"
37eeb5e2 2031libfdk_aac_encoder_deps="libfdk_aac"
aa11cb79 2032libfdk_aac_encoder_select="audio_frame_queue"
299c77d5
MR
2033libgsm_decoder_deps="libgsm"
2034libgsm_encoder_deps="libgsm"
8ffed8d8
MR
2035libgsm_ms_decoder_deps="libgsm"
2036libgsm_ms_encoder_deps="libgsm"
3641b048
MS
2037libilbc_decoder_deps="libilbc"
2038libilbc_encoder_deps="libilbc"
1cc60c47 2039libmp3lame_encoder_deps="libmp3lame"
aa11cb79 2040libmp3lame_encoder_select="audio_frame_queue"
0b175caa
DB
2041libopencore_amrnb_decoder_deps="libopencore_amrnb"
2042libopencore_amrnb_encoder_deps="libopencore_amrnb"
aa11cb79 2043libopencore_amrnb_encoder_select="audio_frame_queue"
0b175caa 2044libopencore_amrwb_decoder_deps="libopencore_amrwb"
8a3d9ca6 2045libopenh264_encoder_deps="libopenh264"
9a77d59a 2046libopenjpeg_decoder_deps="libopenjpeg"
453c02f9 2047libopenjpeg_encoder_deps="libopenjpeg"
44617d6e 2048libopus_decoder_deps="libopus"
6cb8c854 2049libopus_encoder_deps="libopus"
aa11cb79 2050libopus_encoder_select="audio_frame_queue"
f7cd9eed
AS
2051libschroedinger_decoder_deps="libschroedinger"
2052libschroedinger_encoder_deps="libschroedinger"
ae14f311 2053libspeex_decoder_deps="libspeex"
b606a017 2054libspeex_encoder_deps="libspeex"
aa11cb79 2055libspeex_encoder_select="audio_frame_queue"
150d2772 2056libtheora_encoder_deps="libtheora"
718907cd 2057libtwolame_encoder_deps="libtwolame"
d89e738a 2058libvo_aacenc_encoder_deps="libvo_aacenc"
aa11cb79 2059libvo_aacenc_encoder_select="audio_frame_queue"
f502ff3f 2060libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
b0caf888 2061libvorbis_encoder_deps="libvorbis"
aa11cb79 2062libvorbis_encoder_select="audio_frame_queue"
3f111804
LB
2063libvpx_vp8_decoder_deps="libvpx"
2064libvpx_vp8_encoder_deps="libvpx"
2065libvpx_vp9_decoder_deps="libvpx"
2066libvpx_vp9_encoder_deps="libvpx"
84d3ff50 2067libwavpack_encoder_deps="libwavpack"
be7c3231 2068libwebp_encoder_deps="libwebp"
1cc60c47 2069libx264_encoder_deps="libx264"
50ea9315 2070libx265_encoder_deps="libx265"
de295976 2071libxavs_encoder_deps="libxavs"
1cc60c47 2072libxvid_encoder_deps="libxvid"
30fd06be 2073
912f3148 2074# demuxers / muxers
c2dd0e9e 2075ac3_demuxer_select="ac3_parser"
255d9c57 2076asf_demuxer_select="riffdec"
3dd5c95d 2077asf_muxer_select="riffenc"
647c2356 2078asf_stream_muxer_select="asf_muxer"
255d9c57 2079avi_demuxer_select="riffdec"
3dd5c95d 2080avi_muxer_select="riffenc"
4e622dea 2081avisynth_demuxer_deps="avisynth"
255d9c57
DB
2082avisynth_demuxer_select="riffdec"
2083caf_demuxer_select="riffdec"
fe5e6e34 2084dash_muxer_select="mp4_muxer"
c2dd0e9e 2085dirac_demuxer_select="dirac_parser"
f6ee61fb
AK
2086dv_demuxer_select="dvprofile"
2087dv_muxer_select="dvprofile"
255d9c57 2088dxa_demuxer_select="riffdec"
5b423887 2089eac3_demuxer_select="ac3_parser"
e01fba55 2090f4v_muxer_select="mov_muxer"
c2dd0e9e 2091flac_demuxer_select="flac_parser"
435214a7 2092hds_muxer_select="flv_muxer"
c9031c7c 2093hls_muxer_select="mpegts_muxer"
647c2356 2094ipod_muxer_select="mov_muxer"
31f16dc1 2095ismv_muxer_select="mov_muxer"
647c2356 2096matroska_audio_muxer_select="matroska_muxer"
255d9c57 2097matroska_demuxer_select="riffdec"
2a91ada8 2098matroska_demuxer_suggest="bzlib lzo zlib"
3dd5c95d
DB
2099matroska_muxer_select="riffenc"
2100mmf_muxer_select="riffenc"
255d9c57 2101mov_demuxer_select="riffdec"
4e622dea 2102mov_demuxer_suggest="zlib"
3dd5c95d 2103mov_muxer_select="riffenc rtpenc_chain"
c2dd0e9e 2104mp3_demuxer_select="mpegaudio_parser"
647c2356 2105mp4_muxer_select="mov_muxer"
75644335 2106mpegts_muxer_select="adts_muxer latm_muxer"
647c2356
DB
2107mpegtsraw_demuxer_select="mpegts_demuxer"
2108mxf_d10_muxer_select="mxf_muxer"
3dd5c95d 2109nut_muxer_select="riffenc"
255d9c57 2110nuv_demuxer_select="riffdec"
051aadee 2111oga_muxer_select="ogg_muxer"
24ca518b 2112ogg_demuxer_select="golomb"
051aadee 2113opus_muxer_select="ogg_muxer"
647c2356 2114psp_muxer_select="mov_muxer"
44594cc7 2115rtp_demuxer_select="sdp_demuxer"
4978850c 2116rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
44b70ce5 2117rtsp_demuxer_select="http_protocol rtpdec"
5ad2f0bf 2118rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
01c8d258 2119sap_demuxer_select="sdp_demuxer"
5ad2f0bf 2120sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
44b70ce5 2121sdp_demuxer_select="rtpdec"
e772f9fa 2122smoothstreaming_muxer_select="ismv_muxer"
f1e94694 2123spdif_muxer_select="aac_parser"
051aadee 2124spx_muxer_select="ogg_muxer"
57231e4d 2125tak_demuxer_select="tak_parser"
647c2356
DB
2126tg2_muxer_select="mov_muxer"
2127tgp_muxer_select="mov_muxer"
a7d45e06 2128w64_demuxer_select="wav_demuxer"
255d9c57 2129wav_demuxer_select="riffdec"
3dd5c95d
DB
2130wav_muxer_select="riffenc"
2131webm_muxer_select="riffenc"
255d9c57
DB
2132wtv_demuxer_select="riffdec"
2133xmv_demuxer_select="riffdec"
2134xwma_demuxer_select="riffdec"
4e622dea
SS
2135
2136# indevs / outdevs
38e54a75 2137alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
38e54a75 2138alsa_outdev_deps="alsa_asoundlib_h"
38e54a75 2139bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
6fb65973
DB
2140dv1394_indev_deps="dv1394"
2141dv1394_indev_select="dv_demuxer"
c6f95144 2142fbdev_indev_deps="linux_fb_h"
a3fc62e8 2143jack_indev_deps="jack_jack_h pthreads"
e417d80d 2144libcdio_indev_deps="libcdio"
38e54a75 2145libdc1394_indev_deps="libdc1394"
38e54a75
SS
2146oss_indev_deps_any="soundcard_h sys_soundcard_h"
2147oss_outdev_deps_any="soundcard_h sys_soundcard_h"
0de9c41f 2148pulse_indev_deps="libpulse"
15d59d2c
B
2149sndio_indev_deps="sndio_h"
2150sndio_outdev_deps="sndio_h"
38e54a75 2151v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
ec1ee802 2152vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
a1b3c5a3 2153vfwcap_indev_extralibs="-lavicap32"
a6674d2e
LB
2154x11grab_indev_deps="x11grab"
2155x11grab_xcb_indev_deps="libxcb"
30fd06be 2156
912f3148 2157# protocols
acd554c1
SP
2158ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2159ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2160ffrtmpcrypt_protocol_select="tcp_protocol"
775c4d36
SP
2161ffrtmphttp_protocol_deps="!librtmp_protocol"
2162ffrtmphttp_protocol_select="http_protocol"
998c1ee1 2163gopher_protocol_select="network"
279a0c97 2164http_protocol_select="tcp_protocol"
7caf48e0 2165httpproxy_protocol_select="tcp_protocol"
183baead 2166https_protocol_select="tls_protocol"
eb9244f2 2167icecast_protocol_select="http_protocol"
c3b57d6e
DB
2168librtmp_protocol_deps="librtmp"
2169librtmpe_protocol_deps="librtmp"
2170librtmps_protocol_deps="librtmp"
2171librtmpt_protocol_deps="librtmp"
2172librtmpte_protocol_deps="librtmp"
c60a2d70 2173mmsh_protocol_select="http_protocol"
998c1ee1 2174mmst_protocol_select="network"
c3b57d6e 2175rtmp_protocol_deps="!librtmp_protocol"
deeb7012 2176rtmp_protocol_select="tcp_protocol"
acd554c1 2177rtmpe_protocol_select="ffrtmpcrypt_protocol"
6aedabc9
SP
2178rtmps_protocol_deps="!librtmp_protocol"
2179rtmps_protocol_select="tls_protocol"
775c4d36 2180rtmpt_protocol_select="ffrtmphttp_protocol"
08cd95e8 2181rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
6c1ed454 2182rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
deeb7012 2183rtp_protocol_select="udp_protocol"
998c1ee1
DB
2184sctp_protocol_deps="struct_sctp_event_subscribe"
2185sctp_protocol_select="network"
0eecafc9 2186srtp_protocol_select="rtp_protocol"
998c1ee1 2187tcp_protocol_select="network"
558d192d
MS
2188tls_protocol_deps_any="openssl gnutls"
2189tls_protocol_select="tcp_protocol"
998c1ee1 2190udp_protocol_select="network"
60538758
LB
2191unix_protocol_deps="sys_un_h"
2192unix_protocol_select="network"
c08fb000 2193
6ebf0bfc 2194# filters
13fabd7a 2195blackframe_filter_deps="gpl"
ce6b6ef6 2196boxblur_filter_deps="gpl"
1c0210c7 2197bs2b_filter_deps="libbs2b"
68b79bfc 2198cropdetect_filter_deps="gpl"
b157be1f 2199delogo_filter_deps="gpl"
a5b64584 2200drawtext_filter_deps="libfreetype"
61b323ce 2201frei0r_filter_deps="frei0r dlopen"
cfec77aa 2202frei0r_filter_extralibs='$ldl'
61b323ce 2203frei0r_src_filter_deps="frei0r dlopen"
cfec77aa 2204frei0r_src_filter_extralibs='$ldl'
a4dc7aa5 2205hqdn3d_filter_deps="gpl"
3fce1367 2206interlace_filter_deps="gpl"
cf69ad35 2207ocv_filter_deps="libopencv"
7caf48e0 2208resample_filter_deps="avresample"
2f296e39 2209scale_filter_deps="swscale"
6ebf0bfc 2210
ab81f24a 2211# examples
b339182e 2212avcodec_example_deps="avcodec avutil"
e7dfaf16 2213filter_audio_example_deps="avfilter avutil"
b339182e 2214metadata_example_deps="avformat avutil"
ab81f24a 2215output_example_deps="avcodec avformat avutil swscale"
990e4a66 2216qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
10421bcf 2217transcode_aac_example_deps="avcodec avformat avresample"
ab81f24a 2218
44951174 2219# libraries, in linking order
d89f2fa9 2220avcodec_deps="avutil"
44951174 2221avdevice_deps="avformat avcodec avutil"
d89f2fa9 2222avfilter_deps="avutil"
44951174 2223avformat_deps="avcodec avutil"
d89f2fa9
DB
2224avresample_deps="avutil"
2225swscale_deps="avutil"
f7679c54 2226
912f3148 2227# programs
54fd593a 2228avconv_deps="avcodec avfilter avformat avresample swscale"
bce70f81 2229avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
0a0e340f 2230 fps_filter null_filter resample_filter scale_filter
bce70f81 2231 setpts_filter trim_filter"
d173ede1 2232avplay_deps="avcodec avformat avresample swscale sdl"
d2617193 2233avplay_libs='$sdl_libs'
e2d50fc2 2234avplay_select="rdft transpose_filter hflip_filter vflip_filter"
9e12f0bf 2235avprobe_deps="avcodec avformat"
a2830dca 2236
4da3f410 2237# documentation
92f0abb2 2238pod2man_deps="doc"
4da3f410
DB
2239texi2html_deps="doc"
2240
de6d9b64 2241# default parameters
8a608357 2242
19bd477d 2243logfile="config.log"
8a608357
MR
2244
2245# installation paths
c9d19248
MR
2246prefix_default="/usr/local"
2247bindir_default='${prefix}/bin'
6291d7e4 2248datadir_default='${prefix}/share/avconv'
f4ca970d 2249docdir_default='${prefix}/share/doc/libav'
c9d19248
MR
2250incdir_default='${prefix}/include'
2251libdir_default='${prefix}/lib'
2252mandir_default='${prefix}/share/man'
2253shlibdir_default="$libdir_default"
8a608357
MR
2254
2255# toolchain
121d78d0 2256ar_default="ar"
13c7df3d 2257cc_default="gcc"
9da6609f 2258host_cc_default="gcc"
4ebc6a74 2259cp_f="cp -f"
b58b00ae 2260ln_s="ln -s -f"
2a8a860a 2261nm_default="nm -g"
11e6d03a 2262objformat="elf"
3f8040db 2263pkg_config_default=pkg-config
be7109c1 2264ranlib="ranlib"
e52567c2 2265strip="strip"
11e6d03a 2266yasmexe="yasm"
8a608357
MR
2267
2268# machine
8d4c00ed 2269arch_default=$(uname -m)
38d0a8aa 2270cpu="generic"
d45ebd48 2271intrinsics="none"
8a608357 2272
8a608357 2273# OS
8d4c00ed
MR
2274target_os_default=$(tolower $(uname -s))
2275host_os=$target_os_default
8a608357 2276
8a608357 2277# configurable options
ab81f24a 2278enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
3e0b1c9a 2279
3e0b1c9a
DB
2280enable asm
2281enable debug
2282enable doc
1274ea8d 2283enable faan faandct faanidct
8400d6b8 2284enable optimizations
8cfbbd92 2285enable safe_bitstream_reader
530dc538 2286enable static
a9ddb5b1 2287enable swscale_alpha
eaa2d123 2288enable valgrind_backtrace
8a608357 2289
2e2ec667 2290# By default, enable only those hwaccels that have no external dependencies.
7834a54c 2291enable dxva2 vda vdpau
2e2ec667 2292
8a608357 2293# build settings
9987769a 2294SHFLAGS='-shared -Wl,-soname,$$(@F)'
f3ec2d46
SG
2295LIBPREF="lib"
2296LIBSUF=".a"
c5f14466
RP
2297FULLNAME='$(NAME)$(BUILDSUF)'
2298LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
2299SLIBPREF="lib"
2300SLIBSUF=".so"
c5f14466 2301SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
2302SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2303SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
6cfac0e9 2304LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2f138f0b
MR
2305SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2306SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
ef0bc4c9 2307
68485d1f
MR
2308asflags_filter=echo
2309cflags_filter=echo
64933b6c
MR
2310ldflags_filter=echo
2311
23565c26 2312AS_C='-c'
bc877faf 2313AS_O='-o $@'
23565c26 2314CC_C='-c'
18031c49 2315CC_E='-E -o $@'
7e6c86e6 2316CC_O='-o $@'
a758c5e2 2317LD_O='-o $@'
8db73c61
MR
2318LD_LIB='-l%'
2319LD_PATH='-L'
23565c26 2320HOSTCC_C='-c'
27565164 2321HOSTCC_E='-E -o $@'
a758c5e2 2322HOSTCC_O='-o $@'
095792f2 2323HOSTLD_O='-o $@'
7e6c86e6 2324
9da6609f 2325host_libs='-lm'
6c3fa06a
MR
2326host_cflags_filter=echo
2327host_ldflags_filter=echo
9da6609f 2328
9b861379 2329target_path='$(CURDIR)'
a7ada2ba 2330
a158446b
MR
2331# since the object filename is not given with the -MM flag, the compiler
2332# is only able to print the basename, and we must add the path ourselves
a758c5e2
MR
2333DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2334DEPFLAGS='-MM'
315c741d 2335
c597172e 2336# find source path
24524f36 2337if test -f configure; then
f038cf3c 2338 source_path=.
c597172e 2339else
8477f2de 2340 source_path=$(cd $(dirname "$0"); pwd)
c597172e 2341 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 2342 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
2343 test -e "$source_path/config.h" &&
2344 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
2345fi
2346
13cbe2c0 2347for v in "$@"; do
b04251c5
MR
2348 r=${v#*=}
2349 l=${v%"$r"}
2350 r=$(sh_quote "$r")
29ba0911 2351 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
13cbe2c0 2352done
c597172e 2353
73ef8980
MR
2354find_things(){
2355 thing=$1
2356 pattern=$2
2357 file=$source_path/$3
932ccf39 2358 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
2359}
2360
2361ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2362DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 2363HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
2364PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2365BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
2366MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2367DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
38e54a75
SS
2368OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2369INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
73ef8980 2370PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 2371FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 2372
54e75be4
DB
2373ALL_COMPONENTS="
2374 $BSF_LIST
2375 $DECODER_LIST
2376 $DEMUXER_LIST
2377 $ENCODER_LIST
2378 $FILTER_LIST
2379 $HWACCEL_LIST
2380 $INDEV_LIST
2381 $MUXER_LIST
2382 $OUTDEV_LIST
2383 $PARSER_LIST
2384 $PROTOCOL_LIST
2385"
2386
8469ae22
MR
2387for n in $COMPONENT_LIST; do
2388 v=$(toupper ${n%s})_LIST
2389 eval enable \$$v
2390 eval ${n}_if_any="\$$v"
2391done
2392
206a070d 2393enable $ARCH_EXT_LIST
c597172e
MR
2394
2395die_unknown(){
2396 echo "Unknown option \"$1\"."
2397 echo "See $0 --help for available options."
2398 exit 1
2399}
2400
7432e872
DB
2401print_3_columns() {
2402 cat | tr ' ' '\n' | sort | pr -r -3 -t
2403}
2404
794f8e97 2405show_list() {
bf0c4afa
RP
2406 suffix=_$1
2407 shift
7432e872 2408 echo $* | sed s/$suffix//g | print_3_columns
794f8e97
PI
2409 exit 0
2410}
2411
154caa67
MR
2412rand_list(){
2413 IFS=', '
2414 set -- $*
2415 unset IFS
2416 for thing; do
2417 comp=${thing%:*}
2418 prob=${thing#$comp}
2419 prob=${prob#:}
2420 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2421 echo "prob ${prob:-0.5}"
2422 printf '%s\n' $comp
2423 done
2424}
2425
2426do_random(){
2427 action=$1
2428 shift
2429 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2430 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2431}
2432
c597172e 2433for opt do
7483e694
DB
2434 optval="${opt#*=}"
2435 case "$opt" in
ea061af1
DB
2436 --extra-ldflags=*)
2437 add_ldflags $optval
7e9e7cc2 2438 ;;
bb0babd7
LB
2439 --extra-ldexeflags=*)
2440 add_ldexeflags $optval
2441 ;;
ea061af1
DB
2442 --extra-libs=*)
2443 add_extralibs $optval
7e9e7cc2 2444 ;;
ea061af1
DB
2445 --disable-devices)
2446 disable $INDEV_LIST $OUTDEV_LIST
7e9e7cc2 2447 ;;
ea061af1
DB
2448 --enable-debug=*)
2449 debuglevel="$optval"
7e9e7cc2
MR
2450 ;;
2451 --disable-programs)
2452 disable $PROGRAM_LIST
2453 ;;
2454 --disable-everything)
2455 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2456 ;;
844c6852
DB
2457 --disable-all)
2458 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2459 disable $LIBRARY_LIST $PROGRAM_LIST doc
2460 ;;
7e9e7cc2
MR
2461 --enable-random|--disable-random)
2462 action=${opt%%-random}
2463 do_random ${action#--} $COMPONENT_LIST
2464 ;;
2465 --enable-random=*|--disable-random=*)
2466 action=${opt%%-random=*}
2467 do_random ${action#--} $optval
2468 ;;
2469 --enable-*=*|--disable-*=*)
2470 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2471 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2472 eval list=\$$(toupper $thing)_LIST
2473 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2474 $action $(filter "$name" $list)
2475 ;;
894682a9
AK
2476 --enable-avserver|--disable-avserver*)
2477 warn "avserver has been removed, the ${opt} option is only"\
2478 "provided for compatibility and will be removed in the future"
2479 ;;
7e9e7cc2
MR
2480 --enable-?*|--disable-?*)
2481 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2482 if is_in $option $COMPONENT_LIST; then
2483 test $action = disable && action=unset
2484 eval $action \$$(toupper ${option%s})_LIST
2485 elif is_in $option $CMDLINE_SELECT; then
2486 $action $option
2487 else
2488 die_unknown $opt
2489 fi
2490 ;;
2491 --list-*)
2492 NAME="${opt#--list-}"
2493 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2494 NAME=${NAME%s}
2495 eval show_list $NAME \$$(toupper $NAME)_LIST
2496 ;;
2497 --help|-h) show_help
2498 ;;
2499 *)
2500 optname="${opt%%=*}"
2501 optname="${optname#--}"
2502 optname=$(echo "$optname" | sed 's/-/_/g')
2503 if is_in $optname $CMDLINE_SET; then
2504 eval $optname='$optval'
2505 elif is_in $optname $CMDLINE_APPEND; then
2506 append $optname "$optval"
2507 else
2508 die_unknown $opt
2509 fi
2510 ;;
7483e694 2511 esac
c597172e
MR
2512done
2513
bcea99bb
MR
2514disabled logging && logfile=/dev/null
2515
29ba0911 2516echo "# $0 $LIBAV_CONFIGURATION" > $logfile
bcea99bb
MR
2517set >> $logfile
2518
aeeb782c 2519case "$toolchain" in
0fbb62a8
LB
2520 clang-asan)
2521 cc_default="clang"
19f251a2
LB
2522 add_cflags -fsanitize=address
2523 add_ldflags -fsanitize=address
0fbb62a8
LB
2524 ;;
2525 clang-tsan)
2526 cc_default="clang"
19f251a2
LB
2527 add_cflags -fsanitize=thread -pie
2528 add_ldflags -fsanitize=thread -pie
0fbb62a8 2529 ;;
d6a27f88
LB
2530 clang-usan)
2531 cc_default="clang"
4d25c2bc 2532 add_cflags -fsanitize=undefined -O1
d6a27f88
LB
2533 add_ldflags -fsanitize=undefined
2534 ;;
0ba49d28
LB
2535 gcc-asan)
2536 cc_default="gcc"
2537 add_cflags -fsanitize=address
2538 add_ldflags -fsanitize=address
2539 ;;
2540 gcc-tsan)
2541 cc_default="gcc"
2542 add_cflags -fsanitize=thread -pie -fPIC
2543 add_ldflags -fsanitize=thread -pie -fPIC
2544 ;;
d6a27f88
LB
2545 gcc-usan)
2546 cc_default="gcc"
2547 add_cflags -fsanitize=undefined
2548 add_ldflags -fsanitize=undefined
2549 ;;
edfe609f
LB
2550 valgrind-massif)
2551 target_exec_default="valgrind"
2552 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2553 ;;
b1ee8eec
RT
2554 valgrind-memcheck)
2555 target_exec_default="valgrind"
2556 target_exec_args="--track-origins=yes --leak-check=full"
2557 ;;
aeeb782c 2558 msvc)
16381923
MS
2559 # Check whether the current MSVC version needs the C99 converter.
2560 # From MSVC 2013 (compiler major version 18) onwards, it does actually
ea9f7173 2561 # support enough of C99 to build libav. Default to the new
16381923
MS
2562 # behaviour if the regexp was unable to match anything, since this
2563 # successfully parses the version number of existing supported
2564 # versions that require the converter (MSVC 2010 and 2012).
2565 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2566 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
ea9f7173 2567 cc_default="cl"
16381923
MS
2568 else
2569 cc_default="c99wrap cl"
2570 fi
ea9f7173 2571 ld_default="link"
aeeb782c 2572 nm_default="dumpbin -symbols"
ac3a9b51 2573 ar_default="lib"
53e8cd68 2574 target_os_default="win32"
ea9f7173
MS
2575 # Use a relative path for TMPDIR. This makes sure all the
2576 # ffconf temp files are written with a relative path, avoiding
2577 # issues with msys/win32 path conversion for MSVC parameters
2578 # such as -Fo<file> or -out:<file>.
2579 TMPDIR=.
aeeb782c 2580 ;;
322e4194 2581 icl)
ea9f7173
MS
2582 cc_default="icl"
2583 ld_default="xilink"
322e4194
AS
2584 nm_default="dumpbin -symbols"
2585 ar_default="xilib"
2586 target_os_default="win32"
ea9f7173 2587 TMPDIR=.
322e4194 2588 ;;
a862c7d3
RT
2589 gcov)
2590 add_cflags -fprofile-arcs -ftest-coverage
2591 add_ldflags -fprofile-arcs -ftest-coverage
2592 ;;
e7891305 2593 hardened)
2d589273
DB
2594 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2595 add_cflags -fno-strict-overflow -fstack-protector-all
2596 add_ldflags -Wl,-z,relro -Wl,-z,now
e7891305 2597 ;;
aeeb782c
MR
2598 ?*)
2599 die "Unknown toolchain $toolchain"
2600 ;;
2601esac
2602
faab8f9f
JG
2603test -n "$cross_prefix" && enable cross_compile
2604
2605if enabled cross_compile; then
2606 test -n "$arch" && test -n "$target_os" ||
2607 die "Must specify target arch and OS when cross-compiling"
2608fi
2609
82b6e451
LB
2610ar_default="${cross_prefix}${ar_default}"
2611cc_default="${cross_prefix}${cc_default}"
2612nm_default="${cross_prefix}${nm_default}"
2613pkg_config_default="${cross_prefix}${pkg_config_default}"
2614ranlib="${cross_prefix}${ranlib}"
2615strip="${cross_prefix}${strip}"
2616
2617sysinclude_default="${sysroot}/usr/include"
2618
b1ee8eec 2619set_default arch cc pkg_config sysinclude target_exec target_os
9da6609f
MR
2620enabled cross_compile || host_cc_default=$cc
2621set_default host_cc
13c7df3d 2622
762f95e4
MR
2623if ! $pkg_config --version >/dev/null 2>&1; then
2624 warn "$pkg_config not found, library detection may fail."
2625 pkg_config=false
2626fi
2627
82bb3329
MR
2628exesuf() {
2629 case $1 in
53e8cd68 2630 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
82bb3329
MR
2631 esac
2632}
2633
2634EXESUF=$(exesuf $target_os)
2635HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 2636
e4e69e0b 2637# set temporary file name
a49d42c2 2638: ${TMPDIR:=$TEMPDIR}
c51fafa1 2639: ${TMPDIR:=$TMP}
a49d42c2 2640: ${TMPDIR:=/tmp}
e4e69e0b 2641
a210bce2 2642if ! check_cmd mktemp -u XXXXXX; then
54460a83
MR
2643 # simple replacement for missing mktemp
2644 # NOT SAFE FOR GENERAL USE
2645 mktemp(){
09a5c245 2646 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
54460a83
MR
2647 }
2648fi
2649
2650tmpfile(){
2651 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2652 (set -C; exec > $tmp) 2>/dev/null ||
f7ba16a7 2653 die "Unable to create temporary file in $TMPDIR."
54460a83
MR
2654 append TMPFILES $tmp
2655 eval $1=$tmp
2656}
2657
2658trap 'rm -f -- $TMPFILES' EXIT
54460a83 2659
55127e7b 2660tmpfile TMPASM .asm
3e0b1c9a
DB
2661tmpfile TMPC .c
2662tmpfile TMPE $EXESUF
2663tmpfile TMPH .h
2664tmpfile TMPO .o
2665tmpfile TMPS .S
2666tmpfile TMPSH .sh
2667tmpfile TMPV .ver
54460a83
MR
2668
2669unset -f mktemp
e4e69e0b 2670
fb3c4ffc
MR
2671chmod +x $TMPE
2672
993f2d0f
MR
2673# make sure we can execute files in $TMPDIR
2674cat > $TMPSH 2>> $logfile <<EOF
2675#! /bin/sh
2676EOF
2677chmod +x $TMPSH >> $logfile 2>&1
2678if ! $TMPSH >> $logfile 2>&1; then
2679 cat <<EOF
2680Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2681variable to another directory and make sure that it is not mounted noexec.
2682EOF
2683 die "Sanity test failed."
2684fi
993f2d0f 2685
08b94f16
MS
2686armasm_flags(){
2687 for flag; do
2688 case $flag in
2689 # Filter out MSVC cl.exe options from cflags that shouldn't
2690 # be passed to gas-preprocessor
2691 -M[TD]*) ;;
2692 *) echo $flag ;;
2693 esac
2694 done
2695}
2696
457cc333
MR
2697ccc_flags(){
2698 for flag; do
2699 case $flag in
2700 -std=c99) echo -c99 ;;
2701 -mcpu=*) echo -arch ${flag#*=} ;;
2702 -mieee) echo -ieee ;;
2703 -O*|-fast) echo $flag ;;
2704 -fno-math-errno) echo -assume nomath_errno ;;
2705 -g) echo -g3 ;;
2706 -Wall) echo -msg_enable level2 ;;
2707 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2708 -Wl,*) echo $flag ;;
2709 -f*|-W*) ;;
2710 *) echo $flag ;;
2711 esac
2712 done
2713}
2714
e5d45e02
LB
2715cparser_flags(){
2716 for flag; do
2717 case $flag in
2718 -Wno-switch) echo -Wno-switch-enum ;;
2719 -Wno-format-zero-length) ;;
2720 -Wdisabled-optimization) ;;
2721 -Wno-pointer-sign) echo -Wno-other ;;
2722 *) echo $flag ;;
2723 esac
2724 done
2725}
2726
14fb9d3d 2727msvc_common_flags(){
dfa559bc
RB
2728 for flag; do
2729 case $flag in
14fb9d3d
AS
2730 # In addition to specifying certain flags under the compiler
2731 # specific filters, they must be specified here as well or else the
2732 # generic catch all at the bottom will print the original flag.
2733 -Wall) ;;
2734 -std=c99) ;;
2735 # Common flags
9f4a16c5 2736 -fomit-frame-pointer) ;;
dfa559bc 2737 -g) echo -Z7 ;;
dfa559bc
RB
2738 -fno-math-errno) ;;
2739 -fno-common) ;;
2740 -fno-signed-zeros) ;;
50640977 2741 -fPIC) ;;
9f30fb5a
MS
2742 -mthumb) ;;
2743 -march=*) ;;
dfa559bc 2744 -lz) echo zlib.lib ;;
bd680c7b
DB
2745 -lavifil32) echo vfw32.lib ;;
2746 -lavicap32) echo vfw32.lib user32.lib ;;
dfa559bc 2747 -l*) echo ${flag#-l}.lib ;;
f4d4e66a 2748 -L*) echo -libpath:${flag#-L} ;;
dfa559bc
RB
2749 *) echo $flag ;;
2750 esac
2751 done
2752}
2753
14fb9d3d
AS
2754msvc_flags(){
2755 msvc_common_flags "$@"
2756 for flag; do
2757 case $flag in
ace87c19 2758 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
14fb9d3d
AS
2759 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2760 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
91894f27 2761 -wd4273 -wd4554 -wd4701 ;;
14fb9d3d
AS
2762 esac
2763 done
2764}
2765
2766icl_flags(){
2767 msvc_common_flags "$@"
2768 for flag; do
2769 case $flag in
2770 # Despite what Intel's documentation says -Wall, which is supported
2771 # on Windows, does enable remarks so disable them here.
2772 -Wall) echo $flag -Qdiag-disable:remark ;;
2773 -std=c99) echo -Qstd=c99 ;;
2774 esac
2775 done
2776}
2777
d0c6d424
MR
2778pgi_flags(){
2779 for flag; do
2780 case $flag in
643933f5 2781 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
d0c6d424
MR
2782 -fomit-frame-pointer) echo -Mnoframe ;;
2783 -g) echo -gopt ;;
2784 *) echo $flag ;;
2785 esac
2786 done
2787}
2788
2789suncc_flags(){
2790 for flag; do
2791 case $flag in
2792 -march=*|-mcpu=*)
2793 case "${flag#*=}" in
2794 native) echo -xtarget=native ;;
2795 v9|niagara) echo -xarch=sparc ;;
2796 ultrasparc) echo -xarch=sparcvis ;;
2797 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2798 i586|pentium) echo -xchip=pentium ;;
2799 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2800 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2801 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2802 pentium4*) echo -xtarget=pentium4 ;;
2803 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2804 *-sse3) echo -xarch=sse3 ;;
2805 core2) echo -xarch=ssse3 -xchip=core2 ;;
f2ce813e
SM
2806 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2807 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
b36f87ff 2808 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
ace87c19 2809 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
d0c6d424 2810 k8|opteron|athlon64|athlon-fx)
ace87c19
DB
2811 echo -xarch=sse2a ;;
2812 athlon*) echo -xarch=pentium_proa ;;
d0c6d424
MR
2813 esac
2814 ;;
2815 -std=c99) echo -xc99 ;;
2816 -fomit-frame-pointer) echo -xregs=frameptr ;;
2817 -fPIC) echo -KPIC -xcode=pic32 ;;
2818 -W*,*) echo $flag ;;
5e753ed5
SM
2819 -f*-*|-W*|-mimpure-text) ;;
2820 -shared) echo -G ;;
d0c6d424
MR
2821 *) echo $flag ;;
2822 esac
2823 done
2824}
2825
2826tms470_flags(){
2827 for flag; do
2828 case $flag in
2829 -march=*|-mcpu=*)
2830 case "${flag#*=}" in
2831 armv7-a|cortex-a*) echo -mv=7a8 ;;
2832 armv7-r|cortex-r*) echo -mv=7r4 ;;
2833 armv7-m|cortex-m*) echo -mv=7m3 ;;
2834 armv6*|arm11*) echo -mv=6 ;;
2835 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2836 echo -mv=5e ;;
2837 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2838 esac
2839 ;;
2840 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2841 -mfpu=vfp) echo --float_support=vfpv2 ;;
2842 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
b5198a26 2843 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
d0c6d424
MR
2844 -msoft-float) echo --float_support=vfplib ;;
2845 -O[0-3]|-mf=*) echo $flag ;;
2846 -g) echo -g -mn ;;
2847 -pds=*) echo $flag ;;
ad93dccb
MR
2848 -D*|-I*) echo $flag ;;
2849 --gcc|--abi=*) echo $flag ;;
2850 -me) echo $flag ;;
d0c6d424
MR
2851 esac
2852 done
2853}
2854
a758c5e2
MR
2855probe_cc(){
2856 pfx=$1
2857 _cc=$2
2858
8db73c61
MR
2859 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2860 unset _ld_o _ldflags _ld_lib _ld_path
18031c49 2861 unset _depflags _DEPCMD _DEPFLAGS
a758c5e2
MR
2862 _flags_filter=echo
2863
2864 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2865 _type=llvm_gcc
2866 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2867 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2868 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2869 _cflags_speed='-O3'
2870 _cflags_size='-Os'
2871 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2872 _type=gcc
2873 gcc_version=$($_cc --version | head -n1)
2874 gcc_basever=$($_cc -dumpversion)
2875 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2876 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2877 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2878 if ! $_cc -dumpversion | grep -q '^2\.'; then
2879 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2880 fi
2881 _cflags_speed='-O3'
2882 _cflags_size='-Os'
b2d688ea 2883 elif $_cc --version 2>/dev/null | grep -q ^icc; then
a758c5e2
MR
2884 _type=icc
2885 _ident=$($_cc --version | head -n1)
2886 _depflags='-MMD'
2887 _cflags_speed='-O3'
2888 _cflags_size='-Os'
2889 _cflags_noopt='-O1'
2890 elif $_cc -v 2>&1 | grep -q xlc; then
2891 _type=xlc
2892 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2893 _cflags_speed='-O5'
2894 _cflags_size='-O5 -qcompact'
2895 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2896 _type=ccc
2897 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2898 _DEPFLAGS='-M'
a758c5e2
MR
2899 _cflags_speed='-fast'
2900 _cflags_size='-O1'
457cc333 2901 _flags_filter=ccc_flags
4936ef64 2902 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
a758c5e2
MR
2903 test -d "$sysroot" || die "No valid sysroot specified."
2904 _type=armcc
ed6d9ce9 2905 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
a758c5e2
MR
2906 armcc_conf="$PWD/armcc.conf"
2907 $_cc --arm_linux_configure \
2908 --arm_linux_config_file="$armcc_conf" \
2909 --configure_sysroot="$sysroot" \
2910 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2911 die "Error creating armcc configuration file."
2912 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2913 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2914 as_default="${cross_prefix}gcc"
2915 _depflags='-MMD'
2916 _cflags_speed='-O3'
2917 _cflags_size='-Os'
0122118e 2918 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
a758c5e2
MR
2919 _type=tms470
2920 _ident=$($_cc -version | head -n1 | tr -s ' ')
2921 _flags='--gcc --abi=eabi -me'
18031c49 2922 _cc_e='-ppl -fe=$@'
a758c5e2 2923 _cc_o='-fe=$@'
a758c5e2
MR
2924 _depflags='-ppa -ppd=$(@:.o=.d)'
2925 _cflags_speed='-O3 -mf=5'
2926 _cflags_size='-O3 -mf=2'
2927 _flags_filter=tms470_flags
2928 elif $_cc -v 2>&1 | grep -q clang; then
2929 _type=clang
2930 _ident=$($_cc --version | head -n1)
9e057f53 2931 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
a758c5e2
MR
2932 _cflags_speed='-O3'
2933 _cflags_size='-Os'
2934 elif $_cc -V 2>&1 | grep -q Sun; then
2935 _type=suncc
2936 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2937 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
c72f12cb 2938 _DEPFLAGS='-xM1 -xc99'
a758c5e2
MR
2939 _ldflags='-std=c99'
2940 _cflags_speed='-O5'
2941 _cflags_size='-O5 -xspace'
2942 _flags_filter=suncc_flags
2943 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2944 _type=pathscale
2945 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2946 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2947 _cflags_speed='-O2'
2948 _cflags_size='-Os'
2949 _flags_filter='filter_out -Wdisabled-optimization'
2950 elif $_cc -v 2>&1 | grep -q Open64; then
2951 _type=open64
2952 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2953 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2954 _cflags_speed='-O2'
2955 _cflags_size='-Os'
2956 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2957 elif $_cc -V 2>&1 | grep -q Portland; then
2958 _type=pgi
2959 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
8f23907f 2960 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
a758c5e2
MR
2961 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2962 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2963 _cflags_noopt="-O1"
2964 _flags_filter=pgi_flags
f4312352
MS
2965 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
2966 _type=armasm
2967 _ident=$($_cc | head -n1)
2968 # 4509: "This form of conditional instruction is deprecated"
2969 _flags="-nologo -ignore 4509"
08b94f16 2970 _flags_filter=armasm_flags
dfa559bc
RB
2971 elif $_cc 2>&1 | grep -q Microsoft; then
2972 _type=msvc
863ee068 2973 _ident=$($_cc 2>&1 | head -n1)
dfa559bc
RB
2974 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2975 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2976 _cflags_speed="-O2"
2977 _cflags_size="-O1"
dfa559bc 2978 if $_cc 2>&1 | grep -q Linker; then
ea9f7173 2979 _ld_o='-out:$@'
dfa559bc
RB
2980 else
2981 _ld_o='-Fe$@'
2982 fi
ea9f7173
MS
2983 _cc_o='-Fo$@'
2984 _cc_e='-P -Fi$@'
dfa559bc
RB
2985 _flags_filter=msvc_flags
2986 _ld_lib='lib%.a'
2987 _ld_path='-libpath:'
2988 _flags='-nologo'
09f2581d 2989 _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
dfa559bc 2990 if [ $pfx = hostcc ]; then
6a0200f2 2991 append _cflags -Dsnprintf=_snprintf
dfa559bc 2992 fi
322e4194
AS
2993 elif $_cc 2>&1 | grep -q Intel; then
2994 _type=icl
863ee068 2995 _ident=$($_cc 2>&1 | head -n1)
322e4194 2996 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
ace87c19
DB
2997 # Not only is O3 broken on 13.x+ but it is slower on all previous
2998 # versions (tested) as well.
322e4194
AS
2999 _cflags_speed="-O2"
3000 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
322e4194 3001 if $_cc 2>&1 | grep -q Linker; then
ea9f7173 3002 _ld_o='-out:$@'
322e4194
AS
3003 else
3004 _ld_o='-Fe$@'
3005 fi
ea9f7173 3006 _cc_o='-Fo$@'
322e4194 3007 _cc_e='-P'
14fb9d3d 3008 _flags_filter=icl_flags
322e4194
AS
3009 _ld_lib='lib%.a'
3010 _ld_path='-libpath:'
ace87c19 3011 # -Qdiag-error to make icl error when seeing certain unknown arguments
60f09c04 3012 _flags='-nologo -Qdiag-error:4044,10157'
ace87c19
DB
3013 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3014 # with MSVC which enables it by default.
e0d6e2fc 3015 _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
322e4194
AS
3016 if [ $pfx = hostcc ]; then
3017 append _cflags -Dsnprintf=_snprintf
3018 fi
e5d45e02
LB
3019 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3020 _type=cparser
3021 _ident=$($_cc --version | head -n1)
3022 _depflags='-MMD'
3023 _cflags_speed='-O4'
3024 _cflags_size='-O2'
3025 _flags_filter=cparser_flags
aef6bd1b 3026 fi
a758c5e2
MR
3027
3028 eval ${pfx}_type=\$_type
3029 eval ${pfx}_ident=\$_ident
3030}
3031
3032set_ccvars(){
23565c26 3033 eval ${1}_C=\${_cc_c-\${${1}_C}}
18031c49 3034 eval ${1}_E=\${_cc_e-\${${1}_E}}
a758c5e2
MR
3035 eval ${1}_O=\${_cc_o-\${${1}_O}}
3036
3037 if [ -n "$_depflags" ]; then
3038 eval ${1}_DEPFLAGS=\$_depflags
3039 else
3040 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3041 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3042 eval DEP${1}FLAGS=\$_flags
3043 fi
3044}
3045
3046probe_cc cc "$cc"
3047cflags_filter=$_flags_filter
3048cflags_speed=$_cflags_speed
3049cflags_size=$_cflags_size
3050cflags_noopt=$_cflags_noopt
3051add_cflags $_flags $_cflags
3052cc_ldflags=$_ldflags
3053set_ccvars CC
3054
3055probe_cc hostcc "$host_cc"
3056host_cflags_filter=$_flags_filter
a758c5e2 3057add_host_cflags $_flags $_cflags
a758c5e2 3058set_ccvars HOSTCC
629687f6 3059
851ffa80
MR
3060test -n "$cc_type" && enable $cc_type ||
3061 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
629687f6 3062
75bafbac 3063: ${as_default:=$cc}
50567afa 3064: ${dep_cc_default:=$cc}
684b28e0 3065: ${ld_default:=$cc}
095792f2
MR
3066: ${host_ld_default:=$host_cc}
3067set_default ar as dep_cc ld host_ld
75800dce 3068
a758c5e2
MR
3069probe_cc as "$as"
3070asflags_filter=$_flags_filter
3071add_asflags $_flags $_cflags
3072set_ccvars AS
3073
3074probe_cc ld "$ld"
3075ldflags_filter=$_flags_filter
3076add_ldflags $_flags $_ldflags
3077test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2763587c 3078LD_O=${_ld_o-$LD_O}
8db73c61
MR
3079LD_LIB=${_ld_lib-$LD_LIB}
3080LD_PATH=${_ld_path-$LD_PATH}
a758c5e2 3081
095792f2
MR
3082probe_cc hostld "$host_ld"
3083host_ldflags_filter=$_flags_filter
3084add_host_ldflags $_flags $_ldflags
3085HOSTLD_O=${_ld_o-$HOSTLD_O}
3086
a758c5e2
MR
3087if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3088 probe_cc depcc "$dep_cc"
3089 CCDEP=${_DEPCMD:-$DEPCMD}
3090 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3091 DEPCCFLAGS=$_flags
3092fi
07dec06e 3093
3dbc777c
MR
3094if $ar 2>&1 | grep -q Microsoft; then
3095 arflags="-nologo"
3096 ar_o='-out:$@'
3097elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3098 arflags="rq"
3099 ar_o='$@'
4822ee3c
DB
3100elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3101 arflags='-Xany -r -c'
3102 ar_o='$@'
3dbc777c
MR
3103else
3104 arflags="rc"
3105 ar_o='$@'
3106fi
3107
7f32f40c 3108add_cflags $extra_cflags
2f2e6c7c 3109add_asflags $extra_cflags
7f32f40c 3110
154d432c
MR
3111if test -n "$sysroot"; then
3112 case "$cc_type" in
00ba041c 3113 gcc|llvm_gcc|clang)
467256f2 3114 add_cppflags --sysroot="$sysroot"
154d432c
MR
3115 add_ldflags --sysroot="$sysroot"
3116 ;;
6fec122a
MR
3117 tms470)
3118 add_cppflags -I"$sysinclude"
3119 add_ldflags --sysroot="$sysroot"
3120 ;;
154d432c
MR
3121 esac
3122fi
3123
d22c13a8 3124if test "$cpu" = host; then
ace87c19
DB
3125 enabled cross_compile &&
3126 die "--cpu=host makes no sense when cross-compiling."
d22c13a8
MR
3127
3128 case "$cc_type" in
613a4e3f 3129 gcc|llvm_gcc)
d22c13a8
MR
3130 check_native(){
3131 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
b695256e 3132 sed -n "/cc1.*$1=/{
27ce1be8
MR
3133 s/.*$1=\\([^ ]*\\).*/\\1/
3134 p
3135 q
3136 }" $TMPE
d22c13a8
MR
3137 }
3138 cpu=$(check_native -march || check_native -mcpu)
3139 ;;
3140 esac
3141
ace87c19
DB
3142 test "${cpu:-host}" = host &&
3143 die "--cpu=host not supported with compiler $cc"
d22c13a8
MR
3144fi
3145
e939cedd
MR
3146# Deal with common $arch aliases
3147case "$arch" in
5873b623
MR
3148 aarch64|arm64)
3149 arch="aarch64"
3150 ;;
e939cedd
MR
3151 arm*)
3152 arch="arm"
3153 ;;
2acda282 3154 mips*|IP*)
e939cedd
MR
3155 arch="mips"
3156 ;;
a6e9d649 3157 parisc*|hppa*)
e939cedd
MR
3158 arch="parisc"
3159 ;;
56203596 3160 "Power Macintosh"|ppc*|powerpc*)
e939cedd
MR
3161 arch="ppc"
3162 ;;
e939cedd
MR
3163 s390|s390x)
3164 arch="s390"
3165 ;;
3166 sh4|sh)
3167 arch="sh4"
3168 ;;
4cd217c0 3169 sun4u|sparc*)
e939cedd 3170 arch="sparc"
e939cedd 3171 ;;
c75848cd
DB
3172 tilegx|tile-gx)
3173 arch="tilegx"
3174 ;;
d33ed7b3 3175 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
e939cedd
MR
3176 arch="x86"
3177 ;;
3178esac
3179
851ffa80 3180is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
343aef9b 3181enable $arch
e939cedd 3182
df5cdc24 3183# Add processor-specific flags
9ebd45c2 3184if enabled aarch64; then
33db40f8
MR
3185
3186 case $cpu in
3187 armv*)
3188 cpuflags="-march=$cpu"
3189 ;;
3190 *)
3191 cpuflags="-mcpu=$cpu"
3192 ;;
3193 esac
3194
3195elif enabled alpha; then
3196
3197 cpuflags="-mcpu=$cpu"
3198
3199elif enabled arm; then
3200
1234c66a
MR
3201 check_arm_arch() {
3202 check_cpp_condition stddef.h \
3203 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3204 $cpuflags
3205 }
3206
3207 probe_arm_arch() {
3208 if check_arm_arch 4; then echo armv4;
3209 elif check_arm_arch 4T; then echo armv4t;
3210 elif check_arm_arch 5; then echo armv5;
3211 elif check_arm_arch 5E; then echo armv5e;
3212 elif check_arm_arch 5T; then echo armv5t;
3213 elif check_arm_arch 5TE; then echo armv5te;
3214 elif check_arm_arch 5TEJ; then echo armv5te;
3215 elif check_arm_arch 6; then echo armv6;
3216 elif check_arm_arch 6J; then echo armv6j;
3217 elif check_arm_arch 6K; then echo armv6k;
3218 elif check_arm_arch 6Z; then echo armv6z;
3219 elif check_arm_arch 6ZK; then echo armv6zk;
3220 elif check_arm_arch 6T2; then echo armv6t2;
3221 elif check_arm_arch 7; then echo armv7;
3222 elif check_arm_arch 7A 7_A; then echo armv7-a;
3e1b5cbc 3223 elif check_arm_arch 7S; then echo armv7-a;
1234c66a
MR
3224 elif check_arm_arch 7R 7_R; then echo armv7-r;
3225 elif check_arm_arch 7M 7_M; then echo armv7-m;
3226 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3227 elif check_arm_arch 8A 8_A; then echo armv8-a;
3228 fi
3229 }
3230
3231 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3232
33db40f8
MR
3233 case $cpu in
3234 armv*)
3235 cpuflags="-march=$cpu"
3236 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3237 ;;
3238 *)
3239 cpuflags="-mcpu=$cpu"
3240 case $cpu in
3241 cortex-a*) subarch=armv7a ;;
3242 cortex-r*) subarch=armv7r ;;
3243 cortex-m*) enable thumb; subarch=armv7m ;;
3244 arm11*) subarch=armv6 ;;
3245 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3246 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
1234c66a 3247 *) subarch=$(probe_arm_arch) ;;
33db40f8
MR
3248 esac
3249 ;;
3250 esac
3251
f0fe245b
MR
3252 case "$subarch" in
3253 armv5t*) enable fast_clz ;;
3254 armv[6-8]*) enable fast_clz fast_unaligned ;;
3255 esac
3256
33db40f8
MR
3257elif enabled avr32; then
3258
3259 case $cpu in
3260 ap7[02]0[0-2])
3261 subarch="avr32_ap"
3262 cpuflags="-mpart=$cpu"
3263 ;;
3264 ap)
3265 subarch="avr32_ap"
3266 cpuflags="-march=$cpu"
3267 ;;
3268 uc3[ab]*)
3269 subarch="avr32_uc"
3270 cpuflags="-mcpu=$cpu"
3271 ;;
3272 uc)
3273 subarch="avr32_uc"
3274 cpuflags="-march=$cpu"
3275 ;;
3276 esac
3277
3278elif enabled bfin; then
3279
3280 cpuflags="-mcpu=$cpu"
3281
3282elif enabled mips; then
3283
3284 cpuflags="-march=$cpu"
3285
5d54c126 3286elif enabled ppc; then
343aef9b 3287
606cc8af
DB
3288 disable ldbrx
3289
56348891
MR
3290 case $(tolower $cpu) in
3291 601|ppc601|powerpc601)
9dbd5c3d 3292 cpuflags="-mcpu=601"
64ad53ff 3293 disable altivec
9dbd5c3d 3294 ;;
56348891 3295 603*|ppc603*|powerpc603*)
9dbd5c3d 3296 cpuflags="-mcpu=603"
64ad53ff 3297 disable altivec
9dbd5c3d 3298 ;;
56348891 3299 604*|ppc604*|powerpc604*)
9dbd5c3d 3300 cpuflags="-mcpu=604"
64ad53ff 3301 disable altivec
9dbd5c3d 3302 ;;
56348891 3303 g3|75*|ppc75*|powerpc75*)
7f1fcaf0 3304 cpuflags="-mcpu=750"
64ad53ff 3305 disable altivec
9dbd5c3d 3306 ;;
56348891 3307 g4|745*|ppc745*|powerpc745*)
7f1fcaf0 3308 cpuflags="-mcpu=7450"
9dbd5c3d 3309 ;;
56348891 3310 74*|ppc74*|powerpc74*)
7f1fcaf0 3311 cpuflags="-mcpu=7400"
9dbd5c3d 3312 ;;
313f9fbf 3313 g5|970|ppc970|powerpc970)
7f1fcaf0 3314 cpuflags="-mcpu=970"
9dbd5c3d 3315 ;;
313f9fbf 3316 power[3-7]*)
7f1fcaf0 3317 cpuflags="-mcpu=$cpu"
313f9fbf 3318 ;;
56348891 3319 cell)
9dbd5c3d
MR
3320 cpuflags="-mcpu=cell"
3321 enable ldbrx
3322 ;;
4ab26cb4
DB
3323 e500mc)
3324 cpuflags="-mcpu=e500mc"