xref: /aosp_15_r20/external/libvpx/build/make/iosbuild.sh (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker#!/bin/sh
2*fb1b10abSAndroid Build Coastguard Worker##
3*fb1b10abSAndroid Build Coastguard Worker##  Copyright (c) 2014 The WebM project authors. All Rights Reserved.
4*fb1b10abSAndroid Build Coastguard Worker##
5*fb1b10abSAndroid Build Coastguard Worker##  Use of this source code is governed by a BSD-style license
6*fb1b10abSAndroid Build Coastguard Worker##  that can be found in the LICENSE file in the root of the source
7*fb1b10abSAndroid Build Coastguard Worker##  tree. An additional intellectual property rights grant can be found
8*fb1b10abSAndroid Build Coastguard Worker##  in the file PATENTS.  All contributing project authors may
9*fb1b10abSAndroid Build Coastguard Worker##  be found in the AUTHORS file in the root of the source tree.
10*fb1b10abSAndroid Build Coastguard Worker##
11*fb1b10abSAndroid Build Coastguard Worker##
12*fb1b10abSAndroid Build Coastguard Worker## This script generates 'VPX.framework'. An iOS app can encode and decode VPx
13*fb1b10abSAndroid Build Coastguard Worker## video by including 'VPX.framework'.
14*fb1b10abSAndroid Build Coastguard Worker##
15*fb1b10abSAndroid Build Coastguard Worker## Run iosbuild.sh to create 'VPX.framework' in the current directory.
16*fb1b10abSAndroid Build Coastguard Worker##
17*fb1b10abSAndroid Build Coastguard Workerset -e
18*fb1b10abSAndroid Build Coastguard Workerdevnull='> /dev/null 2>&1'
19*fb1b10abSAndroid Build Coastguard Worker
20*fb1b10abSAndroid Build Coastguard WorkerBUILD_ROOT="_iosbuild"
21*fb1b10abSAndroid Build Coastguard WorkerCONFIGURE_ARGS="--disable-docs
22*fb1b10abSAndroid Build Coastguard Worker                --disable-examples
23*fb1b10abSAndroid Build Coastguard Worker                --disable-libyuv
24*fb1b10abSAndroid Build Coastguard Worker                --disable-unit-tests"
25*fb1b10abSAndroid Build Coastguard WorkerDIST_DIR="_dist"
26*fb1b10abSAndroid Build Coastguard WorkerFRAMEWORK_DIR="VPX.framework"
27*fb1b10abSAndroid Build Coastguard WorkerFRAMEWORK_LIB="VPX.framework/VPX"
28*fb1b10abSAndroid Build Coastguard WorkerHEADER_DIR="${FRAMEWORK_DIR}/Headers/vpx"
29*fb1b10abSAndroid Build Coastguard WorkerSCRIPT_DIR=$(dirname "$0")
30*fb1b10abSAndroid Build Coastguard WorkerLIBVPX_SOURCE_DIR=$(cd ${SCRIPT_DIR}/../..; pwd)
31*fb1b10abSAndroid Build Coastguard WorkerLIPO=$(xcrun -sdk iphoneos${SDK} -find lipo)
32*fb1b10abSAndroid Build Coastguard WorkerORIG_PWD="$(pwd)"
33*fb1b10abSAndroid Build Coastguard WorkerARM_TARGETS="arm64-darwin-gcc
34*fb1b10abSAndroid Build Coastguard Worker             armv7-darwin-gcc
35*fb1b10abSAndroid Build Coastguard Worker             armv7s-darwin-gcc"
36*fb1b10abSAndroid Build Coastguard WorkerSIM_TARGETS="x86-iphonesimulator-gcc
37*fb1b10abSAndroid Build Coastguard Worker             x86_64-iphonesimulator-gcc"
38*fb1b10abSAndroid Build Coastguard WorkerOSX_TARGETS="x86-darwin16-gcc
39*fb1b10abSAndroid Build Coastguard Worker             x86_64-darwin16-gcc"
40*fb1b10abSAndroid Build Coastguard WorkerTARGETS="${ARM_TARGETS} ${SIM_TARGETS}"
41*fb1b10abSAndroid Build Coastguard Worker
42*fb1b10abSAndroid Build Coastguard Worker# Configures for the target specified by $1, and invokes make with the dist
43*fb1b10abSAndroid Build Coastguard Worker# target using $DIST_DIR as the distribution output directory.
44*fb1b10abSAndroid Build Coastguard Workerbuild_target() {
45*fb1b10abSAndroid Build Coastguard Worker  local target="$1"
46*fb1b10abSAndroid Build Coastguard Worker  local old_pwd="$(pwd)"
47*fb1b10abSAndroid Build Coastguard Worker  local target_specific_flags=""
48*fb1b10abSAndroid Build Coastguard Worker
49*fb1b10abSAndroid Build Coastguard Worker  vlog "***Building target: ${target}***"
50*fb1b10abSAndroid Build Coastguard Worker
51*fb1b10abSAndroid Build Coastguard Worker  case "${target}" in
52*fb1b10abSAndroid Build Coastguard Worker    x86-*)
53*fb1b10abSAndroid Build Coastguard Worker      target_specific_flags="--enable-pic"
54*fb1b10abSAndroid Build Coastguard Worker      vlog "Enabled PIC for ${target}"
55*fb1b10abSAndroid Build Coastguard Worker      ;;
56*fb1b10abSAndroid Build Coastguard Worker  esac
57*fb1b10abSAndroid Build Coastguard Worker
58*fb1b10abSAndroid Build Coastguard Worker  mkdir "${target}"
59*fb1b10abSAndroid Build Coastguard Worker  cd "${target}"
60*fb1b10abSAndroid Build Coastguard Worker  eval "${LIBVPX_SOURCE_DIR}/configure" --target="${target}" \
61*fb1b10abSAndroid Build Coastguard Worker    ${CONFIGURE_ARGS} ${EXTRA_CONFIGURE_ARGS} ${target_specific_flags} \
62*fb1b10abSAndroid Build Coastguard Worker    ${devnull}
63*fb1b10abSAndroid Build Coastguard Worker  export DIST_DIR
64*fb1b10abSAndroid Build Coastguard Worker  eval make dist ${devnull}
65*fb1b10abSAndroid Build Coastguard Worker  cd "${old_pwd}"
66*fb1b10abSAndroid Build Coastguard Worker
67*fb1b10abSAndroid Build Coastguard Worker  vlog "***Done building target: ${target}***"
68*fb1b10abSAndroid Build Coastguard Worker}
69*fb1b10abSAndroid Build Coastguard Worker
70*fb1b10abSAndroid Build Coastguard Worker# Returns the preprocessor symbol for the target specified by $1.
71*fb1b10abSAndroid Build Coastguard Workertarget_to_preproc_symbol() {
72*fb1b10abSAndroid Build Coastguard Worker  target="$1"
73*fb1b10abSAndroid Build Coastguard Worker  case "${target}" in
74*fb1b10abSAndroid Build Coastguard Worker    arm64-*)
75*fb1b10abSAndroid Build Coastguard Worker      echo "__aarch64__"
76*fb1b10abSAndroid Build Coastguard Worker      ;;
77*fb1b10abSAndroid Build Coastguard Worker    armv7-*)
78*fb1b10abSAndroid Build Coastguard Worker      echo "__ARM_ARCH_7A__"
79*fb1b10abSAndroid Build Coastguard Worker      ;;
80*fb1b10abSAndroid Build Coastguard Worker    armv7s-*)
81*fb1b10abSAndroid Build Coastguard Worker      echo "__ARM_ARCH_7S__"
82*fb1b10abSAndroid Build Coastguard Worker      ;;
83*fb1b10abSAndroid Build Coastguard Worker    x86-*)
84*fb1b10abSAndroid Build Coastguard Worker      echo "__i386__"
85*fb1b10abSAndroid Build Coastguard Worker      ;;
86*fb1b10abSAndroid Build Coastguard Worker    x86_64-*)
87*fb1b10abSAndroid Build Coastguard Worker      echo "__x86_64__"
88*fb1b10abSAndroid Build Coastguard Worker      ;;
89*fb1b10abSAndroid Build Coastguard Worker    *)
90*fb1b10abSAndroid Build Coastguard Worker      echo "#error ${target} unknown/unsupported"
91*fb1b10abSAndroid Build Coastguard Worker      return 1
92*fb1b10abSAndroid Build Coastguard Worker      ;;
93*fb1b10abSAndroid Build Coastguard Worker  esac
94*fb1b10abSAndroid Build Coastguard Worker}
95*fb1b10abSAndroid Build Coastguard Worker
96*fb1b10abSAndroid Build Coastguard Worker# Create a vpx_config.h shim that, based on preprocessor settings for the
97*fb1b10abSAndroid Build Coastguard Worker# current target CPU, includes the real vpx_config.h for the current target.
98*fb1b10abSAndroid Build Coastguard Worker# $1 is the list of targets.
99*fb1b10abSAndroid Build Coastguard Workercreate_vpx_framework_config_shim() {
100*fb1b10abSAndroid Build Coastguard Worker  local targets="$1"
101*fb1b10abSAndroid Build Coastguard Worker  local config_file="${HEADER_DIR}/vpx_config.h"
102*fb1b10abSAndroid Build Coastguard Worker  local preproc_symbol=""
103*fb1b10abSAndroid Build Coastguard Worker  local target=""
104*fb1b10abSAndroid Build Coastguard Worker  local include_guard="VPX_FRAMEWORK_HEADERS_VPX_VPX_CONFIG_H_"
105*fb1b10abSAndroid Build Coastguard Worker
106*fb1b10abSAndroid Build Coastguard Worker  local file_header="/*
107*fb1b10abSAndroid Build Coastguard Worker *  Copyright (c) $(date +%Y) The WebM project authors. All Rights Reserved.
108*fb1b10abSAndroid Build Coastguard Worker *
109*fb1b10abSAndroid Build Coastguard Worker *  Use of this source code is governed by a BSD-style license
110*fb1b10abSAndroid Build Coastguard Worker *  that can be found in the LICENSE file in the root of the source
111*fb1b10abSAndroid Build Coastguard Worker *  tree. An additional intellectual property rights grant can be found
112*fb1b10abSAndroid Build Coastguard Worker *  in the file PATENTS.  All contributing project authors may
113*fb1b10abSAndroid Build Coastguard Worker *  be found in the AUTHORS file in the root of the source tree.
114*fb1b10abSAndroid Build Coastguard Worker */
115*fb1b10abSAndroid Build Coastguard Worker
116*fb1b10abSAndroid Build Coastguard Worker/* GENERATED FILE: DO NOT EDIT! */
117*fb1b10abSAndroid Build Coastguard Worker
118*fb1b10abSAndroid Build Coastguard Worker#ifndef ${include_guard}
119*fb1b10abSAndroid Build Coastguard Worker#define ${include_guard}
120*fb1b10abSAndroid Build Coastguard Worker
121*fb1b10abSAndroid Build Coastguard Worker#if defined"
122*fb1b10abSAndroid Build Coastguard Worker
123*fb1b10abSAndroid Build Coastguard Worker  printf "%s" "${file_header}" > "${config_file}"
124*fb1b10abSAndroid Build Coastguard Worker  for target in ${targets}; do
125*fb1b10abSAndroid Build Coastguard Worker    preproc_symbol=$(target_to_preproc_symbol "${target}")
126*fb1b10abSAndroid Build Coastguard Worker    printf " ${preproc_symbol}\n" >> "${config_file}"
127*fb1b10abSAndroid Build Coastguard Worker    printf "#define VPX_FRAMEWORK_TARGET \"${target}\"\n" >> "${config_file}"
128*fb1b10abSAndroid Build Coastguard Worker    printf "#include \"VPX/vpx/${target}/vpx_config.h\"\n" >> "${config_file}"
129*fb1b10abSAndroid Build Coastguard Worker    printf "#elif defined" >> "${config_file}"
130*fb1b10abSAndroid Build Coastguard Worker    mkdir "${HEADER_DIR}/${target}"
131*fb1b10abSAndroid Build Coastguard Worker    cp -p "${BUILD_ROOT}/${target}/vpx_config.h" "${HEADER_DIR}/${target}"
132*fb1b10abSAndroid Build Coastguard Worker  done
133*fb1b10abSAndroid Build Coastguard Worker
134*fb1b10abSAndroid Build Coastguard Worker  # Consume the last line of output from the loop: We don't want it.
135*fb1b10abSAndroid Build Coastguard Worker  sed -i.bak -e '$d' "${config_file}"
136*fb1b10abSAndroid Build Coastguard Worker  rm "${config_file}.bak"
137*fb1b10abSAndroid Build Coastguard Worker
138*fb1b10abSAndroid Build Coastguard Worker  printf "#endif\n\n" >> "${config_file}"
139*fb1b10abSAndroid Build Coastguard Worker  printf "#endif  // ${include_guard}" >> "${config_file}"
140*fb1b10abSAndroid Build Coastguard Worker}
141*fb1b10abSAndroid Build Coastguard Worker
142*fb1b10abSAndroid Build Coastguard Worker# Verifies that $FRAMEWORK_LIB fat library contains requested builds.
143*fb1b10abSAndroid Build Coastguard Workerverify_framework_targets() {
144*fb1b10abSAndroid Build Coastguard Worker  local requested_cpus=""
145*fb1b10abSAndroid Build Coastguard Worker  local cpu=""
146*fb1b10abSAndroid Build Coastguard Worker
147*fb1b10abSAndroid Build Coastguard Worker  # Extract CPU from full target name.
148*fb1b10abSAndroid Build Coastguard Worker  for target; do
149*fb1b10abSAndroid Build Coastguard Worker    cpu="${target%%-*}"
150*fb1b10abSAndroid Build Coastguard Worker    if [ "${cpu}" = "x86" ]; then
151*fb1b10abSAndroid Build Coastguard Worker      # lipo -info outputs i386 for libvpx x86 targets.
152*fb1b10abSAndroid Build Coastguard Worker      cpu="i386"
153*fb1b10abSAndroid Build Coastguard Worker    fi
154*fb1b10abSAndroid Build Coastguard Worker    requested_cpus="${requested_cpus}${cpu} "
155*fb1b10abSAndroid Build Coastguard Worker  done
156*fb1b10abSAndroid Build Coastguard Worker
157*fb1b10abSAndroid Build Coastguard Worker  # Get target CPUs present in framework library.
158*fb1b10abSAndroid Build Coastguard Worker  local targets_built=$(${LIPO} -info ${FRAMEWORK_LIB})
159*fb1b10abSAndroid Build Coastguard Worker
160*fb1b10abSAndroid Build Coastguard Worker  # $LIPO -info outputs a string like the following:
161*fb1b10abSAndroid Build Coastguard Worker  #   Architectures in the fat file: $FRAMEWORK_LIB <architectures>
162*fb1b10abSAndroid Build Coastguard Worker  # Capture only the architecture strings.
163*fb1b10abSAndroid Build Coastguard Worker  targets_built=${targets_built##*: }
164*fb1b10abSAndroid Build Coastguard Worker
165*fb1b10abSAndroid Build Coastguard Worker  # Sort CPU strings to make the next step a simple string compare.
166*fb1b10abSAndroid Build Coastguard Worker  local actual=$(echo ${targets_built} | tr " " "\n" | sort | tr "\n" " ")
167*fb1b10abSAndroid Build Coastguard Worker  local requested=$(echo ${requested_cpus} | tr " " "\n" | sort | tr "\n" " ")
168*fb1b10abSAndroid Build Coastguard Worker
169*fb1b10abSAndroid Build Coastguard Worker  vlog "Requested ${FRAMEWORK_LIB} CPUs: ${requested}"
170*fb1b10abSAndroid Build Coastguard Worker  vlog "Actual ${FRAMEWORK_LIB} CPUs: ${actual}"
171*fb1b10abSAndroid Build Coastguard Worker
172*fb1b10abSAndroid Build Coastguard Worker  if [ "${requested}" != "${actual}" ]; then
173*fb1b10abSAndroid Build Coastguard Worker    elog "Actual ${FRAMEWORK_LIB} targets do not match requested target list."
174*fb1b10abSAndroid Build Coastguard Worker    elog "  Requested target CPUs: ${requested}"
175*fb1b10abSAndroid Build Coastguard Worker    elog "  Actual target CPUs: ${actual}"
176*fb1b10abSAndroid Build Coastguard Worker    return 1
177*fb1b10abSAndroid Build Coastguard Worker  fi
178*fb1b10abSAndroid Build Coastguard Worker}
179*fb1b10abSAndroid Build Coastguard Worker
180*fb1b10abSAndroid Build Coastguard Worker# Configures and builds each target specified by $1, and then builds
181*fb1b10abSAndroid Build Coastguard Worker# VPX.framework.
182*fb1b10abSAndroid Build Coastguard Workerbuild_framework() {
183*fb1b10abSAndroid Build Coastguard Worker  local lib_list=""
184*fb1b10abSAndroid Build Coastguard Worker  local targets="$1"
185*fb1b10abSAndroid Build Coastguard Worker  local target=""
186*fb1b10abSAndroid Build Coastguard Worker  local target_dist_dir=""
187*fb1b10abSAndroid Build Coastguard Worker
188*fb1b10abSAndroid Build Coastguard Worker  # Clean up from previous build(s).
189*fb1b10abSAndroid Build Coastguard Worker  rm -rf "${BUILD_ROOT}" "${FRAMEWORK_DIR}"
190*fb1b10abSAndroid Build Coastguard Worker
191*fb1b10abSAndroid Build Coastguard Worker  # Create output dirs.
192*fb1b10abSAndroid Build Coastguard Worker  mkdir -p "${BUILD_ROOT}"
193*fb1b10abSAndroid Build Coastguard Worker  mkdir -p "${HEADER_DIR}"
194*fb1b10abSAndroid Build Coastguard Worker
195*fb1b10abSAndroid Build Coastguard Worker  cd "${BUILD_ROOT}"
196*fb1b10abSAndroid Build Coastguard Worker
197*fb1b10abSAndroid Build Coastguard Worker  for target in ${targets}; do
198*fb1b10abSAndroid Build Coastguard Worker    build_target "${target}"
199*fb1b10abSAndroid Build Coastguard Worker    target_dist_dir="${BUILD_ROOT}/${target}/${DIST_DIR}"
200*fb1b10abSAndroid Build Coastguard Worker    if [ "${ENABLE_SHARED}" = "yes" ]; then
201*fb1b10abSAndroid Build Coastguard Worker      local suffix="dylib"
202*fb1b10abSAndroid Build Coastguard Worker    else
203*fb1b10abSAndroid Build Coastguard Worker      local suffix="a"
204*fb1b10abSAndroid Build Coastguard Worker    fi
205*fb1b10abSAndroid Build Coastguard Worker    lib_list="${lib_list} ${target_dist_dir}/lib/libvpx.${suffix}"
206*fb1b10abSAndroid Build Coastguard Worker  done
207*fb1b10abSAndroid Build Coastguard Worker
208*fb1b10abSAndroid Build Coastguard Worker  cd "${ORIG_PWD}"
209*fb1b10abSAndroid Build Coastguard Worker
210*fb1b10abSAndroid Build Coastguard Worker  # The basic libvpx API includes are all the same; just grab the most recent
211*fb1b10abSAndroid Build Coastguard Worker  # set.
212*fb1b10abSAndroid Build Coastguard Worker  cp -p "${target_dist_dir}"/include/vpx/* "${HEADER_DIR}"
213*fb1b10abSAndroid Build Coastguard Worker
214*fb1b10abSAndroid Build Coastguard Worker  # Build the fat library.
215*fb1b10abSAndroid Build Coastguard Worker  ${LIPO} -create ${lib_list} -output ${FRAMEWORK_DIR}/VPX
216*fb1b10abSAndroid Build Coastguard Worker
217*fb1b10abSAndroid Build Coastguard Worker  # Create the vpx_config.h shim that allows usage of vpx_config.h from
218*fb1b10abSAndroid Build Coastguard Worker  # within VPX.framework.
219*fb1b10abSAndroid Build Coastguard Worker  create_vpx_framework_config_shim "${targets}"
220*fb1b10abSAndroid Build Coastguard Worker
221*fb1b10abSAndroid Build Coastguard Worker  # Copy in vpx_version.h.
222*fb1b10abSAndroid Build Coastguard Worker  cp -p "${BUILD_ROOT}/${target}/vpx_version.h" "${HEADER_DIR}"
223*fb1b10abSAndroid Build Coastguard Worker
224*fb1b10abSAndroid Build Coastguard Worker  if [ "${ENABLE_SHARED}" = "yes" ]; then
225*fb1b10abSAndroid Build Coastguard Worker    # Adjust the dylib's name so dynamic linking in apps works as expected.
226*fb1b10abSAndroid Build Coastguard Worker    install_name_tool -id '@rpath/VPX.framework/VPX' ${FRAMEWORK_DIR}/VPX
227*fb1b10abSAndroid Build Coastguard Worker
228*fb1b10abSAndroid Build Coastguard Worker    # Copy in Info.plist.
229*fb1b10abSAndroid Build Coastguard Worker    cat "${SCRIPT_DIR}/ios-Info.plist" \
230*fb1b10abSAndroid Build Coastguard Worker      | sed "s/\${FULLVERSION}/${FULLVERSION}/g" \
231*fb1b10abSAndroid Build Coastguard Worker      | sed "s/\${VERSION}/${VERSION}/g" \
232*fb1b10abSAndroid Build Coastguard Worker      | sed "s/\${IOS_VERSION_MIN}/${IOS_VERSION_MIN}/g" \
233*fb1b10abSAndroid Build Coastguard Worker      > "${FRAMEWORK_DIR}/Info.plist"
234*fb1b10abSAndroid Build Coastguard Worker  fi
235*fb1b10abSAndroid Build Coastguard Worker
236*fb1b10abSAndroid Build Coastguard Worker  # Confirm VPX.framework/VPX contains the targets requested.
237*fb1b10abSAndroid Build Coastguard Worker  verify_framework_targets ${targets}
238*fb1b10abSAndroid Build Coastguard Worker
239*fb1b10abSAndroid Build Coastguard Worker  vlog "Created fat library ${FRAMEWORK_LIB} containing:"
240*fb1b10abSAndroid Build Coastguard Worker  for lib in ${lib_list}; do
241*fb1b10abSAndroid Build Coastguard Worker    vlog "  $(echo ${lib} | awk -F / '{print $2, $NF}')"
242*fb1b10abSAndroid Build Coastguard Worker  done
243*fb1b10abSAndroid Build Coastguard Worker}
244*fb1b10abSAndroid Build Coastguard Worker
245*fb1b10abSAndroid Build Coastguard Worker# Trap function. Cleans up the subtree used to build all targets contained in
246*fb1b10abSAndroid Build Coastguard Worker# $TARGETS.
247*fb1b10abSAndroid Build Coastguard Workercleanup() {
248*fb1b10abSAndroid Build Coastguard Worker  local res=$?
249*fb1b10abSAndroid Build Coastguard Worker  cd "${ORIG_PWD}"
250*fb1b10abSAndroid Build Coastguard Worker
251*fb1b10abSAndroid Build Coastguard Worker  if [ $res -ne 0 ]; then
252*fb1b10abSAndroid Build Coastguard Worker    elog "build exited with error ($res)"
253*fb1b10abSAndroid Build Coastguard Worker  fi
254*fb1b10abSAndroid Build Coastguard Worker
255*fb1b10abSAndroid Build Coastguard Worker  if [ "${PRESERVE_BUILD_OUTPUT}" != "yes" ]; then
256*fb1b10abSAndroid Build Coastguard Worker    rm -rf "${BUILD_ROOT}"
257*fb1b10abSAndroid Build Coastguard Worker  fi
258*fb1b10abSAndroid Build Coastguard Worker}
259*fb1b10abSAndroid Build Coastguard Worker
260*fb1b10abSAndroid Build Coastguard Workerprint_list() {
261*fb1b10abSAndroid Build Coastguard Worker  local indent="$1"
262*fb1b10abSAndroid Build Coastguard Worker  shift
263*fb1b10abSAndroid Build Coastguard Worker  local list="$@"
264*fb1b10abSAndroid Build Coastguard Worker  for entry in ${list}; do
265*fb1b10abSAndroid Build Coastguard Worker    echo "${indent}${entry}"
266*fb1b10abSAndroid Build Coastguard Worker  done
267*fb1b10abSAndroid Build Coastguard Worker}
268*fb1b10abSAndroid Build Coastguard Worker
269*fb1b10abSAndroid Build Coastguard Workeriosbuild_usage() {
270*fb1b10abSAndroid Build Coastguard Workercat << EOF
271*fb1b10abSAndroid Build Coastguard Worker  Usage: ${0##*/} [arguments]
272*fb1b10abSAndroid Build Coastguard Worker    --help: Display this message and exit.
273*fb1b10abSAndroid Build Coastguard Worker    --enable-shared: Build a dynamic framework for use on iOS 8 or later.
274*fb1b10abSAndroid Build Coastguard Worker    --extra-configure-args <args>: Extra args to pass when configuring libvpx.
275*fb1b10abSAndroid Build Coastguard Worker    --macosx: Uses darwin16 targets instead of iphonesimulator targets for x86
276*fb1b10abSAndroid Build Coastguard Worker              and x86_64. Allows linking to framework when builds target MacOSX
277*fb1b10abSAndroid Build Coastguard Worker              instead of iOS.
278*fb1b10abSAndroid Build Coastguard Worker    --preserve-build-output: Do not delete the build directory.
279*fb1b10abSAndroid Build Coastguard Worker    --show-build-output: Show output from each library build.
280*fb1b10abSAndroid Build Coastguard Worker    --targets <targets>: Override default target list. Defaults:
281*fb1b10abSAndroid Build Coastguard Worker$(print_list "        " ${TARGETS})
282*fb1b10abSAndroid Build Coastguard Worker    --test-link: Confirms all targets can be linked. Functionally identical to
283*fb1b10abSAndroid Build Coastguard Worker                 passing --enable-examples via --extra-configure-args.
284*fb1b10abSAndroid Build Coastguard Worker    --verbose: Output information about the environment and each stage of the
285*fb1b10abSAndroid Build Coastguard Worker               build.
286*fb1b10abSAndroid Build Coastguard WorkerEOF
287*fb1b10abSAndroid Build Coastguard Worker}
288*fb1b10abSAndroid Build Coastguard Worker
289*fb1b10abSAndroid Build Coastguard Workerelog() {
290*fb1b10abSAndroid Build Coastguard Worker  echo "${0##*/} failed because: $@" 1>&2
291*fb1b10abSAndroid Build Coastguard Worker}
292*fb1b10abSAndroid Build Coastguard Worker
293*fb1b10abSAndroid Build Coastguard Workervlog() {
294*fb1b10abSAndroid Build Coastguard Worker  if [ "${VERBOSE}" = "yes" ]; then
295*fb1b10abSAndroid Build Coastguard Worker    echo "$@"
296*fb1b10abSAndroid Build Coastguard Worker  fi
297*fb1b10abSAndroid Build Coastguard Worker}
298*fb1b10abSAndroid Build Coastguard Worker
299*fb1b10abSAndroid Build Coastguard Workertrap cleanup EXIT
300*fb1b10abSAndroid Build Coastguard Worker
301*fb1b10abSAndroid Build Coastguard Worker# Parse the command line.
302*fb1b10abSAndroid Build Coastguard Workerwhile [ -n "$1" ]; do
303*fb1b10abSAndroid Build Coastguard Worker  case "$1" in
304*fb1b10abSAndroid Build Coastguard Worker    --extra-configure-args)
305*fb1b10abSAndroid Build Coastguard Worker      EXTRA_CONFIGURE_ARGS="$2"
306*fb1b10abSAndroid Build Coastguard Worker      shift
307*fb1b10abSAndroid Build Coastguard Worker      ;;
308*fb1b10abSAndroid Build Coastguard Worker    --help)
309*fb1b10abSAndroid Build Coastguard Worker      iosbuild_usage
310*fb1b10abSAndroid Build Coastguard Worker      exit
311*fb1b10abSAndroid Build Coastguard Worker      ;;
312*fb1b10abSAndroid Build Coastguard Worker    --enable-shared)
313*fb1b10abSAndroid Build Coastguard Worker      ENABLE_SHARED=yes
314*fb1b10abSAndroid Build Coastguard Worker      ;;
315*fb1b10abSAndroid Build Coastguard Worker    --preserve-build-output)
316*fb1b10abSAndroid Build Coastguard Worker      PRESERVE_BUILD_OUTPUT=yes
317*fb1b10abSAndroid Build Coastguard Worker      ;;
318*fb1b10abSAndroid Build Coastguard Worker    --show-build-output)
319*fb1b10abSAndroid Build Coastguard Worker      devnull=
320*fb1b10abSAndroid Build Coastguard Worker      ;;
321*fb1b10abSAndroid Build Coastguard Worker    --test-link)
322*fb1b10abSAndroid Build Coastguard Worker      EXTRA_CONFIGURE_ARGS="${EXTRA_CONFIGURE_ARGS} --enable-examples"
323*fb1b10abSAndroid Build Coastguard Worker      ;;
324*fb1b10abSAndroid Build Coastguard Worker    --targets)
325*fb1b10abSAndroid Build Coastguard Worker      TARGETS="$2"
326*fb1b10abSAndroid Build Coastguard Worker      shift
327*fb1b10abSAndroid Build Coastguard Worker      ;;
328*fb1b10abSAndroid Build Coastguard Worker    --macosx)
329*fb1b10abSAndroid Build Coastguard Worker      TARGETS="${ARM_TARGETS} ${OSX_TARGETS}"
330*fb1b10abSAndroid Build Coastguard Worker      ;;
331*fb1b10abSAndroid Build Coastguard Worker    --verbose)
332*fb1b10abSAndroid Build Coastguard Worker      VERBOSE=yes
333*fb1b10abSAndroid Build Coastguard Worker      ;;
334*fb1b10abSAndroid Build Coastguard Worker    *)
335*fb1b10abSAndroid Build Coastguard Worker      iosbuild_usage
336*fb1b10abSAndroid Build Coastguard Worker      exit 1
337*fb1b10abSAndroid Build Coastguard Worker      ;;
338*fb1b10abSAndroid Build Coastguard Worker  esac
339*fb1b10abSAndroid Build Coastguard Worker  shift
340*fb1b10abSAndroid Build Coastguard Workerdone
341*fb1b10abSAndroid Build Coastguard Worker
342*fb1b10abSAndroid Build Coastguard Workerif [ "${ENABLE_SHARED}" = "yes" ]; then
343*fb1b10abSAndroid Build Coastguard Worker  CONFIGURE_ARGS="--enable-shared ${CONFIGURE_ARGS}"
344*fb1b10abSAndroid Build Coastguard Workerfi
345*fb1b10abSAndroid Build Coastguard Worker
346*fb1b10abSAndroid Build Coastguard WorkerFULLVERSION=$("${SCRIPT_DIR}"/version.sh --bare "${LIBVPX_SOURCE_DIR}")
347*fb1b10abSAndroid Build Coastguard WorkerVERSION=$(echo "${FULLVERSION}" | sed -E 's/^v([0-9]+\.[0-9]+\.[0-9]+).*$/\1/')
348*fb1b10abSAndroid Build Coastguard Worker
349*fb1b10abSAndroid Build Coastguard Workerif [ "$ENABLE_SHARED" = "yes" ]; then
350*fb1b10abSAndroid Build Coastguard Worker  IOS_VERSION_OPTIONS="--enable-shared"
351*fb1b10abSAndroid Build Coastguard Worker  IOS_VERSION_MIN="8.0"
352*fb1b10abSAndroid Build Coastguard Workerelse
353*fb1b10abSAndroid Build Coastguard Worker  IOS_VERSION_OPTIONS=""
354*fb1b10abSAndroid Build Coastguard Worker  IOS_VERSION_MIN="7.0"
355*fb1b10abSAndroid Build Coastguard Workerfi
356*fb1b10abSAndroid Build Coastguard Worker
357*fb1b10abSAndroid Build Coastguard Workerif [ "${VERBOSE}" = "yes" ]; then
358*fb1b10abSAndroid Build Coastguard Workercat << EOF
359*fb1b10abSAndroid Build Coastguard Worker  BUILD_ROOT=${BUILD_ROOT}
360*fb1b10abSAndroid Build Coastguard Worker  DIST_DIR=${DIST_DIR}
361*fb1b10abSAndroid Build Coastguard Worker  CONFIGURE_ARGS=${CONFIGURE_ARGS}
362*fb1b10abSAndroid Build Coastguard Worker  EXTRA_CONFIGURE_ARGS=${EXTRA_CONFIGURE_ARGS}
363*fb1b10abSAndroid Build Coastguard Worker  FRAMEWORK_DIR=${FRAMEWORK_DIR}
364*fb1b10abSAndroid Build Coastguard Worker  FRAMEWORK_LIB=${FRAMEWORK_LIB}
365*fb1b10abSAndroid Build Coastguard Worker  HEADER_DIR=${HEADER_DIR}
366*fb1b10abSAndroid Build Coastguard Worker  LIBVPX_SOURCE_DIR=${LIBVPX_SOURCE_DIR}
367*fb1b10abSAndroid Build Coastguard Worker  LIPO=${LIPO}
368*fb1b10abSAndroid Build Coastguard Worker  MAKEFLAGS=${MAKEFLAGS}
369*fb1b10abSAndroid Build Coastguard Worker  ORIG_PWD=${ORIG_PWD}
370*fb1b10abSAndroid Build Coastguard Worker  PRESERVE_BUILD_OUTPUT=${PRESERVE_BUILD_OUTPUT}
371*fb1b10abSAndroid Build Coastguard Worker  TARGETS="$(print_list "" ${TARGETS})"
372*fb1b10abSAndroid Build Coastguard Worker  ENABLE_SHARED=${ENABLE_SHARED}
373*fb1b10abSAndroid Build Coastguard Worker  OSX_TARGETS="${OSX_TARGETS}"
374*fb1b10abSAndroid Build Coastguard Worker  SIM_TARGETS="${SIM_TARGETS}"
375*fb1b10abSAndroid Build Coastguard Worker  SCRIPT_DIR="${SCRIPT_DIR}"
376*fb1b10abSAndroid Build Coastguard Worker  FULLVERSION="${FULLVERSION}"
377*fb1b10abSAndroid Build Coastguard Worker  VERSION="${VERSION}"
378*fb1b10abSAndroid Build Coastguard Worker  IOS_VERSION_MIN="${IOS_VERSION_MIN}"
379*fb1b10abSAndroid Build Coastguard WorkerEOF
380*fb1b10abSAndroid Build Coastguard Workerfi
381*fb1b10abSAndroid Build Coastguard Worker
382*fb1b10abSAndroid Build Coastguard Workerbuild_framework "${TARGETS}"
383*fb1b10abSAndroid Build Coastguard Workerecho "Successfully built '${FRAMEWORK_DIR}' for:"
384*fb1b10abSAndroid Build Coastguard Workerprint_list "" ${TARGETS}
385