| 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 9797b8dd2c752a33dce5a4fa339f2e19a202a6f8..a50140e335417f065897eaf266b06c719325f15b 100755
|
| --- a/webrtc/build/ios/build_ios_libs.sh
|
| +++ b/webrtc/build/ios/build_ios_libs.sh
|
| @@ -8,262 +8,50 @@
|
| # in the file PATENTS. All contributing project authors may
|
| # be found in the AUTHORS file in the root of the source tree.
|
|
|
| -# Generates static or dynamic FAT libraries for ios in out_ios_libs.
|
| +# Generates static FAT libraries for ios in out_ios_libs.
|
|
|
| # Exit on errors.
|
| set -e
|
|
|
| -# Environment
|
| -export PATH=/usr/libexec:$PATH
|
| -
|
| -# Globals.
|
| SCRIPT_DIR=$(cd $(dirname $0) && pwd)
|
| WEBRTC_BASE_DIR=${SCRIPT_DIR}/../../..
|
| -GYP_WEBRTC_SCRIPT=${WEBRTC_BASE_DIR}/webrtc/build/gyp_webrtc.py
|
| -MERGE_SCRIPT=${SCRIPT_DIR}/merge_ios_libs.py
|
| -LICENSE_SCRIPT=${SCRIPT_DIR}/generate_licenses.py
|
| -
|
| -function check_preconditions {
|
| - # Check for Darwin.
|
| - if [[ ! $(uname) = "Darwin" ]]; then
|
| - echo "OS/X required." >&2
|
| - exit 1
|
| - fi
|
| -
|
| - # Check for libtool.
|
| - if [[ -z $(which libtool) ]]; then
|
| - echo "Missing libtool binary." >&2
|
| - exit 1
|
| - fi
|
| -
|
| - # Check for GYP generator.
|
| - if [[ ! -x ${GYP_WEBRTC_SCRIPT} ]]; then
|
| - echo "Failed to find gyp generator." >&2
|
| - exit 1
|
| - fi
|
| -
|
| - # Check for merge script.
|
| - if [[ ! -x ${MERGE_SCRIPT} ]]; then
|
| - echo "Failed to find library merging script." >&2
|
| - exit 1
|
| - fi
|
| -}
|
| -
|
| -function build_webrtc {
|
| - local base_output_dir=$1
|
| - local flavor=$2
|
| - local target_arch=$3
|
| - local build_type=$4
|
| - local libvpx_build_vp9=$5
|
| -
|
| - 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
|
| - flavor="${flavor}-iphoneos"
|
| - 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 objc legacy libraries no longer supported."
|
| - exit 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} \
|
| -clang_xcode=1 ios_deployment_target=8.0 \
|
| -ios_override_visibility=${override_visibility} \
|
| -libvpx_build_vp9=${libvpx_build_vp9}"
|
| - 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}
|
| - webrtc/build/gyp_webrtc.py ${gyp_file}
|
| - popd
|
| - # 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
|
| -
|
| - # 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
|
| -}
|
| -
|
| -function clean_artifacts {
|
| - local output_dir=$1
|
| - if [[ -d ${output_dir} ]]; then
|
| - rm -r ${output_dir}
|
| - fi
|
| -}
|
|
|
| -function usage {
|
| - echo "WebRTC iOS FAT libraries build script."
|
| - 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] [-b build_type] [-c] [-o output_dir]"
|
| - echo " -h Print this help."
|
| - echo " -b The build type. Can be framework or static_only."
|
| - 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
|
| +SDK_OUTPUT_DIR=${WEBRTC_BASE_DIR}/out_ios_libs
|
| +SDK_LIB_NAME="librtc_sdk_objc.a"
|
| +GN_BASE_ARGS="target_os=\"ios\" is_debug=false ios_enable_code_signing=false \
|
| +rtc_libvpx_build_vp9=false"
|
| +GN_STATIC_TARGET_NAMES="rtc_sdk_peerconnection_objc field_trial_default \
|
| +metrics_default"
|
| +
|
| +# TODO(tkchin): Restore functionality of old script to build dynamic framework,
|
| +# symbols and license file.
|
| +
|
| +function build_static_webrtc {
|
| + local arch=$1
|
| + local xcode_arch=$2
|
| +
|
| + OUTPUT_DIR=${SDK_OUTPUT_DIR}/${arch}_libs
|
| + OUTPUT_LIB=${OUTPUT_DIR}/${SDK_LIB_NAME}
|
| + GN_ARGS="${GN_BASE_ARGS} target_cpu=\"${arch}\""
|
| + gn gen ${OUTPUT_DIR} --args="${GN_ARGS}"
|
| + ninja -C ${OUTPUT_DIR} ${GN_STATIC_TARGET_NAMES}
|
| + # Combine the object files together into a single archive and strip debug
|
| + # symbols.
|
| + find ${OUTPUT_DIR}/obj -type f -name "*.o" |
|
| + xargs ld -r -static -S -all_load -arch ${xcode_arch} -o ${OUTPUT_LIB}
|
| }
|
|
|
| -check_preconditions
|
| -
|
| -# Set default arguments.
|
| -# Output directory for build artifacts.
|
| -OUTPUT_DIR=${WEBRTC_BASE_DIR}/out_ios_libs
|
| -# The type of build to perform. Valid arguments are framework and static_only.
|
| -BUILD_TYPE="framework"
|
| -PERFORM_CLEAN=0
|
| -FLAVOR="Profile"
|
| -POINT_VERSION="0"
|
| -# TODO(tkchin): Add ability to pass in a flag to build vp9. Odds are mobile
|
| -# clients will not want it though because of the higher CPU usage.
|
| -LIBVPX_BUILD_VP9=0
|
| -
|
| -# Parse arguments.
|
| -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
|
| - ;;
|
| - esac
|
| -done
|
| -
|
| -if [[ ${PERFORM_CLEAN} -ne 0 ]]; then
|
| - clean_artifacts ${OUTPUT_DIR}
|
| - exit 0
|
| -fi
|
| -
|
| # Build all the common architectures.
|
| -ARCHS=( "arm" "arm64" "ia32" "x64" )
|
| -for ARCH in "${ARCHS[@]}"
|
| -do
|
| - echo "Building WebRTC arch: ${ARCH}"
|
| - build_webrtc ${OUTPUT_DIR} ${FLAVOR} $ARCH ${BUILD_TYPE} ${LIBVPX_BUILD_VP9}
|
| -done
|
| -
|
| -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/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
|
| -elif [[ ${BUILD_TYPE} = "static_only" ]]; then
|
| - 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"
|
| - 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
|
| - mkdir -p ${OUTPUT_HEADER_DIR}
|
| - ln -sf ${INPUT_HEADER_DIR} ${OUTPUT_HEADER_DIR}/WebRTC
|
| -else
|
| - echo "BUILD_TYPE ${BUILD_TYPE} not supported."
|
| - exit 1
|
| -fi
|
| -
|
| -echo "Generating LICENSE.html."
|
| -${LICENSE_SCRIPT} ${OUTPUT_DIR}/arm64_libs ${OUTPUT_DIR}
|
| -
|
| -echo "Done!"
|
| +build_static_webrtc "arm" "armv7"
|
| +build_static_webrtc "arm64" "arm64"
|
| +build_static_webrtc "x86" "i386"
|
| +build_static_webrtc "x64" "x86_64"
|
| +
|
| +# Combine the libraries.
|
| +lipo ${SDK_OUTPUT_DIR}/arm_libs/${SDK_LIB_NAME} \
|
| + ${SDK_OUTPUT_DIR}/arm64_libs/${SDK_LIB_NAME} \
|
| + ${SDK_OUTPUT_DIR}/x86_libs/${SDK_LIB_NAME} \
|
| + ${SDK_OUTPUT_DIR}/x64_libs/${SDK_LIB_NAME} \
|
| + -create -output ${SDK_OUTPUT_DIR}/${SDK_LIB_NAME}
|
| +
|
| +echo "Done."
|
|
|