1*103e46e4SHarish Mahendrakar#!/bin/sh 2*103e46e4SHarish Mahendrakar## 3*103e46e4SHarish Mahendrakar## Copyright (c) 2015 The WebM project authors. All Rights Reserved. 4*103e46e4SHarish Mahendrakar## 5*103e46e4SHarish Mahendrakar## Use of this source code is governed by a BSD-style license 6*103e46e4SHarish Mahendrakar## that can be found in the LICENSE file in the root of the source 7*103e46e4SHarish Mahendrakar## tree. An additional intellectual property rights grant can be found 8*103e46e4SHarish Mahendrakar## in the file PATENTS. All contributing project authors may 9*103e46e4SHarish Mahendrakar## be found in the AUTHORS file in the root of the source tree. 10*103e46e4SHarish Mahendrakar## 11*103e46e4SHarish Mahendrakar## This script generates 'WebM.framework'. An iOS app can mux/demux WebM 12*103e46e4SHarish Mahendrakar## container files by including 'WebM.framework'. 13*103e46e4SHarish Mahendrakar## 14*103e46e4SHarish Mahendrakar## Run ./iosbuild.sh to generate 'WebM.framework'. By default the framework 15*103e46e4SHarish Mahendrakar## bundle will be created in a directory called framework. Use --out-dir to 16*103e46e4SHarish Mahendrakar## change the output directory. 17*103e46e4SHarish Mahendrakar## 18*103e46e4SHarish Mahendrakar## This script is based on iosbuild.sh from the libwebp project. 19*103e46e4SHarish Mahendrakar. $(dirname $0)/common/common.sh 20*103e46e4SHarish Mahendrakar 21*103e46e4SHarish Mahendrakar# Trap function. Cleans up build output. 22*103e46e4SHarish Mahendrakarcleanup() { 23*103e46e4SHarish Mahendrakar local readonly res=$? 24*103e46e4SHarish Mahendrakar cd "${ORIG_PWD}" 25*103e46e4SHarish Mahendrakar 26*103e46e4SHarish Mahendrakar for dir in ${LIBDIRS}; do 27*103e46e4SHarish Mahendrakar if [ -d "${dir}" ]; then 28*103e46e4SHarish Mahendrakar rm -rf "${dir}" 29*103e46e4SHarish Mahendrakar fi 30*103e46e4SHarish Mahendrakar done 31*103e46e4SHarish Mahendrakar 32*103e46e4SHarish Mahendrakar if [ $res -ne 0 ]; then 33*103e46e4SHarish Mahendrakar elog "build exited with error ($res)" 34*103e46e4SHarish Mahendrakar fi 35*103e46e4SHarish Mahendrakar} 36*103e46e4SHarish Mahendrakar 37*103e46e4SHarish Mahendrakartrap cleanup EXIT 38*103e46e4SHarish Mahendrakar 39*103e46e4SHarish Mahendrakarcheck_dir libwebm 40*103e46e4SHarish Mahendrakar 41*103e46e4SHarish Mahendrakariosbuild_usage() { 42*103e46e4SHarish Mahendrakarcat << EOF 43*103e46e4SHarish Mahendrakar Usage: ${0##*/} [arguments] 44*103e46e4SHarish Mahendrakar --help: Display this message and exit. 45*103e46e4SHarish Mahendrakar --out-dir: Override output directory (default is ${OUTDIR}). 46*103e46e4SHarish Mahendrakar --show-build-output: Show output from each library build. 47*103e46e4SHarish Mahendrakar --verbose: Output information about the environment and each stage of the 48*103e46e4SHarish Mahendrakar build. 49*103e46e4SHarish MahendrakarEOF 50*103e46e4SHarish Mahendrakar} 51*103e46e4SHarish Mahendrakar 52*103e46e4SHarish Mahendrakar# Extract the latest SDK version from the final field of the form: iphoneosX.Y 53*103e46e4SHarish Mahendrakarreadonly SDK=$(xcodebuild -showsdks \ 54*103e46e4SHarish Mahendrakar | grep iphoneos | sort | tail -n 1 | awk '{print substr($NF, 9)}' 55*103e46e4SHarish Mahendrakar) 56*103e46e4SHarish Mahendrakar 57*103e46e4SHarish Mahendrakar# Extract Xcode version. 58*103e46e4SHarish Mahendrakarreadonly XCODE=$(xcodebuild -version | grep Xcode | cut -d " " -f2) 59*103e46e4SHarish Mahendrakarif [ -z "${XCODE}" ]; then 60*103e46e4SHarish Mahendrakar echo "Xcode not available" 61*103e46e4SHarish Mahendrakar exit 1 62*103e46e4SHarish Mahendrakarfi 63*103e46e4SHarish Mahendrakar 64*103e46e4SHarish Mahendrakar# Add iPhoneOS-V6 to the list of platforms below if you need armv6 support. 65*103e46e4SHarish Mahendrakar# Note that iPhoneOS-V6 support is not available with the iOS6 SDK. 66*103e46e4SHarish Mahendrakarreadonly INCLUDES="common/file_util.h 67*103e46e4SHarish Mahendrakar common/hdr_util.h 68*103e46e4SHarish Mahendrakar common/webmids.h 69*103e46e4SHarish Mahendrakar mkvmuxer/mkvmuxer.h 70*103e46e4SHarish Mahendrakar mkvmuxer/mkvmuxertypes.h 71*103e46e4SHarish Mahendrakar mkvmuxer/mkvmuxerutil.h 72*103e46e4SHarish Mahendrakar mkvmuxer/mkvwriter.h 73*103e46e4SHarish Mahendrakar mkvparser/mkvparser.h 74*103e46e4SHarish Mahendrakar mkvparser/mkvreader.h" 75*103e46e4SHarish Mahendrakarreadonly PLATFORMS="iPhoneSimulator 76*103e46e4SHarish Mahendrakar iPhoneSimulator64 77*103e46e4SHarish Mahendrakar iPhoneOS-V7 78*103e46e4SHarish Mahendrakar iPhoneOS-V7s 79*103e46e4SHarish Mahendrakar iPhoneOS-V7-arm64" 80*103e46e4SHarish Mahendrakarreadonly TARGETDIR="WebM.framework" 81*103e46e4SHarish Mahendrakarreadonly DEVELOPER="$(xcode-select --print-path)" 82*103e46e4SHarish Mahendrakarreadonly PLATFORMSROOT="${DEVELOPER}/Platforms" 83*103e46e4SHarish Mahendrakarreadonly LIPO="$(xcrun -sdk iphoneos${SDK} -find lipo)" 84*103e46e4SHarish MahendrakarLIBLIST="" 85*103e46e4SHarish MahendrakarOPT_FLAGS="-DNDEBUG -O3" 86*103e46e4SHarish Mahendrakarreadonly SDK_MAJOR_VERSION="$(echo ${SDK} | awk -F '.' '{ print $1 }')" 87*103e46e4SHarish Mahendrakar 88*103e46e4SHarish Mahendrakarif [ -z "${SDK_MAJOR_VERSION}" ]; then 89*103e46e4SHarish Mahendrakar elog "iOS SDK not available" 90*103e46e4SHarish Mahendrakar exit 1 91*103e46e4SHarish Mahendrakarelif [ "${SDK_MAJOR_VERSION}" -lt "6" ]; then 92*103e46e4SHarish Mahendrakar elog "You need iOS SDK version 6 or above" 93*103e46e4SHarish Mahendrakar exit 1 94*103e46e4SHarish Mahendrakarelse 95*103e46e4SHarish Mahendrakar vlog "iOS SDK Version ${SDK}" 96*103e46e4SHarish Mahendrakarfi 97*103e46e4SHarish Mahendrakar 98*103e46e4SHarish Mahendrakar 99*103e46e4SHarish Mahendrakar# Parse the command line. 100*103e46e4SHarish Mahendrakarwhile [ -n "$1" ]; do 101*103e46e4SHarish Mahendrakar case "$1" in 102*103e46e4SHarish Mahendrakar --help) 103*103e46e4SHarish Mahendrakar iosbuild_usage 104*103e46e4SHarish Mahendrakar exit 105*103e46e4SHarish Mahendrakar ;; 106*103e46e4SHarish Mahendrakar --out-dir) 107*103e46e4SHarish Mahendrakar OUTDIR="$2" 108*103e46e4SHarish Mahendrakar shift 109*103e46e4SHarish Mahendrakar ;; 110*103e46e4SHarish Mahendrakar --enable-debug) 111*103e46e4SHarish Mahendrakar OPT_FLAGS="-g" 112*103e46e4SHarish Mahendrakar ;; 113*103e46e4SHarish Mahendrakar --show-build-output) 114*103e46e4SHarish Mahendrakar devnull= 115*103e46e4SHarish Mahendrakar ;; 116*103e46e4SHarish Mahendrakar --verbose) 117*103e46e4SHarish Mahendrakar VERBOSE=yes 118*103e46e4SHarish Mahendrakar ;; 119*103e46e4SHarish Mahendrakar *) 120*103e46e4SHarish Mahendrakar iosbuild_usage 121*103e46e4SHarish Mahendrakar exit 1 122*103e46e4SHarish Mahendrakar ;; 123*103e46e4SHarish Mahendrakar esac 124*103e46e4SHarish Mahendrakar shift 125*103e46e4SHarish Mahendrakardone 126*103e46e4SHarish Mahendrakar 127*103e46e4SHarish Mahendrakarreadonly OPT_FLAGS="${OPT_FLAGS}" 128*103e46e4SHarish Mahendrakarreadonly OUTDIR="${OUTDIR:-framework}" 129*103e46e4SHarish Mahendrakar 130*103e46e4SHarish Mahendrakarif [ "${VERBOSE}" = "yes" ]; then 131*103e46e4SHarish Mahendrakarcat << EOF 132*103e46e4SHarish Mahendrakar OUTDIR=${OUTDIR} 133*103e46e4SHarish Mahendrakar INCLUDES=${INCLUDES} 134*103e46e4SHarish Mahendrakar PLATFORMS=${PLATFORMS} 135*103e46e4SHarish Mahendrakar TARGETDIR=${TARGETDIR} 136*103e46e4SHarish Mahendrakar DEVELOPER=${DEVELOPER} 137*103e46e4SHarish Mahendrakar LIPO=${LIPO} 138*103e46e4SHarish Mahendrakar OPT_FLAGS=${OPT_FLAGS} 139*103e46e4SHarish Mahendrakar ORIG_PWD=${ORIG_PWD} 140*103e46e4SHarish MahendrakarEOF 141*103e46e4SHarish Mahendrakarfi 142*103e46e4SHarish Mahendrakar 143*103e46e4SHarish Mahendrakarrm -rf "${OUTDIR}/${TARGETDIR}" 144*103e46e4SHarish Mahendrakarmkdir -p "${OUTDIR}/${TARGETDIR}/Headers/" 145*103e46e4SHarish Mahendrakar 146*103e46e4SHarish Mahendrakarfor PLATFORM in ${PLATFORMS}; do 147*103e46e4SHarish Mahendrakar ARCH2="" 148*103e46e4SHarish Mahendrakar if [ "${PLATFORM}" = "iPhoneOS-V7-arm64" ]; then 149*103e46e4SHarish Mahendrakar PLATFORM="iPhoneOS" 150*103e46e4SHarish Mahendrakar ARCH="aarch64" 151*103e46e4SHarish Mahendrakar ARCH2="arm64" 152*103e46e4SHarish Mahendrakar elif [ "${PLATFORM}" = "iPhoneOS-V7s" ]; then 153*103e46e4SHarish Mahendrakar PLATFORM="iPhoneOS" 154*103e46e4SHarish Mahendrakar ARCH="armv7s" 155*103e46e4SHarish Mahendrakar elif [ "${PLATFORM}" = "iPhoneOS-V7" ]; then 156*103e46e4SHarish Mahendrakar PLATFORM="iPhoneOS" 157*103e46e4SHarish Mahendrakar ARCH="armv7" 158*103e46e4SHarish Mahendrakar elif [ "${PLATFORM}" = "iPhoneOS-V6" ]; then 159*103e46e4SHarish Mahendrakar PLATFORM="iPhoneOS" 160*103e46e4SHarish Mahendrakar ARCH="armv6" 161*103e46e4SHarish Mahendrakar elif [ "${PLATFORM}" = "iPhoneSimulator64" ]; then 162*103e46e4SHarish Mahendrakar PLATFORM="iPhoneSimulator" 163*103e46e4SHarish Mahendrakar ARCH="x86_64" 164*103e46e4SHarish Mahendrakar else 165*103e46e4SHarish Mahendrakar ARCH="i386" 166*103e46e4SHarish Mahendrakar fi 167*103e46e4SHarish Mahendrakar 168*103e46e4SHarish Mahendrakar LIBDIR="${OUTDIR}/${PLATFORM}-${SDK}-${ARCH}" 169*103e46e4SHarish Mahendrakar LIBDIRS="${LIBDIRS} ${LIBDIR}" 170*103e46e4SHarish Mahendrakar LIBFILE="${LIBDIR}/libwebm.a" 171*103e46e4SHarish Mahendrakar eval mkdir -p "${LIBDIR}" ${devnull} 172*103e46e4SHarish Mahendrakar 173*103e46e4SHarish Mahendrakar DEVROOT="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain" 174*103e46e4SHarish Mahendrakar SDKROOT="${PLATFORMSROOT}/" 175*103e46e4SHarish Mahendrakar SDKROOT="${SDKROOT}${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDK}.sdk/" 176*103e46e4SHarish Mahendrakar CXXFLAGS="-arch ${ARCH2:-${ARCH}} -isysroot ${SDKROOT} ${OPT_FLAGS} 177*103e46e4SHarish Mahendrakar -miphoneos-version-min=6.0" 178*103e46e4SHarish Mahendrakar 179*103e46e4SHarish Mahendrakar # enable bitcode if available 180*103e46e4SHarish Mahendrakar if [ "${SDK_MAJOR_VERSION}" -gt 8 ]; then 181*103e46e4SHarish Mahendrakar CXXFLAGS="${CXXFLAGS} -fembed-bitcode" 182*103e46e4SHarish Mahendrakar fi 183*103e46e4SHarish Mahendrakar 184*103e46e4SHarish Mahendrakar # Build using the legacy makefile (instead of generating via cmake). 185*103e46e4SHarish Mahendrakar eval make -f Makefile.unix libwebm.a CXXFLAGS=\"${CXXFLAGS}\" ${devnull} 186*103e46e4SHarish Mahendrakar 187*103e46e4SHarish Mahendrakar # copy lib and add it to LIBLIST. 188*103e46e4SHarish Mahendrakar eval cp libwebm.a "${LIBFILE}" ${devnull} 189*103e46e4SHarish Mahendrakar LIBLIST="${LIBLIST} ${LIBFILE}" 190*103e46e4SHarish Mahendrakar 191*103e46e4SHarish Mahendrakar # clean build so we can go again. 192*103e46e4SHarish Mahendrakar eval make -f Makefile.unix clean ${devnull} 193*103e46e4SHarish Mahendrakardone 194*103e46e4SHarish Mahendrakar 195*103e46e4SHarish Mahendrakar# create include sub dirs in framework dir. 196*103e46e4SHarish Mahendrakarreadonly framework_header_dir="${OUTDIR}/${TARGETDIR}/Headers" 197*103e46e4SHarish Mahendrakarreadonly framework_header_sub_dirs="common mkvmuxer mkvparser" 198*103e46e4SHarish Mahendrakarfor dir in ${framework_header_sub_dirs}; do 199*103e46e4SHarish Mahendrakar mkdir "${framework_header_dir}/${dir}" 200*103e46e4SHarish Mahendrakardone 201*103e46e4SHarish Mahendrakar 202*103e46e4SHarish Mahendrakarfor header_file in ${INCLUDES}; do 203*103e46e4SHarish Mahendrakar eval cp -p ${header_file} "${framework_header_dir}/${header_file}" ${devnull} 204*103e46e4SHarish Mahendrakardone 205*103e46e4SHarish Mahendrakar 206*103e46e4SHarish Mahendrakareval ${LIPO} -create ${LIBLIST} -output "${OUTDIR}/${TARGETDIR}/WebM" ${devnull} 207*103e46e4SHarish Mahendrakarecho "Succesfully built ${TARGETDIR} in ${OUTDIR}." 208