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