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

Side by Side Diff: webrtc/build/ios/build_ios_libs.sh

Issue 2408983002: GN: Build iOS framework in build_ios_libs.sh (Closed)
Patch Set: Add check for provisioning file. Created 4 years, 2 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 unified diff | Download patch
« no previous file with comments | « no previous file | webrtc/sdk/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 2
3 # Copyright 2015 The WebRTC project authors. All Rights Reserved. 3 # Copyright 2015 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 # Generates static FAT libraries for ios in out_ios_libs.
12 12
13 # Exit on errors. 13 # Exit on errors.
14 set -e 14 set -e
15 15
16 SCRIPT_DIR=$(cd $(dirname $0) && pwd) 16 SCRIPT_DIR=$(cd $(dirname $0) && pwd)
17 WEBRTC_BASE_DIR=${SCRIPT_DIR}/../../.. 17 WEBRTC_BASE_DIR=${SCRIPT_DIR}/../../..
18 18
19 function clean_artifacts {
20 local output_dir=$1
21 if [[ -d ${output_dir} ]]; then
22 echo "Deleting ${output_dir}"
23 rm -r ${output_dir}
24 fi
25 }
26
27 function build_webrtc {
28 local target_arch=$1
29 local flavor=$2
30 local build_type=$3
31 local ios_deployment_target=$4
32 local libvpx_build_vp9=$5
33 local custom_gn_options=$6
34
35 OUTPUT_DIR=${SDK_OUTPUT_DIR}/${target_arch}_libs
36 GN_ARGS="target_os=\"ios\" ios_enable_code_signing=false \
37 use_xcode_clang=true is_component_build=false"
38
39 # Add flavor option.
40 if [[ ${flavor} = "debug" ]]; then
41 GN_ARGS="${GN_ARGS} is_debug=true"
42 elif [[ ${flavor} = "release" ]]; then
43 GN_ARGS="${GN_ARGS} is_debug=false"
44 else
45 echo "Unexpected flavor type: ${flavor}"
46 exit 1
47 fi
48
49 # Add the specified architecture.
50 OUTPUT_LIB=${OUTPUT_DIR}/${SDK_LIB_NAME}
51 GN_ARGS="${GN_ARGS} target_cpu=\"${target_arch}\""
52
53 # Add deployment target.
54 GN_ARGS="${GN_ARGS} ios_deployment_target=\"${ios_deployment_target}\""
55
56 # Add vp9 option.
57 GN_ARGS="${GN_ARGS} rtc_libvpx_build_vp9=${libvpx_build_vp9}"
58
59 # Add custom options.
60 if [[ -n "${custom_gn_options}" ]]; then
61 GN_ARGS="${GN_ARGS} ${custom_gn_options}"
62 fi
63
64 # Generate static or dynamic.
65 if [[ ${build_type} = "static_only" ]]; then
66 GN_TARGET_NAME="rtc_sdk_objc"
67 elif [[ ${build_type} == "framework" ]]; then
68 GN_TARGET_NAME="rtc_sdk_framework_objc"
69 GN_ARGS="${GN_ARGS} enable_dsyms=true enable_stripping=true"
70 fi
71
72 echo "Building WebRTC with args: ${GN_ARGS}"
73 gn gen ${OUTPUT_DIR} --args="${GN_ARGS}"
74 echo "Building target: ${GN_TARGET_NAME}"
75 ninja -C ${OUTPUT_DIR} ${GN_TARGET_NAME}
76
77 # Strip debug symbols to reduce size.
78 if [[ ${build_type} = "static_only" ]]; then
79 strip -S ${OUTPUT_DIR}/obj/webrtc/sdk/lib${GN_TARGET_NAME}.a -o \
80 ${OUTPUT_DIR}/lib${GN_TARGET_NAME}.a
81 fi
82 }
83
84 function usage {
85 echo "WebRTC iOS FAT libraries build script."
86 echo "Each architecture is compiled separately before being merged together."
87 echo "By default, the fat libraries will be created in out_ios_libs/."
88 echo "The headers will be copied to out_ios_libs/include."
89 echo "Usage: $0 [-h] [-b build_type] [-c] [-o output_dir]"
90 echo " -h Print this help."
91 echo " -b The build type. Can be framework or static_only."
92 echo " Defaults to framework."
93 echo " -c Removes generated build output."
94 echo " -o Specifies a directory to output build artifacts to."
95 echo " If specified together with -c, deletes the dir."
96 echo " -r Specifies a revision number to embed if building the framework."
97 exit 0
98 }
99
19 SDK_OUTPUT_DIR=${WEBRTC_BASE_DIR}/out_ios_libs 100 SDK_OUTPUT_DIR=${WEBRTC_BASE_DIR}/out_ios_libs
20 SDK_LIB_NAME="librtc_sdk_objc.a" 101 SDK_LIB_NAME="librtc_sdk_objc.a"
21 GN_BASE_ARGS="target_os=\"ios\" is_debug=false ios_enable_code_signing=false \ 102 SDK_FRAMEWORK_NAME="WebRTC.framework"
22 rtc_libvpx_build_vp9=false"
23 GN_STATIC_TARGET_NAMES="rtc_sdk_peerconnection_objc field_trial_default \
24 metrics_default"
25 103
26 # TODO(tkchin): Restore functionality of old script to build dynamic framework, 104 BUILD_FLAVOR="release"
27 # symbols and license file. 105 BUILD_TYPE="framework"
106 IOS_DEPLOYMENT_TARGET="8.0"
107 LIBVPX_BUILD_VP9="false"
108 CUSTOM_GN_OPTS=""
109 WEBRTC_REVISION="0"
28 110
29 function build_static_webrtc { 111 # Parse arguments.
30 local arch=$1 112 while getopts "hb:co:r:" opt; do
31 local xcode_arch=$2 113 case "${opt}" in
114 h) usage;;
115 b) BUILD_TYPE="${OPTARG}";;
116 c) PERFORM_CLEAN=1;;
117 o) SDK_OUTPUT_DIR="${OPTARG}";;
118 r) WEBRTC_REVISION="${OPTARG}";;
119 *)
120 usage
121 exit 1
122 ;;
123 esac
124 done
32 125
33 OUTPUT_DIR=${SDK_OUTPUT_DIR}/${arch}_libs 126 if [[ ${PERFORM_CLEAN} -ne 0 ]]; then
34 OUTPUT_LIB=${OUTPUT_DIR}/${SDK_LIB_NAME} 127 clean_artifacts ${SDK_OUTPUT_DIR}
35 GN_ARGS="${GN_BASE_ARGS} target_cpu=\"${arch}\"" 128 exit 0
36 gn gen ${OUTPUT_DIR} --args="${GN_ARGS}" 129 fi
37 ninja -C ${OUTPUT_DIR} ${GN_STATIC_TARGET_NAMES}
38 # Combine the object files together into a single archive and strip debug
39 # symbols.
40 find ${OUTPUT_DIR}/obj -type f -name "*.o" |
41 xargs ld -r -static -S -all_load -arch ${xcode_arch} -o ${OUTPUT_LIB}
42 }
43 130
44 # Build all the common architectures. 131 # Build all architectures.
45 build_static_webrtc "arm" "armv7" 132 build_webrtc "arm" ${BUILD_FLAVOR} ${BUILD_TYPE} \
46 build_static_webrtc "arm64" "arm64" 133 ${IOS_DEPLOYMENT_TARGET} ${LIBVPX_BUILD_VP9} ${CUSTOM_GN_OPTS}
47 build_static_webrtc "x86" "i386" 134 build_webrtc "arm64" ${BUILD_FLAVOR} ${BUILD_TYPE} \
48 build_static_webrtc "x64" "x86_64" 135 ${IOS_DEPLOYMENT_TARGET} ${LIBVPX_BUILD_VP9} ${CUSTOM_GN_OPTS}
136 build_webrtc "x64" ${BUILD_FLAVOR} ${BUILD_TYPE} \
137 ${IOS_DEPLOYMENT_TARGET} ${LIBVPX_BUILD_VP9} ${CUSTOM_GN_OPTS}
49 138
50 # Combine the libraries. 139 # Ignoring x86 except for static libraries for now because of a GN build issue
51 lipo ${SDK_OUTPUT_DIR}/arm_libs/${SDK_LIB_NAME} \ 140 # where the generated dynamic framework has the wrong architectures.
52 ${SDK_OUTPUT_DIR}/arm64_libs/${SDK_LIB_NAME} \ 141
53 ${SDK_OUTPUT_DIR}/x86_libs/${SDK_LIB_NAME} \ 142 # Create FAT archive.
54 ${SDK_OUTPUT_DIR}/x64_libs/${SDK_LIB_NAME} \ 143 if [[ ${BUILD_TYPE} = "static_only" ]]; then
55 -create -output ${SDK_OUTPUT_DIR}/${SDK_LIB_NAME} 144 build_webrtc "x86" ${BUILD_FLAVOR} ${BUILD_TYPE} \
145 ${IOS_DEPLOYMENT_TARGET} ${LIBVPX_BUILD_VP9} ${CUSTOM_GN_OPTS}
146
147 ARM_LIB_PATH=${SDK_OUTPUT_DIR}/arm_libs/${SDK_LIB_NAME}
148 ARM64_LIB_PATH=${SDK_OUTPUT_DIR}/arm64_libs/${SDK_LIB_NAME}
149 X64_LIB_PATH=${SDK_OUTPUT_DIR}/x64_libs/${SDK_LIB_NAME}
150 X86_LIB_PATH=${SDK_OUTPUT_DIR}/x86_libs/${SDK_LIB_NAME}
151
152 # Combine the slices.
153 lipo ${ARM_LIB_PATH} ${ARM64_LIB_PATH} ${X64_LIB_PATH} ${X86_LIB_PATH} \
154 -create -output ${SDK_OUTPUT_DIR}/${SDK_LIB_NAME}
155 elif [[ ${BUILD_TYPE} = "framework" ]]; then
156 ARM_LIB_PATH=${SDK_OUTPUT_DIR}/arm_libs
157 ARM64_LIB_PATH=${SDK_OUTPUT_DIR}/arm64_libs
158 X64_LIB_PATH=${SDK_OUTPUT_DIR}/x64_libs
159 X86_LIB_PATH=${SDK_OUTPUT_DIR}/x86_libs
160
161 # Combine the slices.
162 DYLIB_PATH="WebRTC.framework/WebRTC"
163 cp -R ${ARM64_LIB_PATH}/WebRTC.framework ${SDK_OUTPUT_DIR}
164 rm ${SDK_OUTPUT_DIR}/${DYLIB_PATH}
165 echo "Merging framework slices."
166 lipo ${ARM_LIB_PATH}/${DYLIB_PATH} \
167 ${ARM64_LIB_PATH}/${DYLIB_PATH} \
168 ${X64_LIB_PATH}/${DYLIB_PATH} \
169 -create -output ${SDK_OUTPUT_DIR}/${DYLIB_PATH}
170
171 # Remove stray mobileprovision if it exists until chromium roll lands.
172 # See https://codereview.chromium.org/2397433002.
173 PROVISION_FILE=${SDK_OUTPUT_DIR}/WebRTC.framework/embedded.mobileprovision
174 if [[ -e ${PROVISION_FILE} ]]; then
175 rm ${PROVISION_FILE}
176 fi
177
178 # Merge the dSYM slices.
179 DSYM_PATH="WebRTC.dSYM/Contents/Resources/DWARF/WebRTC"
180 cp -R ${ARM64_LIB_PATH}/WebRTC.dSYM ${SDK_OUTPUT_DIR}
181 rm ${SDK_OUTPUT_DIR}/${DSYM_PATH}
182 echo "Merging dSYM slices."
183 lipo ${ARM_LIB_PATH}/${DSYM_PATH} \
184 ${ARM64_LIB_PATH}/${DSYM_PATH} \
185 ${X64_LIB_PATH}/${DSYM_PATH} \
186 -create -output ${SDK_OUTPUT_DIR}/${DSYM_PATH}
187
188 # Modify the version number.
189 # Format should be <Branch cut MXX>.<Hotfix #>.<Rev #>.
190 # e.g. 55.0.14986 means branch cut 55, no hotfixes, and revision number 14986.
191 INFOPLIST_PATH=${SDK_OUTPUT_DIR}/WebRTC.framework/Info.plist
192 MAJOR_MINOR=$(PlistBuddy -c "Print :CFBundleShortVersionString" \
193 ${INFOPLIST_PATH})
194 VERSION_NUMBER="${MAJOR_MINOR}.${WEBRTC_REVISION}"
195 echo "Substituting revision number: ${VERSION_NUMBER}"
196 PlistBuddy -c "Set :CFBundleVersion ${VERSION_NUMBER}" ${INFOPLIST_PATH}
197 plutil -convert binary1 ${INFOPLIST_PATH}
198 else
199 echo "BUILD_TYPE ${BUILD_TYPE} not supported."
200 exit 1
201 fi
56 202
57 echo "Done." 203 echo "Done."
OLDNEW
« no previous file with comments | « no previous file | webrtc/sdk/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698