1ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#!/bin/sh
2ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##
3ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##  Copyright (c) 2014 The WebM project authors. All Rights Reserved.
4ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##
5ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##  Use of this source code is governed by a BSD-style license
6ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##  that can be found in the LICENSE file in the root of the source
7ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##  tree. An additional intellectual property rights grant can be found
8ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##  in the file PATENTS.  All contributing project authors may
9ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##  be found in the AUTHORS file in the root of the source tree.
10ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##
11ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##
12ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian## This script generates 'VPX.framework'. An iOS app can encode and decode VPx
13ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian## video by including 'VPX.framework'.
14ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##
15ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian## Run iosbuild.sh to create 'VPX.framework' in the current directory.
16ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian##
17ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianset -e
18ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniandevnull='> /dev/null 2>&1'
19ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
20ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianBUILD_ROOT="_iosbuild"
217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianCONFIGURE_ARGS="--disable-docs
227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                --disable-examples
237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                --disable-libyuv
247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                --disable-unit-tests"
25ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianDIST_DIR="_dist"
26ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianFRAMEWORK_DIR="VPX.framework"
27ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianHEADER_DIR="${FRAMEWORK_DIR}/Headers/vpx"
28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianMAKE_JOBS=1
297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianSCRIPT_DIR=$(dirname "$0")
307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianLIBVPX_SOURCE_DIR=$(cd ${SCRIPT_DIR}/../..; pwd)
31ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIPO=$(xcrun -sdk iphoneos${SDK} -find lipo)
32ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianORIG_PWD="$(pwd)"
33ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianTARGETS="arm64-darwin-gcc
34ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         armv7-darwin-gcc
35ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         armv7s-darwin-gcc
36ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         x86-iphonesimulator-gcc
37ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         x86_64-iphonesimulator-gcc"
38ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
39ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Configures for the target specified by $1, and invokes make with the dist
40ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# target using $DIST_DIR as the distribution output directory.
41ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianbuild_target() {
42ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local target="$1"
43ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local old_pwd="$(pwd)"
44ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
45ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  vlog "***Building target: ${target}***"
46ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
47ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  mkdir "${target}"
48ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  cd "${target}"
497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  eval "${LIBVPX_SOURCE_DIR}/configure" --target="${target}" \
507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    ${CONFIGURE_ARGS} ${EXTRA_CONFIGURE_ARGS} ${devnull}
51ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  export DIST_DIR
52ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  eval make -j ${MAKE_JOBS} dist ${devnull}
53ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  cd "${old_pwd}"
54ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
55ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  vlog "***Done building target: ${target}***"
56ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
57ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
58ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Returns the preprocessor symbol for the target specified by $1.
59ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniantarget_to_preproc_symbol() {
60ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  target="$1"
61ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  case "${target}" in
62ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    arm64-*)
63ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      echo "__aarch64__"
64ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
65ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    armv7-*)
667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      echo "__ARM_ARCH_7A__"
67ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
68ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    armv7s-*)
69ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      echo "__ARM_ARCH_7S__"
70ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
71ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    x86-*)
72ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      echo "__i386__"
73ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
74ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    x86_64-*)
75ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      echo "__x86_64__"
76ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
77ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    *)
78ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      echo "#error ${target} unknown/unsupported"
79ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      return 1
80ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
81ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  esac
82ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
83ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
84ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Create a vpx_config.h shim that, based on preprocessor settings for the
85ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# current target CPU, includes the real vpx_config.h for the current target.
86ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# $1 is the list of targets.
87ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniancreate_vpx_framework_config_shim() {
88ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local targets="$1"
89ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local config_file="${HEADER_DIR}/vpx_config.h"
90ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local preproc_symbol=""
91ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local target=""
92ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local include_guard="VPX_FRAMEWORK_HEADERS_VPX_VPX_CONFIG_H_"
93ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
94ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local file_header="/*
95ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  Copyright (c) $(date +%Y) The WebM project authors. All Rights Reserved.
96ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *
97ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  Use of this source code is governed by a BSD-style license
98ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  that can be found in the LICENSE file in the root of the source
99ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  tree. An additional intellectual property rights grant can be found
100ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  in the file PATENTS.  All contributing project authors may
101ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  be found in the AUTHORS file in the root of the source tree.
102ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian */
103ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
104ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian/* GENERATED FILE: DO NOT EDIT! */
105ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
106ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifndef ${include_guard}
107ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define ${include_guard}
108ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
109ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#if defined"
110ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
111ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  printf "%s" "${file_header}" > "${config_file}"
112ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  for target in ${targets}; do
113ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    preproc_symbol=$(target_to_preproc_symbol "${target}")
114ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    printf " ${preproc_symbol}\n" >> "${config_file}"
115ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    printf "#define VPX_FRAMEWORK_TARGET \"${target}\"\n" >> "${config_file}"
116ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    printf "#include \"VPX/vpx/${target}/vpx_config.h\"\n" >> "${config_file}"
117ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    printf "#elif defined" >> "${config_file}"
118ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    mkdir "${HEADER_DIR}/${target}"
119ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    cp -p "${BUILD_ROOT}/${target}/vpx_config.h" "${HEADER_DIR}/${target}"
120ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  done
121ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
122ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # Consume the last line of output from the loop: We don't want it.
123ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  sed -i '' -e '$d' "${config_file}"
124ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
125ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  printf "#endif\n\n" >> "${config_file}"
126ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  printf "#endif  // ${include_guard}" >> "${config_file}"
127ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
128ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
129ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Configures and builds each target specified by $1, and then builds
130ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# VPX.framework.
131ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianbuild_framework() {
132ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local lib_list=""
133ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local targets="$1"
134ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local target=""
135ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  local target_dist_dir=""
136ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
137ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # Clean up from previous build(s).
138ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  rm -rf "${BUILD_ROOT}" "${FRAMEWORK_DIR}"
139ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
140ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # Create output dirs.
141ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  mkdir -p "${BUILD_ROOT}"
142ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  mkdir -p "${HEADER_DIR}"
143ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
144ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  cd "${BUILD_ROOT}"
145ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
146ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  for target in ${targets}; do
147ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    build_target "${target}"
148ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    target_dist_dir="${BUILD_ROOT}/${target}/${DIST_DIR}"
149ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    lib_list="${lib_list} ${target_dist_dir}/lib/libvpx.a"
150ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  done
151ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
152ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  cd "${ORIG_PWD}"
153ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
154ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # The basic libvpx API includes are all the same; just grab the most recent
155ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # set.
156ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  cp -p "${target_dist_dir}"/include/vpx/* "${HEADER_DIR}"
157ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
158ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # Build the fat library.
159ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  ${LIPO} -create ${lib_list} -output ${FRAMEWORK_DIR}/VPX
160ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
161ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # Create the vpx_config.h shim that allows usage of vpx_config.h from
162ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # within VPX.framework.
163ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  create_vpx_framework_config_shim "${targets}"
164ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
165ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # Copy in vpx_version.h.
166ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  cp -p "${BUILD_ROOT}/${target}/vpx_version.h" "${HEADER_DIR}"
167ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
168ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  vlog "Created fat library ${FRAMEWORK_DIR}/VPX containing:"
169ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  for lib in ${lib_list}; do
170ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    vlog "  $(echo ${lib} | awk -F / '{print $2, $NF}')"
171ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  done
172ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
173ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # TODO(tomfinegan): Verify that expected targets are included within
174ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  # VPX.framework/VPX via lipo -info.
175ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
176ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
177ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Trap function. Cleans up the subtree used to build all targets contained in
178ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# $TARGETS.
179ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniancleanup() {
1807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  local readonly res=$?
181ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  cd "${ORIG_PWD}"
182ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
1837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  if [ $res -ne 0 ]; then
1847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    elog "build exited with error ($res)"
1857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  fi
1867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
187ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  if [ "${PRESERVE_BUILD_OUTPUT}" != "yes" ]; then
188ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    rm -rf "${BUILD_ROOT}"
189ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  fi
190ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
191ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
192ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianiosbuild_usage() {
193ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniancat << EOF
194ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  Usage: ${0##*/} [arguments]
195ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --help: Display this message and exit.
1967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    --extra-configure-args <args>: Extra args to pass when configuring libvpx.
197ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --jobs: Number of make jobs.
198ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --preserve-build-output: Do not delete the build directory.
199ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --show-build-output: Show output from each library build.
2007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    --targets <targets>: Override default target list. Defaults:
2017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian         ${TARGETS}
202ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --verbose: Output information about the environment and each stage of the
203ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian               build.
204ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianEOF
205ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
206ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
2077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianelog() {
2087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  echo "${0##*/} failed because: $@" 1>&2
2097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian}
2107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
211ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvlog() {
212ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  if [ "${VERBOSE}" = "yes" ]; then
213ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    echo "$@"
214ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  fi
215ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
216ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
217ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniantrap cleanup EXIT
218ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
219ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Parse the command line.
220ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianwhile [ -n "$1" ]; do
221ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  case "$1" in
2227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    --extra-configure-args)
2237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      EXTRA_CONFIGURE_ARGS="$2"
2247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      shift
2257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      ;;
226ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --help)
227ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      iosbuild_usage
228ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      exit
229ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
230ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --jobs)
231ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      MAKE_JOBS="$2"
232ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      shift
233ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
234ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --preserve-build-output)
235ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      PRESERVE_BUILD_OUTPUT=yes
236ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
237ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --show-build-output)
238ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      devnull=
239ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
2407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    --targets)
2417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      TARGETS="$2"
2427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      shift
2437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      ;;
244ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    --verbose)
245ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      VERBOSE=yes
246ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
247ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    *)
248ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      iosbuild_usage
249ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      exit 1
250ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ;;
251ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  esac
252ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  shift
253ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniandone
254ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
255ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianif [ "${VERBOSE}" = "yes" ]; then
256ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniancat << EOF
257ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  BUILD_ROOT=${BUILD_ROOT}
258ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  DIST_DIR=${DIST_DIR}
2597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  CONFIGURE_ARGS=${CONFIGURE_ARGS}
2607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  EXTRA_CONFIGURE_ARGS=${EXTRA_CONFIGURE_ARGS}
261ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FRAMEWORK_DIR=${FRAMEWORK_DIR}
262ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  HEADER_DIR=${HEADER_DIR}
263ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  MAKE_JOBS=${MAKE_JOBS}
264ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  PRESERVE_BUILD_OUTPUT=${PRESERVE_BUILD_OUTPUT}
265ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  LIBVPX_SOURCE_DIR=${LIBVPX_SOURCE_DIR}
266ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  LIPO=${LIPO}
267ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  ORIG_PWD=${ORIG_PWD}
268ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  TARGETS="${TARGETS}"
269ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianEOF
270ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianfi
271ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
272ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianbuild_framework "${TARGETS}"
2737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianecho "Successfully built '${FRAMEWORK_DIR}' for:"
2747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianecho "         ${TARGETS}"
275