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" 2768e1c830ade592be74773e249bf94e2bbfb50de7JohannFRAMEWORK_LIB="VPX.framework/VPX" 28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianHEADER_DIR="${FRAMEWORK_DIR}/Headers/vpx" 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)" 3368e1c830ade592be74773e249bf94e2bbfb50de7JohannARM_TARGETS="arm64-darwin-gcc 3468e1c830ade592be74773e249bf94e2bbfb50de7Johann armv7-darwin-gcc 3568e1c830ade592be74773e249bf94e2bbfb50de7Johann armv7s-darwin-gcc" 3668e1c830ade592be74773e249bf94e2bbfb50de7JohannSIM_TARGETS="x86-iphonesimulator-gcc 3768e1c830ade592be74773e249bf94e2bbfb50de7Johann x86_64-iphonesimulator-gcc" 380a39d0a697ff3603e8c100300fda363658e10b23James ZernOSX_TARGETS="x86-darwin16-gcc 390a39d0a697ff3603e8c100300fda363658e10b23James Zern x86_64-darwin16-gcc" 4068e1c830ade592be74773e249bf94e2bbfb50de7JohannTARGETS="${ARM_TARGETS} ${SIM_TARGETS}" 41ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 42ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Configures for the target specified by $1, and invokes make with the dist 43ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# target using $DIST_DIR as the distribution output directory. 44ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianbuild_target() { 45ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local target="$1" 46ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local old_pwd="$(pwd)" 47c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann local target_specific_flags="" 48ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 49ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian vlog "***Building target: ${target}***" 50ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 51c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann case "${target}" in 52c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann x86-*) 53c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann target_specific_flags="--enable-pic" 54c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann vlog "Enabled PIC for ${target}" 55c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann ;; 56c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann esac 57c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann 58ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian mkdir "${target}" 59ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian cd "${target}" 607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian eval "${LIBVPX_SOURCE_DIR}/configure" --target="${target}" \ 61c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann ${CONFIGURE_ARGS} ${EXTRA_CONFIGURE_ARGS} ${target_specific_flags} \ 62c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann ${devnull} 63ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian export DIST_DIR 64c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann eval make dist ${devnull} 65ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian cd "${old_pwd}" 66ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 67ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian vlog "***Done building target: ${target}***" 68ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 69ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 70ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Returns the preprocessor symbol for the target specified by $1. 71ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniantarget_to_preproc_symbol() { 72ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian target="$1" 73ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian case "${target}" in 74ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian arm64-*) 75ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian echo "__aarch64__" 76ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 77ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian armv7-*) 787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian echo "__ARM_ARCH_7A__" 79ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 80ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian armv7s-*) 81ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian echo "__ARM_ARCH_7S__" 82ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 83ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian x86-*) 84ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian echo "__i386__" 85ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 86ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian x86_64-*) 87ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian echo "__x86_64__" 88ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 89ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *) 90ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian echo "#error ${target} unknown/unsupported" 91ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian return 1 92ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 93ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian esac 94ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 95ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 96ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Create a vpx_config.h shim that, based on preprocessor settings for the 97ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# current target CPU, includes the real vpx_config.h for the current target. 98ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# $1 is the list of targets. 99ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniancreate_vpx_framework_config_shim() { 100ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local targets="$1" 101ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local config_file="${HEADER_DIR}/vpx_config.h" 102ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local preproc_symbol="" 103ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local target="" 104ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local include_guard="VPX_FRAMEWORK_HEADERS_VPX_VPX_CONFIG_H_" 105ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 106ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local file_header="/* 107ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * Copyright (c) $(date +%Y) The WebM project authors. All Rights Reserved. 108ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * 109ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * Use of this source code is governed by a BSD-style license 110ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * that can be found in the LICENSE file in the root of the source 111ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * tree. An additional intellectual property rights grant can be found 112ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * in the file PATENTS. All contributing project authors may 113ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * be found in the AUTHORS file in the root of the source tree. 114ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian */ 115ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 116ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian/* GENERATED FILE: DO NOT EDIT! */ 117ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 118ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifndef ${include_guard} 119ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define ${include_guard} 120ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 121ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#if defined" 122ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 123ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian printf "%s" "${file_header}" > "${config_file}" 124ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian for target in ${targets}; do 125ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian preproc_symbol=$(target_to_preproc_symbol "${target}") 126ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian printf " ${preproc_symbol}\n" >> "${config_file}" 127ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian printf "#define VPX_FRAMEWORK_TARGET \"${target}\"\n" >> "${config_file}" 128ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian printf "#include \"VPX/vpx/${target}/vpx_config.h\"\n" >> "${config_file}" 129ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian printf "#elif defined" >> "${config_file}" 130ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian mkdir "${HEADER_DIR}/${target}" 131ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian cp -p "${BUILD_ROOT}/${target}/vpx_config.h" "${HEADER_DIR}/${target}" 132ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian done 133ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 134ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # Consume the last line of output from the loop: We don't want it. 135ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian sed -i '' -e '$d' "${config_file}" 136ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 137ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian printf "#endif\n\n" >> "${config_file}" 138ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian printf "#endif // ${include_guard}" >> "${config_file}" 139ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 140ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 14168e1c830ade592be74773e249bf94e2bbfb50de7Johann# Verifies that $FRAMEWORK_LIB fat library contains requested builds. 14268e1c830ade592be74773e249bf94e2bbfb50de7Johannverify_framework_targets() { 14368e1c830ade592be74773e249bf94e2bbfb50de7Johann local requested_cpus="" 14468e1c830ade592be74773e249bf94e2bbfb50de7Johann local cpu="" 14568e1c830ade592be74773e249bf94e2bbfb50de7Johann 14668e1c830ade592be74773e249bf94e2bbfb50de7Johann # Extract CPU from full target name. 14768e1c830ade592be74773e249bf94e2bbfb50de7Johann for target; do 14868e1c830ade592be74773e249bf94e2bbfb50de7Johann cpu="${target%%-*}" 14968e1c830ade592be74773e249bf94e2bbfb50de7Johann if [ "${cpu}" = "x86" ]; then 15068e1c830ade592be74773e249bf94e2bbfb50de7Johann # lipo -info outputs i386 for libvpx x86 targets. 15168e1c830ade592be74773e249bf94e2bbfb50de7Johann cpu="i386" 15268e1c830ade592be74773e249bf94e2bbfb50de7Johann fi 15368e1c830ade592be74773e249bf94e2bbfb50de7Johann requested_cpus="${requested_cpus}${cpu} " 15468e1c830ade592be74773e249bf94e2bbfb50de7Johann done 15568e1c830ade592be74773e249bf94e2bbfb50de7Johann 15668e1c830ade592be74773e249bf94e2bbfb50de7Johann # Get target CPUs present in framework library. 15768e1c830ade592be74773e249bf94e2bbfb50de7Johann local targets_built=$(${LIPO} -info ${FRAMEWORK_LIB}) 15868e1c830ade592be74773e249bf94e2bbfb50de7Johann 15968e1c830ade592be74773e249bf94e2bbfb50de7Johann # $LIPO -info outputs a string like the following: 16068e1c830ade592be74773e249bf94e2bbfb50de7Johann # Architectures in the fat file: $FRAMEWORK_LIB <architectures> 16168e1c830ade592be74773e249bf94e2bbfb50de7Johann # Capture only the architecture strings. 16268e1c830ade592be74773e249bf94e2bbfb50de7Johann targets_built=${targets_built##*: } 16368e1c830ade592be74773e249bf94e2bbfb50de7Johann 16468e1c830ade592be74773e249bf94e2bbfb50de7Johann # Sort CPU strings to make the next step a simple string compare. 16568e1c830ade592be74773e249bf94e2bbfb50de7Johann local actual=$(echo ${targets_built} | tr " " "\n" | sort | tr "\n" " ") 16668e1c830ade592be74773e249bf94e2bbfb50de7Johann local requested=$(echo ${requested_cpus} | tr " " "\n" | sort | tr "\n" " ") 16768e1c830ade592be74773e249bf94e2bbfb50de7Johann 16868e1c830ade592be74773e249bf94e2bbfb50de7Johann vlog "Requested ${FRAMEWORK_LIB} CPUs: ${requested}" 16968e1c830ade592be74773e249bf94e2bbfb50de7Johann vlog "Actual ${FRAMEWORK_LIB} CPUs: ${actual}" 17068e1c830ade592be74773e249bf94e2bbfb50de7Johann 17168e1c830ade592be74773e249bf94e2bbfb50de7Johann if [ "${requested}" != "${actual}" ]; then 17268e1c830ade592be74773e249bf94e2bbfb50de7Johann elog "Actual ${FRAMEWORK_LIB} targets do not match requested target list." 17368e1c830ade592be74773e249bf94e2bbfb50de7Johann elog " Requested target CPUs: ${requested}" 17468e1c830ade592be74773e249bf94e2bbfb50de7Johann elog " Actual target CPUs: ${actual}" 17568e1c830ade592be74773e249bf94e2bbfb50de7Johann return 1 17668e1c830ade592be74773e249bf94e2bbfb50de7Johann fi 17768e1c830ade592be74773e249bf94e2bbfb50de7Johann} 17868e1c830ade592be74773e249bf94e2bbfb50de7Johann 179ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Configures and builds each target specified by $1, and then builds 180ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# VPX.framework. 181ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianbuild_framework() { 182ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local lib_list="" 183ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local targets="$1" 184ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local target="" 185ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local target_dist_dir="" 186ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 187ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # Clean up from previous build(s). 188ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian rm -rf "${BUILD_ROOT}" "${FRAMEWORK_DIR}" 189ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 190ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # Create output dirs. 191ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian mkdir -p "${BUILD_ROOT}" 192ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian mkdir -p "${HEADER_DIR}" 193ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 194ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian cd "${BUILD_ROOT}" 195ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 196ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian for target in ${targets}; do 197ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian build_target "${target}" 198ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian target_dist_dir="${BUILD_ROOT}/${target}/${DIST_DIR}" 19968e1c830ade592be74773e249bf94e2bbfb50de7Johann if [ "${ENABLE_SHARED}" = "yes" ]; then 20068e1c830ade592be74773e249bf94e2bbfb50de7Johann local suffix="dylib" 20168e1c830ade592be74773e249bf94e2bbfb50de7Johann else 20268e1c830ade592be74773e249bf94e2bbfb50de7Johann local suffix="a" 20368e1c830ade592be74773e249bf94e2bbfb50de7Johann fi 20468e1c830ade592be74773e249bf94e2bbfb50de7Johann lib_list="${lib_list} ${target_dist_dir}/lib/libvpx.${suffix}" 205ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian done 206ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 207ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian cd "${ORIG_PWD}" 208ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 209ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # The basic libvpx API includes are all the same; just grab the most recent 210ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # set. 211ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian cp -p "${target_dist_dir}"/include/vpx/* "${HEADER_DIR}" 212ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 213ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # Build the fat library. 214ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ${LIPO} -create ${lib_list} -output ${FRAMEWORK_DIR}/VPX 215ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 216ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # Create the vpx_config.h shim that allows usage of vpx_config.h from 217ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # within VPX.framework. 218ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian create_vpx_framework_config_shim "${targets}" 219ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 220ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # Copy in vpx_version.h. 221ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian cp -p "${BUILD_ROOT}/${target}/vpx_version.h" "${HEADER_DIR}" 222ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 22368e1c830ade592be74773e249bf94e2bbfb50de7Johann if [ "${ENABLE_SHARED}" = "yes" ]; then 22468e1c830ade592be74773e249bf94e2bbfb50de7Johann # Adjust the dylib's name so dynamic linking in apps works as expected. 22568e1c830ade592be74773e249bf94e2bbfb50de7Johann install_name_tool -id '@rpath/VPX.framework/VPX' ${FRAMEWORK_DIR}/VPX 22668e1c830ade592be74773e249bf94e2bbfb50de7Johann 22768e1c830ade592be74773e249bf94e2bbfb50de7Johann # Copy in Info.plist. 22868e1c830ade592be74773e249bf94e2bbfb50de7Johann cat "${SCRIPT_DIR}/ios-Info.plist" \ 22968e1c830ade592be74773e249bf94e2bbfb50de7Johann | sed "s/\${FULLVERSION}/${FULLVERSION}/g" \ 23068e1c830ade592be74773e249bf94e2bbfb50de7Johann | sed "s/\${VERSION}/${VERSION}/g" \ 23168e1c830ade592be74773e249bf94e2bbfb50de7Johann | sed "s/\${IOS_VERSION_MIN}/${IOS_VERSION_MIN}/g" \ 23268e1c830ade592be74773e249bf94e2bbfb50de7Johann > "${FRAMEWORK_DIR}/Info.plist" 23368e1c830ade592be74773e249bf94e2bbfb50de7Johann fi 23468e1c830ade592be74773e249bf94e2bbfb50de7Johann 23568e1c830ade592be74773e249bf94e2bbfb50de7Johann # Confirm VPX.framework/VPX contains the targets requested. 23668e1c830ade592be74773e249bf94e2bbfb50de7Johann verify_framework_targets ${targets} 23768e1c830ade592be74773e249bf94e2bbfb50de7Johann 23868e1c830ade592be74773e249bf94e2bbfb50de7Johann vlog "Created fat library ${FRAMEWORK_LIB} containing:" 239ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian for lib in ${lib_list}; do 240ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian vlog " $(echo ${lib} | awk -F / '{print $2, $NF}')" 241ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian done 242ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 243ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 244ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Trap function. Cleans up the subtree used to build all targets contained in 245ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# $TARGETS. 246ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniancleanup() { 2477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian local readonly res=$? 248ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian cd "${ORIG_PWD}" 249ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 2507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian if [ $res -ne 0 ]; then 2517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian elog "build exited with error ($res)" 2527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian fi 2537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 254ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian if [ "${PRESERVE_BUILD_OUTPUT}" != "yes" ]; then 255ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian rm -rf "${BUILD_ROOT}" 256ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian fi 257ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 258ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 25968e1c830ade592be74773e249bf94e2bbfb50de7Johannprint_list() { 26068e1c830ade592be74773e249bf94e2bbfb50de7Johann local indent="$1" 26168e1c830ade592be74773e249bf94e2bbfb50de7Johann shift 26268e1c830ade592be74773e249bf94e2bbfb50de7Johann local list="$@" 26368e1c830ade592be74773e249bf94e2bbfb50de7Johann for entry in ${list}; do 26468e1c830ade592be74773e249bf94e2bbfb50de7Johann echo "${indent}${entry}" 26568e1c830ade592be74773e249bf94e2bbfb50de7Johann done 26668e1c830ade592be74773e249bf94e2bbfb50de7Johann} 26768e1c830ade592be74773e249bf94e2bbfb50de7Johann 268ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianiosbuild_usage() { 269ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniancat << EOF 270ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian Usage: ${0##*/} [arguments] 271ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --help: Display this message and exit. 27268e1c830ade592be74773e249bf94e2bbfb50de7Johann --enable-shared: Build a dynamic framework for use on iOS 8 or later. 2737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian --extra-configure-args <args>: Extra args to pass when configuring libvpx. 2740a39d0a697ff3603e8c100300fda363658e10b23James Zern --macosx: Uses darwin16 targets instead of iphonesimulator targets for x86 27568e1c830ade592be74773e249bf94e2bbfb50de7Johann and x86_64. Allows linking to framework when builds target MacOSX 27668e1c830ade592be74773e249bf94e2bbfb50de7Johann instead of iOS. 277ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --preserve-build-output: Do not delete the build directory. 278ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --show-build-output: Show output from each library build. 2797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian --targets <targets>: Override default target list. Defaults: 28068e1c830ade592be74773e249bf94e2bbfb50de7Johann$(print_list " " ${TARGETS}) 281c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann --test-link: Confirms all targets can be linked. Functionally identical to 282c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann passing --enable-examples via --extra-configure-args. 283ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --verbose: Output information about the environment and each stage of the 284ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian build. 285ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianEOF 286ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 287ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 2887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianelog() { 2897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian echo "${0##*/} failed because: $@" 1>&2 2907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 292ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvlog() { 293ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian if [ "${VERBOSE}" = "yes" ]; then 294ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian echo "$@" 295ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian fi 296ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 297ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 298ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniantrap cleanup EXIT 299ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 300ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Parse the command line. 301ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianwhile [ -n "$1" ]; do 302ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian case "$1" in 3037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian --extra-configure-args) 3047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian EXTRA_CONFIGURE_ARGS="$2" 3057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian shift 3067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian ;; 307ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --help) 308ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian iosbuild_usage 309ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian exit 310ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 31168e1c830ade592be74773e249bf94e2bbfb50de7Johann --enable-shared) 31268e1c830ade592be74773e249bf94e2bbfb50de7Johann ENABLE_SHARED=yes 31368e1c830ade592be74773e249bf94e2bbfb50de7Johann ;; 314ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --preserve-build-output) 315ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian PRESERVE_BUILD_OUTPUT=yes 316ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 317ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --show-build-output) 318ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian devnull= 319ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 320c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann --test-link) 321c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann EXTRA_CONFIGURE_ARGS="${EXTRA_CONFIGURE_ARGS} --enable-examples" 322c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann ;; 3237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian --targets) 3247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian TARGETS="$2" 3257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian shift 3267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian ;; 32768e1c830ade592be74773e249bf94e2bbfb50de7Johann --macosx) 32868e1c830ade592be74773e249bf94e2bbfb50de7Johann TARGETS="${ARM_TARGETS} ${OSX_TARGETS}" 32968e1c830ade592be74773e249bf94e2bbfb50de7Johann ;; 330ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --verbose) 331ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VERBOSE=yes 332ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 333ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *) 334ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian iosbuild_usage 335ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian exit 1 336ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 337ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian esac 338ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian shift 339ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniandone 340ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 34168e1c830ade592be74773e249bf94e2bbfb50de7Johannif [ "${ENABLE_SHARED}" = "yes" ]; then 34268e1c830ade592be74773e249bf94e2bbfb50de7Johann CONFIGURE_ARGS="--enable-shared ${CONFIGURE_ARGS}" 34368e1c830ade592be74773e249bf94e2bbfb50de7Johannfi 34468e1c830ade592be74773e249bf94e2bbfb50de7Johann 34568e1c830ade592be74773e249bf94e2bbfb50de7JohannFULLVERSION=$("${SCRIPT_DIR}"/version.sh --bare "${LIBVPX_SOURCE_DIR}") 34668e1c830ade592be74773e249bf94e2bbfb50de7JohannVERSION=$(echo "${FULLVERSION}" | sed -E 's/^v([0-9]+\.[0-9]+\.[0-9]+).*$/\1/') 34768e1c830ade592be74773e249bf94e2bbfb50de7Johann 34868e1c830ade592be74773e249bf94e2bbfb50de7Johannif [ "$ENABLE_SHARED" = "yes" ]; then 34968e1c830ade592be74773e249bf94e2bbfb50de7Johann IOS_VERSION_OPTIONS="--enable-shared" 35068e1c830ade592be74773e249bf94e2bbfb50de7Johann IOS_VERSION_MIN="8.0" 35168e1c830ade592be74773e249bf94e2bbfb50de7Johannelse 35268e1c830ade592be74773e249bf94e2bbfb50de7Johann IOS_VERSION_OPTIONS="" 35368e1c830ade592be74773e249bf94e2bbfb50de7Johann IOS_VERSION_MIN="6.0" 35468e1c830ade592be74773e249bf94e2bbfb50de7Johannfi 35568e1c830ade592be74773e249bf94e2bbfb50de7Johann 356ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianif [ "${VERBOSE}" = "yes" ]; then 357ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniancat << EOF 358ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian BUILD_ROOT=${BUILD_ROOT} 359ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian DIST_DIR=${DIST_DIR} 3607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian CONFIGURE_ARGS=${CONFIGURE_ARGS} 3617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian EXTRA_CONFIGURE_ARGS=${EXTRA_CONFIGURE_ARGS} 362ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian FRAMEWORK_DIR=${FRAMEWORK_DIR} 36368e1c830ade592be74773e249bf94e2bbfb50de7Johann FRAMEWORK_LIB=${FRAMEWORK_LIB} 364ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian HEADER_DIR=${HEADER_DIR} 365ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian LIBVPX_SOURCE_DIR=${LIBVPX_SOURCE_DIR} 366ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian LIPO=${LIPO} 367c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann MAKEFLAGS=${MAKEFLAGS} 368ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ORIG_PWD=${ORIG_PWD} 369c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann PRESERVE_BUILD_OUTPUT=${PRESERVE_BUILD_OUTPUT} 37068e1c830ade592be74773e249bf94e2bbfb50de7Johann TARGETS="$(print_list "" ${TARGETS})" 37168e1c830ade592be74773e249bf94e2bbfb50de7Johann ENABLE_SHARED=${ENABLE_SHARED} 37268e1c830ade592be74773e249bf94e2bbfb50de7Johann OSX_TARGETS="${OSX_TARGETS}" 37368e1c830ade592be74773e249bf94e2bbfb50de7Johann SIM_TARGETS="${SIM_TARGETS}" 37468e1c830ade592be74773e249bf94e2bbfb50de7Johann SCRIPT_DIR="${SCRIPT_DIR}" 37568e1c830ade592be74773e249bf94e2bbfb50de7Johann FULLVERSION="${FULLVERSION}" 37668e1c830ade592be74773e249bf94e2bbfb50de7Johann VERSION="${VERSION}" 37768e1c830ade592be74773e249bf94e2bbfb50de7Johann IOS_VERSION_MIN="${IOS_VERSION_MIN}" 378ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianEOF 379ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianfi 380ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 381ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianbuild_framework "${TARGETS}" 3827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianecho "Successfully built '${FRAMEWORK_DIR}' for:" 38368e1c830ade592be74773e249bf94e2bbfb50de7Johannprint_list "" ${TARGETS} 384