11184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#!/bin/sh
290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
3f71323e297a928af368937089d3ed71239786f86Andreas Huber##  configure
490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
5f71323e297a928af368937089d3ed71239786f86Andreas Huber##  This script is the front-end to the build system. It provides a similar
6f71323e297a928af368937089d3ed71239786f86Andreas Huber##  interface to standard configure scripts with some extra bits for dealing
7f71323e297a928af368937089d3ed71239786f86Andreas Huber##  with toolchains that differ from the standard POSIX interface and
8f71323e297a928af368937089d3ed71239786f86Andreas Huber##  for extracting subsets of the source tree. In theory, reusable parts
9f71323e297a928af368937089d3ed71239786f86Andreas Huber##  of this script were intended to live in build/make/configure.sh,
10f71323e297a928af368937089d3ed71239786f86Andreas Huber##  but in practice, the line is pretty blurry.
11f71323e297a928af368937089d3ed71239786f86Andreas Huber##
12f71323e297a928af368937089d3ed71239786f86Andreas Huber##  This build system is based in part on the FFmpeg configure script.
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#source_path="`dirname \"$0\"`"
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersource_path=${0%/*}
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber. "${source_path}/build/make/configure.sh"
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help(){
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    show_help_pre
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat << EOF
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAdvanced options:
231b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_libs}                  libraries
241b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_examples}              examples
251b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_docs}                  documentation
261b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_unit_tests}            unit tests
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  --libc=PATH                     path to alternate libc
28538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber  --as={yasm|nasm|auto}           use specified assembler [auto, yasm preferred]
291b362b15af34006e6a11974088a46d42b903418eJohann  --sdk-path=PATH                 path to root of sdk (iOS, android builds only)
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_fast_unaligned}        don't use unaligned accesses, even when
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                                  supported by hardware [auto]
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_codec_srcs}            in/exclude codec library source code
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_debug_libs}            in/exclude debug version of libraries
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_md5}                   support for output of checksum data
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_static_msvcrt}         use static MSVCRT (VS builds only)
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_vp8}                   VP8 codec support
37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  ${toggle_vp9}                   VP9 codec support
381b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_internal_stats}        output of encoder internal stats for debug, if supported (encoders)
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_mem_tracker}           track memory usage
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_postproc}              postprocessing
411184aebb761cbeac9124c37189a80a1a58f04b6bhkuang  ${toggle_vp9_postproc}          vp9 specific postprocessing
421b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_multithread}           multithreaded encoding and decoding
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_spatial_resampling}    spatial sampling (scaling) support
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_realtime_only}         enable this option while building for real-time encoding
451b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_onthefly_bitpacking}   enable on-the-fly bitpacking in real-time encoding
461b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_error_concealment}     enable this option to get a decoder which is able to conceal losses
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_runtime_cpu_detect}    runtime cpu detection
48f71323e297a928af368937089d3ed71239786f86Andreas Huber  ${toggle_shared}                shared library support
491b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_static}                static library support
50538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber  ${toggle_small}                 favor smaller size over speed
5179f15823c34ae1e423108295e416213200bb280fAndreas Huber  ${toggle_postproc_visualizer}   macro block / block level visualizers
521b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_multi_res_encoding}    enable multiple-resolution encoding
531b362b15af34006e6a11974088a46d42b903418eJohann  ${toggle_temporal_denoising}    enable temporal denoising and disable the spatial denoiser
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCodecs:
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  Codecs can be selectively enabled or disabled individually, or by family:
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber      --disable-<codec>
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  is equivalent to:
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber      --disable-<codec>-encoder
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber      --disable-<codec>-decoder
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  Codecs available in this distribution:
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#restore editor state '
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local family;
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local last_family;
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local c;
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local str;
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        family=${c%_*}
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if [ "${family}" != "${last_family}" ]; then
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            [ -z "${str}" ] || echo "${str}"
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            str="$(printf '    %10s:' ${family})"
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        str="${str} $(printf '%10s' ${c#*_})"
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        last_family=${family}
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "${str}"
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    show_help_post
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber## BEGIN APPLICATION SPECIFIC CONFIGURATION
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# all_platforms is a list of all supported target platforms. Maintain
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# alphabetically by architecture, generic-gnu last.
891b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} armv5te-android-gcc"
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv5te-linux-rvct"
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv5te-linux-gcc"
9279f15823c34ae1e423108295e416213200bb280fAndreas Huberall_platforms="${all_platforms} armv5te-none-rvct"
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv6-darwin-gcc"
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv6-linux-rvct"
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv6-linux-gcc"
9679f15823c34ae1e423108295e416213200bb280fAndreas Huberall_platforms="${all_platforms} armv6-none-rvct"
971b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} armv7-android-gcc"   #neon Cortex-A8
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv7-darwin-gcc"    #neon Cortex-A8
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv7-linux-rvct"    #neon Cortex-A8
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv7-linux-gcc"     #neon Cortex-A8
10179f15823c34ae1e423108295e416213200bb280fAndreas Huberall_platforms="${all_platforms} armv7-none-rvct"     #neon Cortex-A8
102ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangall_platforms="${all_platforms} armv7-win32-vs11"
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} mips32-linux-gcc"
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc32-darwin8-gcc"
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc32-darwin9-gcc"
106538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberall_platforms="${all_platforms} ppc32-linux-gcc"
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc64-darwin8-gcc"
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc64-darwin9-gcc"
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc64-linux-gcc"
110538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberall_platforms="${all_platforms} sparc-solaris-gcc"
111ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangall_platforms="${all_platforms} x86-android-gcc"
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-darwin8-gcc"
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-darwin8-icc"
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-darwin9-gcc"
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-darwin9-icc"
1161b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} x86-darwin10-gcc"
1171b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} x86-darwin11-gcc"
1181b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} x86-darwin12-gcc"
11991037db265ecdd914a26e056cf69207b4f50924ehkuangall_platforms="${all_platforms} x86-darwin13-gcc"
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-linux-gcc"
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-linux-icc"
1221b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} x86-os2-gcc"
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-solaris-gcc"
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-win32-gcc"
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-win32-vs7"
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-win32-vs8"
127f71323e297a928af368937089d3ed71239786f86Andreas Huberall_platforms="${all_platforms} x86-win32-vs9"
128ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangall_platforms="${all_platforms} x86-win32-vs10"
129ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangall_platforms="${all_platforms} x86-win32-vs11"
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86_64-darwin9-gcc"
13179f15823c34ae1e423108295e416213200bb280fAndreas Huberall_platforms="${all_platforms} x86_64-darwin10-gcc"
1321b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} x86_64-darwin11-gcc"
1331b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} x86_64-darwin12-gcc"
13491037db265ecdd914a26e056cf69207b4f50924ehkuangall_platforms="${all_platforms} x86_64-darwin13-gcc"
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86_64-linux-gcc"
136f71323e297a928af368937089d3ed71239786f86Andreas Huberall_platforms="${all_platforms} x86_64-linux-icc"
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86_64-solaris-gcc"
1381b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} x86_64-win64-gcc"
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86_64-win64-vs8"
140f71323e297a928af368937089d3ed71239786f86Andreas Huberall_platforms="${all_platforms} x86_64-win64-vs9"
141ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangall_platforms="${all_platforms} x86_64-win64-vs10"
142ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangall_platforms="${all_platforms} x86_64-win64-vs11"
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} universal-darwin8-gcc"
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} universal-darwin9-gcc"
1451b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} universal-darwin10-gcc"
1461b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} universal-darwin11-gcc"
1471b362b15af34006e6a11974088a46d42b903418eJohannall_platforms="${all_platforms} universal-darwin12-gcc"
14891037db265ecdd914a26e056cf69207b4f50924ehkuangall_platforms="${all_platforms} universal-darwin13-gcc"
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} generic-gnu"
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# all_targets is a list of all targets that can be configured
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note that these should be in dependency order for now.
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_targets="libs examples docs"
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# all targets available are enabled, by default.
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor t in ${all_targets}; do
1571184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    [ -f ${source_path}/${t}.mk ] && enable_feature ${t}
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# check installed doxygen version
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdoxy_version=$(doxygen --version 2>/dev/null)
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdoxy_major=${doxy_version%%.*}
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif [ ${doxy_major:-0} -ge 1 ]; then
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    doxy_version=${doxy_version#*.}
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    doxy_minor=${doxy_version%%.*}
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    doxy_patch=${doxy_version##*.}
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1681184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    [ $doxy_major -gt 1 ] && enable_feature doxygen
1691184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    [ $doxy_minor -gt 5 ] && enable_feature doxygen
1701184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable_feature doxygen
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
173f71323e297a928af368937089d3ed71239786f86Andreas Huber# install everything except the sources, by default. sources will have
174f71323e297a928af368937089d3ed71239786f86Andreas Huber# to be enabled when doing dist builds, since that's no longer a common
175f71323e297a928af368937089d3ed71239786f86Andreas Huber# case.
1761184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenabled doxygen && php -v >/dev/null 2>&1 && enable_feature install_docs
1771184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature install_bins
1781184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature install_libs
1791184aebb761cbeac9124c37189a80a1a58f04b6bhkuang
1801184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature static
1811184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature optimizations
1821184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature fast_unaligned #allow unaligned accesses, if supported by hw
1831184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature md5
1841184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature spatial_resampling
1851184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature multithread
1861184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature os_support
1871184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature temporal_denoising
1881184aebb761cbeac9124c37189a80a1a58f04b6bhkuang
1891184aebb761cbeac9124c37189a80a1a58f04b6bhkuang[ -d ${source_path}/../include ] && enable_feature alt_tree_layout
190ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfor d in vp8 vp9; do
1911184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    [ -d ${source_path}/${d} ] && disable_feature alt_tree_layout;
19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif ! enabled alt_tree_layout; then
19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# development environment
19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -d ${source_path}/vp8 ] && CODECS="${CODECS} vp8_encoder vp8_decoder"
197ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang[ -d ${source_path}/vp9 ] && CODECS="${CODECS} vp9_encoder vp9_decoder"
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelse
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# customer environment
200f71323e297a928af368937089d3ed71239786f86Andreas Huber[ -f ${source_path}/../include/vpx/vp8cx.h ] && CODECS="${CODECS} vp8_encoder"
201f71323e297a928af368937089d3ed71239786f86Andreas Huber[ -f ${source_path}/../include/vpx/vp8dx.h ] && CODECS="${CODECS} vp8_decoder"
202ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang[ -f ${source_path}/../include/vpx/vp9cx.h ] && CODECS="${CODECS} vp9_encoder"
203ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang[ -f ${source_path}/../include/vpx/vp9dx.h ] && CODECS="${CODECS} vp9_decoder"
2041184aebb761cbeac9124c37189a80a1a58f04b6bhkuang[ -f ${source_path}/../include/vpx/vp8cx.h ] || disable_feature vp8_encoder
2051184aebb761cbeac9124c37189a80a1a58f04b6bhkuang[ -f ${source_path}/../include/vpx/vp8dx.h ] || disable_feature vp8_decoder
2061184aebb761cbeac9124c37189a80a1a58f04b6bhkuang[ -f ${source_path}/../include/vpx/vp9cx.h ] || disable_feature vp9_encoder
2071184aebb761cbeac9124c37189a80a1a58f04b6bhkuang[ -f ${source_path}/../include/vpx/vp9dx.h ] || disable_feature vp9_decoder
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -f ${source_path}/../lib/*/*mt.lib ] && soft_enable static_msvcrt
21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCODECS="$(echo ${CODECS} | tr ' ' '\n')"
21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCODEC_FAMILIES="$(for c in ${CODECS}; do echo ${c%_*}; done | sort | uniq)"
21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberARCH_LIST="
21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    arm
21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mips
21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    x86
21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    x86_64
22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ppc32
22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ppc64
22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberARCH_EXT_LIST="
2241b362b15af34006e6a11974088a46d42b903418eJohann    edsp
2251b362b15af34006e6a11974088a46d42b903418eJohann    media
2261b362b15af34006e6a11974088a46d42b903418eJohann    neon
22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mips32
2291b362b15af34006e6a11974088a46d42b903418eJohann    dspr2
23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mmx
23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sse
23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sse2
23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sse3
23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ssse3
236538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    sse4_1
2375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang    avx
2385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang    avx2
23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    altivec
24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberHAVE_LIST="
24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${ARCH_EXT_LIST}
24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpx_ports
24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stdint_h
24690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    alt_tree_layout
24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pthread_h
24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sys_mman_h
2491b362b15af34006e6a11974088a46d42b903418eJohann    unistd_h
25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
251ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangEXPERIMENT_LIST="
252ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    multiple_arf
253ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    non420
254ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    alpha
255ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang"
25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCONFIG_LIST="
25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    external_build
25890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_docs
25990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_bins
26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_libs
26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_srcs
262f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang    use_x86inc
26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug
26490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gprof
26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gcov
26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    rvct
26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gcc
26890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    msvs
26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pic
27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    big_endian
27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    codec_srcs
27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug_libs
27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fast_unaligned
27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mem_manager
27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mem_tracker
27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mem_checks
27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    md5
27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    dequant_tokens
28190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    dc_recon
28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    runtime_cpu_detect
28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    postproc
2841184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    vp9_postproc
28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    multithread
2861b362b15af34006e6a11974088a46d42b903418eJohann    internal_stats
28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${CODECS}
28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${CODEC_FAMILIES}
28990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    encoders
29090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    decoders
29190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    static_msvcrt
29290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    spatial_resampling
29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    realtime_only
2941b362b15af34006e6a11974088a46d42b903418eJohann    onthefly_bitpacking
2951b362b15af34006e6a11974088a46d42b903418eJohann    error_concealment
296f71323e297a928af368937089d3ed71239786f86Andreas Huber    shared
2971b362b15af34006e6a11974088a46d42b903418eJohann    static
298538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    small
29979f15823c34ae1e423108295e416213200bb280fAndreas Huber    postproc_visualizer
30079f15823c34ae1e423108295e416213200bb280fAndreas Huber    os_support
3011b362b15af34006e6a11974088a46d42b903418eJohann    unit_tests
3021b362b15af34006e6a11974088a46d42b903418eJohann    multi_res_encoding
3031b362b15af34006e6a11974088a46d42b903418eJohann    temporal_denoising
304ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    experimental
305ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    decrypt
306ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    ${EXPERIMENT_LIST}
30790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
30890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCMDLINE_SELECT="
309ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    external_build
31090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    extra_warnings
31190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    werror
31290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_docs
31390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_bins
31490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_libs
31590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_srcs
31690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug
31790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gprof
31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gcov
31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pic
3201184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    use_x86inc
32190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    optimizations
32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ccache
32390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    runtime_cpu_detect
324ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    thumb
32590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    libs
32790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    examples
3281b362b15af34006e6a11974088a46d42b903418eJohann    docs
32990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    libc
330538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    as
33190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fast_unaligned
33290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    codec_srcs
33390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug_libs
33490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    md5
33590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
33690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    dequant_tokens
33790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    dc_recon
33890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    postproc
3391184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    vp9_postproc
34090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    multithread
3411b362b15af34006e6a11974088a46d42b903418eJohann    internal_stats
34290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${CODECS}
34390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${CODEC_FAMILIES}
34490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    static_msvcrt
34590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mem_tracker
34690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    spatial_resampling
34790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    realtime_only
3481b362b15af34006e6a11974088a46d42b903418eJohann    onthefly_bitpacking
3491b362b15af34006e6a11974088a46d42b903418eJohann    error_concealment
350f71323e297a928af368937089d3ed71239786f86Andreas Huber    shared
3511b362b15af34006e6a11974088a46d42b903418eJohann    static
352538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    small
35379f15823c34ae1e423108295e416213200bb280fAndreas Huber    postproc_visualizer
3541b362b15af34006e6a11974088a46d42b903418eJohann    unit_tests
3551b362b15af34006e6a11974088a46d42b903418eJohann    multi_res_encoding
3561b362b15af34006e6a11974088a46d42b903418eJohann    temporal_denoising
357ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    experimental
358ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    decrypt
35990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
36090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
36190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_cmdline() {
36290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for opt do
36390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        optval="${opt#*=}"
36490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$opt" in
3651184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        --disable-codecs) for c in ${CODECS}; do disable_feature $c; done ;;
366ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        --enable-?*|--disable-?*)
367ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
368ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        if echo "${EXPERIMENT_LIST}" | grep "^ *$option\$" >/dev/null; then
369ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            if enabled experimental; then
3701184aebb761cbeac9124c37189a80a1a58f04b6bhkuang                ${action}_feature $option
371ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            else
372ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                log_echo "Ignoring $opt -- not in experimental mode."
373ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            fi
374ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        else
375ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            process_common_cmdline $opt
376ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        fi
377ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        ;;
37879f15823c34ae1e423108295e416213200bb280fAndreas Huber        *) process_common_cmdline "$opt"
37990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
38090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
38190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
38290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
38390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
38490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpost_process_cmdline() {
38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local c
38690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
38790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # If the codec family is disabled, disable all components of that family.
38890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # If the codec family is enabled, enable all components of that family.
38990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log_echo "Configuring selected codecs"
39090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do
3911184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        disabled ${c%%_*} && disable_feature ${c}
3921184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        enabled ${c%%_*} && enable_feature ${c}
39390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
39490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable all detected codecs, if they haven't been disabled
39690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do soft_enable $c; done
39790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable the codec family if any component of that family is enabled
39990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do
4001184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        enabled $c && enable_feature ${c%_*}
40190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
40290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
40390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Set the {en,de}coders variable if any algorithm in that class is enabled
40490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do
4051184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        enabled ${c} && enable_feature ${c##*_}s
40690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
40790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
40890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
41090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_targets() {
41190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled child || write_common_config_banner
41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled universal || write_common_target_config_h  ${BUILD_PFX}vpx_config.h
41390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
41490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # TODO: add host tools target (obj_int_extract, etc)
41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # For fat binaries, call configure recursively to configure for each
41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # binary architecture to be included.
41890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled universal; then
41990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # Call configure (ourselves) for each subarchitecture
42090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for arch in $fat_bin_archs; do
42190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            BUILD_PFX=${arch}/ toolchain=${arch} $self --child $cmdline_args || exit $?
42290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        done
42390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
42490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
42590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # The write_common_config (config.mk) logic is deferred until after the
4265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang    # recursive calls to configure complete, because we want our universal
42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # targets to be executed last.
42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    write_common_config_targets
42990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled universal && echo "FAT_ARCHS=${fat_bin_archs}" >> config.mk
43090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
43190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Calculate the default distribution name, based on the enabled features
43290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local cf
43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local DIST_DIR=vpx
43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for cf in $CODEC_FAMILIES; do
43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled ${cf}_encoder && enabled ${cf}_decoder; then
43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            DIST_DIR="${DIST_DIR}-${cf}"
43790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        elif enabled ${cf}_encoder; then
43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            DIST_DIR="${DIST_DIR}-${cf}cx"
43990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        elif enabled ${cf}_decoder; then
44090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            DIST_DIR="${DIST_DIR}-${cf}dx"
44190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
44290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
44390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled debug_libs && DIST_DIR="${DIST_DIR}-debug"
44490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled codec_srcs && DIST_DIR="${DIST_DIR}-src"
4451184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    ! enabled postproc && ! enabled vp9_postproc && DIST_DIR="${DIST_DIR}-nopost"
44690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt"
44790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs"
44890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}"
44990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case "${tgt_os}" in
45090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md"
45190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber          DIST_DIR="${DIST_DIR}-${tgt_cc}"
45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber          ;;
45390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
45490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -f "${source_path}/build/make/version.sh" ]; then
45590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        local ver=`"$source_path/build/make/version.sh" --bare $source_path`
45690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        DIST_DIR="${DIST_DIR}-${ver}"
45779f15823c34ae1e423108295e416213200bb280fAndreas Huber        VERSION_STRING=${ver}
458f71323e297a928af368937089d3ed71239786f86Andreas Huber        ver=${ver%%-*}
459f71323e297a928af368937089d3ed71239786f86Andreas Huber        VERSION_PATCH=${ver##*.}
460f71323e297a928af368937089d3ed71239786f86Andreas Huber        ver=${ver%.*}
461f71323e297a928af368937089d3ed71239786f86Andreas Huber        VERSION_MINOR=${ver##*.}
462f71323e297a928af368937089d3ed71239786f86Andreas Huber        ver=${ver#v}
463f71323e297a928af368937089d3ed71239786f86Andreas Huber        VERSION_MAJOR=${ver%.*}
46490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
465f71323e297a928af368937089d3ed71239786f86Andreas Huber    enabled child || cat <<EOF >> config.mk
46679f15823c34ae1e423108295e416213200bb280fAndreas Huber
46779f15823c34ae1e423108295e416213200bb280fAndreas HuberPREFIX=${prefix}
468f71323e297a928af368937089d3ed71239786f86Andreas Huberifeq (\$(MAKECMDGOALS),dist)
469f71323e297a928af368937089d3ed71239786f86Andreas HuberDIST_DIR?=${DIST_DIR}
470f71323e297a928af368937089d3ed71239786f86Andreas Huberelse
471f71323e297a928af368937089d3ed71239786f86Andreas HuberDIST_DIR?=\$(DESTDIR)${prefix}
472f71323e297a928af368937089d3ed71239786f86Andreas Huberendif
473f71323e297a928af368937089d3ed71239786f86Andreas HuberLIBSUBDIR=${libdir##${prefix}/}
474f71323e297a928af368937089d3ed71239786f86Andreas Huber
47579f15823c34ae1e423108295e416213200bb280fAndreas HuberVERSION_STRING=${VERSION_STRING}
47679f15823c34ae1e423108295e416213200bb280fAndreas Huber
477f71323e297a928af368937089d3ed71239786f86Andreas HuberVERSION_MAJOR=${VERSION_MAJOR}
478f71323e297a928af368937089d3ed71239786f86Andreas HuberVERSION_MINOR=${VERSION_MINOR}
479f71323e297a928af368937089d3ed71239786f86Andreas HuberVERSION_PATCH=${VERSION_PATCH}
480f71323e297a928af368937089d3ed71239786f86Andreas Huber
481f71323e297a928af368937089d3ed71239786f86Andreas HuberCONFIGURE_ARGS=${CONFIGURE_ARGS}
482f71323e297a928af368937089d3ed71239786f86Andreas HuberEOF
48390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
48490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
48590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    #
48690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Write makefiles for all enabled targets
48790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    #
48890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for tgt in libs examples docs solution; do
48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        local tgt_fn="$tgt-$toolchain.mk"
49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
49190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled $tgt; then
49290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "Creating makefiles for ${toolchain} ${tgt}"
49390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            write_common_target_config_mk $tgt_fn ${BUILD_PFX}vpx_config.h
49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            #write_${tgt}_config
49590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
49690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
49790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
49890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
49990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
50090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_detect() {
501f71323e297a928af368937089d3ed71239786f86Andreas Huber    if enabled shared; then
502f71323e297a928af368937089d3ed71239786f86Andreas Huber        # Can only build shared libs on a subset of platforms. Doing this check
503f71323e297a928af368937089d3ed71239786f86Andreas Huber        # here rather than at option parse time because the target auto-detect
504f71323e297a928af368937089d3ed71239786f86Andreas Huber        # magic happens after the command line has been parsed.
5051b362b15af34006e6a11974088a46d42b903418eJohann        if ! enabled linux; then
5061b362b15af34006e6a11974088a46d42b903418eJohann            if enabled gnu; then
5071b362b15af34006e6a11974088a46d42b903418eJohann                echo "--enable-shared is only supported on ELF; assuming this is OK"
5081b362b15af34006e6a11974088a46d42b903418eJohann            else
5091b362b15af34006e6a11974088a46d42b903418eJohann                die "--enable-shared only supported on ELF for now"
5101b362b15af34006e6a11974088a46d42b903418eJohann            fi
5111b362b15af34006e6a11974088a46d42b903418eJohann        fi
512f71323e297a928af368937089d3ed71239786f86Andreas Huber    fi
513ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    if [ -z "$CC" ] || enabled external_build; then
51490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "Bypassing toolchain for environment detection."
5151184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        enable_feature external_build
51690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_header() {
51790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            log fake_check_header "$@"
51890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            header=$1
51990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            shift
52090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
5211184aebb761cbeac9124c37189a80a1a58f04b6bhkuang            disable_feature $var
522ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            # Headers common to all environments
52390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            case $header in
52490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                stdio.h)
52590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    true;
52690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                ;;
52790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                *)
52890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    local result=false
52990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    for d in "$@"; do
53090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        [ -f "${d##-I}/$header" ] && result=true && break
53190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    done
53290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    ${result:-true}
5331184aebb761cbeac9124c37189a80a1a58f04b6bhkuang            esac && enable_feature $var
534ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
535ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            # Specialize windows and POSIX environments.
536ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            case $toolchain in
537ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                *-win*-*)
538ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                    case $header-$toolchain in
539ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                        stdint*-gcc) true;;
540ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                        *) false;;
5411184aebb761cbeac9124c37189a80a1a58f04b6bhkuang                    esac && enable_feature $var
542ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                    ;;
543ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                *)
544ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                    case $header in
545ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                        stdint.h) true;;
546ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                        pthread.h) true;;
547ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                        sys/mman.h) true;;
548ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                        unistd.h) true;;
549ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                        *) false;;
5501184aebb761cbeac9124c37189a80a1a58f04b6bhkuang                    esac && enable_feature $var
551ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            esac
552ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            enabled $var
55390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
55490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_ld() {
55590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            true
55690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
55790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
55890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}"
55990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_ld <<EOF || die "Toolchain is unable to link executables"
56090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint main(void) {return 0;}
56190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
56290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # check system headers
56390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_header stdint.h
56490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_header pthread.h
56590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_header sys/mman.h
566ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    check_header unistd.h # for sysconf(3) and friends.
56790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5681184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    check_header vpx/vpx_integer.h -I${source_path} && enable_feature vpx_ports
56990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
57090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
57190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_toolchain() {
57290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_common_toolchain
57390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
57490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Handle universal binaries for this architecture
57590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case $toolchain in
57690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        universal-darwin*)
57790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            local darwin_ver=${tgt_os##darwin}
57890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5791b362b15af34006e6a11974088a46d42b903418eJohann            # Snow Leopard (10.6/darwin10) dropped support for PPC
5801b362b15af34006e6a11974088a46d42b903418eJohann            # Include PPC support for all prior versions
5811b362b15af34006e6a11974088a46d42b903418eJohann            if [ $darwin_ver -lt 10 ]; then
5821b362b15af34006e6a11974088a46d42b903418eJohann                fat_bin_archs="$fat_bin_archs ppc32-${tgt_os}-gcc"
5831b362b15af34006e6a11974088a46d42b903418eJohann            fi
5841b362b15af34006e6a11974088a46d42b903418eJohann
5851b362b15af34006e6a11974088a46d42b903418eJohann            # Tiger (10.4/darwin8) brought support for x86
5861b362b15af34006e6a11974088a46d42b903418eJohann            if [ $darwin_ver -ge 8 ]; then
5871b362b15af34006e6a11974088a46d42b903418eJohann                fat_bin_archs="$fat_bin_archs x86-${tgt_os}-${tgt_cc}"
5881b362b15af34006e6a11974088a46d42b903418eJohann            fi
5891b362b15af34006e6a11974088a46d42b903418eJohann
5901b362b15af34006e6a11974088a46d42b903418eJohann            # Leopard (10.5/darwin9) brought 64 bit support
5911b362b15af34006e6a11974088a46d42b903418eJohann            if [ $darwin_ver -ge 9 ]; then
59290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fat_bin_archs="$fat_bin_archs x86_64-${tgt_os}-${tgt_cc}"
59390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
59490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
59590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
59690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
59790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
59890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable some useful compiler flags
59990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled gcc; then
60090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled werror && check_add_cflags -Werror
60190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wall
60290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wdeclaration-after-statement
60390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wdisabled-optimization
60490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wpointer-arith
60590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wtype-limits
60690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wcast-qual
607ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        check_add_cflags -Wvla
6081b362b15af34006e6a11974088a46d42b903418eJohann        check_add_cflags -Wimplicit-function-declaration
6091b362b15af34006e6a11974088a46d42b903418eJohann        check_add_cflags -Wuninitialized
6101b362b15af34006e6a11974088a46d42b903418eJohann        check_add_cflags -Wunused-variable
611ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        case ${CC} in
6125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang          *clang*)
6135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang              # libvpx and/or clang have issues with aliasing:
6145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang              # https://code.google.com/p/webm/issues/detail?id=603
6155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang              # work around them until they are fixed
6165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang              check_add_cflags -fno-strict-aliasing
6175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang          ;;
618ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang          *) check_add_cflags -Wunused-but-set-variable ;;
619ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        esac
62079f15823c34ae1e423108295e416213200bb280fAndreas Huber        enabled extra_warnings || check_add_cflags -Wno-unused-function
62190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
62290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
62390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled icc; then
62490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled werror && check_add_cflags -Werror
62590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wall
62690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wpointer-arith
62790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
62890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # ICC has a number of floating point optimizations that we disable
62990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # in favor of deterministic output WRT to other compilers
63090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add_cflags -fp-model precise
63190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
63290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
63390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable extra, harmless warnings. These might provide additional insight
63490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # to what the compiler is doing and why, but in general, but they shouldn't
63590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # be treated as fatal, even if we're treating warnings as errors.
63690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    GCC_EXTRA_WARNINGS="
63790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        -Wdisabled-optimization
63890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        -Winline
63990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    "
64090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}"
64190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    RVCT_EXTRA_WARNINGS="
64290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --remarks
64390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    "
64490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}"
64590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled extra_warnings; then
64690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for w in ${EXTRA_WARNINGS}; do
64790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_cflags ${w}
64890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enabled gcc && enabled werror && check_add_cflags -Wno-error=${w}
64990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        done
65090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
65190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
65290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # ccache only really works on gcc toolchains
65390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gcc || soft_disable ccache
65490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled mips; then
6551184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        enable_feature dequant_tokens
6561184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        enable_feature dc_recon
6571184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    fi
6581184aebb761cbeac9124c37189a80a1a58f04b6bhkuang
6591184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    if enabled internal_stats; then
6601184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        enable_feature vp9_postproc
66190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
66290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
66390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable the postbuild target if building for visual studio.
66490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case "$tgt_cc" in
6651184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        vs*) enable_feature msvs
6661184aebb761cbeac9124c37189a80a1a58f04b6bhkuang             enable_feature solution
66790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber             vs_version=${tgt_cc##vs}
668ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang             case $vs_version in
669ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang             [789])
670ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                 VCPROJ_SFX=vcproj
671ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                 gen_vcproj_cmd=${source_path}/build/make/gen_msvs_proj.sh
672ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                 ;;
673ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang             10|11)
674ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                 VCPROJ_SFX=vcxproj
675ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                 gen_vcproj_cmd=${source_path}/build/make/gen_msvs_vcxproj.sh
676ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                 ;;
677ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang             esac
67890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber             all_targets="${all_targets} solution"
679ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang             INLINE="__forceinline"
68090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
68190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
68290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
68390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Other toolchain specific defaults
68490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case $toolchain in x86*|ppc*|universal*) soft_enable postproc;; esac
68579f15823c34ae1e423108295e416213200bb280fAndreas Huber
68679f15823c34ae1e423108295e416213200bb280fAndreas Huber    if enabled postproc_visualizer; then
68779f15823c34ae1e423108295e416213200bb280fAndreas Huber        enabled postproc || die "postproc_visualizer requires postproc to be enabled"
68879f15823c34ae1e423108295e416213200bb280fAndreas Huber    fi
6891b362b15af34006e6a11974088a46d42b903418eJohann
690ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    # Enable unit tests by default if we have a working C++ compiler.
6911b362b15af34006e6a11974088a46d42b903418eJohann    case "$toolchain" in
6921b362b15af34006e6a11974088a46d42b903418eJohann        *-vs*)
6931b362b15af34006e6a11974088a46d42b903418eJohann            soft_enable unit_tests
6941b362b15af34006e6a11974088a46d42b903418eJohann        ;;
6951b362b15af34006e6a11974088a46d42b903418eJohann        *-android-*)
6961b362b15af34006e6a11974088a46d42b903418eJohann            # GTestLog must be modified to use Android logging utilities.
6971b362b15af34006e6a11974088a46d42b903418eJohann        ;;
698ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        *-darwin-*)
699ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            # iOS/ARM builds do not work with gtest. This does not match
700ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            # x86 targets.
701ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        ;;
70291037db265ecdd914a26e056cf69207b4f50924ehkuang        *-win*)
70391037db265ecdd914a26e056cf69207b4f50924ehkuang            # Some mingw toolchains don't have pthread available by default.
70491037db265ecdd914a26e056cf69207b4f50924ehkuang            # Treat these more like visual studio where threading in gtest
70591037db265ecdd914a26e056cf69207b4f50924ehkuang            # would be disabled for the same reason.
70691037db265ecdd914a26e056cf69207b4f50924ehkuang            check_cxx "$@" <<EOF && soft_enable unit_tests
70791037db265ecdd914a26e056cf69207b4f50924ehkuangint z;
70891037db265ecdd914a26e056cf69207b4f50924ehkuangEOF
70991037db265ecdd914a26e056cf69207b4f50924ehkuang        ;;
7101b362b15af34006e6a11974088a46d42b903418eJohann        *)
711ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            enabled pthread_h && check_cxx "$@" <<EOF && soft_enable unit_tests
7121b362b15af34006e6a11974088a46d42b903418eJohannint z;
7131b362b15af34006e6a11974088a46d42b903418eJohannEOF
7141b362b15af34006e6a11974088a46d42b903418eJohann        ;;
7151b362b15af34006e6a11974088a46d42b903418eJohann    esac
71690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
71790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
71890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
71990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
72090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber## END APPLICATION SPECIFIC CONFIGURATION
72190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
72290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCONFIGURE_ARGS="$@"
72390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess "$@"
7241b362b15af34006e6a11974088a46d42b903418eJohannprint_webm_license ${BUILD_PFX}vpx_config.c "/*" " */"
7251b362b15af34006e6a11974088a46d42b903418eJohanncat <<EOF >> ${BUILD_PFX}vpx_config.c
72690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberstatic const char* const cfg = "$CONFIGURE_ARGS";
72790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberconst char *vpx_codec_build_config(void) {return cfg;}
72890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
729