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