configure revision 90d3ed91ae9228e1c8bab561b6138d4cb8c1e4fd
190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#!/bin/bash
290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##  Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##  Use of this source code is governed by a BSD-style license and patent
690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##  grant that can be found in the LICENSE file in the root of the source
790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##  tree. All contributing project authors may be found in the AUTHORS
890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##  file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#source_path="`dirname \"$0\"`"
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersource_path=${0%/*}
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber. "${source_path}/build/make/configure.sh"
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help(){
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    show_help_pre
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat << EOF
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAdvanced options:
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_libs}                  don't build libraries
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_examples}              don't build examples
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  --libc=PATH                     path to alternate libc
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_fast_unaligned}        don't use unaligned accesses, even when
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                                  supported by hardware [auto]
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_codec_srcs}            in/exclude codec library source code
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_debug_libs}            in/exclude debug version of libraries
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_eval_limit}            enable limited evaluation build
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_md5}                   support for output of checksum data
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_static_msvcrt}         use static MSVCRT (VS builds only)
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_vp8}                   VP8 codec support
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_psnr}                  output of PSNR data, if supported (encoders)
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_mem_tracker}           track memory usage
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_eval_limit}            decoder limitted to 500 frames
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_postproc}              postprocessing
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_multithread}           multithreaded encoding and decoding.
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_spatial_resampling}    spatial sampling (scaling) support
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_realtime_only}         enable this option while building for real-time encoding
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_runtime_cpu_detect}    runtime cpu detection
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCodecs:
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  Codecs can be selectively enabled or disabled individually, or by family:
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber      --disable-<codec>
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  is equivalent to:
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber      --disable-<codec>-encoder
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber      --disable-<codec>-decoder
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  Codecs available in this distribution:
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#restore editor state '
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local family;
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local last_family;
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local c;
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local str;
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        family=${c%_*}
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if [ "${family}" != "${last_family}" ]; then
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            [ -z "${str}" ] || echo "${str}"
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            str="$(printf '    %10s:' ${family})"
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        str="${str} $(printf '%10s' ${c#*_})"
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        last_family=${family}
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "${str}"
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    show_help_post
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber## BEGIN APPLICATION SPECIFIC CONFIGURATION
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# all_platforms is a list of all supported target platforms. Maintain
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# alphabetically by architecture, generic-gnu last.
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv5te-linux-rvct"
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv5te-linux-gcc"
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv5te-symbian-gcc"
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv5te-wince-vs8"
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv6-darwin-gcc"
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv6-linux-rvct"
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv6-linux-gcc"
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv6-symbian-gcc"
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv6-wince-vs8"
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} iwmmxt-linux-rvct"
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} iwmmxt-linux-gcc"
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} iwmmxt-wince-vs8"
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} iwmmxt2-linux-rvct"
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} iwmmxt2-linux-gcc"
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} iwmmxt2-wince-vs8"
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv7-darwin-gcc"    #neon Cortex-A8
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv7-linux-rvct"    #neon Cortex-A8
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} armv7-linux-gcc"     #neon Cortex-A8
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} mips32-linux-gcc"
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc32-darwin8-gcc"
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc32-darwin9-gcc"
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc64-darwin8-gcc"
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc64-darwin9-gcc"
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} ppc64-linux-gcc"
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-darwin8-gcc"
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-darwin8-icc"
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-darwin9-gcc"
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-darwin9-icc"
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-linux-gcc"
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-linux-icc"
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-solaris-gcc"
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-win32-gcc"
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-win32-vs7"
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86-win32-vs8"
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86_64-darwin9-gcc"
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86_64-linux-gcc"
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86_64-solaris-gcc"
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} x86_64-win64-vs8"
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} universal-darwin8-gcc"
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} universal-darwin9-gcc"
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_platforms="${all_platforms} generic-gnu"
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# all_targets is a list of all targets that can be configured
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# note that these should be in dependency order for now.
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberall_targets="libs examples docs"
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# all targets available are enabled, by default.
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor t in ${all_targets}; do
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    [ -f ${source_path}/${t}.mk ] && enable ${t}
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# check installed doxygen version
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdoxy_version=$(doxygen --version 2>/dev/null)
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdoxy_major=${doxy_version%%.*}
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif [ ${doxy_major:-0} -ge 1 ]; then
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    doxy_version=${doxy_version#*.}
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    doxy_minor=${doxy_version%%.*}
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    doxy_patch=${doxy_version##*.}
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    [ $doxy_major -gt 1 ] && enable doxygen
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    [ $doxy_minor -gt 5 ] && enable doxygen
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable doxygen
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# install everything, by default
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenabled doxygen && php -v >/dev/null 2>&1 && enable install_docs
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable install_bins
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable install_libs
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable install_srcs
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable optimizations
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable fast_unaligned #allow unaligned accesses, if supported by hw
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable md5
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable spatial_resampling
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable multithread
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -d ${source_path}/../include ] && enable alt_tree_layout
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor d in vp8; do
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    [ -d ${source_path}/${d} ] && disable alt_tree_layout;
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif ! enabled alt_tree_layout; then
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# development environment
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -d ${source_path}/vp8 ] && CODECS="${CODECS} vp8_encoder vp8_decoder"
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelse
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# customer environment
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -f ${source_path}/../include/vp8cx.h ] && CODECS="${CODECS} vp8_encoder"
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -f ${source_path}/../include/vp8dx.h ] && CODECS="${CODECS} vp8_decoder"
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -f ${source_path}/../lib/*/*mt.lib ] && soft_enable static_msvcrt
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCODECS="$(echo ${CODECS} | tr ' ' '\n')"
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCODEC_FAMILIES="$(for c in ${CODECS}; do echo ${c%_*}; done | sort | uniq)"
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberARCH_LIST="
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    arm
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mips
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    x86
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    x86_64
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ppc32
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ppc64
17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberARCH_EXT_LIST="
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    armv5te
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    armv6
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    armv7
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    iwmmxt
18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    iwmmxt2
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mips32
18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mmx
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sse
18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sse2
18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sse3
19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ssse3
19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    altivec
19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberHAVE_LIST="
19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${ARCH_EXT_LIST}
19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpx_ports
19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stdint_h
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    alt_tree_layout
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pthread_h
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sys_mman_h
20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCONFIG_LIST="
20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    external_build
20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_docs
20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_bins
20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_libs
20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_srcs
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug
20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gprof
21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gcov
21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    rvct
21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gcc
21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    msvs
21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pic
21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    big_endian
21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    codec_srcs
21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug_libs
21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fast_unaligned
22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mem_manager
22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mem_tracker
22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mem_checks
22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    md5
22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    dequant_tokens
22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    dc_recon
22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    new_tokens
22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    eval_limit
22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    runtime_cpu_detect
23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    postproc
23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    postproc_generic
23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    multithread
23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    psnr
23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${CODECS}
23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${CODEC_FAMILIES}
23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    encoders
23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    decoders
23890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    static_msvcrt
23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    spatial_resampling
24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    realtime_only
24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCMDLINE_SELECT="
24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    extra_warnings
24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    werror
24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_docs
24690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_bins
24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_libs
24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    install_srcs
24990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug
25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gprof
25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    gcov
25290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pic
25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    optimizations
25490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ccache
25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    runtime_cpu_detect
25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    libs
25890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    examples
25990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    libc
26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fast_unaligned
26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    codec_srcs
26290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug_libs
26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    md5
26490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    dequant_tokens
26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    dc_recon
26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    new_tokens
26890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    eval_limit
26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    postproc
27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    postproc_generic
27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    multithread
27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    psnr
27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${CODECS}
27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${CODEC_FAMILIES}
27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    static_msvcrt
27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mem_tracker
27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    spatial_resampling
27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    realtime_only
27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber"
28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_cmdline() {
28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for opt do
28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        optval="${opt#*=}"
28490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$opt" in
28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --disable-codecs) for c in ${CODECS}; do disable $c; done ;;
28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        *) process_common_cmdline $opt
28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
28990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
29090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
29190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpost_process_cmdline() {
29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local c
29490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # If the codec family is disabled, disable all components of that family.
29690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # If the codec family is enabled, enable all components of that family.
29790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log_echo "Configuring selected codecs"
29890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do
29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        disabled ${c%%_*} && disable ${c}
30090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled ${c%%_*} && enable ${c}
30190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
30290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable all detected codecs, if they haven't been disabled
30490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do soft_enable $c; done
30590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable the codec family if any component of that family is enabled
30790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do
30890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled $c && enable ${c%_*}
30990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
31090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Set the {en,de}coders variable if any algorithm in that class is enabled
31290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for c in ${CODECS}; do
31390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled ${c} && enable ${c##*_}s
31490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
31590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_targets() {
32190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled child || write_common_config_banner
32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled universal || write_common_target_config_h  ${BUILD_PFX}vpx_config.h
32390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # TODO: add host tools target (obj_int_extract, etc)
32590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # For fat binaries, call configure recursively to configure for each
32790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # binary architecture to be included.
32890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled universal; then
32990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # Call configure (ourselves) for each subarchitecture
33090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for arch in $fat_bin_archs; do
33190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            BUILD_PFX=${arch}/ toolchain=${arch} $self --child $cmdline_args || exit $?
33290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        done
33390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
33490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
33590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # The write_common_config (config.mk) logic is deferred until after the
33690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # recursive calls to configure complete, becuase we want our universal
33790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # targets to be executed last.
33890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    write_common_config_targets
33990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled universal && echo "FAT_ARCHS=${fat_bin_archs}" >> config.mk
34090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
34190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Calculate the default distribution name, based on the enabled features
34290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local cf
34390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local DIST_DIR=vpx
34490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for cf in $CODEC_FAMILIES; do
34590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled ${cf}_encoder && enabled ${cf}_decoder; then
34690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            DIST_DIR="${DIST_DIR}-${cf}"
34790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        elif enabled ${cf}_encoder; then
34890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            DIST_DIR="${DIST_DIR}-${cf}cx"
34990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        elif enabled ${cf}_decoder; then
35090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            DIST_DIR="${DIST_DIR}-${cf}dx"
35190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
35290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
35390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled debug_libs && DIST_DIR="${DIST_DIR}-debug"
35490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled codec_srcs && DIST_DIR="${DIST_DIR}-src"
35590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ! enabled postproc && DIST_DIR="${DIST_DIR}-nopost"
35690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt"
35790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled eval_limit && DIST_DIR="${DIST_DIR}-eval"
35890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs"
35990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}"
36090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case "${tgt_os}" in
36190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md"
36290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber          DIST_DIR="${DIST_DIR}-${tgt_cc}"
36390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber          ;;
36490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
36590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -f "${source_path}/build/make/version.sh" ]; then
36690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        local ver=`"$source_path/build/make/version.sh" --bare $source_path`
36790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        DIST_DIR="${DIST_DIR}-${ver}"
36890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
36990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled child || echo "DIST_DIR?=${DIST_DIR}" >> config.mk
37090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
37190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
37290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    #
37390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Write makefiles for all enabled targets
37490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    #
37590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for tgt in libs examples docs solution; do
37690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        local tgt_fn="$tgt-$toolchain.mk"
37790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
37890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled $tgt; then
37990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "Creating makefiles for ${toolchain} ${tgt}"
38090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            write_common_target_config_mk $tgt_fn ${BUILD_PFX}vpx_config.h
38190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            #write_${tgt}_config
38290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
38390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
38490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
38690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
38790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_detect() {
38890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -z "$CC" ]; then
38990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "Bypassing toolchain for environment detection."
39090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enable external_build
39190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_header() {
39290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            log fake_check_header "$@"
39390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            header=$1
39490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            shift
39590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
39690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            disable $var
39790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            case $header in
39890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                stdio.h)
39990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    true;
40090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                ;;
40190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                *)
40290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    local result=false
40390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    for d in "$@"; do
40490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        [ -f "${d##-I}/$header" ] && result=true && break
40590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    done
40690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    ${result:-true}
40790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            esac && enable $var
40890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_ld() {
41090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            true
41190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
41390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}"
41490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_ld <<EOF || die "Toolchain is unable to link executables"
41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint main(void) {return 0;}
41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # check system headers
41890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_header stdint.h
41990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_header pthread.h
42090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_header sys/mman.h
42190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
42290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_header vpx_ports/vpx_integer.h -I${source_path} && enable vpx_ports
42390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
42490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
42590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_toolchain() {
42690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_common_toolchain
42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Handle universal binaries for this architecture
42990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case $toolchain in
43090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        universal-darwin*)
43190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            local darwin_ver=${tgt_os##darwin}
43290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fat_bin_archs="$fat_bin_archs ppc32-${tgt_os}-gcc"
43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # Intel
43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fat_bin_archs="$fat_bin_archs x86-${tgt_os}-${tgt_cc}"
43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if [ $darwin_ver -gt 8 ]; then
43790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fat_bin_archs="$fat_bin_archs x86_64-${tgt_os}-${tgt_cc}"
43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
43990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
44090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
44190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
44290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
44390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable some useful compiler flags
44490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled gcc; then
44590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled werror && check_add_cflags -Werror
44690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wall
44790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wdeclaration-after-statement
44890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wdisabled-optimization
44990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wpointer-arith
45090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wtype-limits
45190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wcast-qual
45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled extra_warnings || check_add_cflags -Wno-unused
45390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
45490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
45590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled icc; then
45690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled werror && check_add_cflags -Werror
45790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wall
45890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -Wpointer-arith
45990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
46090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # ICC has a number of floating point optimizations that we disable
46190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # in favor of deterministic output WRT to other compilers
46290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add_cflags -fp-model precise
46390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
46490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
46590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable extra, harmless warnings. These might provide additional insight
46690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # to what the compiler is doing and why, but in general, but they shouldn't
46790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # be treated as fatal, even if we're treating warnings as errors.
46890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    GCC_EXTRA_WARNINGS="
46990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        -Wdisabled-optimization
47090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        -Winline
47190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    "
47290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}"
47390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    RVCT_EXTRA_WARNINGS="
47490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --remarks
47590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    "
47690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}"
47790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled extra_warnings; then
47890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for w in ${EXTRA_WARNINGS}; do
47990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_cflags ${w}
48090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enabled gcc && enabled werror && check_add_cflags -Wno-error=${w}
48190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        done
48290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
48390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
48490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # ccache only really works on gcc toolchains
48590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gcc || soft_disable ccache
48690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled mips; then
48790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enable dequant_tokens
48890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber	enable dc_recon
48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
49190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable the postbuild target if building for visual studio.
49290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case "$tgt_cc" in
49390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        vs*) enable msvs
49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber             enable solution
49590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber             vs_version=${tgt_cc##vs}
49690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber             all_targets="${all_targets} solution"
49790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber             INLINE=__inline
49890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber             FORCEINLINE=__forceinline
49990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
50090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
50190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
50290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Other toolchain specific defaults
50390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case $toolchain in x86*|ppc*|universal*) soft_enable postproc;; esac
50490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
50590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
50690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
50790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
50890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber## END APPLICATION SPECIFIC CONFIGURATION
50990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
51090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCONFIGURE_ARGS="$@"
51190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess "$@"
51290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercat <<EOF > ${BUILD_PFX}vpx_config.c
51390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberstatic const char* const cfg = "$CONFIGURE_ARGS";
51490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberconst char *vpx_codec_build_config(void) {return cfg;}
51590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
516