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

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

Issue 1903663002: Build dynamic iOS SDK. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix test gyp 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
« no previous file with comments | « webrtc/build/ios/build_ios_framework.sh ('k') | webrtc/build/ios/export_headers.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/build/ios/build_ios_libs.sh
diff --git a/webrtc/build/ios/build_ios_libs.sh b/webrtc/build/ios/build_ios_libs.sh
index 56175520fc8cf917eafad69da35d4cce58c3eaf5..ef64ab0c95b42c72f18afbcc6adba4e59ef819f3 100755
--- a/webrtc/build/ios/build_ios_libs.sh
+++ b/webrtc/build/ios/build_ios_libs.sh
@@ -8,7 +8,7 @@
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
-# Generates static FAT libraries for ios in out_ios_libs.
+# Generates static or dynamic FAT libraries for ios in out_ios_libs.
# Exit on errors.
set -e
@@ -17,7 +17,6 @@ set -e
SCRIPT_DIR=$(cd $(dirname $0) && pwd)
WEBRTC_BASE_DIR=${SCRIPT_DIR}/../../..
GYP_WEBRTC_SCRIPT=${WEBRTC_BASE_DIR}/webrtc/build/gyp_webrtc.py
-EXPORT_HEADERS_SCRIPT=${SCRIPT_DIR}/export_headers.py
MERGE_SCRIPT=${SCRIPT_DIR}/merge_ios_libs.py
function check_preconditions {
@@ -39,12 +38,6 @@ function check_preconditions {
exit 1
fi
- # Check for export headers script.
- if [[ ! -x ${EXPORT_HEADERS_SCRIPT} ]]; then
- echo "Failed to find export headers script." >&2
- exit 1
- fi
-
# Check for merge script.
if [[ ! -x ${MERGE_SCRIPT} ]]; then
echo "Failed to find library merging script." >&2
@@ -56,6 +49,8 @@ function build_webrtc {
local base_output_dir=$1
local flavor=$2
local target_arch=$3
+ local build_type=$4
+
local ninja_output_dir=${base_output_dir}/${target_arch}_ninja
local library_output_dir=${base_output_dir}/${target_arch}_libs
if [[ ${target_arch} = 'arm' || ${target_arch} = 'arm64' ]]; then
@@ -63,23 +58,54 @@ function build_webrtc {
else
flavor="${flavor}-iphonesimulator"
fi
+ local ninja_flavor_dir=${ninja_output_dir}/${flavor}
+
+ # Compile framework by default.
+ local gyp_file=webrtc/sdk/sdk.gyp
+ local gyp_target=rtc_sdk_framework_objc
+ # Set to 1 to explicitly not hide symbols. We'll want this if we're just
+ # generating static libs.
+ local override_visibility=0
+ if [[ ${build_type} = "legacy" ]]; then
+ echo "Building legacy."
+ gyp_file=webrtc/build/ios/merge_ios_libs.gyp
+ gyp_target=libjingle_peerconnection_objc_no_op
+ override_visibility=1
+ elif [[ ${build_type} = "static_only" ]]; then
+ echo "Building static only."
+ gyp_file=webrtc/build/ios/merge_ios_libs.gyp
+ gyp_target=rtc_sdk_peerconnection_objc_no_op
+ override_visibility=1
+ elif [[ ${build_type} == "framework" ]]; then
+ echo "Building framework."
+ else
+ echo "Unexpected build type: ${build_type}"
+ exit 1
+ fi
+
export GYP_DEFINES="OS=ios target_arch=${target_arch} use_objc_h264=1 \
-clang_xcode=1 ios_override_visibility=1"
+clang_xcode=1 ios_deployment_target=8.0 \
+ios_override_visibility=${override_visibility}"
export GYP_GENERATORS="ninja"
export GYP_GENERATOR_FLAGS="output_dir=${ninja_output_dir}"
# GYP generation requires relative path for some reason.
pushd ${WEBRTC_BASE_DIR}
- ${GYP_WEBRTC_SCRIPT} webrtc/build/ios/merge_ios_libs.gyp
+ webrtc/build/gyp_webrtc.py ${gyp_file}
popd
- if [[ ${USE_LEGACY_API} -eq 1 ]]; then
- ninja -C ${ninja_output_dir}/${flavor} libjingle_peerconnection_objc_no_op
- else
- ninja -C ${ninja_output_dir}/${flavor} webrtc_api_objc_no_op
+ # Compile the target we're interested in.
+ ninja -C ${ninja_flavor_dir} ${gyp_target}
+
+ if [[ ${build_type} = "framework" ]]; then
+ # Manually generate the dSYM files before stripping them. GYP does not seem
+ # to instruct ninja to generate dSYM files.
+ dsymutil --out=${ninja_flavor_dir}/WebRTC.framework.dSYM \
+ ${ninja_flavor_dir}/WebRTC.framework/WebRTC
fi
- mkdir -p ${library_output_dir}
- for f in ${ninja_output_dir}/${flavor}/*.a
+ # Make links to the generated static archives.
+ mkdir -p ${library_output_dir}
+ for f in ${ninja_flavor_dir}/*.a
do
ln -sf "${f}" "${library_output_dir}/$(basename ${f})"
done
@@ -97,11 +123,14 @@ function usage {
echo "Each architecture is compiled separately before being merged together."
echo "By default, the fat libraries will be created in out_ios_libs/fat_libs."
echo "The headers will be copied to out_ios_libs/include."
- echo "Usage: $0 [-h] [-c] [-o]"
+ echo "Usage: $0 [-h] [-b build_type] [-c] [-o output_dir]"
echo " -h Print this help."
+ echo " -b The build type. Can be framework, static_only or legacy."
+ echo " Defaults to framework."
echo " -c Removes generated build output."
echo " -o Specifies a directory to output build artifacts to."
echo " If specified together with -c, deletes the dir."
+ echo " -r Specifies a revision number to embed if building the framework."
exit 0
}
@@ -110,16 +139,21 @@ check_preconditions
# Set default arguments.
# Output directory for build artifacts.
OUTPUT_DIR=${WEBRTC_BASE_DIR}/out_ios_libs
-# Flag to build the new or legacy version of the API.
-USE_LEGACY_API=0
+# The type of build to perform. Valid arguments are framework, static_only and
+# legacy.
+BUILD_TYPE="framework"
PERFORM_CLEAN=0
+FLAVOR="Profile"
+POINT_VERSION="0"
# Parse arguments.
-while getopts "hco:" opt; do
+while getopts "hb:co:r:" opt; do
case "${opt}" in
h) usage;;
+ b) BUILD_TYPE="${OPTARG}";;
c) PERFORM_CLEAN=1;;
o) OUTPUT_DIR="${OPTARG}";;
+ r) POINT_VERSION="${OPTARG}";;
*)
usage
exit 1
@@ -133,15 +167,99 @@ if [[ ${PERFORM_CLEAN} -ne 0 ]]; then
fi
# Build all the common architectures.
-archs=( "arm" "arm64" "ia32" "x64" )
-for arch in "${archs[@]}"
+ARCHS=( "arm" "arm64" "ia32" "x64" )
+for ARCH in "${ARCHS[@]}"
do
- echo "Building WebRTC arch: ${arch}"
- build_webrtc ${OUTPUT_DIR} "Profile" $arch
+ echo "Building WebRTC arch: ${ARCH}"
+ build_webrtc ${OUTPUT_DIR} ${FLAVOR} $ARCH ${BUILD_TYPE}
done
-# Export header files.
-${EXPORT_HEADERS_SCRIPT} ${OUTPUT_DIR} ${USE_LEGACY_API}
+ARM_NINJA_DIR=${OUTPUT_DIR}/arm_ninja/${FLAVOR}-iphoneos
+ARM64_NINJA_DIR=${OUTPUT_DIR}/arm64_ninja/${FLAVOR}-iphoneos
+IA32_NINJA_DIR=${OUTPUT_DIR}/ia32_ninja/${FLAVOR}-iphonesimulator
+X64_NINJA_DIR=${OUTPUT_DIR}/x64_ninja/${FLAVOR}-iphonesimulator
+
+if [[ ${BUILD_TYPE} = "framework" ]]; then
+ # Merge the framework slices together into a FAT library by copying one arch
+ # output and merging the rest in.
+ DYLIB_PATH="WebRTC.framework/WebRTC"
+ cp -R ${ARM_NINJA_DIR}/WebRTC.framework ${OUTPUT_DIR}
+ rm ${OUTPUT_DIR}/${DYLIB_PATH}
+ echo "Merging framework slices."
+ lipo ${ARM_NINJA_DIR}/${DYLIB_PATH} \
+ ${ARM64_NINJA_DIR}/${DYLIB_PATH} \
+ ${IA32_NINJA_DIR}/${DYLIB_PATH} \
+ ${X64_NINJA_DIR}/${DYLIB_PATH} \
+ -create -output ${OUTPUT_DIR}/${DYLIB_PATH}
+
+ # Merge the dSYM files together in a similar fashion.
+ DSYM_PATH="WebRTC.framework.dSYM/Contents/Resources/DWARF/WebRTC"
+ cp -R ${ARM_NINJA_DIR}/WebRTC.framework.dSYM ${OUTPUT_DIR}
+ rm ${OUTPUT_DIR}/${DSYM_PATH}
+ echo "Merging dSYM slices."
+ lipo ${ARM_NINJA_DIR}/${DSYM_PATH} \
+ ${ARM64_NINJA_DIR}/${DSYM_PATH} \
+ ${IA32_NINJA_DIR}/${DSYM_PATH} \
+ ${X64_NINJA_DIR}/${DSYM_PATH} \
+ -create -output ${OUTPUT_DIR}/${DSYM_PATH}
+
+ # Strip the dynamic framework of non-global symbols.
+ # TODO(tkchin): Override chromium strip settings in supplement.gypi instead.
+ echo "Stripping non-global symbols."
+ strip -x ${OUTPUT_DIR}/${DYLIB_PATH}
+
+ # Modify the version number.
+ INFOPLIST_PATH=${OUTPUT_DIR}/WebRTC.framework/Resources/Info.plist
+ MAJOR_MINOR=$(plistbuddy -c "Print :CFBundleShortVersionString" \
+ ${INFOPLIST_PATH})
+ VERSION_NUMBER="${MAJOR_MINOR}.${POINT_VERSION}"
+ echo "Substituting revision number: ${VERSION_NUMBER}"
+ plistbuddy -c "Set :CFBundleVersion ${VERSION_NUMBER}" ${INFOPLIST_PATH}
+ plutil -convert binary1 ${INFOPLIST_PATH}
+
+ # Copy pod file.
+ FORMAT_STRING=s/\${FRAMEWORK_VERSION_NUMBER}/${VERSION_NUMBER}/g
+ sed -e ${FORMAT_STRING} ${WEBRTC_BASE_DIR}/webrtc/sdk/objc/WebRTC.podspec > \
+ ${OUTPUT_DIR}/WebRTC.podspec
+else
+ echo "Merging static library slices."
+ # Merge the static libraries together into individual FAT archives.
+ ${MERGE_SCRIPT} ${OUTPUT_DIR}
+
+ # Merge the dSYM files together.
+ TARGET_NAME="rtc_sdk_peerconnection_objc_no_op"
+ if [[ ${BUILD_TYPE} = "legacy" ]]; then
+ TARGET_NAME="libjingle_peerconnection_objc_no_op"
+ fi
+ DSYM_PATH="${TARGET_NAME}.app.dSYM/Contents/Resources/DWARF/${TARGET_NAME}"
+ cp -R ${ARM_NINJA_DIR}/${TARGET_NAME}.app.dSYM ${OUTPUT_DIR}
+ echo "Merging dSYM slices."
+ lipo ${ARM_NINJA_DIR}/${DSYM_PATH} \
+ ${ARM64_NINJA_DIR}/${DSYM_PATH} \
+ ${IA32_NINJA_DIR}/${DSYM_PATH} \
+ ${X64_NINJA_DIR}/${DSYM_PATH} \
+ -create -output ${OUTPUT_DIR}/${DSYM_PATH}
+
+ # Strip debugging symbols.
+ # TODO(tkchin): Override chromium settings in supplement.gypi instead to do
+ # stripping at build time.
+ echo "Stripping debug symbols."
+ strip -S ${OUTPUT_DIR}/fat_libs/*.a
+
+ # Symlink the headers.
+ echo "Symlinking headers."
+ INPUT_HEADER_DIR="${WEBRTC_BASE_DIR}/webrtc/sdk/objc/Framework/Headers/WebRTC"
+ OUTPUT_HEADER_DIR="${OUTPUT_DIR}/include"
+ if [[ -d ${OUTPUT_HEADER_DIR} ]]; then
+ rm -rf ${OUTPUT_HEADER_DIR}
+ fi
+ if [[ ${BUILD_TYPE} = "legacy" ]]; then
+ INPUT_HEADER_DIR="${WEBRTC_BASE_DIR}/talk/app/webrtc/objc/public"
+ ln -sf ${INPUT_HEADER_DIR} ${OUTPUT_HEADER_DIR}
+ else
+ mkdir -p ${OUTPUT_HEADER_DIR}
+ ln -sf ${INPUT_HEADER_DIR} ${OUTPUT_HEADER_DIR}/WebRTC
+ fi
+fi
-# Merge the libraries together.
-${MERGE_SCRIPT} ${OUTPUT_DIR}
+echo "Done!"
« no previous file with comments | « webrtc/build/ios/build_ios_framework.sh ('k') | webrtc/build/ios/export_headers.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698