| Index: webrtc/build/ios/build_ios_framework.sh
|
| diff --git a/webrtc/build/ios/build_ios_framework.sh b/webrtc/build/ios/build_ios_framework.sh
|
| index 35ec552798ce711f2f5f6b3c9912fddc283100ee..b5bb76e696796ea1e439a6cddf8e878b9c63b049 100755
|
| --- a/webrtc/build/ios/build_ios_framework.sh
|
| +++ b/webrtc/build/ios/build_ios_framework.sh
|
| @@ -10,76 +10,143 @@
|
|
|
| # Generates dynamic FAT framework for iOS in out_ios_framework.
|
|
|
| -# Check for Darwin.
|
| -if [[ ! $(uname) = "Darwin" ]]; then
|
| - echo "OS X required." >&2
|
| -fi
|
| +# Exit on errors.
|
| +set -e
|
|
|
| -# Check for iOS library build script.
|
| -SCRIPT_DIR=$(dirname $0)
|
| +# Globals.
|
| +SCRIPT_DIR=$(cd $(dirname $0) && pwd)
|
| WEBRTC_BASE_DIR=${SCRIPT_DIR}/../../..
|
| -BUILD_WEBRTC_SCRIPT=${WEBRTC_BASE_DIR}/webrtc/build/ios/build_ios_libs.sh
|
| -if [[ ! -x ${BUILD_WEBRTC_SCRIPT} ]]; then
|
| - echo "Failed to find iOS library build script." >&2
|
| - exit 1
|
| -fi
|
| -# Check for flatten iOS headers script.
|
| -FLATTEN_HEADERS_SCRIPT=${WEBRTC_BASE_DIR}/webrtc/build/ios/flatten_ios_headers
|
| -if [[ ! -x ${FLATTEN_HEADERS_SCRIPT} ]]; then
|
| - echo "Failed to find flatten iOS headers script." >&2
|
| - exit 1
|
| -fi
|
| +BUILD_WEBRTC_SCRIPT=${SCRIPT_DIR}/build_ios_libs.sh
|
| +FLATTEN_HEADERS_SCRIPT=${SCRIPT_DIR}/flatten_ios_headers.py
|
| +SDK_DIR=${SCRIPT_DIR}/SDK
|
| +FRAMEWORK_PROJECT_DIR=${SDK_DIR}/Framework
|
| +FRAMEWORK_PROJECT_PATH=${FRAMEWORK_PROJECT_DIR}/WebRTC.xcodeproj
|
|
|
| -pushd ${WEBRTC_BASE_DIR}
|
| -LIB_BASE_DIR=out_ios_libs
|
| -FRAMEWORK_BASE_DIR=out_ios_framework
|
| +function check_preconditions {
|
| + # Check for Darwin.
|
| + if [[ ! $(uname) = "Darwin" ]]; then
|
| + echo "OS X required." >&2
|
| + exit 1
|
| + fi
|
| + if [[ ! -x ${BUILD_WEBRTC_SCRIPT} ]]; then
|
| + echo "Failed to find iOS library build script." >&2
|
| + exit 1
|
| + fi
|
| + if [[ ! -x ${FLATTEN_HEADERS_SCRIPT} ]]; then
|
| + echo "Failed to find flatten iOS headers script." >&2
|
| + exit 1
|
| + fi
|
| + if [[ ! -x ${FRAMEWORK_PROJECT_PATH} ]]; then
|
| + echo "Failed to find framework XCode project." >&2
|
| + exit 1
|
| + fi
|
| +}
|
|
|
| -# Build static libraries for iOS.
|
| -${BUILD_WEBRTC_SCRIPT}
|
| -if [ $? -ne 0 ]; then
|
| - echo "Failed to build iOS static libraries." >&2
|
| - exit 1
|
| -fi
|
| +function clean_artifacts {
|
| + # Make XCode clean up after itself.
|
| + xcodebuild -project ${FRAMEWORK_PROJECT_PATH} -scheme WebRTC \
|
| + -configuration Release clean
|
| + xcodebuild -project ${FRAMEWORK_PROJECT_PATH} -scheme WebRTC \
|
| + -configuration Release clean \
|
| + -destination "platform=iOS Simulator,name=iPhone 6"
|
| + # Remove remaining directory that XCode doesn't delete.
|
| + XCODE_BUILD_DIR=${FRAMEWORK_PROJECT_DIR}/build
|
| + if [[ -d ${XCODE_BUILD_DIR} ]]; then
|
| + rm -r ${XCODE_BUILD_DIR}
|
| + fi
|
| +
|
| + # Remove the temporary framework header dir.
|
| + if [[ -d ${FRAMEWORK_INCLUDE_DIR} ]]; then
|
| + rm -r ${FRAMEWORK_INCLUDE_DIR}
|
| + fi
|
| +
|
| + # Remove the generated framework.
|
| + if [[ -d ${FRAMEWORK_OUTPUT_DIR} ]]; then
|
| + rm -r ${FRAMEWORK_OUTPUT_DIR}
|
| + fi
|
| +
|
| + # Let the other script clean up after itself.
|
| + ${BUILD_WEBRTC_SCRIPT} -c
|
| +}
|
| +
|
| +function usage {
|
| + echo "WebRTC iOS Framework build script."
|
| + echo "Builds a dynamic Framework for the WebRTC APIs."
|
| + echo "Compiles various architectures and edits header paths as required."
|
| + echo "Usage: $0 [-h] [-c]"
|
| + echo " -h Print this help."
|
| + echo " -c Removes generated build output."
|
| + exit 0
|
| +}
|
| +
|
| +check_preconditions
|
|
|
| -# Flatten the directory structure for iOS headers.
|
| -${FLATTEN_HEADERS_SCRIPT} ${LIB_BASE_DIR} ${FRAMEWORK_BASE_DIR}
|
| -if [ $? -ne 0 ]; then
|
| - echo "Failed to flatten iOS headers." >&2
|
| - exit 1
|
| +# Set the output directories for the various build artifacts.
|
| +# For convenience we'll output some generated files in the same directory
|
| +# as the one we used to output the generated statis libraries.
|
| +LIB_OUTPUT_DIR=${WEBRTC_BASE_DIR}/out_ios_libs
|
| +INCLUDE_OUTPUT_DIR=${LIB_OUTPUT_DIR}/include
|
| +FRAMEWORK_INCLUDE_DIR=${LIB_OUTPUT_DIR}/framework_include
|
| +FRAMEWORK_OUTPUT_DIR=${WEBRTC_BASE_DIR}/out_ios_framework
|
| +PERFORM_CLEAN=0
|
| +
|
| +# Parse arguments.
|
| +while getopts "hc" opt; do
|
| + case "${opt}" in
|
| + h) usage;;
|
| + c) PERFORM_CLEAN=1;;
|
| + *)
|
| + usage
|
| + exit 1
|
| + ;;
|
| + esac
|
| +done
|
| +
|
| +if [[ ${PERFORM_CLEAN} -ne 0 ]]; then
|
| + clean_artifacts
|
| + exit 0
|
| fi
|
|
|
| +# Build static libraries for iOS.
|
| +${BUILD_WEBRTC_SCRIPT} -o ${LIB_OUTPUT_DIR}
|
| +
|
| +# Flatten the directory structure for iOS headers generated from building the
|
| +# static libraries.
|
| +${FLATTEN_HEADERS_SCRIPT} ${INCLUDE_OUTPUT_DIR} ${FRAMEWORK_INCLUDE_DIR}
|
| +
|
| # Replace full paths for headers with framework paths.
|
| SED_PATTERN='
|
| s/(\#import )\"webrtc\/api\/objc\/(.*)\"/\1<WebRTC\/\2>/g;
|
| s/(\#import )\"webrtc\/base\/objc\/(.*)\"/\1<WebRTC\/\2>/g;
|
| s/(\#include )\"webrtc\/base\/objc\/(.*)\"/\1<WebRTC\/\2>/g;
|
| '
|
| -sed -E -i '' "$SED_PATTERN" ${FRAMEWORK_BASE_DIR}/include/*.h
|
| +sed -E -i '' "$SED_PATTERN" ${FRAMEWORK_INCLUDE_DIR}/*.h
|
|
|
| -SDK_DIR=webrtc/build/ios/SDK
|
| -PROJECT_DIR=${SDK_DIR}/Framework
|
| # Build the framework.
|
| -pushd ${PROJECT_DIR}
|
| -xcodebuild -project WebRTC.xcodeproj -scheme WebRTC -configuration Release \
|
| - build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
|
| -xcodebuild -project WebRTC.xcodeproj -scheme WebRTC -configuration Release \
|
| - build -destination 'platform=iOS Simulator,name=iPhone 6'
|
| -popd
|
| -
|
| -# Copy podspec, framework, dSYM and LICENSE to FRAMEWORK_BASE_DIR
|
| -DEVICE_BUILD_DIR=${PROJECT_DIR}/build/Release-iphoneos
|
| -cp ${SDK_DIR}/WebRTC.podspec ${FRAMEWORK_BASE_DIR}/
|
| -cp -R ${DEVICE_BUILD_DIR}/WebRTC.framework ${FRAMEWORK_BASE_DIR}/
|
| -cp -R ${DEVICE_BUILD_DIR}/WebRTC.framework.dSYM ${FRAMEWORK_BASE_DIR}/
|
| -cp -R webrtc/LICENSE ${FRAMEWORK_BASE_DIR}/
|
| -
|
| -# Combine multiple architectures
|
| -SIMULATOR_BUILD_DIR=${PROJECT_DIR}/build/Release-iphonesimulator
|
| +xcodebuild -project ${FRAMEWORK_PROJECT_PATH} -scheme WebRTC \
|
| + -configuration Release build \
|
| + CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
|
| +xcodebuild -project ${FRAMEWORK_PROJECT_PATH} -scheme WebRTC \
|
| + -configuration Release build \
|
| + -destination "platform=iOS Simulator,name=iPhone 6"
|
| +
|
| +# XCode should output the build artifacts to the following directories.
|
| +DEVICE_BUILD_DIR=${FRAMEWORK_PROJECT_DIR}/build/Release-iphoneos
|
| +SIMULATOR_BUILD_DIR=${FRAMEWORK_PROJECT_DIR}/build/Release-iphonesimulator
|
| +
|
| +# Copy podspec, framework, dSYM and LICENSE to FRAMEWORK_OUTPUT_DIR.
|
| +mkdir -p ${FRAMEWORK_OUTPUT_DIR}
|
| +cp ${SDK_DIR}/WebRTC.podspec ${FRAMEWORK_OUTPUT_DIR}/
|
| +cp -R ${DEVICE_BUILD_DIR}/WebRTC.framework ${FRAMEWORK_OUTPUT_DIR}/
|
| +cp -R ${DEVICE_BUILD_DIR}/WebRTC.framework.dSYM ${FRAMEWORK_OUTPUT_DIR}/
|
| +cp -R ${WEBRTC_BASE_DIR}/webrtc/LICENSE ${FRAMEWORK_OUTPUT_DIR}/
|
| +
|
| +# Combine multiple architectures.
|
| DYLIB_PATH=WebRTC.framework/WebRTC
|
| DWARF_PATH=WebRTC.framework.dSYM/Contents/Resources/DWARF/WebRTC
|
| -lipo ${FRAMEWORK_BASE_DIR}/${DYLIB_PATH} ${SIMULATOR_BUILD_DIR}/${DYLIB_PATH} \
|
| - -create -output ${FRAMEWORK_BASE_DIR}/${DYLIB_PATH}
|
| -lipo ${FRAMEWORK_BASE_DIR}/${DWARF_PATH} ${SIMULATOR_BUILD_DIR}/${DWARF_PATH} \
|
| - -create -output ${FRAMEWORK_BASE_DIR}/${DWARF_PATH}
|
| -
|
| -popd
|
| +lipo ${FRAMEWORK_OUTPUT_DIR}/${DYLIB_PATH} \
|
| + ${SIMULATOR_BUILD_DIR}/${DYLIB_PATH} \
|
| + -create -output ${FRAMEWORK_OUTPUT_DIR}/${DYLIB_PATH}
|
| +lipo ${FRAMEWORK_OUTPUT_DIR}/${DWARF_PATH} \
|
| + ${SIMULATOR_BUILD_DIR}/${DWARF_PATH} \
|
| + -create -output ${FRAMEWORK_OUTPUT_DIR}/${DWARF_PATH}
|
|
|