For historical reasons gyp_webrtc.py was launcher script for gyp_webrtc and the python logic lived in the gyp_webrtc. This change moves python code into the .py file makes the extension-free gyp_webrtc a launcher for gyp_webrtc.py. Other changes: * Move the code into a main() function. * Add call to disable GC to save some processing time. * Set executable permission on gyp_webrtc.py and remove it from gyp_webrtc. Similar Chromium CL: https://codereview.chromium.org/1216863010 Motivation for this change: * Gets checked with PyLint * Easy to add unit tests if we add our own functionality. R=phoglund@webrtc.org TBR=tkchin@webrtc.org Review URL: https://codereview.webrtc.org/1895713002 . Cr-Commit-Position: refs/heads/master@{#12410}
148 lines
3.9 KiB
Bash
Executable File
148 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright 2015 The WebRTC 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.
|
|
|
|
# Generates static FAT libraries for ios in out_ios_libs.
|
|
|
|
# Exit on errors.
|
|
set -e
|
|
|
|
# Globals.
|
|
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 {
|
|
# 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 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
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function build_webrtc {
|
|
local base_output_dir=$1
|
|
local flavor=$2
|
|
local target_arch=$3
|
|
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
|
|
export GYP_DEFINES="OS=ios target_arch=${target_arch} use_objc_h264=1 \
|
|
clang_xcode=1 ios_override_visibility=1"
|
|
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
|
|
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
|
|
fi
|
|
mkdir -p ${library_output_dir}
|
|
|
|
for f in ${ninja_output_dir}/${flavor}/*.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] [-c] [-o]"
|
|
echo " -h Print this help."
|
|
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."
|
|
exit 0
|
|
}
|
|
|
|
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
|
|
PERFORM_CLEAN=0
|
|
|
|
# Parse arguments.
|
|
while getopts "hco:" opt; do
|
|
case "${opt}" in
|
|
h) usage;;
|
|
c) PERFORM_CLEAN=1;;
|
|
o) OUTPUT_DIR="${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} "Profile" $arch
|
|
done
|
|
|
|
# Export header files.
|
|
${EXPORT_HEADERS_SCRIPT} ${OUTPUT_DIR} ${USE_LEGACY_API}
|
|
|
|
# Merge the libraries together.
|
|
${MERGE_SCRIPT} ${OUTPUT_DIR}
|