Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Unified Diff: webrtc/build/ios/build_ios_framework.sh

Issue 1875003004: Fix WebRTC API framework build. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Update scripts Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..8e2d39e50dc6eca30276e6634a1a79fda9bd1985 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
kjellander_webrtc 2016/04/15 04:59:41 Use double-brackets https://engdoc.corp.google.com
tkchin_webrtc 2016/04/16 00:34:18 Done.
+ 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
+
+# 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
-# 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
+# Parse arguments.
+while getopts "hc" opt; do
+ case "${opt}" in
+ h) usage;;
kjellander_webrtc 2016/04/15 04:59:41 indent according to https://engdoc.corp.google.com
tkchin_webrtc 2016/04/16 00:34:18 Done.
+ c) PERFORM_CLEAN=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/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}
+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}
+
+
kjellander_webrtc 2016/04/15 04:59:41 Remove these ending blank lines
tkchin_webrtc 2016/04/16 00:34:18 Done.
+
-popd

Powered by Google App Engine
This is Rietveld 408576698