aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts
diff options
context:
space:
mode:
authorGravatar Gil <mcg@google.com>2018-03-07 08:44:54 -0800
committerGravatar GitHub <noreply@github.com>2018-03-07 08:44:54 -0800
commit5930ad2feebc6628cbaec89b8f6a6146ed6afe5d (patch)
tree9f3c4efa8ad9dbcf9041302e9654719a417035cd /scripts
parent8ef0f1490a72fd700f609dc9971ec16868d6747b (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-xscripts/build.sh148
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