#!/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'
# 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)"
local target_specific_flags=""
vlog "***Building target: ${target}***"
case "${target}" in
x86-*)
target_specific_flags="--enable-pic"
vlog "Enabled PIC for ${target}"
;;
esac
mkdir "${target}"
cd "${target}" eval"${LIBVPX_SOURCE_DIR}/configure" --target="${target}" \
${CONFIGURE_ARGS} ${EXTRA_CONFIGURE_ARGS} ${target_specific_flags} \
${devnull} export DIST_DIR evalmake dist ${devnull}
cd "${old_pwd}"
vlog "***Done building target: ${target}***"
}
# Returns the preprocessor symbol for the target specified by $1.
target_to_preproc_symbol() {
target="$1"
case "${target}" in
arm64-*) echo"__aarch64__"
;;
armv7-*) echo"__ARM_ARCH_7A__"
;;
armv7s-*) echo"__ARM_ARCH_7S__"
;;
x86-*) echo"__i386__"
;;
x86_64-*) echo"__x86_64__"
;;
*) echo"#error ${target} unknown/unsupported"
return 1
;;
esac
}
# Create a vpx_config.h shim that, based on preprocessor settings for the # current target CPU, includes the real vpx_config.h for the current target. # $1 is the list of targets.
create_vpx_framework_config_shim() {
local targets="$1"
local config_file="${HEADER_DIR}/vpx_config.h"
local preproc_symbol=""
local target=""
local include_guard="VPX_FRAMEWORK_HEADERS_VPX_VPX_CONFIG_H_"
local file_header="/*
* Copyright (c) $(date +%Y) 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.
*/
# Verifies that $FRAMEWORK_LIB fat library contains requested builds.
verify_framework_targets() {
local requested_cpus=""
local cpu=""
# Extract CPU from full target name. for target; do
cpu="${target%%-*}" if [ "${cpu}" = "x86" ]; then # lipo -info outputs i386 for libvpx x86 targets.
cpu="i386" fi
requested_cpus="${requested_cpus}${cpu} " done
# Get target CPUs present in framework library.
local targets_built=$(${LIPO} -info ${FRAMEWORK_LIB})
# $LIPO -info outputs a string like the following: # Architectures in the fat file: $FRAMEWORK_LIB <architectures> # Capture only the architecture strings.
targets_built=${targets_built##*: }
# Sort CPU strings to make the next step a simple string compare.
local actual=$(echo ${targets_built} | tr " ""\n" | sort | tr "\n"" ")
local requested=$(echo ${requested_cpus} | tr " ""\n" | sort | tr "\n"" ")
if [ "${requested}" != "${actual}" ]; then
elog "Actual ${FRAMEWORK_LIB} targets do not match requested target list."
elog " Requested target CPUs: ${requested}"
elog " Actual target CPUs: ${actual}"
return 1 fi
}
# Configures and builds each target specified by $1, and then builds # VPX.framework.
build_framework() {
local lib_list=""
local targets="$1"
local target=""
local target_dist_dir=""
# Clean up from previous build(s). rm -rf "${BUILD_ROOT}""${FRAMEWORK_DIR}"
for target in ${targets}; do
build_target "${target}"
target_dist_dir="${BUILD_ROOT}/${target}/${DIST_DIR}" if [ "${ENABLE_SHARED}" = "yes" ]; then
local suffix="dylib" else
local suffix="a" fi
lib_list="${lib_list} ${target_dist_dir}/lib/libvpx.${suffix}" done
cd "${ORIG_PWD}"
# The basic libvpx API includes are all the same; just grab the most recent # set. cp -p "${target_dist_dir}"/include/vpx/* "${HEADER_DIR}"
# Build the fat library.
${LIPO} -create ${lib_list} -output ${FRAMEWORK_DIR}/VPX
# Create the vpx_config.h shim that allows usage of vpx_config.h from # within VPX.framework.
create_vpx_framework_config_shim "${targets}"
# Copy in vpx_version.h. cp -p "${BUILD_ROOT}/${target}/vpx_version.h""${HEADER_DIR}"
if [ "${ENABLE_SHARED}" = "yes" ]; then # Adjust the dylib's name so dynamic linking in apps works as expected.
install_name_tool -id '@rpath/VPX.framework/VPX' ${FRAMEWORK_DIR}/VPX
# Copy in Info.plist. cat"${SCRIPT_DIR}/ios-Info.plist" \
| sed "s/\${FULLVERSION}/${FULLVERSION}/g" \
| sed "s/\${VERSION}/${VERSION}/g" \
| sed "s/\${IOS_VERSION_MIN}/${IOS_VERSION_MIN}/g" \
> "${FRAMEWORK_DIR}/Info.plist" fi
# Confirm VPX.framework/VPX contains the targets requested.
verify_framework_targets ${targets}
vlog "Created fat library ${FRAMEWORK_LIB} containing:" for lib in ${lib_list}; do
vlog " $(echo ${lib} | awk -F / '{print $2, $NF}')" done
}
# Trap function. Cleans up the subtree used to build all targets contained in # $TARGETS.
cleanup() {
local res=$?
cd "${ORIG_PWD}"
if [ $res -ne 0 ]; then
elog "build exited with error ($res)" fi
if [ "${PRESERVE_BUILD_OUTPUT}" != "yes" ]; then rm -rf "${BUILD_ROOT}" fi
}
print_list() {
local indent="$1"
shift
local list="$@" for entry in ${list}; do echo"${indent}${entry}" done
}
iosbuild_usage() { cat << EOF
Usage: ${0##*/} [arguments]
--help: Display this message and exit.
--enable-shared: Build a dynamic framework for use on iOS 8 or later.
--extra-configure-args <args>: Extra args to pass when configuring libvpx.
--macosx: Uses darwin16 targets instead of iphonesimulator targets for x86
and x86_64. Allows linking to framework when builds target MacOSX
instead of iOS.
--preserve-build-output: Do not delete the build directory.
--show-build-output: Show output from each library build.
--targets <targets>: Override default target list. Defaults:
$(print_list " " ${TARGETS})
--test-link: Confirms all targets can be linked. Functionally identical to
passing --enable-examples via --extra-configure-args.
--verbose: Output information about the environment and each stage of the
build.
EOF
}
elog() { echo"${0##*/} failed because: $@" 1>&2
}
vlog() { if [ "${VERBOSE}" = "yes" ]; then echo"$@" fi
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.