66bacc025a
Change-Id: Ib23a59475d566a7b7f44071614d730ceecfcfa60
170 lines
4.2 KiB
Bash
Executable File
170 lines
4.2 KiB
Bash
Executable File
#!/bin/sh
|
|
##
|
|
## Copyright (c) 2014 The WebM project authors. All Rights Reserved.
|
|
##
|
|
## Use of this source code is governed by a BSD-style license
|
|
## that can be found in the LICENSE file in the root of the source
|
|
## tree. An additional intellectual property rights grant can be found
|
|
## in the file PATENTS. All contributing project authors may
|
|
## be found in the AUTHORS file in the root of the source tree.
|
|
##
|
|
##
|
|
## This script generates 'VPX.framework'. An iOS app can encode and decode VPx
|
|
## video by including 'VPX.framework'.
|
|
##
|
|
## Run iosbuild.sh to create 'VPX.framework' in the current directory.
|
|
##
|
|
set -e
|
|
devnull='> /dev/null 2>&1'
|
|
|
|
BUILD_ROOT="_iosbuild"
|
|
DIST_DIR="_dist"
|
|
FRAMEWORK_DIR="VPX.framework"
|
|
HEADER_DIR="${FRAMEWORK_DIR}/Headers/vpx"
|
|
MAKE_JOBS=1
|
|
LIBVPX_SOURCE_DIR=$(dirname "$0" | sed -e s,/build/make,,)
|
|
LIPO=$(xcrun -sdk iphoneos${SDK} -find lipo)
|
|
ORIG_PWD="$(pwd)"
|
|
TARGETS="armv6-darwin-gcc
|
|
armv7-darwin-gcc
|
|
armv7s-darwin-gcc
|
|
x86-iphonesimulator-gcc
|
|
x86_64-iphonesimulator-gcc"
|
|
|
|
# Configures for the target specified by $1, and invokes make with the dist
|
|
# target using $DIST_DIR as the distribution output directory.
|
|
build_target() {
|
|
local target="$1"
|
|
local old_pwd="$(pwd)"
|
|
|
|
vlog "***Building target: ${target}***"
|
|
|
|
mkdir "${target}"
|
|
cd "${target}"
|
|
eval "../../${LIBVPX_SOURCE_DIR}/configure" --target="${target}" \
|
|
--disable-docs ${devnull}
|
|
export DIST_DIR
|
|
eval make -j ${MAKE_JOBS} dist ${devnull}
|
|
cd "${old_pwd}"
|
|
|
|
vlog "***Done building target: ${target}***"
|
|
}
|
|
|
|
# Configures and builds each target specified by $1, and then builds
|
|
# VPX.framework.
|
|
build_targets() {
|
|
local lib_list=""
|
|
local targets="$1"
|
|
local target=""
|
|
local target_dist_dir=""
|
|
|
|
# Clean up from previous build(s).
|
|
rm -rf "${BUILD_ROOT}" "${FRAMEWORK_DIR}"
|
|
|
|
# Create output dirs.
|
|
mkdir -p "${BUILD_ROOT}"
|
|
mkdir -p "${HEADER_DIR}"
|
|
|
|
cd "${BUILD_ROOT}"
|
|
|
|
for target in ${targets}; do
|
|
build_target "${target}"
|
|
target_dist_dir="${BUILD_ROOT}/${target}/${DIST_DIR}"
|
|
lib_list="${lib_list} ${target_dist_dir}/lib/libvpx.a"
|
|
done
|
|
|
|
cd "${ORIG_PWD}"
|
|
|
|
# Includes are identical for all platforms, and according to dist target
|
|
# behavior vpx_config.h and vpx_version.h aren't actually necessary for user
|
|
# apps built with libvpx. So, just copy the includes from the last target
|
|
# built.
|
|
# TODO(tomfinegan): The above is a lame excuse. Build common config/version
|
|
# includes that use the preprocessor to include the correct file.
|
|
cp -p "${target_dist_dir}"/include/vpx/* "${HEADER_DIR}"
|
|
${LIPO} -create ${lib_list} -output ${FRAMEWORK_DIR}/VPX
|
|
|
|
vlog "Created fat library ${FRAMEWORK_DIR}/VPX containing:"
|
|
for lib in ${lib_list}; do
|
|
vlog " $(echo ${lib} | awk -F / '{print $2, $NF}')"
|
|
done
|
|
|
|
# TODO(tomfinegan): Verify that expected targets are included within
|
|
# VPX.framework/VPX via lipo -info.
|
|
}
|
|
|
|
# Trap function. Cleans up the subtree used to build all targets contained in
|
|
# $TARGETS.
|
|
cleanup() {
|
|
cd "${ORIG_PWD}"
|
|
|
|
if [ "${PRESERVE_BUILD_OUTPUT}" != "yes" ]; then
|
|
rm -rf "${BUILD_ROOT}"
|
|
fi
|
|
}
|
|
|
|
iosbuild_usage() {
|
|
cat << EOF
|
|
Usage: ${0##*/} [arguments]
|
|
--help: Display this message and exit.
|
|
--jobs: Number of make jobs.
|
|
--preserve-build-output: Do not delete the build directory.
|
|
--show-build-output: Show output from each library build.
|
|
--verbose: Output information about the environment and each stage of the
|
|
build.
|
|
EOF
|
|
}
|
|
|
|
vlog() {
|
|
if [ "${VERBOSE}" = "yes" ]; then
|
|
echo "$@"
|
|
fi
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
# Parse the command line.
|
|
while [ -n "$1" ]; do
|
|
case "$1" in
|
|
--help)
|
|
iosbuild_usage
|
|
exit
|
|
;;
|
|
--jobs)
|
|
MAKE_JOBS="$2"
|
|
shift
|
|
;;
|
|
--preserve-build-output)
|
|
PRESERVE_BUILD_OUTPUT=yes
|
|
;;
|
|
--show-build-output)
|
|
devnull=
|
|
;;
|
|
--verbose)
|
|
VERBOSE=yes
|
|
;;
|
|
*)
|
|
iosbuild_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ "${VERBOSE}" = "yes" ]; then
|
|
cat << EOF
|
|
BUILD_ROOT=${BUILD_ROOT}
|
|
DIST_DIR=${DIST_DIR}
|
|
FRAMEWORK_DIR=${FRAMEWORK_DIR}
|
|
HEADER_DIR=${HEADER_DIR}
|
|
MAKE_JOBS=${MAKE_JOBS}
|
|
PRESERVE_BUILD_OUTPUT=${PRESERVE_BUILD_OUTPUT}
|
|
LIBVPX_SOURCE_DIR=${LIBVPX_SOURCE_DIR}
|
|
LIPO=${LIPO}
|
|
ORIG_PWD=${ORIG_PWD}
|
|
TARGETS="${TARGETS}"
|
|
EOF
|
|
fi
|
|
|
|
build_targets "${TARGETS}"
|