1 #!/bin/sh 2 ## 3 ## configure 4 ## 5 ## This script is the front-end to the build system. It provides a similar 6 ## interface to standard configure scripts with some extra bits for dealing 7 ## with toolchains that differ from the standard POSIX interface and 8 ## for extracting subsets of the source tree. In theory, reusable parts 9 ## of this script were intended to live in build/make/configure.sh, 10 ## but in practice, the line is pretty blurry. 11 ## 12 ## This build system is based in part on the FFmpeg configure script. 13 ## 14 15 #source_path="`dirname \"$0\"`" 16 source_path=${0%/*} 17 . "${source_path}/build/make/configure.sh" 18 19 show_help(){ 20 show_help_pre 21 cat << EOF 22 Advanced options: 23 ${toggle_libs} libraries 24 ${toggle_examples} examples 25 ${toggle_docs} documentation 26 ${toggle_unit_tests} unit tests 27 ${toggle_decode_perf_tests} build decoder perf tests with unit tests 28 --libc=PATH path to alternate libc 29 --as={yasm|nasm|auto} use specified assembler [auto, yasm preferred] 30 --sdk-path=PATH path to root of sdk (android builds only) 31 ${toggle_fast_unaligned} don't use unaligned accesses, even when 32 supported by hardware [auto] 33 ${toggle_codec_srcs} in/exclude codec library source code 34 ${toggle_debug_libs} in/exclude debug version of libraries 35 ${toggle_static_msvcrt} use static MSVCRT (VS builds only) 36 ${toggle_vp8} VP8 codec support 37 ${toggle_vp9} VP9 codec support 38 ${toggle_internal_stats} output of encoder internal stats for debug, if supported (encoders) 39 ${toggle_mem_tracker} track memory usage 40 ${toggle_postproc} postprocessing 41 ${toggle_vp9_postproc} vp9 specific postprocessing 42 ${toggle_multithread} multithreaded encoding and decoding 43 ${toggle_spatial_resampling} spatial sampling (scaling) support 44 ${toggle_realtime_only} enable this option while building for real-time encoding 45 ${toggle_onthefly_bitpacking} enable on-the-fly bitpacking in real-time encoding 46 ${toggle_error_concealment} enable this option to get a decoder which is able to conceal losses 47 ${toggle_runtime_cpu_detect} runtime cpu detection 48 ${toggle_shared} shared library support 49 ${toggle_static} static library support 50 ${toggle_small} favor smaller size over speed 51 ${toggle_postproc_visualizer} macro block / block level visualizers 52 ${toggle_multi_res_encoding} enable multiple-resolution encoding 53 ${toggle_temporal_denoising} enable temporal denoising and disable the spatial denoiser 54 ${toggle_webm_io} enable input from and output to WebM container 55 56 Codecs: 57 Codecs can be selectively enabled or disabled individually, or by family: 58 --disable-<codec> 59 is equivalent to: 60 --disable-<codec>-encoder 61 --disable-<codec>-decoder 62 63 Codecs available in this distribution: 64 EOF 65 #restore editor state ' 66 67 local family; 68 local last_family; 69 local c; 70 local str; 71 for c in ${CODECS}; do 72 family=${c%_*} 73 if [ "${family}" != "${last_family}" ]; then 74 [ -z "${str}" ] || echo "${str}" 75 str="$(printf ' %10s:' ${family})" 76 fi 77 str="${str} $(printf '%10s' ${c#*_})" 78 last_family=${family} 79 done 80 echo "${str}" 81 show_help_post 82 } 83 84 ## 85 ## BEGIN APPLICATION SPECIFIC CONFIGURATION 86 ## 87 88 # all_platforms is a list of all supported target platforms. Maintain 89 # alphabetically by architecture, generic-gnu last. 90 all_platforms="${all_platforms} armv5te-android-gcc" 91 all_platforms="${all_platforms} armv5te-linux-rvct" 92 all_platforms="${all_platforms} armv5te-linux-gcc" 93 all_platforms="${all_platforms} armv5te-none-rvct" 94 all_platforms="${all_platforms} armv6-darwin-gcc" 95 all_platforms="${all_platforms} armv6-linux-rvct" 96 all_platforms="${all_platforms} armv6-linux-gcc" 97 all_platforms="${all_platforms} armv6-none-rvct" 98 all_platforms="${all_platforms} armv7-android-gcc" #neon Cortex-A8 99 all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8 100 all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8 101 all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8 102 all_platforms="${all_platforms} armv7-none-rvct" #neon Cortex-A8 103 all_platforms="${all_platforms} armv7-win32-vs11" 104 all_platforms="${all_platforms} armv7-win32-vs12" 105 all_platforms="${all_platforms} mips32-linux-gcc" 106 all_platforms="${all_platforms} ppc32-darwin8-gcc" 107 all_platforms="${all_platforms} ppc32-darwin9-gcc" 108 all_platforms="${all_platforms} ppc32-linux-gcc" 109 all_platforms="${all_platforms} ppc64-darwin8-gcc" 110 all_platforms="${all_platforms} ppc64-darwin9-gcc" 111 all_platforms="${all_platforms} ppc64-linux-gcc" 112 all_platforms="${all_platforms} sparc-solaris-gcc" 113 all_platforms="${all_platforms} x86-android-gcc" 114 all_platforms="${all_platforms} x86-darwin8-gcc" 115 all_platforms="${all_platforms} x86-darwin8-icc" 116 all_platforms="${all_platforms} x86-darwin9-gcc" 117 all_platforms="${all_platforms} x86-darwin9-icc" 118 all_platforms="${all_platforms} x86-darwin10-gcc" 119 all_platforms="${all_platforms} x86-darwin11-gcc" 120 all_platforms="${all_platforms} x86-darwin12-gcc" 121 all_platforms="${all_platforms} x86-darwin13-gcc" 122 all_platforms="${all_platforms} x86-linux-gcc" 123 all_platforms="${all_platforms} x86-linux-icc" 124 all_platforms="${all_platforms} x86-os2-gcc" 125 all_platforms="${all_platforms} x86-solaris-gcc" 126 all_platforms="${all_platforms} x86-win32-gcc" 127 all_platforms="${all_platforms} x86-win32-vs7" 128 all_platforms="${all_platforms} x86-win32-vs8" 129 all_platforms="${all_platforms} x86-win32-vs9" 130 all_platforms="${all_platforms} x86-win32-vs10" 131 all_platforms="${all_platforms} x86-win32-vs11" 132 all_platforms="${all_platforms} x86-win32-vs12" 133 all_platforms="${all_platforms} x86_64-darwin9-gcc" 134 all_platforms="${all_platforms} x86_64-darwin10-gcc" 135 all_platforms="${all_platforms} x86_64-darwin11-gcc" 136 all_platforms="${all_platforms} x86_64-darwin12-gcc" 137 all_platforms="${all_platforms} x86_64-darwin13-gcc" 138 all_platforms="${all_platforms} x86_64-linux-gcc" 139 all_platforms="${all_platforms} x86_64-linux-icc" 140 all_platforms="${all_platforms} x86_64-solaris-gcc" 141 all_platforms="${all_platforms} x86_64-win64-gcc" 142 all_platforms="${all_platforms} x86_64-win64-vs8" 143 all_platforms="${all_platforms} x86_64-win64-vs9" 144 all_platforms="${all_platforms} x86_64-win64-vs10" 145 all_platforms="${all_platforms} x86_64-win64-vs11" 146 all_platforms="${all_platforms} x86_64-win64-vs12" 147 all_platforms="${all_platforms} universal-darwin8-gcc" 148 all_platforms="${all_platforms} universal-darwin9-gcc" 149 all_platforms="${all_platforms} universal-darwin10-gcc" 150 all_platforms="${all_platforms} universal-darwin11-gcc" 151 all_platforms="${all_platforms} universal-darwin12-gcc" 152 all_platforms="${all_platforms} universal-darwin13-gcc" 153 all_platforms="${all_platforms} generic-gnu" 154 155 # all_targets is a list of all targets that can be configured 156 # note that these should be in dependency order for now. 157 all_targets="libs examples docs" 158 159 # all targets available are enabled, by default. 160 for t in ${all_targets}; do 161 [ -f ${source_path}/${t}.mk ] && enable_feature ${t} 162 done 163 164 if ! perl --version >/dev/null; then 165 die "Perl is required to build" 166 fi 167 168 169 if [ "`cd ${source_path} && pwd`" != "`pwd`" ]; then 170 # test to see if source_path already configured 171 if [ -f ${source_path}/vpx_config.h ]; then 172 die "source directory already configured; run 'make distclean' there first" 173 fi 174 fi 175 176 # check installed doxygen version 177 doxy_version=$(doxygen --version 2>/dev/null) 178 doxy_major=${doxy_version%%.*} 179 if [ ${doxy_major:-0} -ge 1 ]; then 180 doxy_version=${doxy_version#*.} 181 doxy_minor=${doxy_version%%.*} 182 doxy_patch=${doxy_version##*.} 183 184 [ $doxy_major -gt 1 ] && enable_feature doxygen 185 [ $doxy_minor -gt 5 ] && enable_feature doxygen 186 [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable_feature doxygen 187 fi 188 189 # install everything except the sources, by default. sources will have 190 # to be enabled when doing dist builds, since that's no longer a common 191 # case. 192 enabled doxygen && php -v >/dev/null 2>&1 && enable_feature install_docs 193 enable_feature install_bins 194 enable_feature install_libs 195 196 enable_feature static 197 enable_feature optimizations 198 enable_feature fast_unaligned #allow unaligned accesses, if supported by hw 199 enable_feature spatial_resampling 200 enable_feature multithread 201 enable_feature os_support 202 enable_feature temporal_denoising 203 204 [ -d ${source_path}/../include ] && enable_feature alt_tree_layout 205 for d in vp8 vp9; do 206 [ -d ${source_path}/${d} ] && disable_feature alt_tree_layout; 207 done 208 209 if ! enabled alt_tree_layout; then 210 # development environment 211 [ -d ${source_path}/vp8 ] && CODECS="${CODECS} vp8_encoder vp8_decoder" 212 [ -d ${source_path}/vp9 ] && CODECS="${CODECS} vp9_encoder vp9_decoder" 213 else 214 # customer environment 215 [ -f ${source_path}/../include/vpx/vp8cx.h ] && CODECS="${CODECS} vp8_encoder" 216 [ -f ${source_path}/../include/vpx/vp8dx.h ] && CODECS="${CODECS} vp8_decoder" 217 [ -f ${source_path}/../include/vpx/vp9cx.h ] && CODECS="${CODECS} vp9_encoder" 218 [ -f ${source_path}/../include/vpx/vp9dx.h ] && CODECS="${CODECS} vp9_decoder" 219 [ -f ${source_path}/../include/vpx/vp8cx.h ] || disable_feature vp8_encoder 220 [ -f ${source_path}/../include/vpx/vp8dx.h ] || disable_feature vp8_decoder 221 [ -f ${source_path}/../include/vpx/vp9cx.h ] || disable_feature vp9_encoder 222 [ -f ${source_path}/../include/vpx/vp9dx.h ] || disable_feature vp9_decoder 223 224 [ -f ${source_path}/../lib/*/*mt.lib ] && soft_enable static_msvcrt 225 fi 226 227 CODECS="$(echo ${CODECS} | tr ' ' '\n')" 228 CODEC_FAMILIES="$(for c in ${CODECS}; do echo ${c%_*}; done | sort | uniq)" 229 230 ARCH_LIST=" 231 arm 232 mips 233 x86 234 x86_64 235 ppc32 236 ppc64 237 " 238 ARCH_EXT_LIST=" 239 edsp 240 media 241 neon 242 243 mips32 244 dspr2 245 246 mmx 247 sse 248 sse2 249 sse3 250 ssse3 251 sse4_1 252 avx 253 avx2 254 255 altivec 256 " 257 HAVE_LIST=" 258 ${ARCH_EXT_LIST} 259 vpx_ports 260 stdint_h 261 alt_tree_layout 262 pthread_h 263 sys_mman_h 264 unistd_h 265 " 266 EXPERIMENT_LIST=" 267 multiple_arf 268 alpha 269 " 270 CONFIG_LIST=" 271 external_build 272 install_docs 273 install_bins 274 install_libs 275 install_srcs 276 use_x86inc 277 debug 278 gprof 279 gcov 280 rvct 281 gcc 282 msvs 283 pic 284 big_endian 285 286 codec_srcs 287 debug_libs 288 fast_unaligned 289 mem_manager 290 mem_tracker 291 mem_checks 292 293 dequant_tokens 294 dc_recon 295 runtime_cpu_detect 296 postproc 297 vp9_postproc 298 multithread 299 internal_stats 300 ${CODECS} 301 ${CODEC_FAMILIES} 302 encoders 303 decoders 304 static_msvcrt 305 spatial_resampling 306 realtime_only 307 onthefly_bitpacking 308 error_concealment 309 shared 310 static 311 small 312 postproc_visualizer 313 os_support 314 unit_tests 315 webm_io 316 decode_perf_tests 317 multi_res_encoding 318 temporal_denoising 319 experimental 320 decrypt 321 ${EXPERIMENT_LIST} 322 " 323 CMDLINE_SELECT=" 324 external_build 325 extra_warnings 326 werror 327 install_docs 328 install_bins 329 install_libs 330 install_srcs 331 debug 332 gprof 333 gcov 334 pic 335 use_x86inc 336 optimizations 337 ccache 338 runtime_cpu_detect 339 thumb 340 341 libs 342 examples 343 docs 344 libc 345 as 346 fast_unaligned 347 codec_srcs 348 debug_libs 349 350 dequant_tokens 351 dc_recon 352 postproc 353 vp9_postproc 354 multithread 355 internal_stats 356 ${CODECS} 357 ${CODEC_FAMILIES} 358 static_msvcrt 359 mem_tracker 360 spatial_resampling 361 realtime_only 362 onthefly_bitpacking 363 error_concealment 364 shared 365 static 366 small 367 postproc_visualizer 368 unit_tests 369 webm_io 370 decode_perf_tests 371 multi_res_encoding 372 temporal_denoising 373 experimental 374 decrypt 375 " 376 377 process_cmdline() { 378 for opt do 379 optval="${opt#*=}" 380 case "$opt" in 381 --disable-codecs) for c in ${CODECS}; do disable_feature $c; done ;; 382 --enable-?*|--disable-?*) 383 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` 384 if echo "${EXPERIMENT_LIST}" | grep "^ *$option\$" >/dev/null; then 385 if enabled experimental; then 386 ${action}_feature $option 387 else 388 log_echo "Ignoring $opt -- not in experimental mode." 389 fi 390 else 391 process_common_cmdline $opt 392 fi 393 ;; 394 *) process_common_cmdline "$opt" 395 ;; 396 esac 397 done 398 } 399 400 post_process_cmdline() { 401 local c 402 403 # If the codec family is disabled, disable all components of that family. 404 # If the codec family is enabled, enable all components of that family. 405 log_echo "Configuring selected codecs" 406 for c in ${CODECS}; do 407 disabled ${c%%_*} && disable_feature ${c} 408 enabled ${c%%_*} && enable_feature ${c} 409 done 410 411 # Enable all detected codecs, if they haven't been disabled 412 for c in ${CODECS}; do soft_enable $c; done 413 414 # Enable the codec family if any component of that family is enabled 415 for c in ${CODECS}; do 416 enabled $c && enable_feature ${c%_*} 417 done 418 419 # Set the {en,de}coders variable if any algorithm in that class is enabled 420 for c in ${CODECS}; do 421 enabled ${c} && enable_feature ${c##*_}s 422 done 423 } 424 425 426 process_targets() { 427 enabled child || write_common_config_banner 428 enabled universal || write_common_target_config_h ${BUILD_PFX}vpx_config.h 429 430 # TODO: add host tools target (obj_int_extract, etc) 431 432 # For fat binaries, call configure recursively to configure for each 433 # binary architecture to be included. 434 if enabled universal; then 435 # Call configure (ourselves) for each subarchitecture 436 for arch in $fat_bin_archs; do 437 BUILD_PFX=${arch}/ toolchain=${arch} $self --child $cmdline_args || exit $? 438 done 439 fi 440 441 # The write_common_config (config.mk) logic is deferred until after the 442 # recursive calls to configure complete, because we want our universal 443 # targets to be executed last. 444 write_common_config_targets 445 enabled universal && echo "FAT_ARCHS=${fat_bin_archs}" >> config.mk 446 447 # Calculate the default distribution name, based on the enabled features 448 local cf 449 local DIST_DIR=vpx 450 for cf in $CODEC_FAMILIES; do 451 if enabled ${cf}_encoder && enabled ${cf}_decoder; then 452 DIST_DIR="${DIST_DIR}-${cf}" 453 elif enabled ${cf}_encoder; then 454 DIST_DIR="${DIST_DIR}-${cf}cx" 455 elif enabled ${cf}_decoder; then 456 DIST_DIR="${DIST_DIR}-${cf}dx" 457 fi 458 done 459 enabled debug_libs && DIST_DIR="${DIST_DIR}-debug" 460 enabled codec_srcs && DIST_DIR="${DIST_DIR}-src" 461 ! enabled postproc && ! enabled vp9_postproc && DIST_DIR="${DIST_DIR}-nopost" 462 ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt" 463 ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs" 464 DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}" 465 case "${tgt_os}" in 466 win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md" 467 DIST_DIR="${DIST_DIR}-${tgt_cc}" 468 ;; 469 esac 470 if [ -f "${source_path}/build/make/version.sh" ]; then 471 local ver=`"$source_path/build/make/version.sh" --bare $source_path` 472 DIST_DIR="${DIST_DIR}-${ver}" 473 VERSION_STRING=${ver} 474 ver=${ver%%-*} 475 VERSION_PATCH=${ver##*.} 476 ver=${ver%.*} 477 VERSION_MINOR=${ver##*.} 478 ver=${ver#v} 479 VERSION_MAJOR=${ver%.*} 480 fi 481 enabled child || cat <<EOF >> config.mk 482 483 PREFIX=${prefix} 484 ifeq (\$(MAKECMDGOALS),dist) 485 DIST_DIR?=${DIST_DIR} 486 else 487 DIST_DIR?=\$(DESTDIR)${prefix} 488 endif 489 LIBSUBDIR=${libdir##${prefix}/} 490 491 VERSION_STRING=${VERSION_STRING} 492 493 VERSION_MAJOR=${VERSION_MAJOR} 494 VERSION_MINOR=${VERSION_MINOR} 495 VERSION_PATCH=${VERSION_PATCH} 496 497 CONFIGURE_ARGS=${CONFIGURE_ARGS} 498 EOF 499 enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk 500 501 # 502 # Write makefiles for all enabled targets 503 # 504 for tgt in libs examples docs solution; do 505 local tgt_fn="$tgt-$toolchain.mk" 506 507 if enabled $tgt; then 508 echo "Creating makefiles for ${toolchain} ${tgt}" 509 write_common_target_config_mk $tgt_fn ${BUILD_PFX}vpx_config.h 510 #write_${tgt}_config 511 fi 512 done 513 514 } 515 516 process_detect() { 517 if enabled shared; then 518 # Can only build shared libs on a subset of platforms. Doing this check 519 # here rather than at option parse time because the target auto-detect 520 # magic happens after the command line has been parsed. 521 if ! enabled linux; then 522 if enabled gnu; then 523 echo "--enable-shared is only supported on ELF; assuming this is OK" 524 else 525 die "--enable-shared only supported on ELF for now" 526 fi 527 fi 528 fi 529 if [ -z "$CC" ] || enabled external_build; then 530 echo "Bypassing toolchain for environment detection." 531 enable_feature external_build 532 check_header() { 533 log fake_check_header "$@" 534 header=$1 535 shift 536 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'` 537 disable_feature $var 538 # Headers common to all environments 539 case $header in 540 stdio.h) 541 true; 542 ;; 543 *) 544 local result=false 545 for d in "$@"; do 546 [ -f "${d##-I}/$header" ] && result=true && break 547 done 548 ${result:-true} 549 esac && enable_feature $var 550 551 # Specialize windows and POSIX environments. 552 case $toolchain in 553 *-win*-*) 554 case $header-$toolchain in 555 stdint*-gcc) true;; 556 *) false;; 557 esac && enable_feature $var 558 ;; 559 *) 560 case $header in 561 stdint.h) true;; 562 pthread.h) true;; 563 sys/mman.h) true;; 564 unistd.h) true;; 565 *) false;; 566 esac && enable_feature $var 567 esac 568 enabled $var 569 } 570 check_ld() { 571 true 572 } 573 fi 574 check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}" 575 check_ld <<EOF || die "Toolchain is unable to link executables" 576 int main(void) {return 0;} 577 EOF 578 # check system headers 579 check_header stdint.h 580 check_header pthread.h 581 check_header sys/mman.h 582 check_header unistd.h # for sysconf(3) and friends. 583 584 check_header vpx/vpx_integer.h -I${source_path} && enable_feature vpx_ports 585 } 586 587 process_toolchain() { 588 process_common_toolchain 589 590 # Handle universal binaries for this architecture 591 case $toolchain in 592 universal-darwin*) 593 local darwin_ver=${tgt_os##darwin} 594 595 # Snow Leopard (10.6/darwin10) dropped support for PPC 596 # Include PPC support for all prior versions 597 if [ $darwin_ver -lt 10 ]; then 598 fat_bin_archs="$fat_bin_archs ppc32-${tgt_os}-gcc" 599 fi 600 601 # Tiger (10.4/darwin8) brought support for x86 602 if [ $darwin_ver -ge 8 ]; then 603 fat_bin_archs="$fat_bin_archs x86-${tgt_os}-${tgt_cc}" 604 fi 605 606 # Leopard (10.5/darwin9) brought 64 bit support 607 if [ $darwin_ver -ge 9 ]; then 608 fat_bin_archs="$fat_bin_archs x86_64-${tgt_os}-${tgt_cc}" 609 fi 610 ;; 611 esac 612 613 614 # Enable some useful compiler flags 615 if enabled gcc; then 616 enabled werror && check_add_cflags -Werror 617 check_add_cflags -Wall 618 check_add_cflags -Wdeclaration-after-statement 619 check_add_cflags -Wdisabled-optimization 620 check_add_cflags -Wpointer-arith 621 check_add_cflags -Wtype-limits 622 check_add_cflags -Wcast-qual 623 check_add_cflags -Wvla 624 check_add_cflags -Wimplicit-function-declaration 625 check_add_cflags -Wuninitialized 626 check_add_cflags -Wunused-variable 627 case ${CC} in 628 *clang*) 629 # libvpx and/or clang have issues with aliasing: 630 # https://code.google.com/p/webm/issues/detail?id=603 631 # work around them until they are fixed 632 check_add_cflags -fno-strict-aliasing 633 ;; 634 *) check_add_cflags -Wunused-but-set-variable ;; 635 esac 636 enabled extra_warnings || check_add_cflags -Wno-unused-function 637 fi 638 639 if enabled icc; then 640 enabled werror && check_add_cflags -Werror 641 check_add_cflags -Wall 642 check_add_cflags -Wpointer-arith 643 644 # ICC has a number of floating point optimizations that we disable 645 # in favor of deterministic output WRT to other compilers 646 add_cflags -fp-model precise 647 fi 648 649 # Enable extra, harmless warnings. These might provide additional insight 650 # to what the compiler is doing and why, but in general, but they shouldn't 651 # be treated as fatal, even if we're treating warnings as errors. 652 GCC_EXTRA_WARNINGS=" 653 -Wdisabled-optimization 654 -Winline 655 " 656 enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}" 657 RVCT_EXTRA_WARNINGS=" 658 --remarks 659 " 660 enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}" 661 if enabled extra_warnings; then 662 for w in ${EXTRA_WARNINGS}; do 663 check_add_cflags ${w} 664 enabled gcc && enabled werror && check_add_cflags -Wno-error=${w} 665 done 666 fi 667 668 # ccache only really works on gcc toolchains 669 enabled gcc || soft_disable ccache 670 if enabled mips; then 671 enable_feature dequant_tokens 672 enable_feature dc_recon 673 fi 674 675 if enabled internal_stats; then 676 enable_feature vp9_postproc 677 fi 678 679 # Enable the postbuild target if building for visual studio. 680 case "$tgt_cc" in 681 vs*) enable_feature msvs 682 enable_feature solution 683 vs_version=${tgt_cc##vs} 684 case $vs_version in 685 [789]) 686 VCPROJ_SFX=vcproj 687 gen_vcproj_cmd=${source_path}/build/make/gen_msvs_proj.sh 688 ;; 689 10|11|12) 690 VCPROJ_SFX=vcxproj 691 gen_vcproj_cmd=${source_path}/build/make/gen_msvs_vcxproj.sh 692 enabled werror && gen_vcproj_cmd="${gen_vcproj_cmd} --enable-werror" 693 ;; 694 esac 695 all_targets="${all_targets} solution" 696 INLINE="__forceinline" 697 ;; 698 esac 699 700 # Other toolchain specific defaults 701 case $toolchain in x86*|ppc*|universal*) soft_enable postproc;; esac 702 703 if enabled postproc_visualizer; then 704 enabled postproc || die "postproc_visualizer requires postproc to be enabled" 705 fi 706 707 # Enable WebM IO by default. 708 soft_enable webm_io 709 710 # Enable unit tests by default if we have a working C++ compiler. 711 case "$toolchain" in 712 *-vs*) 713 soft_enable unit_tests 714 ;; 715 *-android-*) 716 # GTestLog must be modified to use Android logging utilities. 717 ;; 718 *-darwin-*) 719 # iOS/ARM builds do not work with gtest. This does not match 720 # x86 targets. 721 ;; 722 *-win*) 723 # Some mingw toolchains don't have pthread available by default. 724 # Treat these more like visual studio where threading in gtest 725 # would be disabled for the same reason. 726 check_cxx "$@" <<EOF && soft_enable unit_tests 727 int z; 728 EOF 729 ;; 730 *) 731 enabled pthread_h && check_cxx "$@" <<EOF && soft_enable unit_tests 732 int z; 733 EOF 734 ;; 735 esac 736 } 737 738 739 ## 740 ## END APPLICATION SPECIFIC CONFIGURATION 741 ## 742 CONFIGURE_ARGS="$@" 743 process "$@" 744 print_webm_license ${BUILD_PFX}vpx_config.c "/*" " */" 745 cat <<EOF >> ${BUILD_PFX}vpx_config.c 746 static const char* const cfg = "$CONFIGURE_ARGS"; 747 const char *vpx_codec_build_config(void) {return cfg;} 748 EOF 749