OLD | NEW |
1 #!/bin/bash | 1 #!/bin/bash |
2 | 2 |
3 # Copyright 2015 The WebRTC project authors. All Rights Reserved. | 3 # Copyright 2017 The WebRTC project authors. All Rights Reserved. |
4 # | 4 # |
5 # Use of this source code is governed by a BSD-style license | 5 # Use of this source code is governed by a BSD-style license |
6 # that can be found in the LICENSE file in the root of the source | 6 # that can be found in the LICENSE file in the root of the source |
7 # tree. An additional intellectual property rights grant can be found | 7 # tree. An additional intellectual property rights grant can be found |
8 # in the file PATENTS. All contributing project authors may | 8 # in the file PATENTS. All contributing project authors may |
9 # be found in the AUTHORS file in the root of the source tree. | 9 # be found in the AUTHORS file in the root of the source tree. |
10 | 10 |
11 # Generates static FAT libraries for ios in out_ios_libs. | 11 # This script has been rewritten in Python. Temporary "redirect": |
12 | 12 |
13 # Exit on errors. | 13 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" |
14 set -e | |
15 | 14 |
16 # Environment | 15 exec "$SCRIPT_DIR/build_ios_libs.py" "$@" |
17 export PATH=/usr/libexec:$PATH | |
18 | |
19 SCRIPT_DIR=$(cd $(dirname $0) && pwd) | |
20 WEBRTC_BASE_DIR=${SCRIPT_DIR}/../.. | |
21 | |
22 function clean_artifacts { | |
23 local output_dir=$1 | |
24 if [[ -d ${output_dir} ]]; then | |
25 echo "Deleting ${output_dir}" | |
26 rm -r ${output_dir} | |
27 fi | |
28 } | |
29 | |
30 function build_webrtc { | |
31 local target_arch=$1 | |
32 local flavor=$2 | |
33 local build_type=$3 | |
34 local ios_deployment_target=$4 | |
35 local libvpx_build_vp9=$5 | |
36 local use_bitcode=$6 | |
37 local custom_gn_options=$7 | |
38 | |
39 OUTPUT_DIR=${SDK_OUTPUT_DIR}/${target_arch}_libs | |
40 GN_ARGS="target_os=\"ios\" ios_enable_code_signing=false \ | |
41 use_xcode_clang=true is_component_build=false" | |
42 | |
43 # Add flavor option. | |
44 if [[ ${flavor} = "debug" ]]; then | |
45 GN_ARGS="${GN_ARGS} is_debug=true" | |
46 elif [[ ${flavor} = "release" ]]; then | |
47 GN_ARGS="${GN_ARGS} is_debug=false" | |
48 else | |
49 echo "Unexpected flavor type: ${flavor}" | |
50 exit 1 | |
51 fi | |
52 | |
53 # Add the specified architecture. | |
54 GN_ARGS="${GN_ARGS} target_cpu=\"${target_arch}\"" | |
55 | |
56 # Add deployment target. | |
57 GN_ARGS="${GN_ARGS} ios_deployment_target=\"${ios_deployment_target}\"" | |
58 | |
59 # Add vp9 option. | |
60 GN_ARGS="${GN_ARGS} rtc_libvpx_build_vp9=${libvpx_build_vp9}" | |
61 | |
62 # Add bitcode option. | |
63 GN_ARGS="${GN_ARGS} enable_ios_bitcode=${use_bitcode}" | |
64 | |
65 # Add custom options. | |
66 if [[ -n "${custom_gn_options}" ]]; then | |
67 GN_ARGS="${GN_ARGS} ${custom_gn_options}" | |
68 fi | |
69 | |
70 # Generate static or dynamic. | |
71 if [[ ${build_type} = "static_only" ]]; then | |
72 GN_TARGET_NAME="rtc_sdk_objc" | |
73 elif [[ ${build_type} == "framework" ]]; then | |
74 GN_TARGET_NAME="rtc_sdk_framework_objc" | |
75 GN_ARGS="${GN_ARGS} enable_dsyms=true enable_stripping=true" | |
76 else | |
77 echo "Build type \"${build_type}\" is not supported." | |
78 exit 1 | |
79 fi | |
80 | |
81 echo "Building WebRTC with args: ${GN_ARGS}" | |
82 gn gen ${OUTPUT_DIR} --args="${GN_ARGS}" | |
83 echo "Building target: ${GN_TARGET_NAME}" | |
84 ninja -C ${OUTPUT_DIR} ${GN_TARGET_NAME} | |
85 | |
86 # Strip debug symbols to reduce size. | |
87 if [[ ${build_type} = "static_only" ]]; then | |
88 strip -S ${OUTPUT_DIR}/obj/webrtc/sdk/lib${GN_TARGET_NAME}.a -o \ | |
89 ${OUTPUT_DIR}/lib${GN_TARGET_NAME}.a | |
90 fi | |
91 } | |
92 | |
93 function usage { | |
94 echo "WebRTC iOS FAT libraries build script." | |
95 echo "Each architecture is compiled separately before being merged together." | |
96 echo "By default, the library is created in out_ios_libs/. (Change with -o.)" | |
97 echo "The headers will be copied to out_ios_libs/include." | |
98 echo "Usage: $0 [-h] [-b build_type] [-c] [-o output_dir] [-r rev_num] [-e]" | |
99 echo " -h Print this help." | |
100 echo " -b The build type. Can be \"framework\" or \"static_only\"." | |
101 echo " Defaults to \"framework\"." | |
102 echo " -c Removes the previously generated build output, if any." | |
103 echo " -o Specifies a directory to output the build artifacts to." | |
104 echo " If specified together with -c, deletes the dir." | |
105 echo " -r Specifies a revision number to embed if building the framework." | |
106 echo " -e Compile with bitcode." | |
107 exit 0 | |
108 } | |
109 | |
110 SDK_OUTPUT_DIR=${WEBRTC_BASE_DIR}/out_ios_libs | |
111 SDK_LIB_NAME="librtc_sdk_objc.a" | |
112 SDK_FRAMEWORK_NAME="WebRTC.framework" | |
113 | |
114 BUILD_FLAVOR="release" | |
115 BUILD_TYPE="framework" | |
116 ENABLED_ARCHITECTURES=("arm" "arm64" "x64") | |
117 IOS_DEPLOYMENT_TARGET="8.0" | |
118 LIBVPX_BUILD_VP9="false" | |
119 USE_BITCODE="false" | |
120 CUSTOM_GN_OPTS="" | |
121 WEBRTC_REVISION="0" | |
122 | |
123 # Parse arguments. | |
124 while getopts "hb:co:r:e" opt; do | |
125 case "${opt}" in | |
126 h) usage;; | |
127 b) BUILD_TYPE="${OPTARG}";; | |
128 c) PERFORM_CLEAN=1;; | |
129 e) USE_BITCODE="true";; | |
130 o) SDK_OUTPUT_DIR="${OPTARG}";; | |
131 r) WEBRTC_REVISION="${OPTARG}";; | |
132 *) | |
133 usage | |
134 exit 1 | |
135 ;; | |
136 esac | |
137 done | |
138 | |
139 if [[ ${PERFORM_CLEAN} -ne 0 ]]; then | |
140 clean_artifacts ${SDK_OUTPUT_DIR} | |
141 exit 0 | |
142 fi | |
143 | |
144 # Build all architectures. | |
145 for arch in ${ENABLED_ARCHITECTURES[*]}; do | |
146 build_webrtc $arch ${BUILD_FLAVOR} ${BUILD_TYPE} \ | |
147 ${IOS_DEPLOYMENT_TARGET} ${LIBVPX_BUILD_VP9} ${USE_BITCODE} \ | |
148 ${CUSTOM_GN_OPTS} | |
149 done | |
150 | |
151 # Ignoring x86 except for static libraries for now because of a GN build issue | |
152 # where the generated dynamic framework has the wrong architectures. | |
153 | |
154 # Create FAT archive. | |
155 if [[ ${BUILD_TYPE} = "static_only" ]]; then | |
156 build_webrtc "x86" ${BUILD_FLAVOR} ${BUILD_TYPE} \ | |
157 ${IOS_DEPLOYMENT_TARGET} ${LIBVPX_BUILD_VP9} ${USE_BITCODE} \ | |
158 ${CUSTOM_GN_OPTS} | |
159 | |
160 ARM_LIB_PATH=${SDK_OUTPUT_DIR}/arm_libs/${SDK_LIB_NAME} | |
161 ARM64_LIB_PATH=${SDK_OUTPUT_DIR}/arm64_libs/${SDK_LIB_NAME} | |
162 X64_LIB_PATH=${SDK_OUTPUT_DIR}/x64_libs/${SDK_LIB_NAME} | |
163 X86_LIB_PATH=${SDK_OUTPUT_DIR}/x86_libs/${SDK_LIB_NAME} | |
164 | |
165 # Combine the slices. | |
166 lipo ${ARM_LIB_PATH} ${ARM64_LIB_PATH} ${X64_LIB_PATH} ${X86_LIB_PATH} \ | |
167 -create -output ${SDK_OUTPUT_DIR}/${SDK_LIB_NAME} | |
168 elif [[ ${BUILD_TYPE} = "framework" ]]; then | |
169 ARM_LIB_PATH=${SDK_OUTPUT_DIR}/arm_libs | |
170 ARM64_LIB_PATH=${SDK_OUTPUT_DIR}/arm64_libs | |
171 X64_LIB_PATH=${SDK_OUTPUT_DIR}/x64_libs | |
172 X86_LIB_PATH=${SDK_OUTPUT_DIR}/x86_libs | |
173 | |
174 # Combine the slices. | |
175 DYLIB_PATH="WebRTC.framework/WebRTC" | |
176 cp -R ${ARM64_LIB_PATH}/WebRTC.framework ${SDK_OUTPUT_DIR} | |
177 rm ${SDK_OUTPUT_DIR}/${DYLIB_PATH} | |
178 echo "Merging framework slices." | |
179 lipo ${ARM_LIB_PATH}/${DYLIB_PATH} \ | |
180 ${ARM64_LIB_PATH}/${DYLIB_PATH} \ | |
181 ${X64_LIB_PATH}/${DYLIB_PATH} \ | |
182 -create -output ${SDK_OUTPUT_DIR}/${DYLIB_PATH} | |
183 | |
184 # Merge the dSYM slices. | |
185 DSYM_PATH="WebRTC.dSYM/Contents/Resources/DWARF/WebRTC" | |
186 cp -R ${ARM64_LIB_PATH}/WebRTC.dSYM ${SDK_OUTPUT_DIR} | |
187 rm ${SDK_OUTPUT_DIR}/${DSYM_PATH} | |
188 echo "Merging dSYM slices." | |
189 lipo ${ARM_LIB_PATH}/${DSYM_PATH} \ | |
190 ${ARM64_LIB_PATH}/${DSYM_PATH} \ | |
191 ${X64_LIB_PATH}/${DSYM_PATH} \ | |
192 -create -output ${SDK_OUTPUT_DIR}/${DSYM_PATH} | |
193 | |
194 # Modify the version number. | |
195 # Format should be <Branch cut MXX>.<Hotfix #>.<Rev #>. | |
196 # e.g. 55.0.14986 means branch cut 55, no hotfixes, and revision number 14986. | |
197 INFOPLIST_PATH=${SDK_OUTPUT_DIR}/WebRTC.framework/Info.plist | |
198 MAJOR_MINOR=$(PlistBuddy -c "Print :CFBundleShortVersionString" \ | |
199 ${INFOPLIST_PATH}) | |
200 VERSION_NUMBER="${MAJOR_MINOR}.${WEBRTC_REVISION}" | |
201 echo "Substituting revision number: ${VERSION_NUMBER}" | |
202 PlistBuddy -c "Set :CFBundleVersion ${VERSION_NUMBER}" ${INFOPLIST_PATH} | |
203 plutil -convert binary1 ${INFOPLIST_PATH} | |
204 else | |
205 echo "BUILD_TYPE ${BUILD_TYPE} not supported." | |
206 exit 1 | |
207 fi | |
208 | |
209 echo "Done." | |
OLD | NEW |