90fb6f07ca72f917ddee1809b4473eff7a905743
[libav.git] / configure
1 #!/bin/sh
2 #
3 # Libav configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
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" "$@"
43 fi
44 echo "No compatible shell script interpreter found."
45 echo "This configure script requires a POSIX-compatible shell"
46 echo "such as bash or ksh."
47 echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken Libav."
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
54 exit 1
55 fi
56
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60 cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65 --help print this message
66 --quiet Suppress showing informative output
67 --list-decoders show all available decoders
68 --list-encoders show all available encoders
69 --list-hwaccels show all available hardware accelerators
70 --list-demuxers show all available demuxers
71 --list-muxers show all available muxers
72 --list-parsers show all available parsers
73 --list-protocols show all available protocols
74 --list-bsfs show all available bitstream filters
75 --list-indevs show all available input devices
76 --list-filters show all available filters
77
78 Standard options:
79 --logfile=FILE log tests and output to FILE [avbuild/config.log]
80 --disable-logging do not log configure debug information
81 --prefix=PREFIX install in PREFIX [$prefix_default]
82 --bindir=DIR install binaries in DIR [PREFIX/bin]
83 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
84 --docdir=DIR install documentation in DIR [PREFIX/share/doc/libav]
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]
89 --enable-rpath use rpath when linking programs (USE WITH CARE)
90
91 Licensing options:
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]
97
98 Configuration 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
105 --disable-all disable building components, libraries and programs
106
107 Program options:
108 --disable-programs do not build command line programs
109 --disable-avconv disable avconv build
110 --disable-avplay disable avplay build
111 --disable-avprobe disable avprobe build
112
113 Component options:
114 --disable-doc do not build documentation
115 --disable-pod2man do not build manual pages
116 --disable-texi2html do not build HTML documentation
117 --disable-avdevice disable libavdevice build
118 --disable-avcodec disable libavcodec build
119 --disable-avformat disable libavformat build
120 --disable-avutil disable libavutil build
121 --disable-swscale disable libswscale build
122 --disable-avfilter disable video filter support [no]
123 --disable-avresample disable libavresample build [no]
124 --disable-pthreads disable pthreads [auto]
125 --disable-w32threads disable Win32 threads [auto]
126 --disable-network disable network support [no]
127 --disable-dct disable DCT code
128 --disable-error-resilience disable error resilience code
129 --disable-lsp disable LSP code
130 --disable-lzo disable LZO decoder code
131 --disable-mdct disable MDCT code
132 --disable-rdft disable RDFT code
133 --disable-fft disable FFT code
134 --disable-faan disable floating point AAN (I)DCT code
135
136 Individual component options:
137 --disable-everything disable all components listed below
138 --disable-encoder=NAME disable encoder NAME
139 --enable-encoder=NAME enable encoder NAME
140 --disable-encoders disable all encoders
141 --disable-decoder=NAME disable decoder NAME
142 --enable-decoder=NAME enable decoder NAME
143 --disable-decoders disable all decoders
144 --disable-hwaccel=NAME disable hwaccel NAME
145 --enable-hwaccel=NAME enable hwaccel NAME
146 --disable-hwaccels disable all hwaccels
147 --disable-muxer=NAME disable muxer NAME
148 --enable-muxer=NAME enable muxer NAME
149 --disable-muxers disable all muxers
150 --disable-demuxer=NAME disable demuxer NAME
151 --enable-demuxer=NAME enable demuxer NAME
152 --disable-demuxers disable all demuxers
153 --enable-parser=NAME enable parser NAME
154 --disable-parser=NAME disable parser NAME
155 --disable-parsers disable all parsers
156 --enable-bsf=NAME enable bitstream filter NAME
157 --disable-bsf=NAME disable bitstream filter NAME
158 --disable-bsfs disable all bitstream filters
159 --enable-protocol=NAME enable protocol NAME
160 --disable-protocol=NAME disable protocol NAME
161 --disable-protocols disable all protocols
162 --enable-indev=NAME enable input device NAME
163 --disable-indev=NAME disable input device NAME
164 --disable-indevs disable input devices
165 --disable-devices disable all devices
166 --enable-filter=NAME enable filter NAME
167 --disable-filter=NAME disable filter NAME
168 --disable-filters disable all filters
169
170 External library support:
171
172 Using any of the following switches will allow Libav to link to the
173 corresponding external library. All the components depending on that library
174 will become enabled, if all their other dependencies are met and they are not
175 explicitly disabled. E.g. --enable-libwavpack will enable linking to
176 libwavpack and allow the libwavpack encoder to be built, unless it is
177 specifically disabled with --disable-encoder=libwavpack.
178
179 Note that only the system libraries are auto-detected. All the other external
180 libraries must be explicitly enabled.
181
182 Also note that the following help text describes the purpose of the libraries
183 themselves, not all their features will necessarily be usable by Libav.
184
185 --enable-avisynth video frameserver
186 --enable-avxsynth Linux version of AviSynth
187 --enable-bzlib bzip2 compression [autodetect]
188 --enable-frei0r video filtering plugins
189 --enable-gnutls crypto
190 --enable-libaom AV1 video encoding/decoding
191 --enable-libbs2b Bauer stereophonic-to-binaural DSP
192 --enable-libcdio audio CD input
193 --enable-libdc1394 IEEE 1394/Firewire camera input
194 --enable-libdcadec DCA audio decoding
195 --enable-libfaac AAC audio encoding
196 --enable-libfdk-aac AAC audio encoding/decoding
197 --enable-libfontconfig font configuration and management
198 --enable-libfreetype font rendering
199 --enable-libgsm GSM audio encoding/decoding
200 --enable-libhdcd HDCD decoding filter
201 --enable-libilbc ILBC audio encoding/decoding
202 --enable-libjack JACK audio sound server
203 --enable-libkvazaar HEVC video encoding
204 --enable-libmp3lame MP3 audio encoding
205 --enable-libopencore-amrnb AMR-NB audio encoding/decoding
206 --enable-libopencore-amrwb AMR-WB audio decoding
207 --enable-libopencv computer vision
208 --enable-libopenh264 H.264 video encoding/decoding
209 --enable-libopenjpeg JPEG 2000 image encoding/decoding
210 --enable-libopus Opus audio encoding/decoding
211 --enable-libpulse Pulseaudio sound server
212 --enable-librtmp RTMP streaming
213 --enable-libschroedinger Dirac video encoding/decoding
214 --enable-libsnappy snappy compression
215 --enable-libspeex Speex audio encoding/decoding
216 --enable-libtheora Theora video encoding/decoding
217 --enable-libtwolame MP2 audio encoding
218 --enable-libvo-aacenc AAC audio encoding
219 --enable-libvo-amrwbenc AMR-WB audio encoding
220 --enable-libvorbis Vorbis audio encoding/decoding
221 --enable-libvpx VP* video encoding/decoding
222 --enable-libwavpack Wavpack audio encoding/decoding
223 --enable-libwebp WebP image encoding/decoding
224 --enable-libx264 H.264 video encoding
225 --enable-libx265 HEVC video encoding
226 --enable-libxavs Chinese AVS video encoding
227 --enable-libxcb X window system protocol communication
228 --enable-libxcb-shm X11 shm communication [auto]
229 --enable-libxcb-xfixes X11 mouse rendering [auto]
230 --enable-libxvid MPEG-4 ASP video encoding
231 --enable-openssl crypto
232 --enable-zlib compression [autodetect]
233
234 The following libraries provide various hardware acceleration features:
235 --enable-amf AMF video encoding code [auto]
236 --enable-cuda Nvidia CUDA (dynamically linked)
237 --enable-cuvid Nvidia CUVID video decode acceleration
238 --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto]
239 --enable-dxva2 Microsoft DirectX 9 video acceleration [auto]
240 --enable-libmfx Intel MediaSDK (AKA Quick Sync Video)
241 --enable-libnpp Nvidia CUDA processing
242 --enable-mmal Broadcom Multi-Media Abstraction Layer (Raspberry Pi)
243 --enable-nvenc Nvidia video encoding
244 --enable-omx OpenMAX IL
245 --enable-omx-rpi OpenMAX IL for Raspberry Pi
246 --enable-vaapi Video Acceleration API (mainly Unix/Intel)
247 --enable-vda Apple Video Decode Acceleration [auto]
248 --enable-vdpau Nvidia Video Decode and Presentation API for Unix [auto]
249
250 Toolchain options:
251 --arch=ARCH select architecture [$arch]
252 --cpu=CPU select the minimum required CPU (affects
253 instruction selection, may crash on older CPUs)
254 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
255 --enable-cross-compile assume a cross-compiler is used
256 --sysroot=PATH root of cross-build tree
257 --sysinclude=PATH location of cross-build system headers
258 --target-os=OS compiler targets OS [$target_os]
259 --target-exec=CMD command to run executables on target
260 --target-path=DIR path to view of build directory on target
261 --target-samples=DIR path to samples directory on target
262 --toolchain=NAME set tool defaults according to NAME
263 (gcc-asan, clang-asan, gcc-msan, clang-msan,
264 gcc-tsan, clang-tsan, gcc-usan, clang-usan,
265 valgrind-massif, valgrind-memcheck,
266 msvc, icl, gcov, llvm-cov, hardened)
267 --nm=NM use nm tool
268 --ar=AR use archive tool AR [$ar_default]
269 --as=AS use assembler AS [$as_default]
270 --cc=CC use C compiler CC [$cc_default]
271 --objcc=OCC use ObjC compiler OCC [$cc_default]
272 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
273 --ld=LD use linker LD
274 --x86asmexe=X86ASM use x86 assembler X86ASM
275 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
276 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
277 --host-cc=HOSTCC use host C compiler HOSTCC
278 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
279 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
280 --host-ld=HOSTLD use host linker HOSTLD
281 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
282 --host-libs=HLIBS use libs HLIBS when linking for host
283 --host-os=OS compiler host OS [$target_os]
284 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
285 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
286 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
287 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
288 --extra-ldsoflags=ELDFLAGS add ELDFLAGS to LDSOFLAGS [$LDSOFLAGS]
289 --extra-libs=ELIBS add ELIBS [$ELIBS]
290 --extra-version=STRING version string suffix []
291 --optflags=OPTFLAGS override optimization-related compiler flags
292 --enable-pic build position-independent code
293 --enable-thumb compile for Thumb instruction set
294 --enable-lto use link-time optimization
295 --env="ENV=override" override the environment variables
296
297 Advanced options (experts only):
298 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
299 --custom-allocator=NAME use a supported custom allocator
300 --disable-symver disable symbol versioning
301 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
302 --disable-safe-bitstream-reader
303 disable buffer boundary checking in bitreaders
304 (faster, but may crash)
305 --enable-sram allow use of on-chip SRAM
306
307 Optimization options (experts only):
308 --disable-asm disable all assembly optimizations
309 --disable-altivec disable AltiVec optimizations
310 --disable-vsx disable VSX optimizations
311 --disable-power8 disable POWER8 optimizations
312 --disable-amd3dnow disable 3DNow! optimizations
313 --disable-amd3dnowext disable 3DNow! extended optimizations
314 --disable-mmx disable MMX optimizations
315 --disable-mmxext disable MMXEXT optimizations
316 --disable-sse disable SSE optimizations
317 --disable-sse2 disable SSE2 optimizations
318 --disable-sse3 disable SSE3 optimizations
319 --disable-ssse3 disable SSSE3 optimizations
320 --disable-sse4 disable SSE4 optimizations
321 --disable-sse42 disable SSE4.2 optimizations
322 --disable-avx disable AVX optimizations
323 --disable-xop disable XOP optimizations
324 --disable-fma3 disable FMA3 optimizations
325 --disable-fma4 disable FMA4 optimizations
326 --disable-avx2 disable AVX2 optimizations
327 --disable-armv5te disable armv5te optimizations
328 --disable-armv6 disable armv6 optimizations
329 --disable-armv6t2 disable armv6t2 optimizations
330 --disable-vfp disable VFP optimizations
331 --disable-neon disable NEON optimizations
332 --disable-inline-asm disable use of inline assembly
333 --disable-x86asm disable use of standalone x86 assembly
334
335 Developer options (useful when working on Libav itself):
336 --disable-debug disable debugging symbols
337 --enable-debug=LEVEL set the debug level [$debuglevel]
338 --disable-optimizations disable compiler optimizations
339 --enable-extra-warnings enable more compiler warnings
340 --samples=PATH location of test samples for FATE, if not set use
341 \$LIBAV_SAMPLES at make invocation time.
342 --enable-neon-clobber-test check NEON registers for clobbering (should be
343 used only for debugging purposes)
344 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
345 should be used only for debugging purposes)
346 --disable-valgrind-backtrace do not print a backtrace under Valgrind
347 (only applies to --disable-optimizations builds)
348 --ignore-tests=TESTS comma-separated list (without "fate-" prefix
349 in the name) of tests whose result is ignored
350
351 NOTE: Object files are built at the place where configure is launched.
352 EOF
353 exit 0
354 }
355
356 log(){
357 echo "$@" >> $logfile
358 }
359
360 log_file(){
361 log BEGIN $1
362 i=1
363 while read line; do
364 printf '%5s %s\n' "${i}" "${line}"
365 i=$(($i+1))
366 done < $1 >> $logfile
367 log END $1
368 }
369
370 echolog(){
371 log "$@"
372 echo "$@"
373 }
374
375 warn(){
376 log "WARNING: $*"
377 WARNINGS="${WARNINGS}WARNING: $*\n"
378 }
379
380 die(){
381 echolog "$@"
382 cat <<EOF
383
384 If you think configure made a mistake, make sure you are using the latest
385 version from Git. If the latest version fails, report the problem to the
386 libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
387 EOF
388 if disabled logging; then
389 cat <<EOF
390 Rerun configure with logging enabled (do not use --disable-logging), and
391 include the log this produces with your report.
392 EOF
393 else
394 cat <<EOF
395 Include the log file "$logfile" produced by configure as this will help
396 solving the problem.
397 EOF
398 fi
399 exit 1
400 }
401
402 # Avoid locale weirdness, besides we really just want to translate ASCII.
403 toupper(){
404 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
405 }
406
407 tolower(){
408 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
409 }
410
411 c_escape(){
412 echo "$*" | sed 's/["\\]/\\\0/g'
413 }
414
415 sh_quote(){
416 v=$(echo "$1" | sed "s/'/'\\\\''/g")
417 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
418 echo "$v"
419 }
420
421 cleanws(){
422 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
423 }
424
425 filter(){
426 pat=$1
427 shift
428 for v; do
429 eval "case '$v' in $pat) printf '%s ' '$v' ;; esac"
430 done
431 }
432
433 filter_out(){
434 pat=$1
435 shift
436 for v; do
437 eval "case '$v' in $pat) ;; *) printf '%s ' '$v' ;; esac"
438 done
439 }
440
441 map(){
442 m=$1
443 shift
444 for v; do eval $m; done
445 }
446
447 add_suffix(){
448 suffix=$1
449 shift
450 for v; do echo ${v}${suffix}; done
451 }
452
453 set_all(){
454 value=$1
455 shift
456 for var in $*; do
457 eval $var=$value
458 done
459 }
460
461 set_weak(){
462 value=$1
463 shift
464 for var; do
465 eval : \${$var:=$value}
466 done
467 }
468
469 sanitize_var_name(){
470 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
471 }
472
473 set_sanitized(){
474 var=$1
475 shift
476 eval $(sanitize_var_name "$var")='$*'
477 }
478
479 get_sanitized(){
480 eval echo \$$(sanitize_var_name "$1")
481 }
482
483 pushvar(){
484 for pvar in $*; do
485 eval level=\${${pvar}_level:=0}
486 eval ${pvar}_${level}="\$$pvar"
487 eval ${pvar}_level=$(($level+1))
488 done
489 }
490
491 popvar(){
492 for pvar in $*; do
493 eval level=\${${pvar}_level:-0}
494 test $level = 0 && continue
495 eval level=$(($level-1))
496 eval $pvar="\${${pvar}_${level}}"
497 eval ${pvar}_level=$level
498 eval unset ${pvar}_${level}
499 done
500 }
501
502 enable(){
503 set_all yes $*
504 }
505
506 disable(){
507 set_all no $*
508 }
509
510 enable_weak(){
511 set_weak yes $*
512 }
513
514 disable_weak(){
515 set_weak no $*
516 }
517
518 enable_sanitized(){
519 for var; do
520 enable $(sanitize_var_name $var)
521 done
522 }
523
524 disable_sanitized(){
525 for var; do
526 disable $(sanitize_var_name $var)
527 done
528 }
529
530 do_enable_deep(){
531 for var; do
532 enabled $var && continue
533 eval sel="\$${var}_select"
534 eval sgs="\$${var}_suggest"
535 pushvar var sgs
536 enable_deep $sel
537 popvar sgs
538 enable_deep_weak $sgs
539 popvar var
540 done
541 }
542
543 enable_deep(){
544 do_enable_deep $*
545 enable $*
546 }
547
548 enable_deep_weak(){
549 for var; do
550 disabled $var && continue
551 pushvar var
552 do_enable_deep $var
553 popvar var
554 enable_weak $var
555 done
556 }
557
558 enabled(){
559 test "${1#!}" = "$1" && op="=" || op="!="
560 eval test "x\$${1#!}" $op "xyes"
561 }
562
563 disabled(){
564 test "${1#!}" = "$1" && op="=" || op="!="
565 eval test "x\$${1#!}" $op "xno"
566 }
567
568 enabled_all(){
569 for opt; do
570 enabled $opt || return 1
571 done
572 }
573
574 disabled_all(){
575 for opt; do
576 disabled $opt || return 1
577 done
578 }
579
580 enabled_any(){
581 for opt; do
582 enabled $opt && return 0
583 done
584 }
585
586 disabled_any(){
587 for opt; do
588 disabled $opt && return 0
589 done
590 return 1
591 }
592
593 set_default(){
594 for opt; do
595 eval : \${$opt:=\$${opt}_default}
596 done
597 }
598
599 is_in(){
600 value=$1
601 shift
602 for var in $*; do
603 [ $var = $value ] && return 0
604 done
605 return 1
606 }
607
608 check_deps(){
609 for cfg; do
610 enabled ${cfg}_checking && die "Circular dependency for $cfg."
611 disabled ${cfg}_checking && continue
612 enable ${cfg}_checking
613
614 eval dep_all="\$${cfg}_deps"
615 eval dep_any="\$${cfg}_deps_any"
616 eval dep_con="\$${cfg}_conflict"
617 eval dep_sel="\$${cfg}_select"
618 eval dep_sgs="\$${cfg}_suggest"
619 eval dep_ifa="\$${cfg}_if"
620 eval dep_ifn="\$${cfg}_if_any"
621
622 pushvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
623 check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
624 popvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
625
626 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
627 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
628 enabled_all $dep_all || disable $cfg
629 enabled_any $dep_any || disable $cfg
630 disabled_all $dep_con || disable $cfg
631 disabled_any $dep_sel && disable $cfg
632
633 enabled $cfg && enable_deep_weak $dep_sel $dep_sgs
634
635 for dep in $dep_all $dep_any $dep_sel $dep_sgs; do
636 # filter out library deps, these do not belong in extralibs
637 is_in $dep $LIBRARY_LIST && continue
638 enabled $dep && eval append ${cfg}_extralibs ${dep}_extralibs
639 done
640
641 disable ${cfg}_checking
642 done
643 }
644
645 print_config(){
646 pfx=$1
647 files=$2
648 shift 2
649 map 'eval echo "$v \${$v:-no}"' "$@" |
650 awk "BEGIN { split(\"$files\", files) }
651 {
652 c = \"$pfx\" toupper(\$1);
653 v = \$2;
654 sub(/yes/, 1, v);
655 sub(/no/, 0, v);
656 for (f in files) {
657 file = files[f];
658 if (file ~ /\\.h\$/) {
659 printf(\"#define %s %d\\n\", c, v) >>file;
660 } else if (file ~ /\\.asm\$/) {
661 printf(\"%%define %s %d\\n\", c, v) >>file;
662 } else if (file ~ /\\.mak\$/) {
663 n = -v ? \"\" : \"!\";
664 printf(\"%s%s=yes\\n\", n, c) >>file;
665 }
666 }
667 }"
668 }
669
670 print_enabled(){
671 suf=$1
672 shift
673 for v; do
674 enabled $v && printf "%s\n" ${v%$suf}
675 done
676 }
677
678 append(){
679 var=$1
680 shift
681 eval "$var=\"\$$var $*\""
682 }
683
684 prepend(){
685 var=$1
686 shift
687 eval "$var=\"$* \$$var\""
688 }
689
690 unique(){
691 var=$1
692 uniq_list=""
693 for tok in $(eval echo \$$var); do
694 uniq_list="$(filter_out $tok $uniq_list) $tok"
695 done
696 eval "$var=\"${uniq_list}\""
697 }
698
699 resolve(){
700 var=$1
701 tmpvar=
702 for entry in $(eval echo \$$var); do
703 tmpvar="$tmpvar $(eval echo \$${entry})"
704 done
705 eval "$var=\"${tmpvar}\""
706 }
707
708 add_cppflags(){
709 append CPPFLAGS "$@"
710 }
711
712 add_cflags(){
713 append CFLAGS $($cflags_filter "$@")
714 }
715
716 add_cflags_headers(){
717 append CFLAGS_HEADERS $($cflags_filter "$@")
718 }
719
720 add_asflags(){
721 append ASFLAGS $($asflags_filter "$@")
722 }
723
724 add_objcflags(){
725 append OBJCFLAGS $($objcflags_filter "$@")
726 }
727
728 add_ldflags(){
729 append LDFLAGS $($ldflags_filter "$@")
730 }
731
732 add_ldexeflags(){
733 append LDEXEFLAGS $($ldflags_filter "$@")
734 }
735
736 add_ldsoflags(){
737 append LDSOFLAGS $($ldflags_filter "$@")
738 }
739
740 add_stripflags(){
741 append STRIPFLAGS "$@"
742 }
743
744 add_extralibs(){
745 prepend extralibs $($ldflags_filter "$@")
746 }
747
748 add_host_cppflags(){
749 append host_cppflags "$@"
750 }
751
752 add_host_cflags(){
753 append host_cflags $($host_cflags_filter "$@")
754 }
755
756 add_host_ldflags(){
757 append host_ldflags $($host_ldflags_filter "$@")
758 }
759
760 add_compat(){
761 append compat_objs $1
762 shift
763 map 'add_cppflags -D$v' "$@"
764 }
765
766 test_cmd(){
767 log "$@"
768 "$@" >> $logfile 2>&1
769 }
770
771 cc_o(){
772 eval printf '%s\\n' $CC_O
773 }
774
775 cc_e(){
776 eval printf '%s\\n' $CC_E
777 }
778
779 test_cc(){
780 log test_cc "$@"
781 cat > $TMPC
782 log_file $TMPC
783 test_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
784 }
785
786 test_objcc(){
787 log test_objcc "$@"
788 cat > $TMPC
789 log_file $TMPC
790 test_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
791 }
792
793 test_cpp(){
794 log test_cpp "$@"
795 cat > $TMPC
796 log_file $TMPC
797 test_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
798 }
799
800 as_o(){
801 eval printf '%s\\n' $AS_O
802 }
803
804 test_as(){
805 log test_as "$@"
806 cat > $TMPS
807 log_file $TMPS
808 test_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
809 }
810
811 x86asm_o(){
812 eval printf '%s\\n' $X86ASM_O
813 }
814
815 test_x86asm(){
816 log test_x86asm "$@"
817 echo "$1" > $TMPASM
818 log_file $TMPASM
819 shift
820 test_cmd $x86asmexe $X86ASMFLAGS "$@" $(x86asm_o $TMPO) $TMPASM
821 }
822
823 check_cmd(){
824 log check_cmd "$@"
825 cmd=$1
826 disabled $cmd && return
827 disable $cmd
828 test_cmd $@ && enable $cmd
829 }
830
831 check_as(){
832 log check_as "$@"
833 name=$1
834 code=$2
835 shift 2
836 disable $name
837 test_as $@ <<EOF && enable $name
838 $code
839 EOF
840 }
841
842 check_inline_asm(){
843 log check_inline_asm "$@"
844 name="$1"
845 code="$2"
846 shift 2
847 disable $name
848 test_cc "$@" <<EOF && enable $name
849 void foo(void){ __asm__ volatile($code); }
850 EOF
851 }
852
853 check_insn(){
854 log check_insn "$@"
855 check_inline_asm ${1}_inline "$2"
856 check_as ${1}_external "$2"
857 }
858
859 check_x86asm(){
860 log check_x86asm "$@"
861 name=$1
862 shift
863 disable $name
864 test_x86asm "$@" && enable $name
865 }
866
867 ld_o(){
868 eval printf '%s\\n' $LD_O
869 }
870
871 test_ld(){
872 log test_ld "$@"
873 flags=$(filter_out '-l*' "$@")
874 libs=$(filter '-l*' "$@")
875 test_cc $($cflags_filter $flags) || return
876 flags=$($ldflags_filter $flags)
877 libs=$($ldflags_filter $libs)
878 test_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
879 }
880
881 check_ld(){
882 log check_ld "$@"
883 name=$1
884 shift
885 disable $name
886 test_ld $@ && enable $name
887 }
888
889 print_include(){
890 hdr=$1
891 test "${hdr%.h}" = "${hdr}" &&
892 echo "#include $hdr" ||
893 echo "#include <$hdr>"
894 }
895
896 test_code(){
897 log test_code "$@"
898 check=$1
899 headers=$2
900 code=$3
901 shift 3
902 {
903 for hdr in $headers; do
904 print_include $hdr
905 done
906 echo "int main(void) { $code; return 0; }"
907 } | test_$check "$@"
908 }
909
910 check_cppflags(){
911 log check_cppflags "$@"
912 test_cpp "$@" <<EOF && add_cppflags "$@"
913 #include <stdlib.h>;
914 EOF
915 }
916
917 test_cflags(){
918 log test_cflags "$@"
919 set -- $($cflags_filter "$@")
920 test_cc "$@" <<EOF
921 int x;
922 EOF
923 }
924
925 check_cflags(){
926 log check_cflags "$@"
927 test_cflags "$@" && add_cflags "$@"
928 }
929
930 test_objcflags(){
931 log test_objcflags "$@"
932 set -- $($objcflags_filter "$@")
933 test_objcc "$@" <<EOF
934 int x;
935 EOF
936 }
937
938 check_objcflags(){
939 log check_objcflags "$@"
940 test_objcflags "$@" && add_objcflags "$@"
941 }
942
943 test_ldflags(){
944 log test_ldflags "$@"
945 set -- $($ldflags_filter "$@")
946 test_ld "$@" <<EOF
947 int main(void){ return 0; }
948 EOF
949 }
950
951 check_ldflags(){
952 log check_ldflags "$@"
953 test_ldflags "$@" && add_ldflags "$@"
954 }
955
956 test_stripflags(){
957 log test_stripflags "$@"
958 # call test_cc to get a fresh TMPO
959 test_cc <<EOF
960 int main(void) { return 0; }
961 EOF
962 test_cmd $strip $STRIPFLAGS "$@" $TMPO
963 }
964
965 check_stripflags(){
966 log check_stripflags "$@"
967 test_stripflags "$@" && add_stripflags "$@"
968 }
969
970 check_header(){
971 log check_header "$@"
972 headers=$1
973 shift
974 disable_sanitized $headers
975 {
976 for hdr in $headers; do
977 print_include $hdr
978 done
979 echo "int x;"
980 } | test_cpp "$@" && enable_sanitized $headers
981 }
982
983 check_func(){
984 log check_func "$@"
985 func=$1
986 shift
987 disable $func
988 test_ld "$@" <<EOF && enable $func
989 extern int $func();
990 int main(void){ $func(); }
991 EOF
992 }
993
994 check_mathfunc(){
995 log check_mathfunc "$@"
996 func=$1
997 narg=$2
998 shift 2
999 test $narg = 2 && args="f, g" || args="f"
1000 disable $func
1001 test_ld "$@" <<EOF && enable $func
1002 #include <math.h>
1003 float foo(float f, float g) { return $func($args); }
1004 int main(void){ return 0; }
1005 EOF
1006 }
1007
1008 check_func_headers(){
1009 log check_func_headers "$@"
1010 headers=$1
1011 funcs=$2
1012 shift 2
1013 {
1014 for hdr in $headers; do
1015 print_include $hdr
1016 done
1017 for func in $funcs; do
1018 echo "long check_$func(void) { return (long) $func; }"
1019 done
1020 echo "int main(void) { return 0; }"
1021 } | test_ld "$@" && enable $funcs && enable_sanitized $headers
1022 }
1023
1024 test_cpp_condition(){
1025 log test_cpp_condition "$@"
1026 header=$1
1027 condition=$2
1028 shift 2
1029 test_cpp "$@" <<EOF
1030 #include <$header>
1031 #if !($condition)
1032 #error "unsatisfied condition: $condition"
1033 #endif
1034 EOF
1035 }
1036
1037 check_cpp_condition(){
1038 log check_cpp_condition "$@"
1039 name=$1
1040 shift 1
1041 disable $name
1042 test_cpp_condition "$@" && enable $name
1043 }
1044
1045 check_lib(){
1046 log check_lib "$@"
1047 name="$1"
1048 headers="$2"
1049 funcs="$3"
1050 shift 3
1051 disable $name
1052 check_func_headers "$headers" "$funcs" "$@" &&
1053 enable $name && eval ${name}_extralibs="\$@"
1054 }
1055
1056 test_pkg_config(){
1057 log test_pkg_config "$@"
1058 name="$1"
1059 pkg_version="$2"
1060 pkg="${2%% *}"
1061 headers="$3"
1062 funcs="$4"
1063 shift 4
1064 disable $name
1065 test_cmd $pkg_config --exists --print-errors $pkg_version || return
1066 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1067 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1068 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1069 enable $name &&
1070 set_sanitized "${name}_cflags" $pkg_cflags &&
1071 set_sanitized "${name}_extralibs" $pkg_libs
1072 }
1073
1074 check_pkg_config(){
1075 log check_pkg_config "$@"
1076 name="$1"
1077 test_pkg_config "$@" &&
1078 eval add_cflags \$${name}_cflags
1079 }
1080
1081 test_exec(){
1082 log test_exec "$@"
1083 test_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1084 }
1085
1086 check_exec_crash(){
1087 log check_exec_crash "$@"
1088 code=$(cat)
1089
1090 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1091 # are safe but may not be available everywhere. Thus we use
1092 # raise(SIGTERM) instead. The check is run in a subshell so we
1093 # can redirect the "Terminated" message from the shell. SIGBUS
1094 # is not defined by standard C so it is used conditionally.
1095
1096 (test_exec "$@") >> $logfile 2>&1 <<EOF
1097 #include <signal.h>
1098 static void sighandler(int sig){
1099 raise(SIGTERM);
1100 }
1101 int foo(void){
1102 $code
1103 }
1104 int (*func_ptr)(void) = foo;
1105 int main(void){
1106 signal(SIGILL, sighandler);
1107 signal(SIGFPE, sighandler);
1108 signal(SIGSEGV, sighandler);
1109 #ifdef SIGBUS
1110 signal(SIGBUS, sighandler);
1111 #endif
1112 return func_ptr();
1113 }
1114 EOF
1115 }
1116
1117 check_type(){
1118 log check_type "$@"
1119 headers=$1
1120 type=$2
1121 shift 2
1122 disable_sanitized "$type"
1123 test_code cc "$headers" "$type v" "$@" && enable_sanitized "$type"
1124 }
1125
1126 check_struct(){
1127 log check_struct "$@"
1128 headers=$1
1129 struct=$2
1130 member=$3
1131 shift 3
1132 disable_sanitized "${struct}_${member}"
1133 test_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1134 enable_sanitized "${struct}_${member}"
1135 }
1136
1137 check_builtin(){
1138 log check_builtin "$@"
1139 name=$1
1140 shift
1141 disable "$name"
1142 test_code ld "$@" && enable "$name"
1143 }
1144
1145 check_compile_assert(){
1146 log check_compile_assert "$@"
1147 name=$1
1148 headers=$2
1149 condition=$3
1150 shift 3
1151 disable "$name"
1152 test_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1153 }
1154
1155 check_cc(){
1156 log check_cc "$@"
1157 name=$1
1158 shift
1159 disable "$name"
1160 test_code cc "$@" && enable "$name"
1161 }
1162
1163 require(){
1164 log require "$@"
1165 name_version="$1"
1166 name="${1%% *}"
1167 shift
1168 check_lib $name "$@" || die "ERROR: $name_version not found"
1169 }
1170
1171 require_cc(){
1172 log require_cc "$@"
1173 name="$1"
1174 shift
1175 test_code cc "$@" || die "ERROR: $name failed"
1176 }
1177
1178 require_header(){
1179 log require_header "$@"
1180 headers="$1"
1181 check_header "$@" || die "ERROR: $headers not found"
1182 }
1183
1184 require_cpp_condition(){
1185 log require_cpp_condition "$@"
1186 condition="$2"
1187 test_cpp_condition "$@" || die "ERROR: $condition not satisfied"
1188 }
1189
1190 require_pkg_config(){
1191 log require_pkg_config "$@"
1192 pkg_version="$2"
1193 check_pkg_config "$@" || die "ERROR: $pkg_version not found"
1194 }
1195
1196 hostcc_e(){
1197 eval printf '%s\\n' $HOSTCC_E
1198 }
1199
1200 hostcc_o(){
1201 eval printf '%s\\n' $HOSTCC_O
1202 }
1203
1204 test_host_cc(){
1205 log test_host_cc "$@"
1206 cat > $TMPC
1207 log_file $TMPC
1208 test_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1209 }
1210
1211 test_host_cpp(){
1212 log test_host_cpp "$@"
1213 cat > $TMPC
1214 log_file $TMPC
1215 test_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1216 }
1217
1218 check_host_cppflags(){
1219 log check_host_cppflags "$@"
1220 test_host_cpp "$@" <<EOF && append host_cppflags "$@"
1221 #include <stdlib.h>;
1222 EOF
1223 }
1224
1225 check_host_cflags(){
1226 log check_host_cflags "$@"
1227 set -- $($host_cflags_filter "$@")
1228 test_host_cc "$@" <<EOF && append host_cflags "$@"
1229 int x;
1230 EOF
1231 }
1232
1233 test_host_cpp_condition(){
1234 log test_host_cpp_condition "$@"
1235 header=$1
1236 condition=$2
1237 shift 2
1238 test_host_cpp "$@" <<EOF
1239 #include <$header>
1240 #if !($condition)
1241 #error "unsatisfied condition: $condition"
1242 #endif
1243 EOF
1244 }
1245
1246 check_host_cpp_condition(){
1247 log check_host_cpp_condition "$@"
1248 name=$1
1249 shift 1
1250 disable $name
1251 test_host_cpp_condition "$@" && enable $name
1252 }
1253
1254 cp_if_changed(){
1255 cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1256 mkdir -p "$(dirname $2)"
1257 cp -f "$1" "$2"
1258 }
1259
1260 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1261 # system-dependent things.
1262
1263 AVCODEC_COMPONENTS="
1264 bsfs
1265 decoders
1266 encoders
1267 hwaccels
1268 parsers
1269 "
1270
1271 AVDEVICE_COMPONENTS="
1272 indevs
1273 "
1274 AVFILTER_COMPONENTS="
1275 filters
1276 "
1277 AVFORMAT_COMPONENTS="
1278 demuxers
1279 muxers
1280 protocols
1281 "
1282
1283 COMPONENT_LIST="
1284 $AVCODEC_COMPONENTS
1285 $AVDEVICE_COMPONENTS
1286 $AVFILTER_COMPONENTS
1287 $AVFORMAT_COMPONENTS
1288 "
1289
1290 EXAMPLE_LIST="
1291 decode_audio_example
1292 decode_video_example
1293 encode_audio_example
1294 encode_video_example
1295 filter_audio_example
1296 metadata_example
1297 output_example
1298 qsvdec_example
1299 transcode_aac_example
1300 "
1301
1302 # catchall list of things that require external libs to link
1303 EXTRALIBS_LIST="
1304 cpu_init
1305 cws2fws
1306 "
1307
1308 HWACCEL_LIBRARY_NONFREE_LIST="
1309 cuda
1310 cuvid
1311 libnpp
1312 "
1313 HWACCEL_LIBRARY_LIST="
1314 $HWACCEL_LIBRARY_NONFREE_LIST
1315 amf
1316 d3d11va
1317 dxva2
1318 libmfx
1319 mmal
1320 nvenc
1321 omx
1322 vaapi
1323 vda
1324 vdpau
1325 "
1326
1327 EXTERNAL_LIBRARY_GPL_LIST="
1328 libcdio
1329 libx264
1330 libx265
1331 libxavs
1332 libxvid
1333 "
1334
1335 EXTERNAL_LIBRARY_NONFREE_LIST="
1336 libfaac
1337 libfdk_aac
1338 openssl
1339 "
1340
1341 EXTERNAL_LIBRARY_VERSION3_LIST="
1342 libopencore_amrnb
1343 libopencore_amrwb
1344 libvo_aacenc
1345 libvo_amrwbenc
1346 "
1347
1348 EXTERNAL_LIBRARY_LIST="
1349 $EXTERNAL_LIBRARY_GPL_LIST
1350 $EXTERNAL_LIBRARY_NONFREE_LIST
1351 $EXTERNAL_LIBRARY_VERSION3_LIST
1352 avisynth
1353 avxsynth
1354 frei0r
1355 gnutls
1356 libaom
1357 libbs2b
1358 libdc1394
1359 libdcadec
1360 libfontconfig
1361 libfreetype
1362 libgsm
1363 libhdcd
1364 libilbc
1365 libjack
1366 libkvazaar
1367 libmp3lame
1368 libopencv
1369 libopenh264
1370 libopenjpeg
1371 libopus
1372 libpulse
1373 librtmp
1374 libschroedinger
1375 libsnappy
1376 libspeex
1377 libtheora
1378 libtwolame
1379 libvorbis
1380 libvpx
1381 libwavpack
1382 libwebp
1383 libxcb
1384 libxcb_shm
1385 libxcb_xfixes
1386 "
1387
1388 SYSTEM_LIBRARY_LIST="
1389 bzlib
1390 zlib
1391 "
1392
1393 FEATURE_LIST="
1394 gray
1395 hardcoded_tables
1396 omx_rpi
1397 runtime_cpudetect
1398 safe_bitstream_reader
1399 shared
1400 small
1401 sram
1402 static
1403 swscale_alpha
1404 "
1405
1406 LIBRARY_LIST="
1407 avcodec
1408 avdevice
1409 avfilter
1410 avformat
1411 avresample
1412 avutil
1413 swscale
1414 "
1415
1416 LICENSE_LIST="
1417 gpl
1418 nonfree
1419 version3
1420 "
1421
1422 PROGRAM_LIST="
1423 avconv
1424 avplay
1425 avprobe
1426 "
1427
1428 SUBSYSTEM_LIST="
1429 dct
1430 doc
1431 error_resilience
1432 faan
1433 fft
1434 lsp
1435 lzo
1436 mdct
1437 network
1438 rdft
1439 "
1440
1441 # COMPONENT_LIST needs to come last to ensure correct dependency checking
1442 CONFIG_LIST="
1443 $EXAMPLE_LIST
1444 $EXTERNAL_LIBRARY_LIST
1445 $HWACCEL_LIBRARY_LIST
1446 $FEATURE_LIST
1447 $LICENSE_LIST
1448 $LIBRARY_LIST
1449 $PROGRAM_LIST
1450 $SUBSYSTEM_LIST
1451 $SYSTEM_LIBRARY_LIST
1452 neon_clobber_test
1453 pic
1454 pod2man
1455 texi2html
1456 thumb
1457 valgrind_backtrace
1458 xmm_clobber_test
1459 $COMPONENT_LIST
1460 "
1461
1462 THREADS_LIST="
1463 pthreads
1464 w32threads
1465 "
1466
1467 ATOMICS_LIST="
1468 atomics_gcc
1469 atomics_suncc
1470 atomics_win32
1471 "
1472
1473 ARCH_LIST="
1474 aarch64
1475 alpha
1476 arm
1477 avr32
1478 avr32_ap
1479 avr32_uc
1480 bfin
1481 ia64
1482 m68k
1483 mips
1484 mips64
1485 parisc
1486 ppc
1487 ppc64
1488 s390
1489 sh4
1490 sparc
1491 sparc64
1492 tilegx
1493 tilepro
1494 tomi
1495 x86
1496 x86_32
1497 x86_64
1498 "
1499
1500 ARCH_EXT_LIST_ARM="
1501 armv5te
1502 armv6
1503 armv6t2
1504 armv8
1505 neon
1506 vfp
1507 vfpv3
1508 "
1509
1510 ARCH_EXT_LIST_X86_SIMD="
1511 amd3dnow
1512 amd3dnowext
1513 avx
1514 avx2
1515 fma3
1516 fma4
1517 mmx
1518 mmxext
1519 sse
1520 sse2
1521 sse3
1522 sse4
1523 sse42
1524 ssse3
1525 xop
1526 "
1527
1528 ARCH_EXT_LIST_PPC="
1529 altivec
1530 dcbzl
1531 ldbrx
1532 power8
1533 ppc4xx
1534 vsx
1535 "
1536
1537 ARCH_EXT_LIST_X86="
1538 $ARCH_EXT_LIST_X86_SIMD
1539 cpunop
1540 i686
1541 "
1542
1543 ARCH_EXT_LIST_MIPS="
1544 loongson
1545 mips32r1
1546 mips64r1
1547 mips32r2
1548 mips64r2
1549 mips32r6
1550 mips64r6
1551 "
1552
1553 ARCH_EXT_LIST="
1554 $ARCH_EXT_LIST_ARM
1555 $ARCH_EXT_LIST_MIPS
1556 $ARCH_EXT_LIST_PPC
1557 $ARCH_EXT_LIST_X86
1558 vis
1559 "
1560
1561 ARCH_FEATURES="
1562 aligned_stack
1563 fast_64bit
1564 fast_clz
1565 fast_cmov
1566 local_aligned_8
1567 local_aligned_16
1568 local_aligned_32
1569 simd_align_16
1570 simd_align_32
1571 "
1572
1573 BUILTIN_LIST="
1574 atomic_cas_ptr
1575 machine_rw_barrier
1576 MemoryBarrier
1577 mm_empty
1578 rdtsc
1579 sem_timedwait
1580 sync_val_compare_and_swap
1581 "
1582 HAVE_LIST_CMDLINE="
1583 inline_asm
1584 symver
1585 x86asm
1586 "
1587
1588 HAVE_LIST_PUB="
1589 bigendian
1590 fast_unaligned
1591 "
1592
1593 HEADERS_LIST="
1594 AVFoundation_AVFoundation_h
1595 arpa_inet_h
1596 cdio_paranoia_h
1597 cdio_paranoia_paranoia_h
1598 dispatch_dispatch_h
1599 dev_bktr_ioctl_bt848_h
1600 dev_bktr_ioctl_meteor_h
1601 dev_ic_bt8xx_h
1602 dev_video_bktr_ioctl_bt848_h
1603 dev_video_meteor_ioctl_meteor_h
1604 direct_h
1605 dxgidebug_h
1606 dxva_h
1607 io_h
1608 machine_ioctl_bt848_h
1609 machine_ioctl_meteor_h
1610 malloc_h
1611 poll_h
1612 sys_param_h
1613 sys_resource_h
1614 sys_select_h
1615 sys_soundcard_h
1616 sys_time_h
1617 sys_un_h
1618 sys_videoio_h
1619 unistd_h
1620 valgrind_valgrind_h
1621 windows_h
1622 winsock2_h
1623 "
1624
1625 INTRINSICS_LIST="
1626 intrinsics_neon
1627 "
1628
1629 MATH_FUNCS="
1630 atanf
1631 atan2f
1632 cbrtf
1633 cosf
1634 exp2
1635 exp2f
1636 expf
1637 isinf
1638 isnan
1639 ldexpf
1640 llrint
1641 llrintf
1642 log2
1643 log2f
1644 log10f
1645 lrint
1646 lrintf
1647 powf
1648 rint
1649 round
1650 roundf
1651 sinf
1652 trunc
1653 truncf
1654 "
1655
1656 SYSTEM_FEATURES="
1657 dos_paths
1658 libc_msvcrt
1659 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
1660 section_data_rel_ro
1661 threads
1662 uwp
1663 "
1664
1665 SYSTEM_FUNCS="
1666 aligned_malloc
1667 clock_gettime
1668 closesocket
1669 CommandLineToArgvW
1670 fcntl
1671 getaddrinfo
1672 gethrtime
1673 getopt
1674 GetProcessAffinityMask
1675 GetProcessMemoryInfo
1676 GetProcessTimes
1677 getrusage
1678 GetSystemTimeAsFileTime
1679 gettimeofday
1680 gmtime_r
1681 inet_aton
1682 isatty
1683 localtime_r
1684 mach_absolute_time
1685 MapViewOfFile
1686 memalign
1687 mmap
1688 mprotect
1689 nanosleep
1690 posix_memalign
1691 sched_getaffinity
1692 SetConsoleTextAttribute
1693 setmode
1694 setrlimit
1695 Sleep
1696 strerror_r
1697 sysconf
1698 sysctl
1699 usleep
1700 VirtualAlloc
1701 "
1702
1703 SYSTEM_LIBRARIES="
1704 sdl
1705 vaapi_1
1706 vaapi_drm
1707 vaapi_x11
1708 vdpau_x11
1709 wincrypt
1710 "
1711
1712 TOOLCHAIN_FEATURES="
1713 as_arch_directive
1714 as_fpu_directive
1715 as_func
1716 as_object_arch
1717 asm_mod_q
1718 blocks_extension
1719 ebp_available
1720 ebx_available
1721 gnu_as
1722 ibm_asm
1723 inline_asm_labels
1724 pragma_deprecated
1725 symver_asm_label
1726 symver_gnu_asm
1727 vfp_args
1728 xform_asm
1729 xmm_clobbers
1730 "
1731
1732 TYPES_LIST="
1733 CONDITION_VARIABLE_Ptr
1734 CUVIDDECODECREATEINFO_bitDepthMinus8
1735 socklen_t
1736 struct_addrinfo
1737 struct_group_source_req
1738 struct_ip_mreq_source
1739 struct_ipv6_mreq
1740 struct_pollfd
1741 struct_rusage_ru_maxrss
1742 struct_sockaddr_in6
1743 struct_sockaddr_sa_len
1744 struct_sockaddr_storage
1745 struct_v4l2_frmivalenum_discrete
1746 "
1747
1748 HAVE_LIST="
1749 $ARCH_EXT_LIST
1750 $(add_suffix _external $ARCH_EXT_LIST)
1751 $(add_suffix _inline $ARCH_EXT_LIST)
1752 $ARCH_FEATURES
1753 $BUILTIN_LIST
1754 $HAVE_LIST_CMDLINE
1755 $HAVE_LIST_PUB
1756 $HEADERS_LIST
1757 $INTRINSICS_LIST
1758 $MATH_FUNCS
1759 $SYSTEM_FEATURES
1760 $SYSTEM_FUNCS
1761 $SYSTEM_LIBRARIES
1762 $THREADS_LIST
1763 $TOOLCHAIN_FEATURES
1764 $TYPES_LIST
1765 "
1766
1767 # options emitted with CONFIG_ prefix but not available on the command line
1768 CONFIG_EXTRA="
1769 aandcttables
1770 ac3dsp
1771 adts_header
1772 audio_frame_queue
1773 audiodsp
1774 blockdsp
1775 bswapdsp
1776 cabac
1777 cbs
1778 cbs_h264
1779 cbs_h265
1780 cbs_mpeg2
1781 dirac_parse
1782 dvprofile
1783 faandct
1784 faanidct
1785 fdctdsp
1786 flacdsp
1787 fmtconvert
1788 g722dsp
1789 gmp
1790 golomb
1791 gplv3
1792 h263dsp
1793 h264chroma
1794 h264dsp
1795 h264parse
1796 h264pred
1797 h264qpel
1798 hevcparse
1799 hpeldsp
1800 huffman
1801 huffyuvdsp
1802 huffyuvencdsp
1803 idctdsp
1804 iirfilter
1805 imdct15
1806 intrax8
1807 iso_media
1808 ividsp
1809 jpegtables
1810 lgplv3
1811 libx262
1812 libxcb_shape
1813 lpc
1814 lzf
1815 me_cmp
1816 mpeg_er
1817 mpegaudio
1818 mpegaudiodsp
1819 mpegaudioheader
1820 mpegvideo
1821 mpegvideoenc
1822 mss34dsp
1823 pixblockdsp
1824 qpeldsp
1825 qsv
1826 qsvdec
1827 qsvenc
1828 qsvvpp
1829 rangecoder
1830 riffdec
1831 riffenc
1832 rtpdec
1833 rtpenc_chain
1834 rv34dsp
1835 sinewin
1836 snappy
1837 srtp
1838 startcode
1839 texturedsp
1840 texturedspenc
1841 tpeldsp
1842 vaapi_encode
1843 vc1dsp
1844 videodsp
1845 vp3dsp
1846 vp56dsp
1847 vp8dsp
1848 wma_freqs
1849 wmv2dsp
1850 "
1851
1852 CMDLINE_SELECT="
1853 $ARCH_EXT_LIST
1854 $CONFIG_LIST
1855 $HAVE_LIST_CMDLINE
1856 $THREADS_LIST
1857 asm
1858 cross_compile
1859 debug
1860 extra_warnings
1861 logging
1862 lto
1863 optimizations
1864 rpath
1865 "
1866
1867 PATHS_LIST="
1868 bindir
1869 datadir
1870 docdir
1871 incdir
1872 libdir
1873 mandir
1874 prefix
1875 shlibdir
1876 "
1877
1878 CMDLINE_SET="
1879 $PATHS_LIST
1880 ar
1881 arch
1882 as
1883 cc
1884 objcc
1885 cpu
1886 cross_prefix
1887 custom_allocator
1888 dep_cc
1889 env
1890 extra_version
1891 host_cc
1892 host_cflags
1893 host_extralibs
1894 host_ld
1895 host_ldflags
1896 host_os
1897 ignore_tests
1898 ld
1899 logfile
1900 malloc_prefix
1901 nm
1902 optflags
1903 pkg_config
1904 pkg_config_flags
1905 samples
1906 sysinclude
1907 sysroot
1908 target_exec
1909 target_os
1910 target_path
1911 target_samples
1912 toolchain
1913 x86asmexe
1914 "
1915
1916 CMDLINE_APPEND="
1917 extra_cflags
1918 extra_objcflags
1919 host_cppflags
1920 "
1921
1922 # code dependency declarations
1923
1924 # architecture extensions
1925
1926 armv5te_deps="arm"
1927 armv6_deps="arm"
1928 armv6t2_deps="arm"
1929 armv8_deps="aarch64"
1930 neon_deps_any="aarch64 arm"
1931 intrinsics_neon_deps="neon"
1932 vfp_deps_any="aarch64 arm"
1933 vfpv3_deps="vfp"
1934
1935 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1936
1937 altivec_deps="ppc"
1938 dcbzl_deps="ppc"
1939 ldbrx_deps="ppc"
1940 ppc4xx_deps="ppc"
1941 vsx_deps="altivec"
1942 power8_deps="vsx"
1943
1944 loongson_deps="mips"
1945 mips32r1_deps="mips32"
1946 mips32r2_deps="mips32"
1947 mips32r6_deps="mips32"
1948 mips64r1_deps="mips64"
1949 mips64r2_deps="mips64"
1950 mips64r6_deps="mips64"
1951
1952 vis_deps="sparc"
1953
1954 cpunop_deps="i686"
1955 x86_64_select="i686"
1956 x86_64_suggest="fast_cmov"
1957
1958 amd3dnow_deps="mmx"
1959 amd3dnowext_deps="amd3dnow"
1960 i686_deps="x86"
1961 mmx_deps="x86"
1962 mmxext_deps="mmx"
1963 sse_deps="mmxext"
1964 sse2_deps="sse"
1965 sse3_deps="sse2"
1966 ssse3_deps="sse3"
1967 sse4_deps="ssse3"
1968 sse42_deps="sse4"
1969 avx_deps="sse42"
1970 xop_deps="avx"
1971 fma3_deps="avx"
1972 fma4_deps="avx"
1973 avx2_deps="avx"
1974
1975 mmx_external_deps="x86asm"
1976 mmx_inline_deps="inline_asm x86"
1977 mmx_suggest="mmx_external mmx_inline"
1978
1979 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1980 eval dep=\$${ext}_deps
1981 eval ${ext}_external_deps='"${dep}_external"'
1982 eval ${ext}_inline_deps='"${dep}_inline"'
1983 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1984 done
1985
1986 aligned_stack_if_any="aarch64 ppc x86"
1987 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1988 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1989 fast_unaligned_if_any="aarch64 ppc x86"
1990 simd_align_16_if_any="altivec neon sse"
1991 simd_align_32_if_any="avx"
1992
1993 # system capabilities
1994 symver_if_any="symver_asm_label symver_gnu_asm"
1995 valgrind_backtrace_conflict="optimizations"
1996 valgrind_backtrace_deps="valgrind_valgrind_h"
1997
1998 # threading support
1999 atomics_gcc_if="sync_val_compare_and_swap"
2000 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2001 atomics_win32_if="MemoryBarrier"
2002 atomics_native_if_any="$ATOMICS_LIST"
2003 w32threads_deps="atomics_native"
2004 threads_if_any="$THREADS_LIST"
2005
2006 # subsystems
2007 cbs_h264_select="cbs golomb"
2008 cbs_h265_select="cbs golomb"
2009 cbs_mpeg2_select="cbs"
2010 dct_select="rdft"
2011 dirac_parse_select="golomb"
2012 error_resilience_select="me_cmp"
2013 faandct_deps="faan"
2014 faandct_select="fdctdsp"
2015 faanidct_deps="faan"
2016 faanidct_select="idctdsp"
2017 h264dsp_select="startcode"
2018 hevcparse_select="golomb"
2019 intrax8_select="blockdsp idctdsp"
2020 mdct_select="fft"
2021 rdft_select="fft"
2022 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2023 mpeg_er_select="error_resilience"
2024 mpegaudio_select="mpegaudiodsp mpegaudioheader"
2025 mpegaudiodsp_select="dct"
2026 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
2027 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2028 vc1dsp_select="h264chroma qpeldsp startcode"
2029
2030 # decoders / encoders
2031 aac_decoder_select="adts_header imdct15 mdct sinewin"
2032 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
2033 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2034 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2035 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2036 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2037 adpcm_g722_decoder_select="g722dsp"
2038 adpcm_g722_encoder_select="g722dsp"
2039 aic_decoder_select="golomb idctdsp"
2040 alac_encoder_select="lpc"
2041 als_decoder_select="bswapdsp"
2042 amrnb_decoder_select="lsp"
2043 amrwb_decoder_select="lsp"
2044 amv_decoder_select="sp5x_decoder"
2045 ape_decoder_select="bswapdsp"
2046 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2047 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2048 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2049 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2050 atrac1_decoder_select="mdct sinewin"
2051 atrac3_decoder_select="mdct"
2052 atrac3p_decoder_select="mdct sinewin"
2053 bink_decoder_select="blockdsp hpeldsp"
2054 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2055 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2056 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2057 clearvideo_decoder_select="idctdsp"
2058 cllc_decoder_select="bswapdsp"
2059 comfortnoise_encoder_select="lpc"
2060 cook_decoder_select="audiodsp mdct sinewin"
2061 cscd_decoder_select="lzo"
2062 cscd_decoder_suggest="zlib"
2063 dca_decoder_select="fmtconvert mdct"
2064 dds_decoder_select="texturedsp"
2065 dnxhd_decoder_select="blockdsp idctdsp"
2066 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2067 dvvideo_decoder_select="dvprofile idctdsp"
2068 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2069 dxa_decoder_deps="zlib"
2070 dxv_decoder_select="lzf texturedsp"
2071 eac3_decoder_select="ac3_decoder"
2072 eac3_encoder_select="ac3_encoder"
2073 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2074 eatgq_decoder_select="aandcttables idctdsp"
2075 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2076 exr_decoder_deps="zlib"
2077 ffv1_decoder_select="rangecoder"
2078 ffv1_encoder_select="rangecoder"
2079 ffvhuff_decoder_select="huffyuv_decoder"
2080 ffvhuff_encoder_select="huffyuv_encoder"
2081 fic_decoder_select="golomb"
2082 flac_decoder_select="flacdsp"
2083 flac_encoder_select="bswapdsp flacdsp lpc"
2084 flashsv_decoder_deps="zlib"
2085 flashsv_encoder_deps="zlib"
2086 flashsv2_decoder_deps="zlib"
2087 flv_decoder_select="h263_decoder"
2088 flv_encoder_select="h263_encoder"
2089 fourxm_decoder_select="blockdsp bswapdsp"
2090 fraps_decoder_select="bswapdsp huffman"
2091 g2m_decoder_deps="zlib"
2092 g2m_decoder_select="blockdsp idctdsp jpegtables"
2093 h261_decoder_select="mpeg_er mpegvideo"
2094 h261_encoder_select="aandcttables mpegvideoenc"
2095 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2096 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2097 h263i_decoder_select="h263_decoder"
2098 h263p_encoder_select="h263_encoder"
2099 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2100 h264_decoder_suggest="error_resilience"
2101 hap_decoder_select="snappy texturedsp"
2102 hap_encoder_deps="libsnappy"
2103 hap_encoder_select="texturedspenc"
2104 hevc_decoder_select="bswapdsp cabac hevcparse videodsp"
2105 huffyuv_decoder_select="bswapdsp huffyuvdsp"
2106 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
2107 iac_decoder_select="imc_decoder"
2108 imc_decoder_select="bswapdsp fft mdct sinewin"
2109 indeo3_decoder_select="hpeldsp"
2110 indeo4_decoder_select="ividsp"
2111 indeo5_decoder_select="ividsp"
2112 interplay_video_decoder_select="hpeldsp"
2113 jpegls_decoder_select="mjpeg_decoder"
2114 jv_decoder_select="blockdsp"
2115 lagarith_decoder_select="huffyuvdsp"
2116 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2117 magicyuv_decoder_select="huffyuvdsp"
2118 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2119 metasound_decoder_select="lsp mdct sinewin"
2120 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2121 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
2122 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2123 mjpegb_decoder_select="mjpeg_decoder"
2124 mlp_decoder_select="mlp_parser"
2125 motionpixels_decoder_select="bswapdsp"
2126 mp1_decoder_select="mpegaudio"
2127 mp1float_decoder_select="mpegaudio"
2128 mp2_decoder_select="mpegaudio"
2129 mp2float_decoder_select="mpegaudio"
2130 mp3_decoder_select="mpegaudio"
2131 mp3adu_decoder_select="mpegaudio"
2132 mp3adufloat_decoder_select="mpegaudio"
2133 mp3float_decoder_select="mpegaudio"
2134 mp3on4_decoder_select="mpegaudio"
2135 mp3on4float_decoder_select="mpegaudio"
2136 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2137 mpc8_decoder_select="mpegaudiodsp"
2138 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2139 mpeg1video_encoder_select="aandcttables mpegvideoenc"
2140 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2141 mpeg2video_encoder_select="aandcttables mpegvideoenc"
2142 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2143 mpeg4_encoder_select="h263_encoder"
2144 msa1_decoder_select="mss34dsp"
2145 msmpeg4v1_decoder_select="h263_decoder"
2146 msmpeg4v2_decoder_select="h263_decoder"
2147 msmpeg4v2_encoder_select="h263_encoder"
2148 msmpeg4v3_decoder_select="h263_decoder"
2149 msmpeg4v3_encoder_select="h263_encoder"
2150 mss2_decoder_select="error_resilience mpeg_er mpegvideo qpeldsp vc1_decoder"
2151 mts2_decoder_select="mss34dsp"
2152 mxpeg_decoder_select="mjpeg_decoder"
2153 nellymoser_decoder_select="mdct sinewin"
2154 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2155 nuv_decoder_select="idctdsp lzo"
2156 on2avc_decoder_select="mdct"
2157 opus_decoder_deps="avresample"
2158 opus_decoder_select="imdct15"
2159 png_decoder_deps="zlib"
2160 png_encoder_deps="zlib"
2161 png_encoder_select="huffyuvencdsp"
2162 prores_decoder_select="idctdsp"
2163 prores_encoder_select="fdctdsp"
2164 qcelp_decoder_select="lsp"
2165 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2166 ra_144_encoder_select="audio_frame_queue lpc"
2167 ralf_decoder_select="golomb"
2168 rscc_decoder_deps="zlib"
2169 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2170 rv10_encoder_select="h263_encoder"
2171 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2172 rv20_encoder_select="h263_encoder"
2173 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2174 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2175 screenpresso_decoder_deps="zlib"
2176 sipr_decoder_select="lsp"
2177 sp5x_decoder_select="mjpeg_decoder"
2178 svq1_decoder_select="hpeldsp"
2179 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2180 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2181 svq3_decoder_suggest="zlib"
2182 tak_decoder_select="audiodsp"
2183 tdsc_decoder_deps="zlib"
2184 tdsc_decoder_select="mjpeg_decoder"
2185 theora_decoder_select="vp3_decoder"
2186 thp_decoder_select="mjpeg_decoder"
2187 tiff_decoder_suggest="zlib"
2188 tiff_encoder_suggest="zlib"
2189 truehd_decoder_select="mlp_decoder"
2190 truemotion2_decoder_select="bswapdsp"
2191 truespeech_decoder_select="bswapdsp"
2192 tscc_decoder_deps="zlib"
2193 txd_decoder_select="texturedsp"
2194 twinvq_decoder_select="mdct lsp sinewin"
2195 utvideo_decoder_select="bswapdsp huffyuvdsp"
2196 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2197 vble_decoder_select="huffyuvdsp"
2198 vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2199 vc1image_decoder_select="vc1_decoder"
2200 vorbis_decoder_select="mdct"
2201 vorbis_encoder_select="mdct"
2202 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2203 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2204 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2205 vp6a_decoder_select="vp6_decoder"
2206 vp6f_decoder_select="vp6_decoder"
2207 vp7_decoder_select="h264pred videodsp vp8dsp"
2208 vp8_decoder_select="h264pred videodsp vp8dsp"
2209 vp9_decoder_select="videodsp vp9_superframe_split_bsf"
2210 webp_decoder_select="vp8_decoder"
2211 wmapro_decoder_select="mdct sinewin wma_freqs"
2212 wmav1_decoder_select="mdct sinewin wma_freqs"
2213 wmav1_encoder_select="mdct sinewin wma_freqs"
2214 wmav2_decoder_select="mdct sinewin wma_freqs"
2215 wmav2_encoder_select="mdct sinewin wma_freqs"
2216 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2217 wmv1_decoder_select="h263_decoder"
2218 wmv1_encoder_select="h263_encoder"
2219 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2220 wmv2_encoder_select="h263_encoder wmv2dsp"
2221 wmv3_decoder_select="vc1_decoder"
2222 wmv3image_decoder_select="wmv3_decoder"
2223 zerocodec_decoder_deps="zlib"
2224 zlib_decoder_deps="zlib"
2225 zlib_encoder_deps="zlib"
2226 zmbv_decoder_deps="zlib"
2227 zmbv_encoder_deps="zlib"
2228
2229 # hardware accelerators
2230 d3d11va_deps="dxva_h ID3D11VideoDecoder"
2231 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32"
2232 vda_deps="VideoDecodeAcceleration_VDADecoder_h blocks_extension pthreads"
2233 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2234
2235 h263_vaapi_hwaccel_deps="vaapi"
2236 h263_vaapi_hwaccel_select="h263_decoder"
2237 h264_cuvid_hwaccel_deps="cuvid CUVIDH264PICPARAMS"
2238 h264_cuvid_hwaccel_select="h264_decoder"
2239 h264_d3d11va_hwaccel_deps="d3d11va"
2240 h264_d3d11va_hwaccel_select="h264_decoder"
2241 h264_d3d11va2_hwaccel_deps="d3d11va"
2242 h264_d3d11va2_hwaccel_select="h264_decoder"
2243 h264_dxva2_hwaccel_deps="dxva2"
2244 h264_dxva2_hwaccel_select="h264_decoder"
2245 h264_vaapi_hwaccel_deps="vaapi"
2246 h264_vaapi_hwaccel_select="h264_decoder"
2247 h264_vda_hwaccel_deps="vda"
2248 h264_vda_hwaccel_select="h264_decoder"
2249 h264_vda_old_hwaccel_deps="vda"
2250 h264_vda_old_hwaccel_select="h264_decoder"
2251 h264_vdpau_hwaccel_deps="vdpau"
2252 h264_vdpau_hwaccel_select="h264_decoder"
2253 hevc_cuvid_hwaccel_deps="cuvid CUVIDHEVCPICPARAMS"
2254 hevc_cuvid_hwaccel_select="hevc_decoder"
2255 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2256 hevc_d3d11va_hwaccel_select="hevc_decoder"
2257 hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2258 hevc_d3d11va2_hwaccel_select="hevc_decoder"
2259 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2260 hevc_dxva2_hwaccel_select="hevc_decoder"
2261 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2262 hevc_vaapi_hwaccel_select="hevc_decoder"
2263 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2264 hevc_vdpau_hwaccel_select="hevc_decoder"
2265 mpeg1_vdpau_hwaccel_deps="vdpau"
2266 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2267 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2268 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2269 mpeg2_d3d11va2_hwaccel_deps="d3d11va"
2270 mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
2271 mpeg2_dxva2_hwaccel_deps="dxva2"
2272 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2273 mpeg2_vaapi_hwaccel_deps="vaapi"
2274 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2275 mpeg2_vdpau_hwaccel_deps="vdpau"
2276 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2277 mpeg4_vaapi_hwaccel_deps="vaapi"
2278 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2279 mpeg4_vdpau_hwaccel_deps="vdpau"
2280 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2281 vc1_d3d11va_hwaccel_deps="d3d11va"
2282 vc1_d3d11va_hwaccel_select="vc1_decoder"
2283 vc1_d3d11va2_hwaccel_deps="d3d11va"
2284 vc1_d3d11va2_hwaccel_select="vc1_decoder"
2285 vc1_dxva2_hwaccel_deps="dxva2"
2286 vc1_dxva2_hwaccel_select="vc1_decoder"
2287 vc1_vaapi_hwaccel_deps="vaapi"
2288 vc1_vaapi_hwaccel_select="vc1_decoder"
2289 vc1_vdpau_hwaccel_deps="vdpau"
2290 vc1_vdpau_hwaccel_select="vc1_decoder"
2291 vp8_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferVP8"
2292 vp8_vaapi_hwaccel_select="vp8_decoder"
2293 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2294 wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
2295 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2296 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2297 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2298
2299 # hardware-accelerated codecs
2300 amf_deps_any="libdl LoadLibrary"
2301 nvenc_deps_any="libdl LoadLibrary"
2302 omx_deps="libdl pthreads"
2303 omx_rpi_select="omx"
2304 qsv_deps="libmfx"
2305 qsvdec_select="qsv"
2306 qsvenc_select="qsv"
2307 qsvvpp_select="qsv"
2308 vaapi_encode_deps="vaapi"
2309
2310 hwupload_cuda_filter_deps="cuda"
2311 scale_npp_filter_deps="cuda libnpp"
2312
2313 h264_amf_encoder_deps="amf"
2314 h264_mmal_decoder_deps="mmal"
2315 h264_nvenc_encoder_deps="nvenc"
2316 h264_omx_encoder_deps="omx"
2317 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec"
2318 h264_qsv_encoder_select="qsvenc"
2319 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2320 h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
2321 hevc_amf_encoder_deps="amf"
2322 hevc_nvenc_encoder_deps="nvenc"
2323 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec"
2324 hevc_qsv_encoder_select="hevcparse qsvenc"
2325 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2326 hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
2327 mjpeg_qsv_encoder_deps="libmfx"
2328 mjpeg_qsv_encoder_select="qsvenc"
2329 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2330 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2331 mpeg2_mmal_decoder_deps="mmal"
2332 mpeg2_qsv_decoder_select="qsvdec mpegvideo_parser"
2333 mpeg2_qsv_encoder_select="qsvenc"
2334 mpeg2_vaapi_encoder_deps="VAEncPictureParameterBufferMPEG2"
2335 mpeg2_vaapi_encoder_select="cbs_mpeg2 vaapi_encode"
2336 mpeg4_omx_encoder_deps="omx"
2337 vc1_mmal_decoder_deps="mmal"
2338 vc1_qsv_decoder_select="qsvdec vc1_parser"
2339 vp8_qsv_decoder_select="qsvdec vp8_parser"
2340 vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
2341 vp8_vaapi_encoder_select="vaapi_encode"
2342 vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
2343 vp9_vaapi_encoder_select="vaapi_encode"
2344
2345 nvenc_h264_encoder_select="h264_nvenc_encoder"
2346 nvenc_hevc_encoder_select="hevc_nvenc_encoder"
2347
2348 # parsers
2349 aac_parser_select="adts_header"
2350 h264_parser_select="golomb h264dsp h264parse"
2351 hevc_parser_select="hevcparse"
2352 mpegaudio_parser_select="mpegaudioheader"
2353 mpegvideo_parser_select="mpegvideo"
2354 mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2355 vc1_parser_select="vc1dsp"
2356
2357 # bitstream_filters
2358 aac_adtstoasc_bsf_select="adts_header"
2359 h264_metadata_bsf_select="cbs_h264"
2360 h264_redundant_pps_bsf_select="cbs_h264"
2361 hevc_metadata_bsf_select="cbs_h265"
2362 mjpeg2jpeg_bsf_select="jpegtables"
2363 mpeg2_metadata_bsf_select="cbs_mpeg2"
2364 trace_headers_bsf_select="cbs_h264 cbs_h265 cbs_mpeg2"
2365
2366 # external libraries
2367 avisynth_deps="LoadLibrary"
2368 avxsynth_deps="libdl"
2369 avisynth_demuxer_deps_any="avisynth avxsynth"
2370 avisynth_demuxer_select="riffdec"
2371 libaom_av1_decoder_deps="libaom"
2372 libaom_av1_encoder_deps="libaom"
2373 libdcadec_decoder_deps="libdcadec"
2374 libfaac_encoder_deps="libfaac"
2375 libfaac_encoder_select="audio_frame_queue"
2376 libfdk_aac_decoder_deps="libfdk_aac"
2377 libfdk_aac_encoder_deps="libfdk_aac"
2378 libfdk_aac_encoder_select="audio_frame_queue"
2379 libgsm_decoder_deps="libgsm"
2380 libgsm_encoder_deps="libgsm"
2381 libgsm_ms_decoder_deps="libgsm"
2382 libgsm_ms_encoder_deps="libgsm"
2383 libilbc_decoder_deps="libilbc"
2384 libilbc_encoder_deps="libilbc"
2385 libkvazaar_encoder_deps="libkvazaar"
2386 libmp3lame_encoder_deps="libmp3lame"
2387 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
2388 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2389 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2390 libopencore_amrnb_encoder_select="audio_frame_queue"
2391 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2392 libopenh264_decoder_deps="libopenh264"
2393 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2394 libopenh264_encoder_deps="libopenh264"
2395 libopenjpeg_decoder_deps="libopenjpeg"
2396 libopenjpeg_encoder_deps="libopenjpeg"
2397 libopus_decoder_deps="libopus"
2398 libopus_encoder_deps="libopus"
2399 libopus_encoder_select="audio_frame_queue"
2400 libschroedinger_decoder_deps="libschroedinger"
2401 libschroedinger_encoder_deps="libschroedinger"
2402 libspeex_decoder_deps="libspeex"
2403 libspeex_encoder_deps="libspeex"
2404 libspeex_encoder_select="audio_frame_queue"
2405 libtheora_encoder_deps="libtheora"
2406 libtwolame_encoder_deps="libtwolame"
2407 libvo_aacenc_encoder_deps="libvo_aacenc"
2408 libvo_aacenc_encoder_select="audio_frame_queue"
2409 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2410 libvorbis_encoder_deps="libvorbis"
2411 libvorbis_encoder_select="audio_frame_queue"
2412 libvpx_vp8_decoder_deps="libvpx"
2413 libvpx_vp8_encoder_deps="libvpx"
2414 libvpx_vp9_decoder_deps="libvpx"
2415 libvpx_vp9_encoder_deps="libvpx"
2416 libwavpack_encoder_deps="libwavpack"
2417 libwavpack_encoder_select="audio_frame_queue"
2418 libwebp_encoder_deps="libwebp"
2419 libx262_encoder_deps="libx262"
2420 libx264_encoder_deps="libx264"
2421 libx265_encoder_deps="libx265"
2422 libxavs_encoder_deps="libxavs"
2423 libxvid_encoder_deps="libxvid mkstemp"
2424
2425 # demuxers / muxers
2426 ac3_demuxer_select="ac3_parser"
2427 asf_demuxer_select="riffdec"
2428 asf_muxer_select="riffenc"
2429 asf_stream_muxer_select="asf_muxer"
2430 avi_demuxer_select="iso_media riffdec"
2431 avi_muxer_select="riffenc"
2432 caf_demuxer_select="iso_media riffdec"
2433 dash_muxer_select="mp4_muxer"
2434 dirac_demuxer_select="dirac_parser"
2435 dv_demuxer_select="dvprofile"
2436 dv_muxer_select="dvprofile"
2437 dxa_demuxer_select="riffdec"
2438 eac3_demuxer_select="ac3_parser"
2439 f4v_muxer_select="mov_muxer"
2440 flac_demuxer_select="flac_parser"
2441 hds_muxer_select="flv_muxer"
2442 hls_muxer_select="mpegts_muxer"
2443 ipod_muxer_select="mov_muxer"
2444 ismv_muxer_select="mov_muxer"
2445 matroska_audio_muxer_select="matroska_muxer"
2446 matroska_demuxer_select="iso_media riffdec"
2447 matroska_demuxer_suggest="bzlib lzo zlib"
2448 matroska_muxer_select="iso_media riffenc"
2449 mmf_muxer_select="riffenc"
2450 mov_demuxer_select="iso_media riffdec"
2451 mov_demuxer_suggest="zlib"
2452 mov_muxer_select="iso_media riffenc rtpenc_chain"
2453 mp3_demuxer_select="mpegaudio_parser"
2454 mp3_muxer_select="mpegaudioheader"
2455 mp4_muxer_select="mov_muxer"
2456 mpegts_demuxer_select="iso_media"
2457 mpegts_muxer_select="adts_muxer latm_muxer"
2458 mpegtsraw_demuxer_select="mpegts_demuxer"
2459 mxf_d10_muxer_select="mxf_muxer"
2460 nut_muxer_select="riffenc"
2461 nuv_demuxer_select="riffdec"
2462 oga_muxer_select="ogg_muxer"
2463 ogg_demuxer_select="dirac_parse"
2464 opus_muxer_select="ogg_muxer"
2465 psp_muxer_select="mov_muxer"
2466 rtp_demuxer_select="sdp_demuxer"
2467 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2468 rtsp_demuxer_select="http_protocol rtpdec"
2469 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2470 sap_demuxer_select="sdp_demuxer"
2471 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2472 sdp_demuxer_select="rtpdec"
2473 smoothstreaming_muxer_select="ismv_muxer"
2474 spdif_demuxer_select="adts_header"
2475 spdif_muxer_select="adts_header"
2476 spx_muxer_select="ogg_muxer"
2477 swf_demuxer_suggest="zlib"
2478 tak_demuxer_select="tak_parser"
2479 tg2_muxer_select="mov_muxer"
2480 tgp_muxer_select="mov_muxer"
2481 w64_demuxer_select="wav_demuxer"
2482 wav_demuxer_select="riffdec"
2483 wav_muxer_select="riffenc"
2484 webm_muxer_select="iso_media riffenc"
2485 wtv_demuxer_select="mpegts_demuxer riffdec"
2486 xmv_demuxer_select="riffdec"
2487 xwma_demuxer_select="riffdec"
2488
2489 # indevs
2490 alsa_indev_deps="alsa"
2491 avfoundation_indev_deps="AVFoundation_AVFoundation_h objc_arc pthreads"
2492 avfoundation_indev_extralibs="-framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia"
2493 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2494 fbdev_indev_deps="linux_fb_h"
2495 jack_indev_deps="libjack"
2496 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2497 libcdio_indev_deps="libcdio"
2498 libdc1394_indev_deps="libdc1394"
2499 oss_indev_deps_any="sys_soundcard_h"
2500 pulse_indev_deps="libpulse"
2501 sndio_indev_deps="sndio"
2502 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2503 vfwcap_indev_deps="vfw32 vfwcap_defines"
2504 xcbgrab_indev_deps="libxcb libxcb_shape"
2505 xcbgrab_indev_suggest="libxcb_shm libxcb_xfixes"
2506
2507 # protocols
2508 ffrtmpcrypt_protocol_conflict="librtmp_protocol"
2509 ffrtmpcrypt_protocol_deps_any="gmp openssl"
2510 ffrtmpcrypt_protocol_select="tcp_protocol"
2511 ffrtmphttp_protocol_conflict="librtmp_protocol"
2512 ffrtmphttp_protocol_select="http_protocol"
2513 gopher_protocol_select="network"
2514 http_protocol_select="tcp_protocol"
2515 http_protocol_suggest="zlib"
2516 httpproxy_protocol_select="tcp_protocol"
2517 httpproxy_protocol_suggest="zlib"
2518 https_protocol_select="tls_protocol"
2519 https_protocol_suggest="zlib"
2520 icecast_protocol_select="http_protocol"
2521 librtmp_protocol_deps="librtmp"
2522 librtmpe_protocol_deps="librtmp"
2523 librtmps_protocol_deps="librtmp"
2524 librtmpt_protocol_deps="librtmp"
2525 librtmpte_protocol_deps="librtmp"
2526 mmsh_protocol_select="http_protocol"
2527 mmst_protocol_select="network"
2528 rtmp_protocol_conflict="librtmp_protocol"
2529 rtmp_protocol_select="tcp_protocol"
2530 rtmp_protocol_suggest="zlib"
2531 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2532 rtmpe_protocol_suggest="zlib"
2533 rtmps_protocol_conflict="librtmp_protocol"
2534 rtmps_protocol_select="tls_protocol"
2535 rtmps_protocol_suggest="zlib"
2536 rtmpt_protocol_select="ffrtmphttp_protocol"
2537 rtmpt_protocol_suggest="zlib"
2538 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2539 rtmpte_protocol_suggest="zlib"
2540 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2541 rtmpts_protocol_suggest="zlib"
2542 rtp_protocol_select="udp_protocol"
2543 sctp_protocol_deps="struct_sctp_event_subscribe"
2544 sctp_protocol_select="network"
2545 srtp_protocol_select="rtp_protocol srtp"
2546 tcp_protocol_select="network"
2547 tls_protocol_deps_any="gnutls openssl"
2548 tls_protocol_select="tcp_protocol"
2549 udp_protocol_select="network"
2550 unix_protocol_deps="sys_un_h"
2551 unix_protocol_select="network"
2552
2553 # filters
2554 asyncts_filter_deps="avresample"
2555 blackframe_filter_deps="gpl"
2556 boxblur_filter_deps="gpl"
2557 bs2b_filter_deps="libbs2b"
2558 cropdetect_filter_deps="gpl"
2559 deinterlace_qsv_filter_deps="libmfx"
2560 deinterlace_vaapi_filter_deps="vaapi"
2561 delogo_filter_deps="gpl"
2562 drawtext_filter_deps="libfreetype"
2563 drawtext_filter_suggest="libfontconfig"
2564 frei0r_filter_deps="frei0r libdl"
2565 frei0r_src_filter_deps="frei0r libdl"
2566 hdcd_filter_deps="libhdcd"
2567 hqdn3d_filter_deps="gpl"
2568 interlace_filter_deps="gpl"
2569 movie_filter_deps="avcodec avformat"
2570 ocv_filter_deps="libopencv"
2571 overlay_qsv_filter_deps="libmfx"
2572 overlay_qsv_filter_select="qsvvpp"
2573 resample_filter_deps="avresample"
2574 scale_filter_deps="swscale"
2575 scale_qsv_filter_deps="libmfx"
2576 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2577 vpp_qsv_filter_deps="libmfx"
2578 vpp_qsv_filter_select="qsvvpp"
2579
2580 # examples
2581 decode_audio_example_deps="avcodec avutil"
2582 decode_video_example_deps="avcodec avutil"
2583 encode_audio_example_deps="avcodec avutil"
2584 encode_video_example_deps="avcodec avutil"
2585 filter_audio_example_deps="avfilter avutil"
2586 metadata_example_deps="avformat avutil"
2587 output_example_deps="avcodec avformat avresample avutil swscale"
2588 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
2589 transcode_aac_example_deps="avcodec avformat avresample"
2590
2591 # EXTRALIBS_LIST
2592 cpu_init_extralibs="pthreads_extralibs"
2593 cws2fws_extralibs="zlib_extralibs"
2594
2595 # libraries, in linking order
2596 avcodec_deps="avutil"
2597 avcodec_select="null_bsf"
2598 avdevice_deps="avformat avcodec avutil"
2599 avfilter_deps="avutil"
2600 avformat_deps="avcodec avutil"
2601 avformat_suggest="network"
2602 avresample_deps="avutil"
2603 swscale_deps="avutil"
2604
2605 avcodec_extralibs="pthreads_extralibs libm_extralibs"
2606 avdevice_extralibs="libm_extralibs"
2607 avformat_extralibs="libm_extralibs"
2608 avfilter_extralibs="pthreads_extralibs libm_extralibs"
2609 avresample_extralibs="libm_extralibs"
2610 avutil_extralibs="clock_gettime_extralibs cuda_extralibs cuvid_extralibs d3d11va_extralibs libm_extralibs libmfx_extralibs nanosleep_extralibs pthreads_extralibs user32_extralibs vaapi_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vdpau_x11_extralibs wincrypt_extralibs"
2611 swscale_extralibs="libm_extralibs"
2612
2613 # programs
2614 avconv_deps="avcodec avfilter avformat avresample swscale"
2615 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2616 fps_filter null_filter resample_filter scale_filter
2617 trim_filter"
2618 avconv_suggest="psapi shell32"
2619 avplay_deps="avcodec avfilter avformat avresample sdl"
2620 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2621 avplay_suggest="shell32"
2622 avprobe_deps="avcodec avformat"
2623 avprobe_suggest="shell32"
2624
2625 # documentation
2626 pod2man_deps="doc"
2627 texi2html_deps="doc"
2628
2629 # default parameters
2630
2631 logfile="avbuild/config.log"
2632
2633 # installation paths
2634 prefix_default="/usr/local"
2635 bindir_default='${prefix}/bin'
2636 datadir_default='${prefix}/share/avconv'
2637 docdir_default='${prefix}/share/doc/libav'
2638 incdir_default='${prefix}/include'
2639 libdir_default='${prefix}/lib'
2640 mandir_default='${prefix}/share/man'
2641 shlibdir_default="$libdir_default"
2642
2643 # toolchain
2644 ar_default="ar"
2645 cc_default="gcc"
2646 host_cc_default="gcc"
2647 x86asmexe_default="nasm"
2648 ln_s="ln -s -f"
2649 nm_default="nm -g"
2650 pkg_config_default=pkg-config
2651 ranlib="ranlib"
2652 strip="strip"
2653 version_script='--version-script'
2654 objformat="elf32"
2655
2656 # machine
2657 arch_default=$(uname -m)
2658 cpu="generic"
2659 intrinsics="none"
2660
2661 # OS
2662 target_os_default=$(tolower $(uname -s))
2663 host_os=$target_os_default
2664
2665 # configurable options
2666 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2667
2668 enable asm
2669 enable debug
2670 enable doc
2671 enable faan faandct faanidct
2672 enable optimizations
2673 enable safe_bitstream_reader
2674 enable static
2675 enable swscale_alpha
2676 enable valgrind_backtrace
2677
2678 # By default, enable only those hwaccels that have no external dependencies.
2679 enable d3d11va dxva2 vda vdpau
2680
2681 # internal components are enabled by default
2682 enable $EXTRALIBS_LIST
2683
2684 # Avoid external, non-system, libraries getting enabled by dependency resolution
2685 disable $EXTERNAL_LIBRARY_LIST
2686
2687 # build settings
2688 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2689 LIBPREF="lib"
2690 LIBSUF=".a"
2691 LIBNAME='$(LIBPREF)$(NAME)$(LIBSUF)'
2692 SLIBPREF="lib"
2693 SLIBSUF=".so"
2694 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
2695 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2696 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2697 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2698 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2699 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2700 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2701
2702 asflags_filter=echo
2703 cflags_filter=echo
2704 ldflags_filter=echo
2705
2706 AS_C='-c'
2707 AS_O='-o $@'
2708 CC_C='-c'
2709 CC_E='-E -o $@'
2710 CC_O='-o $@'
2711 OBJCC_C='-c'
2712 OBJCC_E='-E -o $@'
2713 OBJCC_O='-o $@'
2714 X86ASM_O='-o $@'
2715 LD_O='-o $@'
2716 LD_LIB='-l%'
2717 LD_PATH='-L'
2718 HOSTCC_C='-c'
2719 HOSTCC_E='-E -o $@'
2720 HOSTCC_O='-o $@'
2721 HOSTLD_O='-o $@'
2722
2723 host_extralibs='-lm'
2724 host_cflags_filter=echo
2725 host_ldflags_filter=echo
2726
2727 target_path='$(CURDIR)'
2728
2729 # since the object filename is not given with the -MM flag, the compiler
2730 # is only able to print the basename, and we must add the path ourselves
2731 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2732 DEPFLAGS='-MM'
2733
2734 mkdir -p avbuild
2735
2736 # find source path
2737 if test -f configure; then
2738 source_path=.
2739 else
2740 source_path=$(cd $(dirname "$0"); pwd)
2741 echo "$source_path" | grep -q '[[:blank:]]' &&
2742 die "Out of tree builds are impossible with whitespace in source path."
2743 test -e "$source_path/config.h" &&
2744 die "Out of tree builds are impossible with config.h in source dir."
2745 fi
2746
2747 for v in "$@"; do
2748 r=${v#*=}
2749 l=${v%"$r"}
2750 r=$(sh_quote "$r")
2751 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2752 done
2753
2754 find_things(){
2755 thing=$1
2756 pattern=$2
2757 file=$source_path/$3
2758 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2759 }
2760
2761 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2762 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2763 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2764 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2765 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2766 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2767 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2768
2769 find_things_extern(){
2770 thing=$1
2771 pattern=$2
2772 file=$source_path/$3
2773 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2774 }
2775
2776 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2777 HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel libavcodec/hwaccels.h)
2778 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2779
2780 AVCODEC_COMPONENTS_LIST="
2781 $BSF_LIST
2782 $DECODER_LIST
2783 $ENCODER_LIST
2784 $HWACCEL_LIST
2785 $PARSER_LIST
2786 "
2787
2788 AVDEVICE_COMPONENTS_LIST="
2789 $INDEV_LIST
2790 "
2791
2792 AVFILTER_COMPONENTS_LIST="
2793 $FILTER_LIST
2794 "
2795
2796 AVFORMAT_COMPONENTS_LIST="
2797 $DEMUXER_LIST
2798 $MUXER_LIST
2799 $PROTOCOL_LIST
2800 "
2801
2802 ALL_COMPONENTS="
2803 $AVCODEC_COMPONENTS_LIST
2804 $AVDEVICE_COMPONENTS_LIST
2805 $AVFILTER_COMPONENTS_LIST
2806 $AVFORMAT_COMPONENTS_LIST
2807 "
2808
2809 for n in $COMPONENT_LIST; do
2810 v=$(toupper ${n%s})_LIST
2811 eval enable \$$v
2812 eval ${n}_if_any="\$$v"
2813 done
2814
2815 enable $ARCH_EXT_LIST
2816
2817 die_unknown(){
2818 echo "Unknown option \"$1\"."
2819 echo "See $0 --help for available options."
2820 exit 1
2821 }
2822
2823 print_3_columns() {
2824 printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2825 }
2826
2827 show_list() {
2828 suffix=_$1
2829 shift
2830 echo $* | sed s/$suffix//g | print_3_columns
2831 exit 0
2832 }
2833
2834 for opt do
2835 optval="${opt#*=}"
2836 case "$opt" in
2837 --extra-ldflags=*)
2838 add_ldflags $optval
2839 ;;
2840 --extra-ldexeflags=*)
2841 add_ldexeflags $optval
2842 ;;
2843 --extra-ldsoflags=*)
2844 add_ldsoflags $optval
2845 ;;
2846 --extra-libs=*)
2847 add_extralibs $optval
2848 ;;
2849 --disable-devices)
2850 disable $INDEV_LIST
2851 ;;
2852 --enable-debug=*)
2853 debuglevel="$optval"
2854 ;;
2855 --disable-programs)
2856 disable $PROGRAM_LIST
2857 ;;
2858 --disable-everything)
2859 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2860 ;;
2861 --disable-all)
2862 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2863 disable $LIBRARY_LIST $PROGRAM_LIST doc
2864 ;;
2865 --enable-*=*|--disable-*=*)
2866 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2867 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2868 eval list=\$$(toupper $thing)_LIST
2869 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2870 $action $(filter "$name" $list)
2871 ;;
2872 --enable-yasm|--disable-yasm)
2873 warn "The ${opt} option is only provided for compatibility and will be\n"\
2874 "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
2875 test $opt = --enable-yasm && x86asm=yes || x86asm=no
2876 ;;
2877 --enable-?*|--disable-?*)
2878 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2879 if is_in $option $COMPONENT_LIST; then
2880 test $action = disable && action=unset
2881 eval $action \$$(toupper ${option%s})_LIST
2882 elif is_in $option $CMDLINE_SELECT; then
2883 $action $option
2884 else
2885 die_unknown $opt
2886 fi
2887 ;;
2888 --list-*)
2889 NAME="${opt#--list-}"
2890 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2891 NAME=${NAME%s}
2892 eval show_list $NAME \$$(toupper $NAME)_LIST
2893 ;;
2894 --help|-h) show_help
2895 ;;
2896 --quiet|-q) quiet=yes
2897 ;;
2898 *)
2899 optname="${opt%%=*}"
2900 optname="${optname#--}"
2901 optname=$(echo "$optname" | sed 's/-/_/g')
2902 if is_in $optname $CMDLINE_SET; then
2903 eval $optname='$optval'
2904 elif is_in $optname $CMDLINE_APPEND; then
2905 append $optname "$optval"
2906 else
2907 die_unknown $opt
2908 fi
2909 ;;
2910 esac
2911 done
2912
2913 for e in $env; do
2914 eval "export $e"
2915 done
2916
2917 disabled logging && logfile=/dev/null
2918
2919 # command line configuration sanity checks
2920
2921 # we need to build at least one lib type
2922 if ! enabled_any static shared; then
2923 cat <<EOF
2924 At least one library type must be built.
2925 Specify --enable-static to build the static libraries or --enable-shared to
2926 build the shared libraries as well. To only build the shared libraries specify
2927 --disable-static in addition to --enable-shared.
2928 EOF
2929 exit 1
2930 fi
2931
2932 # Die early if licensing-related configure options are incompatible.
2933 die_license_disabled() {
2934 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
2935 }
2936
2937 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST
2938 map "die_license_disabled nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST $HWACCEL_LIBRARY_NONFREE_LIST
2939 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST
2940
2941 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2942
2943 if enabled nonfree; then
2944 license="nonfree and unredistributable"
2945 elif enabled gplv3; then
2946 license="GPL version 3 or later"
2947 elif enabled lgplv3; then
2948 license="LGPL version 3 or later"
2949 elif enabled gpl; then
2950 license="GPL version 2 or later"
2951 else
2952 license="LGPL version 2.1 or later"
2953 fi
2954
2955 enabled_all gnutls openssl &&
2956 die "GnuTLS and OpenSSL must not be enabled at the same time."
2957
2958 # Disable all the library-specific components if the library itself
2959 # is disabled, see AVCODEC_LIST and following _LIST variables.
2960
2961 disable_components(){
2962 disabled ${1} && disable $(
2963 eval components="\$$(toupper ${1})_COMPONENTS"
2964 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2965 )
2966 }
2967
2968 map 'disable_components $v' $LIBRARY_LIST
2969
2970 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2971 set >> $logfile
2972
2973 case "$toolchain" in
2974 *-asan)
2975 cc_default="${toolchain%-asan}"
2976 add_cflags -fsanitize=address
2977 add_ldflags -fsanitize=address
2978 ;;
2979 *-msan)
2980 cc_default="${toolchain%-msan}"
2981 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
2982 add_ldflags -fsanitize=memory
2983 ;;
2984 *-tsan)
2985 cc_default="${toolchain%-tsan}"
2986 add_cflags -fsanitize=thread -fPIE
2987 add_ldflags -fsanitize=thread -pie
2988 case "$toolchain" in
2989 gcc-tsan)
2990 add_cflags -fPIC
2991 add_ldflags -fPIC
2992 ;;
2993 esac
2994 ;;
2995 *-usan)
2996 cc_default="${toolchain%-usan}"
2997 add_cflags -fsanitize=undefined
2998 add_ldflags -fsanitize=undefined
2999 case "$toolchain" in
3000 clang-usan)
3001 add_cflags -O1
3002 ;;
3003 esac
3004 ;;
3005 valgrind-*)
3006 target_exec_default="valgrind"
3007 case "$toolchain" in
3008 valgrind-massif)
3009 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
3010 ;;
3011 valgrind-memcheck)
3012 target_exec_args="--track-origins=yes --leak-check=full"
3013 ;;
3014 esac
3015 ;;
3016 msvc)
3017 # Check whether the current MSVC version needs the C99 converter.
3018 # From MSVC 2013 (compiler major version 18) onwards, it does actually
3019 # support enough of C99 to build libav. Default to the new
3020 # behaviour if the regexp was unable to match anything, since this
3021 # successfully parses the version number of existing supported
3022 # versions that require the converter (MSVC 2010 and 2012).
3023 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3024 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3025 cc_default="cl"
3026 else
3027 cc_default="c99wrap cl"
3028 fi
3029 ld_default="$source_path/compat/windows/mslink"
3030 nm_default="dumpbin -symbols"
3031 ar_default="lib"
3032 case "$arch" in
3033 aarch64|arm64)
3034 as_default="armasm64"
3035 ;;
3036 arm*)
3037 as_default="armasm"
3038 ;;
3039 esac
3040 target_os_default="win32"
3041 # Use a relative path for TMPDIR. This makes sure all the
3042 # ffconf temp files are written with a relative path, avoiding
3043 # issues with msys/win32 path conversion for MSVC parameters
3044 # such as -Fo<file> or -out:<file>.
3045 TMPDIR=.
3046 ;;
3047 icl)
3048 cc_default="icl"
3049 ld_default="xilink"
3050 nm_default="dumpbin -symbols"
3051 ar_default="xilib"
3052 target_os_default="win32"
3053 TMPDIR=.
3054 ;;
3055 gcov)
3056 add_cflags -fprofile-arcs -ftest-coverage
3057 add_ldflags -fprofile-arcs -ftest-coverage
3058 ;;
3059 llvm-cov)
3060 add_cflags -fprofile-arcs -ftest-coverage
3061 add_ldflags --coverage
3062 ;;
3063 hardened)
3064 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3065 add_cflags -fno-strict-overflow -fstack-protector-all
3066 add_ldflags -Wl,-z,relro -Wl,-z,now
3067 ;;
3068 ?*)
3069 die "Unknown toolchain $toolchain"
3070 ;;
3071 esac
3072
3073 if test -n "$cross_prefix"; then
3074 test -n "$arch" && test -n "$target_os" ||
3075 die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
3076 enable cross_compile
3077 fi
3078
3079 ar_default="${cross_prefix}${ar_default}"
3080 cc_default="${cross_prefix}${cc_default}"
3081 objcc_default="${cross_prefix}${objcc_default}"
3082 x86asmexe_default="${cross_prefix}${x86asmexe_default}"
3083 nm_default="${cross_prefix}${nm_default}"
3084 pkg_config_default="${cross_prefix}${pkg_config_default}"
3085 ranlib="${cross_prefix}${ranlib}"
3086 strip="${cross_prefix}${strip}"
3087
3088 sysinclude_default="${sysroot}/usr/include"
3089
3090 set_default arch cc pkg_config sysinclude target_exec target_os x86asmexe
3091 enabled cross_compile || host_cc_default=$cc
3092 set_default host_cc
3093
3094 if ! $pkg_config --version >/dev/null 2>&1; then
3095 warn "$pkg_config not found, library detection may fail."
3096 pkg_config=false
3097 fi
3098
3099 exesuf() {
3100 case $1 in
3101 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3102 esac
3103 }
3104
3105 EXESUF=$(exesuf $target_os)
3106 HOSTEXESUF=$(exesuf $host_os)
3107
3108 # set temporary file name
3109 : ${TMPDIR:=$TEMPDIR}
3110 : ${TMPDIR:=$TMP}
3111 : ${TMPDIR:=/tmp}
3112
3113 if ! test_cmd mktemp -u XXXXXX; then
3114 # simple replacement for missing mktemp
3115 # NOT SAFE FOR GENERAL USE
3116 mktemp(){
3117 tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3118 echo "$tmpname"
3119 mkdir "$tmpname"
3120 }
3121 fi
3122
3123 AVTMPDIR=$(mktemp -d "${TMPDIR}/avconf.XXXXXXXX" 2> /dev/null) ||
3124 die "Unable to create temporary directory in $TMPDIR."
3125
3126 tmpfile(){
3127 tmp="${AVTMPDIR}/test"$2
3128 (set -C; exec > $tmp) 2> /dev/null ||
3129 die "Unable to create temporary file in $AVTMPDIR."
3130 eval $1=$tmp
3131 }
3132
3133 trap 'rm -rf -- "$AVTMPDIR"' EXIT
3134 trap 'exit 2' INT
3135
3136 tmpfile TMPASM .asm
3137 tmpfile TMPC .c
3138 tmpfile TMPE $EXESUF
3139 tmpfile TMPH .h
3140 tmpfile TMPO .o
3141 tmpfile TMPS .S
3142 tmpfile TMPSH .sh
3143 tmpfile TMPV .ver
3144
3145 unset -f mktemp
3146
3147 chmod +x $TMPE
3148
3149 # make sure we can execute files in $TMPDIR
3150 cat > $TMPSH 2>> $logfile <<EOF
3151 #! /bin/sh
3152 EOF
3153 chmod +x $TMPSH >> $logfile 2>&1
3154 if ! $TMPSH >> $logfile 2>&1; then
3155 cat <<EOF
3156 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
3157 variable to another directory and make sure that it is not mounted noexec.
3158 EOF
3159 die "Sanity test failed."
3160 fi
3161
3162 armasm_flags(){
3163 for flag; do
3164 case $flag in
3165 # Filter out MSVC cl.exe options from cflags that shouldn't
3166 # be passed to gas-preprocessor
3167 -M[TD]*) ;;
3168 *) echo $flag ;;
3169 esac
3170 done
3171 }
3172
3173 cparser_flags(){
3174 for flag; do
3175 case $flag in
3176 -Wno-switch) echo -Wno-switch-enum ;;
3177 -Wno-format-zero-length) ;;
3178 -Wdisabled-optimization) ;;
3179 -Wno-pointer-sign) echo -Wno-other ;;
3180 *) echo $flag ;;
3181 esac
3182 done
3183 }
3184
3185 msvc_common_flags(){
3186 for flag; do
3187 case $flag in
3188 # In addition to specifying certain flags under the compiler
3189 # specific filters, they must be specified here as well or else the
3190 # generic catch all at the bottom will print the original flag.
3191 -Wall) ;;
3192 -Wextra) ;;
3193 -std=c99) ;;
3194 # Common flags
3195 -fomit-frame-pointer) ;;
3196 -g) echo -Z7 ;;
3197 -fno-math-errno) ;;
3198 -fno-common) ;;
3199 -fno-signed-zeros) ;;
3200 -fPIC) ;;
3201 -mthumb) ;;
3202 -march=*) ;;
3203 -lz) echo zlib.lib ;;
3204 -lx264) echo libx264.lib ;;
3205 -l*) echo ${flag#-l}.lib ;;
3206 -L*) echo -libpath:${flag#-L} ;;
3207 *) echo $flag ;;
3208 esac
3209 done
3210 }
3211
3212 msvc_flags(){
3213 msvc_common_flags "$@"
3214 for flag; do
3215 case $flag in
3216 -Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
3217 -wd4554 ;;
3218 -Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3219 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3220 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3221 -wd4273 -wd4554 -wd4701 -wd4703 ;;
3222 esac
3223 done
3224 }
3225
3226 icl_flags(){
3227 msvc_common_flags "$@"
3228 for flag; do
3229 case $flag in
3230 # Despite what Intel's documentation says -Wall, which is supported
3231 # on Windows, does enable remarks so disable them here.
3232 -Wall) echo $flag -Qdiag-disable:remark ;;
3233 -std=c99) echo -Qstd=c99 ;;
3234 esac
3235 done
3236 }
3237
3238 suncc_flags(){
3239 for flag; do
3240 case $flag in
3241 -march=*|-mcpu=*)
3242 case "${flag#*=}" in
3243 native) echo -xtarget=native ;;
3244 v9|niagara) echo -xarch=sparc ;;
3245 ultrasparc) echo -xarch=sparcvis ;;
3246 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
3247 i586|pentium) echo -xchip=pentium ;;
3248 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
3249 pentium3*|c3-2) echo -xtarget=pentium3 ;;
3250 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
3251 pentium4*) echo -xtarget=pentium4 ;;
3252 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
3253 *-sse3) echo -xarch=sse3 ;;
3254 core2) echo -xarch=ssse3 -xchip=core2 ;;
3255 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
3256 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
3257 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
3258 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
3259 k8|opteron|athlon64|athlon-fx)
3260 echo -xarch=sse2a ;;
3261 athlon*) echo -xarch=pentium_proa ;;
3262 esac
3263 ;;
3264 -std=c99) echo -xc99 ;;
3265 -fomit-frame-pointer) echo -xregs=frameptr ;;
3266 -fPIC) echo -KPIC -xcode=pic32 ;;
3267 -W*,*) echo $flag ;;
3268 -f*-*|-W*|-mimpure-text) ;;
3269 -shared) echo -G ;;
3270 *) echo $flag ;;
3271 esac
3272 done
3273 }
3274
3275 probe_cc(){
3276 pfx=$1
3277 _cc=$2
3278
3279 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3280 unset _ld_o _ldflags _ld_lib _ld_path
3281 unset _depflags _DEPCMD _DEPFLAGS
3282 _flags_filter=echo
3283
3284 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3285 _type=llvm_gcc
3286 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3287 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3288 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3289 _cflags_speed='-O3'
3290 _cflags_size='-Os'
3291 elif $_cc -v 2>&1 | grep -qi ^gcc; then
3292 _type=gcc
3293 gcc_version=$($_cc --version | head -n1)
3294 gcc_basever=$($_cc -dumpversion)
3295 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3296 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3297 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3298 if ! $_cc -dumpversion | grep -q '^2\.'; then
3299 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3300 fi
3301 _cflags_speed='-O3'
3302 _cflags_size='-Os'
3303 elif $_cc --version 2>/dev/null | grep -q ^icc; then
3304 _type=icc
3305 _ident=$($_cc --version | head -n1)
3306 _depflags='-MMD'
3307 _cflags_speed='-O3'
3308 _cflags_size='-Os'
3309 _cflags_noopt='-O1'
3310 elif $_cc -v 2>&1 | grep -q xlc; then
3311 _type=xlc
3312 _ident=$($_cc -qversion 2>/dev/null | head -n1)
3313 _cflags_speed='-O5'
3314 _cflags_size='-O5 -qcompact'
3315 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3316 test -d "$sysroot" || die "No valid sysroot specified."
3317 _type=armcc
3318 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3319 armcc_conf="$PWD/armcc.conf"
3320 $_cc --arm_linux_configure \
3321 --arm_linux_config_file="$armcc_conf" \
3322 --configure_sysroot="$sysroot" \
3323 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3324 die "Error creating armcc configuration file."
3325 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3326 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3327 as_default="${cross_prefix}gcc"
3328 _depflags='-MMD'
3329 _cflags_speed='-O3'
3330 _cflags_size='-Os'
3331 elif $_cc -v 2>&1 | grep -q clang; then
3332 _type=clang
3333 _ident=$($_cc --version 2>/dev/null | head -n1)
3334 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3335 _cflags_speed='-O3'
3336 _cflags_size='-Os'
3337 elif $_cc -V 2>&1 | grep -q Sun; then
3338 _type=suncc
3339 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3340 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3341 _DEPFLAGS='-xM1 -xc99'
3342 _ldflags='-std=c99'
3343 _cflags_speed='-O5'
3344 _cflags_size='-O5 -xspace'
3345 _flags_filter=suncc_flags
3346 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3347 _type=pathscale
3348 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3349 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3350 _cflags_speed='-O2'
3351 _cflags_size='-Os'
3352 _flags_filter='filter_out -Wdisabled-optimization'
3353 elif $_cc -v 2>&1 | grep -q Open64; then
3354 _type=open64
3355 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3356 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3357 _cflags_speed='-O2'
3358 _cflags_size='-Os'
3359 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3360 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3361 _type=armasm
3362 _ident=$($_cc | head -n1)
3363 # 4509: "This form of conditional instruction is deprecated"
3364 _flags="-nologo -ignore 4509"
3365 _flags_filter=armasm_flags
3366 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3367 _type=msvc
3368 _ident=$($_cc 2>&1 | head -n1)
3369 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3370 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3371 _cflags_speed="-O2"
3372 _cflags_size="-O1"
3373 _cflags_noopt="-O1"
3374 if $_cc -nologo- 2>&1 | grep -q Linker; then
3375 _ld_o='-out:$@'
3376 else
3377 _ld_o='-Fe$@'
3378 fi
3379 _cc_o='-Fo$@'
3380 _cc_e='-P -Fi$@'
3381 _flags_filter=msvc_flags
3382 _ld_lib='lib%.a'
3383 _ld_path='-libpath:'
3384 _flags='-nologo'
3385 elif $_cc 2>&1 | grep -q Intel; then
3386 _type=icl
3387 _ident=$($_cc 2>&1 | head -n1)
3388 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3389 # Not only is O3 broken on 13.x+ but it is slower on all previous
3390 # versions (tested) as well.
3391 _cflags_speed="-O2"
3392 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3393 if $_cc 2>&1 | grep -q Linker; then
3394 _ld_o='-out:$@'
3395 else
3396 _ld_o='-Fe$@'
3397 fi
3398 _cc_o='-Fo$@'
3399 _cc_e='-P'
3400 _flags_filter=icl_flags
3401 _ld_lib='lib%.a'
3402 _ld_path='-libpath:'
3403 # -Qdiag-error to make icl error when seeing certain unknown arguments
3404 _flags='-nologo -Qdiag-error:4044,10157'
3405 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3406 # with MSVC which enables it by default.
3407 _cflags='-Qms0 -Qvec- -Qsimd- -GS'
3408 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
3409 # lld can emulate multiple different linkers; in ms link.exe mode,
3410 # the -? parameter gives the help output which contains an identifyable
3411 # string, while it gives an error in other modes.
3412 _type=lld-link
3413 # The link.exe mode doesn't have a switch for getting the version,
3414 # but we can force it back to gnu mode and get the version from there.
3415 _ident=$($_cc -flavor gnu --version 2>/dev/null)
3416 _ld_o='-out:$@'
3417 _flags_filter=msvc_flags
3418 _ld_lib='lib%.a'
3419 _ld_path='-libpath:'
3420 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3421 _type=cparser
3422 _ident=$($_cc --version | head -n1)
3423 _depflags='-MMD'
3424 _cflags_speed='-O4'
3425 _cflags_size='-O2'
3426 _flags_filter=cparser_flags
3427 fi
3428
3429 eval ${pfx}_type=\$_type
3430 eval ${pfx}_ident=\$_ident
3431 }
3432
3433 set_ccvars(){
3434 eval ${1}_C=\${_cc_c-\${${1}_C}}
3435 eval ${1}_E=\${_cc_e-\${${1}_E}}
3436 eval ${1}_O=\${_cc_o-\${${1}_O}}
3437
3438 if [ -n "$_depflags" ]; then
3439 eval ${1}_DEPFLAGS=\$_depflags
3440 else
3441 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3442 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3443 eval DEP${1}FLAGS=\$_flags
3444 fi
3445 }
3446
3447 probe_cc cc "$cc"
3448 cflags_filter=$_flags_filter
3449 cflags_speed=$_cflags_speed
3450 cflags_size=$_cflags_size
3451 cflags_noopt=$_cflags_noopt
3452 add_cflags $_flags $_cflags
3453 cc_ldflags=$_ldflags
3454 set_ccvars CC
3455
3456 probe_cc hostcc "$host_cc"
3457 host_cflags_filter=$_flags_filter
3458 host_cflags_speed=$_cflags_speed
3459 add_host_cflags $_flags $_cflags
3460 set_ccvars HOSTCC
3461
3462 test -n "$cc_type" && enable $cc_type ||
3463 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3464
3465 : ${as_default:=$cc}
3466 : ${objcc_default:=$cc}
3467 : ${dep_cc_default:=$cc}
3468 : ${ld_default:=$cc}
3469 : ${host_ld_default:=$host_cc}
3470 set_default ar as objcc dep_cc ld host_ld
3471
3472 probe_cc as "$as"
3473 asflags_filter=$_flags_filter
3474 add_asflags $_flags $_cflags
3475 set_ccvars AS
3476
3477 probe_cc objcc "$objcc"
3478 objcflags_filter=$_flags_filter
3479 add_objcflags $_flags $_cflags
3480 set_ccvars OBJC
3481
3482 probe_cc ld "$ld"
3483 ldflags_filter=$_flags_filter
3484 add_ldflags $_flags $_ldflags
3485 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3486 LD_O=${_ld_o-$LD_O}
3487 LD_LIB=${_ld_lib-$LD_LIB}
3488 LD_PATH=${_ld_path-$LD_PATH}
3489
3490 probe_cc hostld "$host_ld"
3491 host_ldflags_filter=$_flags_filter
3492 add_host_ldflags $_flags $_ldflags
3493 HOSTLD_O=${_ld_o-$HOSTLD_O}
3494
3495 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3496 probe_cc depcc "$dep_cc"
3497 CCDEP=${_DEPCMD:-$DEPCMD}
3498 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3499 DEPCCFLAGS=$_flags
3500 fi
3501
3502 if $ar 2>&1 | grep -q Microsoft; then
3503 arflags="-nologo"
3504 ar_o='-out:$@'
3505 else
3506 arflags="rc"
3507 ar_o='$@'
3508 fi
3509
3510 add_cflags $extra_cflags
3511 add_objcflags $extra_objcflags
3512 add_asflags $extra_cflags
3513
3514 if test -n "$sysroot"; then
3515 case "$cc_type" in
3516 gcc|llvm_gcc|clang)
3517 add_cppflags --sysroot="$sysroot"
3518 add_ldflags --sysroot="$sysroot"
3519 ;;
3520 esac
3521 fi
3522
3523 if test "$cpu" = host; then
3524 enabled cross_compile &&
3525 die "--cpu=host makes no sense when cross-compiling."
3526
3527 case "$cc_type" in
3528 gcc|llvm_gcc)
3529 check_native(){
3530 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3531 sed -n "/cc1.*$1=/{
3532 s/.*$1=\\([^ ]*\\).*/\\1/
3533 p
3534 q
3535 }" $TMPE
3536 }
3537 cpu=$(check_native -march || check_native -mcpu)
3538 ;;
3539 esac
3540
3541 test "${cpu:-host}" = host &&
3542 die "--cpu=host not supported with compiler $cc"
3543 fi
3544
3545 # Deal with common $arch aliases
3546 case "$arch" in
3547 aarch64|arm64)
3548 arch="aarch64"
3549 ;;
3550 arm*)
3551 arch="arm"
3552 ;;
3553 mips*|IP*)
3554 case "$arch" in
3555 *el)
3556 add_cppflags -EL
3557 add_ldflags -EL
3558 ;;
3559 *eb)
3560 add_cppflags -EB
3561 add_ldflags -EB
3562 ;;
3563 esac
3564 arch="mips"
3565 ;;
3566 parisc*|hppa*)
3567 arch="parisc"
3568 ;;
3569 "Power Macintosh"|ppc*|powerpc*)
3570 arch="ppc"
3571 ;;
3572 s390|s390x)
3573 arch="s390"
3574 ;;
3575 sh4|sh)
3576 arch="sh4"
3577 ;;
3578 sun4u|sparc*)
3579 arch="sparc"
3580 ;;
3581 tilegx|tile-gx)
3582 arch="tilegx"
3583 ;;
3584 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3585 arch="x86"
3586 ;;
3587 esac
3588
3589 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3590 enable $arch
3591
3592 # Add processor-specific flags
3593 if enabled aarch64; then
3594
3595 case $cpu in
3596 armv*)
3597 cpuflags="-march=$cpu"
3598 ;;
3599 *)
3600 cpuflags="-mcpu=$cpu"
3601 ;;
3602 esac
3603
3604 elif enabled alpha; then
3605
3606 cpuflags="-mcpu=$cpu"
3607
3608 elif enabled arm; then
3609
3610 check_arm_arch() {
3611 test_cpp_condition stddef.h \
3612 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3613 $cpuflags
3614 }
3615
3616 probe_arm_arch() {
3617 if check_arm_arch 4; then echo armv4
3618 elif check_arm_arch 4T; then echo armv4t
3619 elif check_arm_arch 5; then echo armv5
3620 elif check_arm_arch 5E; then echo armv5e
3621 elif check_arm_arch 5T; then echo armv5t
3622 elif check_arm_arch 5TE; then echo armv5te
3623 elif check_arm_arch 5TEJ; then echo armv5te
3624 elif check_arm_arch 6; then echo armv6
3625 elif check_arm_arch 6J; then echo armv6j
3626 elif check_arm_arch 6K; then echo armv6k
3627 elif check_arm_arch 6Z; then echo armv6z
3628 elif check_arm_arch 6ZK; then echo armv6zk
3629 elif check_arm_arch 6T2; then echo armv6t2
3630 elif check_arm_arch 7; then echo armv7
3631 elif check_arm_arch 7A 7_A; then echo armv7-a
3632 elif check_arm_arch 7S; then echo armv7-a
3633 elif check_arm_arch 7R 7_R; then echo armv7-r
3634 elif check_arm_arch 7M 7_M; then echo armv7-m
3635 elif check_arm_arch 7EM 7E_M; then echo armv7-m
3636 elif check_arm_arch 8A 8_A; then echo armv8-a
3637 fi
3638 }
3639
3640 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3641
3642 case $cpu in
3643 armv*)
3644 cpuflags="-march=$cpu"
3645 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3646 ;;
3647 *)
3648 cpuflags="-mcpu=$cpu"
3649 case $cpu in
3650 cortex-a*) subarch=armv7a ;;
3651 cortex-r*) subarch=armv7r ;;
3652 cortex-m*) enable thumb; subarch=armv7m ;;
3653 arm11*) subarch=armv6 ;;
3654 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3655 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3656 *) subarch=$(probe_arm_arch) ;;
3657 esac
3658 ;;
3659 esac
3660
3661 case "$subarch" in
3662 armv5t*) enable fast_clz ;;
3663 armv[6-8]*) enable fast_clz fast_unaligned ;;
3664 esac
3665
3666 elif enabled avr32; then
3667
3668 case $cpu in
3669 ap7[02]0[0-2])
3670 subarch="avr32_ap"
3671 cpuflags="-mpart=$cpu"
3672 ;;
3673 ap)
3674 subarch="avr32_ap"
3675 cpuflags="-march=$cpu"
3676 ;;
3677 uc3[ab]*)
3678 subarch="avr32_uc"
3679 cpuflags="-mcpu=$cpu"
3680 ;;
3681 uc)
3682 subarch="avr32_uc"
3683 cpuflags="-march=$cpu"
3684 ;;
3685 esac
3686
3687 elif enabled bfin; then
3688
3689 cpuflags="-mcpu=$cpu"
3690
3691 elif enabled mips; then
3692
3693 cpuflags="-march=$cpu"
3694
3695 elif enabled ppc; then
3696
3697 disable ldbrx
3698
3699 case $(tolower $cpu) in
3700 601|ppc601|powerpc601)
3701 cpuflags="-mcpu=601"
3702 disable altivec
3703 ;;
3704 603*|ppc603*|powerpc603*)
3705 cpuflags="-mcpu=603"
3706 disable altivec
3707 ;;
3708 604*|ppc604*|powerpc604*)
3709 cpuflags="-mcpu=604"
3710 disable altivec
3711 ;;
3712 g3|75*|ppc75*|powerpc75*)
3713 cpuflags="-mcpu=750"
3714 disable altivec
3715 ;;
3716 g4|745*|ppc745*|powerpc745*)
3717 cpuflags="-mcpu=7450"
3718 disable vsx
3719 ;;
3720 74*|ppc74*|powerpc74*)
3721 cpuflags="-mcpu=7400"
3722 disable vsx
3723 ;;
3724 g5|970|ppc970|powerpc970)
3725 cpuflags="-mcpu=970"
3726 disable vsx
3727 ;;
3728 power[3-6]*)
3729 cpuflags="-mcpu=$cpu"
3730 disable vsx
3731 ;;
3732 power[7-8]*)
3733 cpuflags="-mcpu=$cpu"
3734 enable ldbrx
3735 ;;
3736 cell)
3737 cpuflags="-mcpu=cell"
3738 enable ldbrx
3739 disable vsx
3740 ;;
3741 e500mc)
3742 cpuflags="-mcpu=e500mc"
3743 disable altivec
3744 ;;
3745 e500v2)
3746 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3747 disable altivec
3748 disable dcbzl
3749 ;;
3750 e500)
3751 cpuflags="-mcpu=8540 -mhard-float"
3752 disable altivec
3753 disable dcbzl
3754 ;;
3755 esac
3756
3757 elif enabled sparc; then
3758
3759 case $cpu in
3760 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3761 cpuflags="-mcpu=$cpu"
3762 ;;
3763 ultrasparc*|niagara[234])
3764 cpuflags="-mcpu=$cpu"
3765 ;;
3766 esac
3767
3768 elif enabled x86; then
3769
3770 case $cpu in
3771 i[345]86|pentium)
3772 cpuflags="-march=$cpu"
3773 disable i686
3774 disable mmx
3775 ;;
3776 # targets that do NOT support nopl and conditional mov (cmov)
3777 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3778 cpuflags="-march=$cpu"
3779 disable i686
3780 ;;
3781 # targets that do support nopl and conditional mov (cmov)
3782 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
3783 cpuflags="-march=$cpu"
3784 enable i686
3785 enable fast_cmov
3786 ;;
3787 # targets that do support conditional mov but on which it's slow
3788 pentium4|pentium4m|prescott|nocona)
3789 cpuflags="-march=$cpu"
3790 enable i686
3791 disable fast_cmov
3792 ;;
3793 esac
3794
3795 fi
3796
3797 if [ "$cpu" != generic ]; then
3798 add_cflags $cpuflags
3799 add_asflags $cpuflags
3800 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3801 fi
3802
3803 # compiler sanity check
3804 test_exec <<EOF
3805 int main(void){ return 0; }
3806 EOF
3807 if test "$?" != 0; then
3808 echo "$cc is unable to create an executable file."
3809 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3810 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3811 echo "Only do this if you know what cross compiling means."
3812 fi
3813 die "C compiler test failed."
3814 fi
3815
3816 add_cppflags -D_ISOC99_SOURCE
3817
3818 # some compilers silently accept -std=c11, so we also need to check that the
3819 # version macro is defined properly
3820 test_cpp_condition stdlib.h "__STDC_VERSION__ >= 201112L" -std=c11 &&
3821 add_cflags -std=c11 ||
3822 check_cflags -std=c99
3823
3824 check_cppflags -D_FILE_OFFSET_BITS=64
3825 check_cppflags -D_LARGEFILE_SOURCE
3826
3827 add_host_cppflags -D_ISOC99_SOURCE
3828 check_host_cflags -std=c99
3829 check_host_cflags -Wall
3830 check_host_cflags $host_cflags_speed
3831
3832 check_64bit(){
3833 arch32=$1
3834 arch64=$2
3835 expr=${3:-'sizeof(void *) > 4'}
3836 test_code cc "" "int test[2*($expr) - 1]" &&
3837 subarch=$arch64 || subarch=$arch32
3838 enable $subarch
3839 }
3840
3841 case "$arch" in
3842 aarch64|alpha|ia64)
3843 enabled shared && enable_weak pic
3844 ;;
3845 mips)
3846 check_64bit mips mips64 '_MIPS_SIM > 1'
3847 enabled shared && enable_weak pic
3848 ;;
3849 parisc)
3850 check_64bit parisc parisc64
3851 enabled shared && enable_weak pic
3852 ;;
3853 ppc)
3854 check_64bit ppc ppc64
3855 enabled shared && enable_weak pic
3856 ;;
3857 s390)
3858 check_64bit s390 s390x
3859 enabled shared && enable_weak pic
3860 ;;
3861 sparc)
3862 check_64bit sparc sparc64
3863 enabled shared && enable_weak pic
3864 ;;
3865 x86)
3866 check_64bit x86_32 x86_64
3867 if enabled x86_64; then
3868 enabled shared && enable_weak pic
3869 objformat=elf64
3870 fi
3871 ;;
3872 esac
3873
3874 # OS specific
3875 case $target_os in
3876 aix)
3877 SHFLAGS=-shared
3878 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3879 enabled shared && add_ldflags -Wl,-brtl
3880 arflags='-Xany -r -c'
3881 ;;
3882 android)
3883 disable symver
3884 enable section_data_rel_ro
3885 SLIB_INSTALL_NAME='$(SLIBNAME)'
3886 SLIB_INSTALL_LINKS=
3887 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3888 ;;
3889 haiku)
3890 prefix_default="/boot/common"
3891 network_extralibs="-lnetwork"
3892 host_extralibs=
3893 ;;
3894 sunos)
3895 SHFLAGS='-shared -Wl,-h,$$(@F)'
3896 enabled x86 && append SHFLAGS -mimpure-text
3897 network_extralibs="-lsocket -lnsl"
3898 # When using suncc to build, the Solaris linker will mark
3899 # an executable with each instruction set encountered by
3900 # the Solaris assembler. As our libraries contain their own
3901 # guards for processor-specific code, instead suppress
3902 # generation of the HWCAPS ELF section on Solaris x86 only.
3903 enabled_all suncc x86 &&
3904 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3905 add_ldflags -Wl,-M,mapfile
3906 nm_default='nm -P -g'
3907 version_script='-M'
3908 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
3909 ;;
3910 netbsd)
3911 disable symver
3912 oss_indev_extralibs="-lossaudio"
3913 ;;
3914 openbsd|bitrig)
3915 disable symver
3916 SHFLAGS='-shared'
3917 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3918 SLIB_INSTALL_LINKS=
3919 oss_indev_extralibs="-lossaudio"
3920 ;;
3921 dragonfly)
3922 disable symver
3923 ;;
3924 freebsd)
3925 ;;
3926 bsd/os)
3927 add_extralibs -lpoll -lgnugetopt
3928 ;;
3929 darwin)
3930 enabled ppc && add_asflags -force_cpusubtype_ALL
3931 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3932 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3933 add_ldflags -Wl,-dynamic,-search_paths_first
3934 check_cflags -Werror=partial-availability
3935 SLIBSUF=".dylib"
3936 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
3937 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
3938 enabled x86_64 && objformat="macho64" || objformat="macho32"
3939 enabled_any pic shared ||
3940 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3941 check_header dispatch/dispatch.h &&
3942 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
3943 if test -n "$sysroot"; then
3944 is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot
3945 is_in -isysroot $ld $LDFLAGS || check_ldflags -isysroot $sysroot
3946 fi
3947 ;;
3948 msys*)
3949 die "Native MSYS builds are discouraged, please use the MINGW environment."
3950 ;;
3951 mingw32*|mingw64*)
3952 target_os=mingw32
3953 LIBTARGET=i386
3954 if enabled x86_64; then
3955 LIBTARGET="i386:x86-64"
3956 elif enabled arm; then
3957 LIBTARGET="arm"
3958 elif enabled aarch64; then
3959 LIBTARGET="arm64"
3960 fi
3961 if enabled shared; then
3962 # Cannot build both shared and static libs when using dllimport.
3963 disable static
3964 fi
3965 check_ldflags -Wl,--nxcompat
3966 check_ldflags -Wl,--dynamicbase
3967 shlibdir_default="$bindir_default"
3968 SLIBPREF=""
3969 SLIBSUF=".dll"
3970 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3971 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3972 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3973 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3974 SLIB_INSTALL_LINKS=
3975 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3976 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3977 SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" AR="$(AR_CMD)" NM="$(NM_CMD)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3978 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-auto-image-base $$(@:$(SLIBSUF)=.def)'
3979 enabled x86_64 && objformat="win64" || objformat="win32"
3980 dlltool="${cross_prefix}dlltool"
3981 ranlib=:
3982 enable dos_paths
3983 ;;
3984 win32|win64)
3985 disable symver
3986 if enabled shared; then
3987 # Link to the import library instead of the normal static library
3988 # for shared libs.
3989 LD_LIB='%.lib'
3990 # Cannot build both shared and static libs with MSVC or icl.
3991 disable static
3992 fi
3993 shlibdir_default="$bindir_default"
3994 SLIBPREF=""
3995 SLIBSUF=".dll"
3996 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3997 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3998 SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3999 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4000 SLIB_INSTALL_LINKS=
4001 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4002 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4003 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4004 enabled x86_64 && objformat="win64" || objformat="win32"
4005 ranlib=:
4006 enable dos_paths
4007 ;;
4008 cygwin*)
4009 target_os=cygwin
4010 shlibdir_default="$bindir_default"
4011 SLIBPREF="cyg"
4012 SLIBSUF=".dll"
4013 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4014 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
4015 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4016 SLIB_INSTALL_LINKS=
4017 SLIB_INSTALL_EXTRA_LIB='lib$(NAME).dll.a'
4018 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(NAME).dll.a'
4019 enabled x86_64 && objformat="win64" || objformat="win32"
4020 enable dos_paths
4021 ;;
4022 *-dos|freedos|opendos)
4023 network_extralibs="-lsocket"
4024 objformat="coff"
4025 enable dos_paths
4026 add_cppflags -U__STRICT_ANSI__
4027 ;;
4028 linux)
4029 enable section_data_rel_ro
4030 ;;
4031 irix*)
4032 target_os=irix
4033 ranlib="echo ignoring ranlib"
4034 ;;
4035 os/2*)
4036 ln_s="cp -f"
4037 objformat="aout"
4038 add_cppflags -D_GNU_SOURCE
4039 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
4040 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4041 LIBSUF="_s.a"
4042 SLIBPREF=""
4043 SLIBSUF=".dll"
4044 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4045 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4046 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4047 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4048 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4049 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4050 emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4051 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4052 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4053 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4054 enable dos_paths
4055 ;;
4056 gnu/kfreebsd)
4057 add_cppflags -D_BSD_SOURCE
4058 ;;
4059 gnu)
4060 ;;
4061 qnx)
4062 add_cppflags -D_QNX_SOURCE
4063 network_extralibs="-lsocket"
4064 ;;
4065 symbian)
4066 SLIBSUF=".dll"
4067 enable dos_paths
4068 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4069 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4070 add_ldflags -Wl,--target1-abs,--no-undefined \
4071 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4072 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4073 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4074 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4075 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4076 ;;
4077 minix)
4078 ;;
4079 none)
4080 ;;
4081 *)
4082 die "Unknown OS '$target_os'."
4083 ;;
4084 esac
4085
4086 # determine libc flavour
4087
4088 probe_libc(){
4089 pfx=$1
4090 pfx_no_=${pfx%_}
4091 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4092 if test_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4093 eval ${pfx}libc_type=uclibc
4094 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4095 elif test_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4096 eval ${pfx}libc_type=glibc
4097 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4098 # MinGW headers can be installed on Cygwin, so check for newlib first.
4099 elif test_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4100 eval ${pfx}libc_type=newlib
4101 add_${pfx}cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE=600
4102 # MinGW64 is backwards compatible with MinGW32, so check for it first.
4103 elif test_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4104 eval ${pfx}libc_type=mingw64
4105 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4106 eval test \$${pfx_no_}cc_type = "gcc" &&
4107 add_${pfx}cppflags -D__printf__=__gnu_printf__
4108 elif test_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
4109 test_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4110 eval ${pfx}libc_type=mingw32
4111 test_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4112 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4113 die "ERROR: MinGW32 runtime version must be >= 3.15."
4114 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4115 test_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" &&
4116 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
4117 test_${pfx}cpp_condition windows.h "defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0502" &&
4118 add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4119 eval test \$${pfx_no_}cc_type = "gcc" &&
4120 add_${pfx}cppflags -D__printf__=__gnu_printf__
4121 elif test_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4122 eval ${pfx}libc_type=msvcrt
4123 if test_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4124 if [ "$pfx" = host_ ]; then
4125 add_host_cppflags -Dsnprintf=_snprintf
4126 else
4127 add_compat strtod.o strtod=avpriv_strtod
4128 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
4129 _snprintf=avpriv_snprintf \
4130 vsnprintf=avpriv_vsnprintf
4131 fi
4132 fi
4133 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
4134 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4135 # 0x601 by default unless something else is set by the user.
4136 # This can easily lead to us detecting functions only present
4137 # in such new versions and producing binaries requiring windows 7.0.
4138 # Therefore explicitly set the default to XP unless the user has
4139 # set something else on the command line.
4140 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4141 # family. For these cases, configure is free to use any functions
4142 # found in the SDK headers by default. (Alternatively, we could force
4143 # _WIN32_WINNT to 0x0602 in that case.)
4144 test_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4145 { test_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4146 #ifdef WINAPI_FAMILY
4147 #include <winapifamily.h>
4148 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4149 #error not desktop
4150 #endif
4151 #endif
4152 EOF
4153 if [ "$pfx" = "" ]; then
4154 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
4155 fi
4156 elif test_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4157 eval ${pfx}libc_type=klibc
4158 elif test_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4159 eval ${pfx}libc_type=bionic
4160 elif test_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4161 eval ${pfx}libc_type=solaris
4162 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4163 else
4164 eval ${pfx}libc_type=default
4165 add_${pfx}cppflags -D_DEFAULT_SOURCE
4166 fi
4167 eval test -n "\${${pfx}libc_type}" && enable ${pfx}libc_${libc_type}
4168 }
4169
4170 probe_libc
4171 probe_libc host_
4172
4173 # hacks for compiler/libc/os combinations
4174
4175 case $libc_type in
4176 bionic)
4177 add_compat strtod.o strtod=avpriv_strtod
4178 ;;
4179 esac
4180
4181 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4182 add_cppflags '-I\$(SRC_PATH)/compat/float'
4183
4184 test_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4185
4186 set_default $PATHS_LIST
4187 set_default nm
4188
4189 disabled optimizations || check_cflags -fomit-frame-pointer
4190
4191 enable_weak_pic() {
4192 disabled pic && return
4193 enable pic
4194 add_cppflags -DPIC
4195 case "$target_os" in
4196 mingw*|cygwin*|win*)
4197 ;;
4198 *)
4199 add_cflags -fPIC
4200 add_asflags -fPIC
4201 ;;
4202 esac
4203 }
4204
4205 enabled pic && enable_weak_pic
4206
4207 test_cc <<EOF || die "Symbol mangling check failed."
4208 int ff_extern;
4209 EOF
4210 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4211 extern_prefix=${sym%%ff_extern*}
4212
4213 ! disabled inline_asm && check_inline_asm inline_asm '"" ::'
4214
4215 for restrict_keyword in restrict __restrict__ __restrict ""; do
4216 test_code cc "" "char * $restrict_keyword p" && break
4217 done
4218
4219 check_cc pragma_deprecated "" '_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")'
4220
4221 # The global variable ensures the bits appear unchanged in the object file.
4222 test_cc <<EOF || die "endian test failed"
4223 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4224 EOF
4225 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4226
4227 check_gas() {
4228 log "check_gas using '$as' as AS"
4229 # :vararg is used on aarch64, arm and ppc altivec
4230 check_as vararg "
4231 .macro m n, y:vararg=0
4232 \n: .int \y
4233 .endm
4234 m x" || return 1
4235 # .altmacro is only used in arm asm
4236 ! enabled arm || check_as gnu_as ".altmacro"
4237 }
4238
4239 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4240 nogas=:
4241 enabled_any arm aarch64 && nogas=die
4242 enabled_all ppc altivec && nogas=warn
4243 as_noop=-v
4244
4245 case $as_type in
4246 arm*) gaspp_as_type=armasm; as_noop=-h ;;
4247 gcc) gaspp_as_type=gas ;;
4248 *) gaspp_as_type=$as_type ;;
4249 esac
4250
4251 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4252
4253 test_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
4254 gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
4255
4256 if ! check_gas ; then
4257 as=${gas:=$as}
4258 check_gas || \
4259 $nogas "GNU assembler not found, install/update gas-preprocessor"
4260 fi
4261
4262 check_as as_func ".func test
4263 .endfunc"
4264 fi
4265
4266 check_inline_asm inline_asm_labels '"1:\n"'
4267
4268 if enabled aarch64; then
4269 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
4270 # internal assembler in clang 3.3 does not support this instruction
4271 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
4272 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
4273
4274 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4275
4276 elif enabled alpha; then
4277
4278 check_cflags -mieee
4279
4280 elif enabled arm; then
4281
4282 enabled msvc && check_cpp_condition thumb stddef.h "defined _M_ARMT"
4283 test_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
4284 enabled thumb && check_cflags -mthumb || check_cflags -marm
4285
4286 if check_cpp_condition vfp_args stddef.h "defined __ARM_PCS_VFP"; then
4287 :
4288 elif check_cpp_condition vfp_args stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
4289 :
4290 elif ! test_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
4291 case "${cross_prefix:-$cc}" in
4292 *hardfloat*) enable vfp_args; fpabi=vfp ;;
4293 *) check_ld vfp_args <<EOF && fpabi=vfp || fpabi=soft ;;
4294 __asm__ (".eabi_attribute 28, 1");
4295 int main(void) { return 0; }
4296 EOF
4297 esac
4298 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4299 fi
4300
4301 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4302 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
4303 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4304 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
4305 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
4306 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
4307
4308 [ $target_os = linux ] || [ $target_os = android ] ||
4309 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4310 $ARCH_EXT_LIST_ARM
4311
4312 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4313
4314 check_as as_arch_directive ".arch armv7-a"
4315 check_as as_fpu_directive ".fpu neon"
4316
4317 # llvm's integrated assembler supports .object_arch from llvm 3.5
4318 [ "$objformat" = elf32 ] || [ "$objformat" = elf64 ] &&
4319 check_as as_object_arch ".object_arch armv4"
4320
4321 # MS armasm fails to assemble our PIC constructs
4322 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4323
4324 elif enabled mips; then
4325
4326 # make sure that only one instruction set is enabled
4327 disable $ARCH_EXT_LIST_MIPS
4328
4329 check_inline_asm loongson '"dmult.g $1, $2, $3"'
4330
4331 if enabled mips64; then
4332 check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' ||
4333 check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ||
4334 check_inline_asm mips64r1 '"daddi $0, $0, 0"'
4335 else
4336 check_inline_asm mips32r6 '"aui $0, $0, 0"' ||
4337 check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ||
4338 check_inline_asm mips32r1 '"addi $0, $0, 0"'
4339 fi
4340
4341 elif enabled parisc; then
4342
4343 if enabled gcc; then
4344 case $($cc -dumpversion) in
4345 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4346 esac
4347 fi
4348
4349 elif enabled ppc; then
4350
4351 enable local_aligned_8 local_aligned_16 local_aligned_32
4352
4353 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
4354 check_inline_asm ibm_asm '"add 0, 0, 0"'
4355 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
4356 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4357
4358 if enabled altivec; then
4359 check_cflags -maltivec -mabi=altivec
4360
4361 # check if our compiler supports Motorola AltiVec C API
4362 check_cc altivec altivec.h "vector signed int v1 = (vector signed int) { 0 };
4363 vector signed int v2 = (vector signed int) { 1 };
4364 v1 = vec_add(v1, v2);"
4365
4366 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4367 fi
4368
4369 if enabled vsx; then
4370 check_cflags -mvsx &&
4371 check_cc vsx altivec.h "int v[4] = { 0 };
4372 vector signed int v1 = vec_vsx_ld(0, v);"
4373 fi
4374
4375 if enabled power8; then
4376 check_cpp_condition power8 altivec.h "defined(_ARCH_PWR8)"
4377 fi
4378
4379 elif enabled x86; then
4380
4381 check_builtin rdtsc intrin.h "__rdtsc()"
4382 check_builtin mm_empty mmintrin.h "_mm_empty()"
4383
4384 enable local_aligned_8 local_aligned_16 local_aligned_32
4385
4386 # check whether EBP is available on x86
4387 # As 'i' is stored on the stack, this program will crash
4388 # if the base pointer is used to access it because the
4389 # base pointer is cleared in the inline assembly code.
4390 check_exec_crash <<EOF && enable ebp_available
4391 volatile int i=0;
4392 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4393 return i;
4394 EOF
4395
4396 # check whether EBX is available on x86
4397 check_inline_asm ebx_available '""::"b"(0)' &&
4398 check_inline_asm ebx_available '"":::"%ebx"'
4399
4400 # check whether xmm clobbers are supported
4401 check_inline_asm xmm_clobbers '"":::"%xmm0"'
4402
4403 # check whether binutils is new enough to compile SSSE3/MMXEXT
4404 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
4405 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4406
4407 probe_x86asm(){
4408 x86asmexe_probe=$1
4409 if test_cmd $x86asmexe_probe -v; then
4410 x86asmexe=$x86asmexe_probe
4411 x86asm_type=nasm
4412 x86asm_debug="-g -F dwarf"
4413 X86ASMDEP=
4414 X86ASM_DEPFLAGS='-MD $(@:.o=.d)'
4415 elif test_cmd $x86asmexe_probe --version; then
4416 x86asmexe=$x86asmexe_probe
4417 x86asm_type=yasm
4418 x86asm_debug="-g dwarf2"
4419 X86ASMDEP='$(DEPX86ASM) $(X86ASMFLAGS) -M $(X86ASM_O) $< > $(@:.o=.d)'
4420 X86ASM_DEPFLAGS=
4421 fi
4422 check_x86asm x86asm "movbe ecx, [5]"
4423 }
4424
4425 if ! disabled_any asm mmx x86asm; then
4426 disable x86asm
4427 for program in $x86asmexe nasm yasm; do
4428 probe_x86asm $program && break
4429 done
4430 disabled x86asm && die "nasm/yasm not found or too old. Use --disable-x86asm for a crippled build."
4431 X86ASMFLAGS="-f $objformat