diff options
author | Gil <mcg@google.com> | 2018-03-07 08:44:54 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-07 08:44:54 -0800 |
commit | 5930ad2feebc6628cbaec89b8f6a6146ed6afe5d (patch) | |
tree | 9f3c4efa8ad9dbcf9041302e9654719a417035cd /scripts | |
parent | 8ef0f1490a72fd700f609dc9971ec16868d6747b (diff) |
Factor out a universal build script (#884)
* Add a universal build script
* Rewrite test.sh in terms of universal build
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/build.sh | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..df3faae --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,148 @@ +#!/usr/bin/env bash + +# Copyright 2018 Google +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# USAGE: build.sh product [platform] [method] +# +# Builds the given product for the given platform using the given build method + +set -euo pipefail + +if [[ $# -lt 1 ]]; then + cat 1>&2 <<EOF +USAGE: $0 product [platform] [method] + +product can be one of: + Firebase + Firestore + +platform can be one of: + iOS (default) + macOS + tvOS + +method can be one of: + xcodebuild (default) + cmake +EOF + exit 1 +fi + +product="$1" + +platform="iOS" +if [[ $# -gt 1 ]]; then + platform="$2" +fi + +method="xcodebuild" +if [[ $# -gt 2 ]]; then + method="$3" +fi + +echo "Building $product for $platform using $method" + +# Runs xcodebuild with the given flags, piping output to xcpretty +# If xcodebuild fails with known error codes, retries once. +function RunXcodebuild() { + xcodebuild "$@" | xcpretty; result=$? + if [[ $result == 65 ]]; then + echo "xcodebuild exited with 65, retrying" 1>&2 + sleep 5 + + xcodebuild "$@" | xcpretty; result=$? + fi + if [[ $result != 0 ]]; then + exit $result + fi +} + +# Compute standard flags for all platforms +case "$platform" in + iOS) + xcb_flags=( + -sdk 'iphonesimulator' + -destination 'platform=iOS Simulator,name=iPhone 7' + ) + ;; + + macOS) + xcb_flags=( + -sdk 'macosx' + -destination 'platform=OS X,arch=x86_64' + ) + ;; + + tvOS) + xcb_flags=( + -sdk "appletvsimulator" + -destination 'platform=tvOS Simulator,name=Apple TV' + ) + ;; + + *) + echo "Unknown platform '$platform'" 1>&2 + exit 1 + ;; +esac + +xcb_flags+=( + ONLY_ACTIVE_ARCH=YES + CODE_SIGNING_REQUIRED=NO +) + +case "$product-$method-$platform" in + Firebase-xcodebuild-*) + RunXcodebuild \ + -workspace 'Example/Firebase.xcworkspace' \ + -scheme "AllUnitTests_$platform" \ + "${xcb_flags[@]}" \ + build \ + test + ;; + + Firestore-xcodebuild-iOS) + RunXcodebuild \ + -workspace 'Firestore/Example/Firestore.xcworkspace' \ + -scheme 'Firestore_Tests' \ + "${xcb_flags[@]}" \ + build \ + test + + RunXcodebuild \ + -workspace 'Firestore/Example/Firestore.xcworkspace' \ + -scheme 'SwiftBuildTest' \ + "${xcb_flags[@]}" \ + build + ;; + + Firestore-cmake-macOS) + test -d build || mkdir build + echo "Preparing cmake build ..." + (cd build; cmake ..) + + echo "Building cmake build ..." + cpus=$(sysctl -n hw.ncpu) + (cd build; make -j $cpus all) + ;; + + *) + echo "Don't know how to build this product-platform-method combination" 1>&2 + echo " product=$product" 1>&2 + echo " platform=$platform" 1>&2 + echo " method=$method" 1>&2 + exit 1 + ;; +esac |