1*1b3f573fSAndroid Build Coastguard Worker#!/bin/bash 2*1b3f573fSAndroid Build Coastguard Worker# 3*1b3f573fSAndroid Build Coastguard Worker# Helper to do build so you don't have to remember all the steps/args. 4*1b3f573fSAndroid Build Coastguard Worker 5*1b3f573fSAndroid Build Coastguard Worker 6*1b3f573fSAndroid Build Coastguard Workerset -eu 7*1b3f573fSAndroid Build Coastguard Worker 8*1b3f573fSAndroid Build Coastguard Worker# Some base locations. 9*1b3f573fSAndroid Build Coastguard Workerreadonly ScriptDir=$(dirname "$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")") 10*1b3f573fSAndroid Build Coastguard Workerreadonly ProtoRootDir="${ScriptDir}/../.." 11*1b3f573fSAndroid Build Coastguard Worker 12*1b3f573fSAndroid Build Coastguard WorkerprintUsage() { 13*1b3f573fSAndroid Build Coastguard Worker NAME=$(basename "${0}") 14*1b3f573fSAndroid Build Coastguard Worker cat << EOF 15*1b3f573fSAndroid Build Coastguard Workerusage: ${NAME} [OPTIONS] 16*1b3f573fSAndroid Build Coastguard Worker 17*1b3f573fSAndroid Build Coastguard WorkerThis script does the common build steps needed. 18*1b3f573fSAndroid Build Coastguard Worker 19*1b3f573fSAndroid Build Coastguard WorkerOPTIONS: 20*1b3f573fSAndroid Build Coastguard Worker 21*1b3f573fSAndroid Build Coastguard Worker General: 22*1b3f573fSAndroid Build Coastguard Worker 23*1b3f573fSAndroid Build Coastguard Worker -h, --help 24*1b3f573fSAndroid Build Coastguard Worker Show this message 25*1b3f573fSAndroid Build Coastguard Worker -c, --clean 26*1b3f573fSAndroid Build Coastguard Worker Issue a clean before the normal build. 27*1b3f573fSAndroid Build Coastguard Worker -a, --autogen 28*1b3f573fSAndroid Build Coastguard Worker Start by rerunning autogen & configure. 29*1b3f573fSAndroid Build Coastguard Worker -r, --regenerate-descriptors 30*1b3f573fSAndroid Build Coastguard Worker Run generate_descriptor_proto.sh to regenerate all the checked in 31*1b3f573fSAndroid Build Coastguard Worker proto sources. 32*1b3f573fSAndroid Build Coastguard Worker -j #, --jobs # 33*1b3f573fSAndroid Build Coastguard Worker Force the number of parallel jobs (useful for debugging build issues). 34*1b3f573fSAndroid Build Coastguard Worker --core-only 35*1b3f573fSAndroid Build Coastguard Worker Skip some of the core protobuf build/checks to shorten the build time. 36*1b3f573fSAndroid Build Coastguard Worker --skip-xcode 37*1b3f573fSAndroid Build Coastguard Worker Skip the invoke of Xcode to test the runtime on both iOS and OS X. 38*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-ios 39*1b3f573fSAndroid Build Coastguard Worker Skip the invoke of Xcode to test the runtime on iOS. 40*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-debug 41*1b3f573fSAndroid Build Coastguard Worker Skip the Xcode Debug configuration. 42*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-release 43*1b3f573fSAndroid Build Coastguard Worker Skip the Xcode Release configuration. 44*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-osx | --skip-xcode-macos 45*1b3f573fSAndroid Build Coastguard Worker Skip the invoke of Xcode to test the runtime on OS X. 46*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-tvos 47*1b3f573fSAndroid Build Coastguard Worker Skip the invoke of Xcode to test the runtime on tvOS. 48*1b3f573fSAndroid Build Coastguard Worker --skip-objc-conformance 49*1b3f573fSAndroid Build Coastguard Worker Skip the Objective C conformance tests (run on OS X). 50*1b3f573fSAndroid Build Coastguard Worker --xcode-quiet 51*1b3f573fSAndroid Build Coastguard Worker Pass -quiet to xcodebuild. 52*1b3f573fSAndroid Build Coastguard Worker 53*1b3f573fSAndroid Build Coastguard WorkerEOF 54*1b3f573fSAndroid Build Coastguard Worker} 55*1b3f573fSAndroid Build Coastguard Worker 56*1b3f573fSAndroid Build Coastguard Workerheader() { 57*1b3f573fSAndroid Build Coastguard Worker echo "" 58*1b3f573fSAndroid Build Coastguard Worker echo "========================================================================" 59*1b3f573fSAndroid Build Coastguard Worker echo " ${@}" 60*1b3f573fSAndroid Build Coastguard Worker echo "========================================================================" 61*1b3f573fSAndroid Build Coastguard Worker} 62*1b3f573fSAndroid Build Coastguard Worker 63*1b3f573fSAndroid Build Coastguard Worker# Thanks to libtool, builds can fail in odd ways and since it eats some output 64*1b3f573fSAndroid Build Coastguard Worker# it can be hard to spot, so force error output if make exits with a non zero. 65*1b3f573fSAndroid Build Coastguard Workerwrapped_make() { 66*1b3f573fSAndroid Build Coastguard Worker set +e # Don't stop if the command fails. 67*1b3f573fSAndroid Build Coastguard Worker make $* 68*1b3f573fSAndroid Build Coastguard Worker MAKE_EXIT_STATUS=$? 69*1b3f573fSAndroid Build Coastguard Worker if [ ${MAKE_EXIT_STATUS} -ne 0 ]; then 70*1b3f573fSAndroid Build Coastguard Worker echo "Error: 'make $*' exited with status ${MAKE_EXIT_STATUS}" 71*1b3f573fSAndroid Build Coastguard Worker exit ${MAKE_EXIT_STATUS} 72*1b3f573fSAndroid Build Coastguard Worker fi 73*1b3f573fSAndroid Build Coastguard Worker set -e 74*1b3f573fSAndroid Build Coastguard Worker} 75*1b3f573fSAndroid Build Coastguard Worker 76*1b3f573fSAndroid Build Coastguard WorkerNUM_MAKE_JOBS=$(/usr/sbin/sysctl -n hw.ncpu) 77*1b3f573fSAndroid Build Coastguard Workerif [[ "${NUM_MAKE_JOBS}" -lt 2 ]] ; then 78*1b3f573fSAndroid Build Coastguard Worker NUM_MAKE_JOBS=2 79*1b3f573fSAndroid Build Coastguard Workerfi 80*1b3f573fSAndroid Build Coastguard Worker 81*1b3f573fSAndroid Build Coastguard WorkerDO_AUTOGEN=no 82*1b3f573fSAndroid Build Coastguard WorkerDO_CLEAN=no 83*1b3f573fSAndroid Build Coastguard WorkerREGEN_DESCRIPTORS=no 84*1b3f573fSAndroid Build Coastguard WorkerCORE_ONLY=no 85*1b3f573fSAndroid Build Coastguard WorkerDO_XCODE_IOS_TESTS=yes 86*1b3f573fSAndroid Build Coastguard WorkerDO_XCODE_OSX_TESTS=yes 87*1b3f573fSAndroid Build Coastguard WorkerDO_XCODE_TVOS_TESTS=yes 88*1b3f573fSAndroid Build Coastguard WorkerDO_XCODE_DEBUG=yes 89*1b3f573fSAndroid Build Coastguard WorkerDO_XCODE_RELEASE=yes 90*1b3f573fSAndroid Build Coastguard WorkerDO_OBJC_CONFORMANCE_TESTS=yes 91*1b3f573fSAndroid Build Coastguard WorkerXCODE_QUIET=no 92*1b3f573fSAndroid Build Coastguard Workerwhile [[ $# != 0 ]]; do 93*1b3f573fSAndroid Build Coastguard Worker case "${1}" in 94*1b3f573fSAndroid Build Coastguard Worker -h | --help ) 95*1b3f573fSAndroid Build Coastguard Worker printUsage 96*1b3f573fSAndroid Build Coastguard Worker exit 0 97*1b3f573fSAndroid Build Coastguard Worker ;; 98*1b3f573fSAndroid Build Coastguard Worker -c | --clean ) 99*1b3f573fSAndroid Build Coastguard Worker DO_CLEAN=yes 100*1b3f573fSAndroid Build Coastguard Worker ;; 101*1b3f573fSAndroid Build Coastguard Worker -a | --autogen ) 102*1b3f573fSAndroid Build Coastguard Worker DO_AUTOGEN=yes 103*1b3f573fSAndroid Build Coastguard Worker ;; 104*1b3f573fSAndroid Build Coastguard Worker -r | --regenerate-descriptors ) 105*1b3f573fSAndroid Build Coastguard Worker REGEN_DESCRIPTORS=yes 106*1b3f573fSAndroid Build Coastguard Worker ;; 107*1b3f573fSAndroid Build Coastguard Worker -j | --jobs ) 108*1b3f573fSAndroid Build Coastguard Worker shift 109*1b3f573fSAndroid Build Coastguard Worker NUM_MAKE_JOBS="${1}" 110*1b3f573fSAndroid Build Coastguard Worker ;; 111*1b3f573fSAndroid Build Coastguard Worker --core-only ) 112*1b3f573fSAndroid Build Coastguard Worker CORE_ONLY=yes 113*1b3f573fSAndroid Build Coastguard Worker ;; 114*1b3f573fSAndroid Build Coastguard Worker --skip-xcode ) 115*1b3f573fSAndroid Build Coastguard Worker DO_XCODE_IOS_TESTS=no 116*1b3f573fSAndroid Build Coastguard Worker DO_XCODE_OSX_TESTS=no 117*1b3f573fSAndroid Build Coastguard Worker DO_XCODE_TVOS_TESTS=no 118*1b3f573fSAndroid Build Coastguard Worker ;; 119*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-ios ) 120*1b3f573fSAndroid Build Coastguard Worker DO_XCODE_IOS_TESTS=no 121*1b3f573fSAndroid Build Coastguard Worker ;; 122*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-osx | --skip-xcode-macos) 123*1b3f573fSAndroid Build Coastguard Worker DO_XCODE_OSX_TESTS=no 124*1b3f573fSAndroid Build Coastguard Worker ;; 125*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-tvos ) 126*1b3f573fSAndroid Build Coastguard Worker DO_XCODE_TVOS_TESTS=no 127*1b3f573fSAndroid Build Coastguard Worker ;; 128*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-debug ) 129*1b3f573fSAndroid Build Coastguard Worker DO_XCODE_DEBUG=no 130*1b3f573fSAndroid Build Coastguard Worker ;; 131*1b3f573fSAndroid Build Coastguard Worker --skip-xcode-release ) 132*1b3f573fSAndroid Build Coastguard Worker DO_XCODE_RELEASE=no 133*1b3f573fSAndroid Build Coastguard Worker ;; 134*1b3f573fSAndroid Build Coastguard Worker --skip-objc-conformance ) 135*1b3f573fSAndroid Build Coastguard Worker DO_OBJC_CONFORMANCE_TESTS=no 136*1b3f573fSAndroid Build Coastguard Worker ;; 137*1b3f573fSAndroid Build Coastguard Worker --xcode-quiet ) 138*1b3f573fSAndroid Build Coastguard Worker XCODE_QUIET=yes 139*1b3f573fSAndroid Build Coastguard Worker ;; 140*1b3f573fSAndroid Build Coastguard Worker -*) 141*1b3f573fSAndroid Build Coastguard Worker echo "ERROR: Unknown option: ${1}" 1>&2 142*1b3f573fSAndroid Build Coastguard Worker printUsage 143*1b3f573fSAndroid Build Coastguard Worker exit 1 144*1b3f573fSAndroid Build Coastguard Worker ;; 145*1b3f573fSAndroid Build Coastguard Worker *) 146*1b3f573fSAndroid Build Coastguard Worker echo "ERROR: Unknown argument: ${1}" 1>&2 147*1b3f573fSAndroid Build Coastguard Worker printUsage 148*1b3f573fSAndroid Build Coastguard Worker exit 1 149*1b3f573fSAndroid Build Coastguard Worker ;; 150*1b3f573fSAndroid Build Coastguard Worker esac 151*1b3f573fSAndroid Build Coastguard Worker shift 152*1b3f573fSAndroid Build Coastguard Workerdone 153*1b3f573fSAndroid Build Coastguard Worker 154*1b3f573fSAndroid Build Coastguard Worker# Into the proto dir. 155*1b3f573fSAndroid Build Coastguard Workercd "${ProtoRootDir}" 156*1b3f573fSAndroid Build Coastguard Worker 157*1b3f573fSAndroid Build Coastguard Worker# if no Makefile, force the autogen. 158*1b3f573fSAndroid Build Coastguard Workerif [[ ! -f Makefile ]] ; then 159*1b3f573fSAndroid Build Coastguard Worker DO_AUTOGEN=yes 160*1b3f573fSAndroid Build Coastguard Workerfi 161*1b3f573fSAndroid Build Coastguard Worker 162*1b3f573fSAndroid Build Coastguard Workerif [[ "${DO_AUTOGEN}" == "yes" ]] ; then 163*1b3f573fSAndroid Build Coastguard Worker header "Running autogen & configure" 164*1b3f573fSAndroid Build Coastguard Worker ./autogen.sh 165*1b3f573fSAndroid Build Coastguard Worker ./configure \ 166*1b3f573fSAndroid Build Coastguard Worker CPPFLAGS="-mmacosx-version-min=10.9 -Wunused-const-variable -Wunused-function" 167*1b3f573fSAndroid Build Coastguard Workerfi 168*1b3f573fSAndroid Build Coastguard Worker 169*1b3f573fSAndroid Build Coastguard Workerif [[ "${DO_CLEAN}" == "yes" ]] ; then 170*1b3f573fSAndroid Build Coastguard Worker header "Cleaning" 171*1b3f573fSAndroid Build Coastguard Worker wrapped_make clean 172*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_IOS_TESTS}" == "yes" ]] ; then 173*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_CLEAN_BASE_IOS=( 174*1b3f573fSAndroid Build Coastguard Worker xcodebuild 175*1b3f573fSAndroid Build Coastguard Worker -project objectivec/ProtocolBuffers_iOS.xcodeproj 176*1b3f573fSAndroid Build Coastguard Worker -scheme ProtocolBuffers 177*1b3f573fSAndroid Build Coastguard Worker ) 178*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_DEBUG}" == "yes" ]] ; then 179*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_CLEAN_BASE_IOS[@]}" -configuration Debug clean 180*1b3f573fSAndroid Build Coastguard Worker fi 181*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_RELEASE}" == "yes" ]] ; then 182*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_CLEAN_BASE_IOS[@]}" -configuration Release clean 183*1b3f573fSAndroid Build Coastguard Worker fi 184*1b3f573fSAndroid Build Coastguard Worker fi 185*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_OSX_TESTS}" == "yes" ]] ; then 186*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_CLEAN_BASE_OSX=( 187*1b3f573fSAndroid Build Coastguard Worker xcodebuild 188*1b3f573fSAndroid Build Coastguard Worker -project objectivec/ProtocolBuffers_OSX.xcodeproj 189*1b3f573fSAndroid Build Coastguard Worker -scheme ProtocolBuffers 190*1b3f573fSAndroid Build Coastguard Worker ) 191*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_DEBUG}" == "yes" ]] ; then 192*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Debug clean 193*1b3f573fSAndroid Build Coastguard Worker fi 194*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_RELEASE}" == "yes" ]] ; then 195*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Release clean 196*1b3f573fSAndroid Build Coastguard Worker fi 197*1b3f573fSAndroid Build Coastguard Worker fi 198*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_TVOS_TESTS}" == "yes" ]] ; then 199*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_CLEAN_BASE_OSX=( 200*1b3f573fSAndroid Build Coastguard Worker xcodebuild 201*1b3f573fSAndroid Build Coastguard Worker -project objectivec/ProtocolBuffers_tvOS.xcodeproj 202*1b3f573fSAndroid Build Coastguard Worker -scheme ProtocolBuffers 203*1b3f573fSAndroid Build Coastguard Worker ) 204*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_DEBUG}" == "yes" ]] ; then 205*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Debug clean 206*1b3f573fSAndroid Build Coastguard Worker fi 207*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_RELEASE}" == "yes" ]] ; then 208*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_CLEAN_BASE_OSX[@]}" -configuration Release clean 209*1b3f573fSAndroid Build Coastguard Worker fi 210*1b3f573fSAndroid Build Coastguard Worker fi 211*1b3f573fSAndroid Build Coastguard Workerfi 212*1b3f573fSAndroid Build Coastguard Worker 213*1b3f573fSAndroid Build Coastguard Workerif [[ "${REGEN_DESCRIPTORS}" == "yes" ]] ; then 214*1b3f573fSAndroid Build Coastguard Worker header "Regenerating the descriptor sources." 215*1b3f573fSAndroid Build Coastguard Worker ./generate_descriptor_proto.sh -j "${NUM_MAKE_JOBS}" 216*1b3f573fSAndroid Build Coastguard Workerfi 217*1b3f573fSAndroid Build Coastguard Worker 218*1b3f573fSAndroid Build Coastguard Workerif [[ "${CORE_ONLY}" == "yes" ]] ; then 219*1b3f573fSAndroid Build Coastguard Worker header "Building core Only" 220*1b3f573fSAndroid Build Coastguard Worker wrapped_make -j "${NUM_MAKE_JOBS}" 221*1b3f573fSAndroid Build Coastguard Workerelse 222*1b3f573fSAndroid Build Coastguard Worker header "Building" 223*1b3f573fSAndroid Build Coastguard Worker # Can't issue these together, when fully parallel, something sometimes chokes 224*1b3f573fSAndroid Build Coastguard Worker # at random. 225*1b3f573fSAndroid Build Coastguard Worker wrapped_make -j "${NUM_MAKE_JOBS}" all 226*1b3f573fSAndroid Build Coastguard Worker wrapped_make -j "${NUM_MAKE_JOBS}" check 227*1b3f573fSAndroid Build Coastguard Worker # Fire off the conformance tests also. 228*1b3f573fSAndroid Build Coastguard Worker cd conformance 229*1b3f573fSAndroid Build Coastguard Worker wrapped_make -j "${NUM_MAKE_JOBS}" test_cpp 230*1b3f573fSAndroid Build Coastguard Worker cd .. 231*1b3f573fSAndroid Build Coastguard Workerfi 232*1b3f573fSAndroid Build Coastguard Worker 233*1b3f573fSAndroid Build Coastguard Worker# Ensure the WKT sources checked in are current. 234*1b3f573fSAndroid Build Coastguard Workerobjectivec/generate_well_known_types.sh --check-only -j "${NUM_MAKE_JOBS}" 235*1b3f573fSAndroid Build Coastguard Worker 236*1b3f573fSAndroid Build Coastguard Workerheader "Checking on the ObjC Runtime Code" 237*1b3f573fSAndroid Build Coastguard Worker# Some of the kokoro machines don't have python3 yet, so fall back to python if need be. 238*1b3f573fSAndroid Build Coastguard Workerif hash python3 >/dev/null 2>&1 ; then 239*1b3f573fSAndroid Build Coastguard Worker LOCAL_PYTHON=python3 240*1b3f573fSAndroid Build Coastguard Workerelse 241*1b3f573fSAndroid Build Coastguard Worker LOCAL_PYTHON=python 242*1b3f573fSAndroid Build Coastguard Workerfi 243*1b3f573fSAndroid Build Coastguard Worker"${LOCAL_PYTHON}" objectivec/DevTools/pddm_tests.py 244*1b3f573fSAndroid Build Coastguard Workerif ! "${LOCAL_PYTHON}" objectivec/DevTools/pddm.py --dry-run objectivec/*.[hm] objectivec/Tests/*.[hm] ; then 245*1b3f573fSAndroid Build Coastguard Worker echo "" 246*1b3f573fSAndroid Build Coastguard Worker echo "Update by running:" 247*1b3f573fSAndroid Build Coastguard Worker echo " objectivec/DevTools/pddm.py objectivec/*.[hm] objectivec/Tests/*.[hm]" 248*1b3f573fSAndroid Build Coastguard Worker exit 1 249*1b3f573fSAndroid Build Coastguard Workerfi 250*1b3f573fSAndroid Build Coastguard Worker 251*1b3f573fSAndroid Build Coastguard Workerreadonly XCODE_VERSION_LINE="$(xcodebuild -version | grep Xcode\ )" 252*1b3f573fSAndroid Build Coastguard Workerreadonly XCODE_VERSION="${XCODE_VERSION_LINE/Xcode /}" # drop the prefix. 253*1b3f573fSAndroid Build Coastguard Worker 254*1b3f573fSAndroid Build Coastguard Workerif [[ "${DO_XCODE_IOS_TESTS}" == "yes" ]] ; then 255*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_IOS=( 256*1b3f573fSAndroid Build Coastguard Worker xcodebuild 257*1b3f573fSAndroid Build Coastguard Worker -project objectivec/ProtocolBuffers_iOS.xcodeproj 258*1b3f573fSAndroid Build Coastguard Worker -scheme ProtocolBuffers 259*1b3f573fSAndroid Build Coastguard Worker ) 260*1b3f573fSAndroid Build Coastguard Worker if [[ "${XCODE_QUIET}" == "yes" ]] ; then 261*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_IOS+=( -quiet ) 262*1b3f573fSAndroid Build Coastguard Worker fi 263*1b3f573fSAndroid Build Coastguard Worker # Don't need to worry about form factors or retina/non retina; 264*1b3f573fSAndroid Build Coastguard Worker # just pick a mix of OS Versions and 32/64 bit. 265*1b3f573fSAndroid Build Coastguard Worker # NOTE: Different Xcode have different simulated hardware/os support. 266*1b3f573fSAndroid Build Coastguard Worker case "${XCODE_VERSION}" in 267*1b3f573fSAndroid Build Coastguard Worker [6-8].* ) 268*1b3f573fSAndroid Build Coastguard Worker echo "ERROR: The unittests include Swift code that is now Swift 4.0." 1>&2 269*1b3f573fSAndroid Build Coastguard Worker echo "ERROR: Xcode 9.0 or higher is required to build the test suite, but the library works with Xcode 7.x." 1>&2 270*1b3f573fSAndroid Build Coastguard Worker exit 11 271*1b3f573fSAndroid Build Coastguard Worker ;; 272*1b3f573fSAndroid Build Coastguard Worker 9.[0-2]* ) 273*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_IOS+=( 274*1b3f573fSAndroid Build Coastguard Worker -destination "platform=iOS Simulator,name=iPhone 4s,OS=8.1" # 32bit 275*1b3f573fSAndroid Build Coastguard Worker -destination "platform=iOS Simulator,name=iPhone 7,OS=latest" # 64bit 276*1b3f573fSAndroid Build Coastguard Worker # 9.0-9.2 all seem to often fail running destinations in parallel 277*1b3f573fSAndroid Build Coastguard Worker -disable-concurrent-testing 278*1b3f573fSAndroid Build Coastguard Worker ) 279*1b3f573fSAndroid Build Coastguard Worker ;; 280*1b3f573fSAndroid Build Coastguard Worker 9.[3-4]* ) 281*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_IOS+=( 282*1b3f573fSAndroid Build Coastguard Worker # Xcode 9.3 chokes targeting iOS 8.x - http://www.openradar.me/39335367 283*1b3f573fSAndroid Build Coastguard Worker -destination "platform=iOS Simulator,name=iPhone 4s,OS=9.0" # 32bit 284*1b3f573fSAndroid Build Coastguard Worker -destination "platform=iOS Simulator,name=iPhone 7,OS=latest" # 64bit 285*1b3f573fSAndroid Build Coastguard Worker # 9.3 also seems to often fail running destinations in parallel 286*1b3f573fSAndroid Build Coastguard Worker -disable-concurrent-testing 287*1b3f573fSAndroid Build Coastguard Worker ) 288*1b3f573fSAndroid Build Coastguard Worker ;; 289*1b3f573fSAndroid Build Coastguard Worker 10.*) 290*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_IOS+=( 291*1b3f573fSAndroid Build Coastguard Worker -destination "platform=iOS Simulator,name=iPhone 4s,OS=8.1" # 32bit 292*1b3f573fSAndroid Build Coastguard Worker -destination "platform=iOS Simulator,name=iPhone 7,OS=latest" # 64bit 293*1b3f573fSAndroid Build Coastguard Worker # 10.x also seems to often fail running destinations in parallel (with 294*1b3f573fSAndroid Build Coastguard Worker # 32bit one include at least) 295*1b3f573fSAndroid Build Coastguard Worker -disable-concurrent-destination-testing 296*1b3f573fSAndroid Build Coastguard Worker ) 297*1b3f573fSAndroid Build Coastguard Worker ;; 298*1b3f573fSAndroid Build Coastguard Worker 11.* | 12.* | 13.* | 14.*) 299*1b3f573fSAndroid Build Coastguard Worker # Dropped 32bit as Apple doesn't seem support the simulators either. 300*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_IOS+=( 301*1b3f573fSAndroid Build Coastguard Worker -destination "platform=iOS Simulator,name=iPhone 8,OS=latest" # 64bit 302*1b3f573fSAndroid Build Coastguard Worker ) 303*1b3f573fSAndroid Build Coastguard Worker ;; 304*1b3f573fSAndroid Build Coastguard Worker * ) 305*1b3f573fSAndroid Build Coastguard Worker echo "" 306*1b3f573fSAndroid Build Coastguard Worker echo "ATTENTION: Time to update the simulator targets for Xcode ${XCODE_VERSION}" 307*1b3f573fSAndroid Build Coastguard Worker echo "" 308*1b3f573fSAndroid Build Coastguard Worker echo "ERROR: Build aborted!" 309*1b3f573fSAndroid Build Coastguard Worker exit 2 310*1b3f573fSAndroid Build Coastguard Worker ;; 311*1b3f573fSAndroid Build Coastguard Worker esac 312*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_DEBUG}" == "yes" ]] ; then 313*1b3f573fSAndroid Build Coastguard Worker header "Doing Xcode iOS build/tests - Debug" 314*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_TEST_BASE_IOS[@]}" -configuration Debug test 315*1b3f573fSAndroid Build Coastguard Worker fi 316*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_RELEASE}" == "yes" ]] ; then 317*1b3f573fSAndroid Build Coastguard Worker header "Doing Xcode iOS build/tests - Release" 318*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_TEST_BASE_IOS[@]}" -configuration Release test 319*1b3f573fSAndroid Build Coastguard Worker fi 320*1b3f573fSAndroid Build Coastguard Worker # Don't leave the simulator in the developer's face. 321*1b3f573fSAndroid Build Coastguard Worker killall Simulator 2> /dev/null || true 322*1b3f573fSAndroid Build Coastguard Workerfi 323*1b3f573fSAndroid Build Coastguard Workerif [[ "${DO_XCODE_OSX_TESTS}" == "yes" ]] ; then 324*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_OSX=( 325*1b3f573fSAndroid Build Coastguard Worker xcodebuild 326*1b3f573fSAndroid Build Coastguard Worker -project objectivec/ProtocolBuffers_OSX.xcodeproj 327*1b3f573fSAndroid Build Coastguard Worker -scheme ProtocolBuffers 328*1b3f573fSAndroid Build Coastguard Worker # Since the ObjC 2.0 Runtime is required, 32bit OS X isn't supported. 329*1b3f573fSAndroid Build Coastguard Worker -destination "platform=OS X,arch=x86_64" # 64bit 330*1b3f573fSAndroid Build Coastguard Worker ) 331*1b3f573fSAndroid Build Coastguard Worker if [[ "${XCODE_QUIET}" == "yes" ]] ; then 332*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_OSX+=( -quiet ) 333*1b3f573fSAndroid Build Coastguard Worker fi 334*1b3f573fSAndroid Build Coastguard Worker case "${XCODE_VERSION}" in 335*1b3f573fSAndroid Build Coastguard Worker [6-8].* ) 336*1b3f573fSAndroid Build Coastguard Worker echo "ERROR: The unittests include Swift code that is now Swift 4.0." 1>&2 337*1b3f573fSAndroid Build Coastguard Worker echo "ERROR: Xcode 9.0 or higher is required to build the test suite, but the library works with Xcode 7.x." 1>&2 338*1b3f573fSAndroid Build Coastguard Worker exit 11 339*1b3f573fSAndroid Build Coastguard Worker ;; 340*1b3f573fSAndroid Build Coastguard Worker esac 341*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_DEBUG}" == "yes" ]] ; then 342*1b3f573fSAndroid Build Coastguard Worker header "Doing Xcode OS X build/tests - Debug" 343*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_TEST_BASE_OSX[@]}" -configuration Debug test 344*1b3f573fSAndroid Build Coastguard Worker fi 345*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_RELEASE}" == "yes" ]] ; then 346*1b3f573fSAndroid Build Coastguard Worker header "Doing Xcode OS X build/tests - Release" 347*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_TEST_BASE_OSX[@]}" -configuration Release test 348*1b3f573fSAndroid Build Coastguard Worker fi 349*1b3f573fSAndroid Build Coastguard Workerfi 350*1b3f573fSAndroid Build Coastguard Workerif [[ "${DO_XCODE_TVOS_TESTS}" == "yes" ]] ; then 351*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_TVOS=( 352*1b3f573fSAndroid Build Coastguard Worker xcodebuild 353*1b3f573fSAndroid Build Coastguard Worker -project objectivec/ProtocolBuffers_tvOS.xcodeproj 354*1b3f573fSAndroid Build Coastguard Worker -scheme ProtocolBuffers 355*1b3f573fSAndroid Build Coastguard Worker ) 356*1b3f573fSAndroid Build Coastguard Worker case "${XCODE_VERSION}" in 357*1b3f573fSAndroid Build Coastguard Worker [6-9].* ) 358*1b3f573fSAndroid Build Coastguard Worker echo "ERROR: Xcode 10.0 or higher is required to build the test suite." 1>&2 359*1b3f573fSAndroid Build Coastguard Worker exit 11 360*1b3f573fSAndroid Build Coastguard Worker ;; 361*1b3f573fSAndroid Build Coastguard Worker 10.* | 11.* | 12.*) 362*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_TVOS+=( 363*1b3f573fSAndroid Build Coastguard Worker -destination "platform=tvOS Simulator,name=Apple TV 4K,OS=latest" 364*1b3f573fSAndroid Build Coastguard Worker ) 365*1b3f573fSAndroid Build Coastguard Worker ;; 366*1b3f573fSAndroid Build Coastguard Worker 13.* | 14.*) 367*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_TVOS+=( 368*1b3f573fSAndroid Build Coastguard Worker -destination "platform=tvOS Simulator,name=Apple TV 4K (2nd generation),OS=latest" 369*1b3f573fSAndroid Build Coastguard Worker ) 370*1b3f573fSAndroid Build Coastguard Worker ;; 371*1b3f573fSAndroid Build Coastguard Worker * ) 372*1b3f573fSAndroid Build Coastguard Worker echo "" 373*1b3f573fSAndroid Build Coastguard Worker echo "ATTENTION: Time to update the simulator targets for Xcode ${XCODE_VERSION}" 374*1b3f573fSAndroid Build Coastguard Worker echo "" 375*1b3f573fSAndroid Build Coastguard Worker echo "ERROR: Build aborted!" 376*1b3f573fSAndroid Build Coastguard Worker exit 2 377*1b3f573fSAndroid Build Coastguard Worker ;; 378*1b3f573fSAndroid Build Coastguard Worker esac 379*1b3f573fSAndroid Build Coastguard Worker if [[ "${XCODE_QUIET}" == "yes" ]] ; then 380*1b3f573fSAndroid Build Coastguard Worker XCODEBUILD_TEST_BASE_TVOS+=( -quiet ) 381*1b3f573fSAndroid Build Coastguard Worker fi 382*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_DEBUG}" == "yes" ]] ; then 383*1b3f573fSAndroid Build Coastguard Worker header "Doing Xcode tvOS build/tests - Debug" 384*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_TEST_BASE_TVOS[@]}" -configuration Debug test 385*1b3f573fSAndroid Build Coastguard Worker fi 386*1b3f573fSAndroid Build Coastguard Worker if [[ "${DO_XCODE_RELEASE}" == "yes" ]] ; then 387*1b3f573fSAndroid Build Coastguard Worker header "Doing Xcode tvOS build/tests - Release" 388*1b3f573fSAndroid Build Coastguard Worker "${XCODEBUILD_TEST_BASE_TVOS[@]}" -configuration Release test 389*1b3f573fSAndroid Build Coastguard Worker fi 390*1b3f573fSAndroid Build Coastguard Workerfi 391*1b3f573fSAndroid Build Coastguard Worker 392*1b3f573fSAndroid Build Coastguard Workerif [[ "${DO_OBJC_CONFORMANCE_TESTS}" == "yes" ]] ; then 393*1b3f573fSAndroid Build Coastguard Worker header "Running ObjC Conformance Tests" 394*1b3f573fSAndroid Build Coastguard Worker cd conformance 395*1b3f573fSAndroid Build Coastguard Worker wrapped_make -j "${NUM_MAKE_JOBS}" test_objc 396*1b3f573fSAndroid Build Coastguard Worker cd .. 397*1b3f573fSAndroid Build Coastguard Workerfi 398*1b3f573fSAndroid Build Coastguard Worker 399*1b3f573fSAndroid Build Coastguard Workerecho "" 400*1b3f573fSAndroid Build Coastguard Workerecho "$(basename "${0}"): Success!" 401