xref: /aosp_15_r20/external/libwebm/iosbuild.sh (revision 103e46e4cd4b6efcf6001f23fa8665fb110abf8d)
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