153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org#!/bin/sh
2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##
3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##  configure
4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##
5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##  This script is the front-end to the build system. It provides a similar
6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##  interface to standard configure scripts with some extra bits for dealing
7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##  with toolchains that differ from the standard POSIX interface and
8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##  for extracting subsets of the source tree. In theory, reusable parts
9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##  of this script were intended to live in build/make/configure.sh,
10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##  but in practice, the line is pretty blurry.
11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##
12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##  This build system is based in part on the FFmpeg configure script.
13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##
14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#source_path="`dirname \"$0\"`"
16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsource_path=${0%/*}
17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org. "${source_path}/build/make/configure.sh"
18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgshow_help(){
20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    show_help_pre
21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cat << EOF
22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgAdvanced options:
23ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  ${toggle_libs}                  libraries
24ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  ${toggle_examples}              examples
25ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  ${toggle_docs}                  documentation
26ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  ${toggle_unit_tests}            unit tests
27d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  ${toggle_decode_perf_tests}     build decoder perf tests with unit tests
2841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org  ${toggle_encode_perf_tests}     build encoder perf tests with unit tests
29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  --libc=PATH                     path to alternate libc
30ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org  --size-limit=WxH                max size to allow in the decoder
31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  --as={yasm|nasm|auto}           use specified assembler [auto, yasm preferred]
32d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  --sdk-path=PATH                 path to root of sdk (android builds only)
33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_fast_unaligned}        don't use unaligned accesses, even when
34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                                  supported by hardware [auto]
35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_codec_srcs}            in/exclude codec library source code
36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_debug_libs}            in/exclude debug version of libraries
37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_static_msvcrt}         use static MSVCRT (VS builds only)
38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_vp8}                   VP8 codec support
396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org  ${toggle_vp9}                   VP9 codec support
40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_internal_stats}        output of encoder internal stats for debug, if supported (encoders)
41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_mem_tracker}           track memory usage
42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_postproc}              postprocessing
43f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org  ${toggle_vp9_postproc}          vp9 specific postprocessing
44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  ${toggle_multithread}           multithreaded encoding and decoding
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_spatial_resampling}    spatial sampling (scaling) support
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_realtime_only}         enable this option while building for real-time encoding
475c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org  ${toggle_onthefly_bitpacking}   enable on-the-fly bitpacking in real-time encoding
48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_error_concealment}     enable this option to get a decoder which is able to conceal losses
4941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org  ${toggle_coefficient_range_checking}
5041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                                  enable decoder to check if intermediate
5141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                                  transform coefficients are in valid range
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_runtime_cpu_detect}    runtime cpu detection
53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_shared}                shared library support
54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_static}                static library support
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_small}                 favor smaller size over speed
56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  ${toggle_postproc_visualizer}   macro block / block level visualizers
57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  ${toggle_multi_res_encoding}    enable multiple-resolution encoding
585c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org  ${toggle_temporal_denoising}    enable temporal denoising and disable the spatial denoiser
5993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org  ${toggle_webm_io}               enable input from and output to WebM container
6088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  ${toggle_libyuv}                enable libyuv
61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgCodecs:
63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  Codecs can be selectively enabled or disabled individually, or by family:
64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org      --disable-<codec>
65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  is equivalent to:
66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org      --disable-<codec>-encoder
67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org      --disable-<codec>-decoder
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org  Codecs available in this distribution:
70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgEOF
71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#restore editor state '
72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
7341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    family="";
7441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    last_family="";
7541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    c="";
7641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    str="";
77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for c in ${CODECS}; do
78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        family=${c%_*}
79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        if [ "${family}" != "${last_family}" ]; then
80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            [ -z "${str}" ] || echo "${str}"
81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            str="$(printf '    %10s:' ${family})"
82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        fi
83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        str="${str} $(printf '%10s' ${c#*_})"
84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        last_family=${family}
85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    done
86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    echo "${str}"
87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    show_help_post
88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##
91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org## BEGIN APPLICATION SPECIFIC CONFIGURATION
92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##
93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# all_platforms is a list of all supported target platforms. Maintain
95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# alphabetically by architecture, generic-gnu last.
96167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgall_platforms="${all_platforms} armv5te-android-gcc"
97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv5te-linux-rvct"
98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv5te-linux-gcc"
99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv5te-none-rvct"
100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv6-darwin-gcc"
101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv6-linux-rvct"
102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv6-linux-gcc"
103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv6-none-rvct"
104e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.orgall_platforms="${all_platforms} arm64-darwin-gcc"
105167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgall_platforms="${all_platforms} armv7-android-gcc"   #neon Cortex-A8
106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv7-darwin-gcc"    #neon Cortex-A8
107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv7-linux-rvct"    #neon Cortex-A8
108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv7-linux-gcc"     #neon Cortex-A8
109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} armv7-none-rvct"     #neon Cortex-A8
11010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orgall_platforms="${all_platforms} armv7-win32-vs11"
111d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.orgall_platforms="${all_platforms} armv7-win32-vs12"
11288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgall_platforms="${all_platforms} armv7s-darwin-gcc"
113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} mips32-linux-gcc"
114ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.orgall_platforms="${all_platforms} mips64-linux-gcc"
115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} ppc32-darwin8-gcc"
116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} ppc32-darwin9-gcc"
117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} ppc32-linux-gcc"
118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} ppc64-darwin8-gcc"
119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} ppc64-darwin9-gcc"
120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} ppc64-linux-gcc"
121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} sparc-solaris-gcc"
122d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.orgall_platforms="${all_platforms} x86-android-gcc"
123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-darwin8-gcc"
124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-darwin8-icc"
125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-darwin9-gcc"
126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-darwin9-icc"
127167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgall_platforms="${all_platforms} x86-darwin10-gcc"
1285c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgall_platforms="${all_platforms} x86-darwin11-gcc"
1295c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgall_platforms="${all_platforms} x86-darwin12-gcc"
13047265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgall_platforms="${all_platforms} x86-darwin13-gcc"
13188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgall_platforms="${all_platforms} x86-iphonesimulator-gcc"
132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-linux-gcc"
133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-linux-icc"
1345c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgall_platforms="${all_platforms} x86-os2-gcc"
135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-solaris-gcc"
136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-win32-gcc"
137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-win32-vs7"
138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-win32-vs8"
139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86-win32-vs9"
14010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orgall_platforms="${all_platforms} x86-win32-vs10"
14110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orgall_platforms="${all_platforms} x86-win32-vs11"
142d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.orgall_platforms="${all_platforms} x86-win32-vs12"
143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86_64-darwin9-gcc"
144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86_64-darwin10-gcc"
145167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgall_platforms="${all_platforms} x86_64-darwin11-gcc"
1465c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgall_platforms="${all_platforms} x86_64-darwin12-gcc"
14747265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgall_platforms="${all_platforms} x86_64-darwin13-gcc"
14888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgall_platforms="${all_platforms} x86_64-iphonesimulator-gcc"
149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86_64-linux-gcc"
150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86_64-linux-icc"
151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86_64-solaris-gcc"
152167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgall_platforms="${all_platforms} x86_64-win64-gcc"
153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86_64-win64-vs8"
154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} x86_64-win64-vs9"
15510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orgall_platforms="${all_platforms} x86_64-win64-vs10"
15610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orgall_platforms="${all_platforms} x86_64-win64-vs11"
157d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.orgall_platforms="${all_platforms} x86_64-win64-vs12"
158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} universal-darwin8-gcc"
159474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} universal-darwin9-gcc"
1605c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgall_platforms="${all_platforms} universal-darwin10-gcc"
1615c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgall_platforms="${all_platforms} universal-darwin11-gcc"
1625c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgall_platforms="${all_platforms} universal-darwin12-gcc"
16347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgall_platforms="${all_platforms} universal-darwin13-gcc"
164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_platforms="${all_platforms} generic-gnu"
165474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# all_targets is a list of all targets that can be configured
167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# note that these should be in dependency order for now.
168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgall_targets="libs examples docs"
169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# all targets available are enabled, by default.
171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgfor t in ${all_targets}; do
172693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com    [ -f "${source_path}/${t}.mk" ] && enable_feature ${t}
173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgdone
174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
17593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgif ! perl --version >/dev/null; then
17693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org    die "Perl is required to build"
17793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgfi
17893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org
17993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org
180693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comif [ "`cd \"${source_path}\" && pwd`" != "`pwd`" ]; then
18193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org  # test to see if source_path already configured
182693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com  if [ -f "${source_path}/vpx_config.h" ]; then
18393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org    die "source directory already configured; run 'make distclean' there first"
18493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org  fi
18593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgfi
18693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org
187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# check installed doxygen version
188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgdoxy_version=$(doxygen --version 2>/dev/null)
189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgdoxy_major=${doxy_version%%.*}
190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgif [ ${doxy_major:-0} -ge 1 ]; then
191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    doxy_version=${doxy_version#*.}
192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    doxy_minor=${doxy_version%%.*}
193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    doxy_patch=${doxy_version##*.}
194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
19553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org    [ $doxy_major -gt 1 ] && enable_feature doxygen
19653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org    [ $doxy_minor -gt 5 ] && enable_feature doxygen
19753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org    [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable_feature doxygen
198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgfi
199474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# install everything except the sources, by default. sources will have
201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# to be enabled when doing dist builds, since that's no longer a common
202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# case.
2037765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.orgenabled doxygen && enable_feature install_docs
20453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgenable_feature install_bins
20553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgenable_feature install_libs
20653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org
20753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgenable_feature static
20853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgenable_feature optimizations
20953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgenable_feature fast_unaligned #allow unaligned accesses, if supported by hw
21053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgenable_feature spatial_resampling
21153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgenable_feature multithread
21253a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgenable_feature os_support
21353a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgenable_feature temporal_denoising
21453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org
215693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -d "${source_path}/../include" ] && enable_feature alt_tree_layout
2166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgfor d in vp8 vp9; do
217693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com    [ -d "${source_path}/${d}" ] && disable_feature alt_tree_layout;
218474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgdone
219474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
220474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgif ! enabled alt_tree_layout; then
221474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# development environment
222693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -d "${source_path}/vp8" ] && CODECS="${CODECS} vp8_encoder vp8_decoder"
223693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -d "${source_path}/vp9" ] && CODECS="${CODECS} vp9_encoder vp9_decoder"
224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgelse
225474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# customer environment
226693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -f "${source_path}/../include/vpx/vp8cx.h" ] && CODECS="${CODECS} vp8_encoder"
227693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -f "${source_path}/../include/vpx/vp8dx.h" ] && CODECS="${CODECS} vp8_decoder"
228693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -f "${source_path}/../include/vpx/vp9cx.h" ] && CODECS="${CODECS} vp9_encoder"
229693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -f "${source_path}/../include/vpx/vp9dx.h" ] && CODECS="${CODECS} vp9_decoder"
230693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -f "${source_path}/../include/vpx/vp8cx.h" ] || disable_feature vp8_encoder
231693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -f "${source_path}/../include/vpx/vp8dx.h" ] || disable_feature vp8_decoder
232693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -f "${source_path}/../include/vpx/vp9cx.h" ] || disable_feature vp9_encoder
233693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -f "${source_path}/../include/vpx/vp9dx.h" ] || disable_feature vp9_decoder
234693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com
235693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com[ -f "${source_path}/../lib/*/*mt.lib" ] && soft_enable static_msvcrt
236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgfi
237474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
238474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgCODECS="$(echo ${CODECS} | tr ' ' '\n')"
239474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgCODEC_FAMILIES="$(for c in ${CODECS}; do echo ${c%_*}; done | sort | uniq)"
240474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
241474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgARCH_LIST="
242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    arm
243474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mips
244474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    x86
245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    x86_64
246474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ppc32
247474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ppc64
248474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org"
249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgARCH_EXT_LIST="
2505c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    edsp
2515c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    media
2525c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    neon
2537765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org    neon_asm
254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mips32
256ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    dspr2
257474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
258ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org    mips64
259ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org
260474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mmx
261474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sse
262474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sse2
263474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sse3
264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ssse3
265474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sse4_1
266085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org    avx
267085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org    avx2
268474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    altivec
270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org"
271474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgHAVE_LIST="
272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ${ARCH_EXT_LIST}
273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vpx_ports
274474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    stdint_h
275474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    alt_tree_layout
276474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pthread_h
277474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sys_mman_h
278474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unistd_h
279474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org"
2806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgEXPERIMENT_LIST="
28188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    spatial_svc
28241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    vp9_temporal_denoising
283e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org    fp_mb_stats
28487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org    emulate_hardware_highbitdepth
2856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org"
286474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgCONFIG_LIST="
287474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    external_build
288474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    install_docs
289474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    install_bins
290474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    install_libs
291474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    install_srcs
29253a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org    use_x86inc
293474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    debug
294474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    gprof
295474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    gcov
296474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    rvct
297474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    gcc
298474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    msvs
299474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pic
300474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    big_endian
301474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
302474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    codec_srcs
303474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    debug_libs
304474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fast_unaligned
305474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mem_manager
306474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mem_tracker
307474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mem_checks
308474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
309474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    dequant_tokens
310474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    dc_recon
311474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    runtime_cpu_detect
312474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    postproc
313f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org    vp9_postproc
314474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    multithread
315474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    internal_stats
316474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ${CODECS}
317474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ${CODEC_FAMILIES}
318474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    encoders
319474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    decoders
320474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    static_msvcrt
321474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    spatial_resampling
322474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    realtime_only
3235c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    onthefly_bitpacking
324474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    error_concealment
325474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    shared
326474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    static
327474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    small
328474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    postproc_visualizer
329474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    os_support
330167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    unit_tests
33193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org    webm_io
33288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    libyuv
333d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org    decode_perf_tests
33441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    encode_perf_tests
335167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    multi_res_encoding
3365c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    temporal_denoising
33741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    coefficient_range_checking
338d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org    vp9_highbitdepth
3396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org    experimental
340ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org    size_limit
3416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org    ${EXPERIMENT_LIST}
342474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org"
343474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgCMDLINE_SELECT="
3446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org    external_build
345474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    extra_warnings
346474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    werror
347474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    install_docs
348474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    install_bins
349474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    install_libs
350474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    install_srcs
351474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    debug
352474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    gprof
353474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    gcov
354474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pic
35553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org    use_x86inc
356474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    optimizations
357474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ccache
358474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    runtime_cpu_detect
35910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org    thumb
360474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
361474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    libs
362474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    examples
363ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    docs
364474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    libc
365474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    as
366ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org    size_limit
367474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fast_unaligned
368474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    codec_srcs
369474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    debug_libs
370474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
371474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    dequant_tokens
372474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    dc_recon
373474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    postproc
374f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org    vp9_postproc
375474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    multithread
376474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    internal_stats
377474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ${CODECS}
378474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ${CODEC_FAMILIES}
379474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    static_msvcrt
380474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mem_tracker
381474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    spatial_resampling
382474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    realtime_only
3835c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    onthefly_bitpacking
384474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    error_concealment
385474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    shared
386474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    static
387474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    small
388474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    postproc_visualizer
389167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    unit_tests
39093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org    webm_io
39188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    libyuv
392d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org    decode_perf_tests
39341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    encode_perf_tests
394167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    multi_res_encoding
3955c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    temporal_denoising
39641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    coefficient_range_checking
397d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org    vp9_highbitdepth
3986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org    experimental
399474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org"
400474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
401474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgprocess_cmdline() {
402474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for opt do
403474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        optval="${opt#*=}"
404474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        case "$opt" in
40553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org        --disable-codecs) for c in ${CODECS}; do disable_feature $c; done ;;
4066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org        --enable-?*|--disable-?*)
4076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
4086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org        if echo "${EXPERIMENT_LIST}" | grep "^ *$option\$" >/dev/null; then
4096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org            if enabled experimental; then
41053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org                ${action}_feature $option
4116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org            else
4126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                log_echo "Ignoring $opt -- not in experimental mode."
4136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org            fi
4146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org        else
4156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org            process_common_cmdline $opt
4166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org        fi
4176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org        ;;
418474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        *) process_common_cmdline "$opt"
419474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        ;;
420474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        esac
421474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    done
422474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
423474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
424474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgpost_process_cmdline() {
42541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    c=""
426474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
427474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # If the codec family is disabled, disable all components of that family.
428474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # If the codec family is enabled, enable all components of that family.
429474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    log_echo "Configuring selected codecs"
430474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for c in ${CODECS}; do
43153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org        disabled ${c%%_*} && disable_feature ${c}
43253a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org        enabled ${c%%_*} && enable_feature ${c}
433474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    done
434474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
435474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Enable all detected codecs, if they haven't been disabled
436474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for c in ${CODECS}; do soft_enable $c; done
437474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
438474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Enable the codec family if any component of that family is enabled
439474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for c in ${CODECS}; do
44053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org        enabled $c && enable_feature ${c%_*}
441474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    done
442474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
443474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Set the {en,de}coders variable if any algorithm in that class is enabled
444474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for c in ${CODECS}; do
44553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org        enabled ${c} && enable_feature ${c##*_}s
446474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    done
447474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
448474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
449474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
450474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgprocess_targets() {
451474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled child || write_common_config_banner
452474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled universal || write_common_target_config_h  ${BUILD_PFX}vpx_config.h
453474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
454474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # TODO: add host tools target (obj_int_extract, etc)
455474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
456474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # For fat binaries, call configure recursively to configure for each
457474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # binary architecture to be included.
458474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if enabled universal; then
459474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        # Call configure (ourselves) for each subarchitecture
460474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        for arch in $fat_bin_archs; do
461474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            BUILD_PFX=${arch}/ toolchain=${arch} $self --child $cmdline_args || exit $?
462474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        done
463474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fi
464474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
465474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # The write_common_config (config.mk) logic is deferred until after the
466085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org    # recursive calls to configure complete, because we want our universal
467474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # targets to be executed last.
468474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    write_common_config_targets
469474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled universal && echo "FAT_ARCHS=${fat_bin_archs}" >> config.mk
470474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
471474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Calculate the default distribution name, based on the enabled features
47241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    cf=""
47341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    DIST_DIR=vpx
474474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for cf in $CODEC_FAMILIES; do
475474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        if enabled ${cf}_encoder && enabled ${cf}_decoder; then
476474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            DIST_DIR="${DIST_DIR}-${cf}"
477474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        elif enabled ${cf}_encoder; then
478474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            DIST_DIR="${DIST_DIR}-${cf}cx"
479474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        elif enabled ${cf}_decoder; then
480474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            DIST_DIR="${DIST_DIR}-${cf}dx"
481474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        fi
482474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    done
483474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled debug_libs && DIST_DIR="${DIST_DIR}-debug"
484474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled codec_srcs && DIST_DIR="${DIST_DIR}-src"
485f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org    ! enabled postproc && ! enabled vp9_postproc && DIST_DIR="${DIST_DIR}-nopost"
486474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt"
487474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs"
488474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}"
489474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    case "${tgt_os}" in
490474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md"
491474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org          DIST_DIR="${DIST_DIR}-${tgt_cc}"
492474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org          ;;
493474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    esac
494474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if [ -f "${source_path}/build/make/version.sh" ]; then
49541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org        ver=`"$source_path/build/make/version.sh" --bare "$source_path"`
496474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        DIST_DIR="${DIST_DIR}-${ver}"
497474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        VERSION_STRING=${ver}
498474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        ver=${ver%%-*}
499474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        VERSION_PATCH=${ver##*.}
500474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        ver=${ver%.*}
501474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        VERSION_MINOR=${ver##*.}
502474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        ver=${ver#v}
503474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        VERSION_MAJOR=${ver%.*}
504474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fi
505474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled child || cat <<EOF >> config.mk
506474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
507474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgPREFIX=${prefix}
508474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgifeq (\$(MAKECMDGOALS),dist)
509474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgDIST_DIR?=${DIST_DIR}
510474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgelse
511474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgDIST_DIR?=\$(DESTDIR)${prefix}
512474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgendif
513474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgLIBSUBDIR=${libdir##${prefix}/}
514474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
515474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgVERSION_STRING=${VERSION_STRING}
516474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
517474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgVERSION_MAJOR=${VERSION_MAJOR}
518474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgVERSION_MINOR=${VERSION_MINOR}
519474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgVERSION_PATCH=${VERSION_PATCH}
520474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
521474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgCONFIGURE_ARGS=${CONFIGURE_ARGS}
522474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgEOF
523474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
524474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
525474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    #
526474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Write makefiles for all enabled targets
527474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    #
528474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for tgt in libs examples docs solution; do
52941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org        tgt_fn="$tgt-$toolchain.mk"
530474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
531474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        if enabled $tgt; then
532474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            echo "Creating makefiles for ${toolchain} ${tgt}"
533474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            write_common_target_config_mk $tgt_fn ${BUILD_PFX}vpx_config.h
534474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            #write_${tgt}_config
535474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        fi
536474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    done
537474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
538474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
539474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
540474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgprocess_detect() {
541474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if enabled shared; then
542474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        # Can only build shared libs on a subset of platforms. Doing this check
543474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        # here rather than at option parse time because the target auto-detect
544474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        # magic happens after the command line has been parsed.
545ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        if ! enabled linux; then
546ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            if enabled gnu; then
547ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                echo "--enable-shared is only supported on ELF; assuming this is OK"
548ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            else
549ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                die "--enable-shared only supported on ELF for now"
550ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            fi
551ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        fi
552474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fi
5536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org    if [ -z "$CC" ] || enabled external_build; then
554474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        echo "Bypassing toolchain for environment detection."
55553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org        enable_feature external_build
556474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_header() {
557474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            log fake_check_header "$@"
558474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            header=$1
559474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            shift
560474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
56153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org            disable_feature $var
5626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org            # Headers common to all environments
563474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            case $header in
564474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                stdio.h)
565474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    true;
566474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                ;;
567474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                *)
56841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    result=false
569474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    for d in "$@"; do
570474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        [ -f "${d##-I}/$header" ] && result=true && break
571474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    done
572474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    ${result:-true}
57353a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org            esac && enable_feature $var
5746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org
5756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org            # Specialize windows and POSIX environments.
5766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org            case $toolchain in
5776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                *-win*-*)
5786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                    case $header-$toolchain in
5796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                        stdint*-gcc) true;;
5806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                        *) false;;
58153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org                    esac && enable_feature $var
5826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                    ;;
5836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                *)
5846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                    case $header in
5856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                        stdint.h) true;;
5866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                        pthread.h) true;;
5876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                        sys/mman.h) true;;
5886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                        unistd.h) true;;
5896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org                        *) false;;
59053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org                    esac && enable_feature $var
5916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org            esac
5926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org            enabled $var
593474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
594474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_ld() {
595474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            true
596474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
597474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fi
598474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}"
599474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    check_ld <<EOF || die "Toolchain is unable to link executables"
600474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgint main(void) {return 0;}
601474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgEOF
602474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # check system headers
603474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    check_header stdint.h
604474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    check_header pthread.h
605474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    check_header sys/mman.h
6066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org    check_header unistd.h # for sysconf(3) and friends.
607474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
60853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org    check_header vpx/vpx_integer.h -I${source_path} && enable_feature vpx_ports
609474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
610474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
611474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgprocess_toolchain() {
612474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    process_common_toolchain
613474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
614474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Handle universal binaries for this architecture
615474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    case $toolchain in
616474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        universal-darwin*)
61741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org            darwin_ver=${tgt_os##darwin}
618474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
6195c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            # Snow Leopard (10.6/darwin10) dropped support for PPC
6205c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            # Include PPC support for all prior versions
6215c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            if [ $darwin_ver -lt 10 ]; then
6225c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                fat_bin_archs="$fat_bin_archs ppc32-${tgt_os}-gcc"
6235c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            fi
6245c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
6255c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            # Tiger (10.4/darwin8) brought support for x86
6265c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            if [ $darwin_ver -ge 8 ]; then
6275c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                fat_bin_archs="$fat_bin_archs x86-${tgt_os}-${tgt_cc}"
6285c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            fi
6295c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
6305c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            # Leopard (10.5/darwin9) brought 64 bit support
6315c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            if [ $darwin_ver -ge 9 ]; then
632474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                fat_bin_archs="$fat_bin_archs x86_64-${tgt_os}-${tgt_cc}"
633474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            fi
634474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            ;;
635474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    esac
636474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
637474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
638474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Enable some useful compiler flags
639474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if enabled gcc; then
640474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        enabled werror && check_add_cflags -Werror
641474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_add_cflags -Wall
642474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_add_cflags -Wdeclaration-after-statement
643474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_add_cflags -Wdisabled-optimization
644474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_add_cflags -Wpointer-arith
645474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_add_cflags -Wtype-limits
646474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_add_cflags -Wcast-qual
6476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org        check_add_cflags -Wvla
6485c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        check_add_cflags -Wimplicit-function-declaration
6495c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        check_add_cflags -Wuninitialized
6505c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        check_add_cflags -Wunused-variable
65110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org        case ${CC} in
652085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org          *clang*)
653085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org              # libvpx and/or clang have issues with aliasing:
654085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org              # https://code.google.com/p/webm/issues/detail?id=603
655085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org              # work around them until they are fixed
656085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org              check_add_cflags -fno-strict-aliasing
657085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org          ;;
65810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org          *) check_add_cflags -Wunused-but-set-variable ;;
65910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org        esac
660474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        enabled extra_warnings || check_add_cflags -Wno-unused-function
661474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fi
662474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
663474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if enabled icc; then
664474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        enabled werror && check_add_cflags -Werror
665474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_add_cflags -Wall
666474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        check_add_cflags -Wpointer-arith
667474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
668474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        # ICC has a number of floating point optimizations that we disable
669474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        # in favor of deterministic output WRT to other compilers
670474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add_cflags -fp-model precise
671474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fi
672474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
673474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Enable extra, harmless warnings. These might provide additional insight
674474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # to what the compiler is doing and why, but in general, but they shouldn't
675474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # be treated as fatal, even if we're treating warnings as errors.
676474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    GCC_EXTRA_WARNINGS="
677474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        -Wdisabled-optimization
678474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        -Winline
679474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    "
680474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}"
681474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    RVCT_EXTRA_WARNINGS="
682474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        --remarks
683474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    "
684474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}"
685474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if enabled extra_warnings; then
686474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        for w in ${EXTRA_WARNINGS}; do
687474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            check_add_cflags ${w}
688474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            enabled gcc && enabled werror && check_add_cflags -Wno-error=${w}
689474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        done
690474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fi
691474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
692474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # ccache only really works on gcc toolchains
693474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enabled gcc || soft_disable ccache
694474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if enabled mips; then
69553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org        enable_feature dequant_tokens
69653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org        enable_feature dc_recon
697474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fi
698474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
699f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org    if enabled internal_stats; then
700f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org        enable_feature vp9_postproc
701f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org    fi
702f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org
703474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Enable the postbuild target if building for visual studio.
704474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    case "$tgt_cc" in
70553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org        vs*) enable_feature msvs
70653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org             enable_feature solution
707474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org             vs_version=${tgt_cc##vs}
70810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org             case $vs_version in
70910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org             [789])
71010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org                 VCPROJ_SFX=vcproj
71110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org                 gen_vcproj_cmd=${source_path}/build/make/gen_msvs_proj.sh
71210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org                 ;;
713d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org             10|11|12)
71410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org                 VCPROJ_SFX=vcxproj
71510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org                 gen_vcproj_cmd=${source_path}/build/make/gen_msvs_vcxproj.sh
71693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org                 enabled werror && gen_vcproj_cmd="${gen_vcproj_cmd} --enable-werror"
71710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org                 ;;
71810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org             esac
719474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org             all_targets="${all_targets} solution"
720923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org             INLINE="__forceinline"
721474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        ;;
722474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    esac
723474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
724474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    # Other toolchain specific defaults
725474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    case $toolchain in x86*|ppc*|universal*) soft_enable postproc;; esac
726474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
727474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if enabled postproc_visualizer; then
728474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        enabled postproc || die "postproc_visualizer requires postproc to be enabled"
729474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    fi
730ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
731da24c9017693dec11c2925131958a7e0e0b9f1cffgalligan@chromium.org    # Enable unit tests by default if we have a working C++ compiler.
732ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    case "$toolchain" in
733ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        *-vs*)
734ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            soft_enable unit_tests
735693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com            soft_enable webm_io
73688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org            soft_enable libyuv
737ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        ;;
738ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        *-android-*)
739810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org            soft_enable webm_io
74088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org            soft_enable libyuv
741ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            # GTestLog must be modified to use Android logging utilities.
742ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        ;;
743d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org        *-darwin-*)
744d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org            # iOS/ARM builds do not work with gtest. This does not match
745d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org            # x86 targets.
746d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org        ;;
74788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org        *-iphonesimulator-*)
74888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org            soft_enable webm_io
74988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org            soft_enable libyuv
75088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org        ;;
75147265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org        *-win*)
75247265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org            # Some mingw toolchains don't have pthread available by default.
75347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org            # Treat these more like visual studio where threading in gtest
75447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org            # would be disabled for the same reason.
75547265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org            check_cxx "$@" <<EOF && soft_enable unit_tests
75647265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgint z;
75747265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgEOF
758693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com            check_cxx "$@" <<EOF && soft_enable webm_io
759693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comint z;
760693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comEOF
76188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org            check_cxx "$@" <<EOF && soft_enable libyuv
76288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgint z;
76388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgEOF
76447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org        ;;
765ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        *)
766d0351deb5037171ecec154298d37e3a74d992b0dfgalligan@chromium.org            enabled pthread_h && check_cxx "$@" <<EOF && soft_enable unit_tests
767ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgint z;
768ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgEOF
769693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com            check_cxx "$@" <<EOF && soft_enable webm_io
770693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comint z;
771693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comEOF
77288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org            check_cxx "$@" <<EOF && soft_enable libyuv
77388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgint z;
77488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgEOF
775ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        ;;
776ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    esac
777693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com    # libwebm needs to be linked with C++ standard library
778693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com    enabled webm_io && LD=${CXX}
779474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
780474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
781474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
782474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##
783474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org## END APPLICATION SPECIFIC CONFIGURATION
784474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org##
785474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgCONFIGURE_ARGS="$@"
786474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgprocess "$@"
787167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgprint_webm_license ${BUILD_PFX}vpx_config.c "/*" " */"
788167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgcat <<EOF >> ${BUILD_PFX}vpx_config.c
789474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic const char* const cfg = "$CONFIGURE_ARGS";
790474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgconst char *vpx_codec_build_config(void) {return cfg;}
791474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgEOF
792