aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts
diff options
context:
space:
mode:
authorGravatar Konstantin Varlamov <var-const@users.noreply.github.com>2018-04-23 14:11:27 -0400
committerGravatar GitHub <noreply@github.com>2018-04-23 14:11:27 -0400
commit758b29aec4c2a76bd85f521ba652ceedd11313f1 (patch)
treec67e4ff4eb649278f50094a05f33f22b304099e8 /scripts
parente4384c3e809556e75907df74cd116307f397472f (diff)
Firestore Travis: add test runs using sanitizers (#1128)
Also move most of `before_install` actions from Travis config into scripts to reduce duplication.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/build.sh57
-rwxr-xr-xscripts/install_prereqs.sh47
-rwxr-xr-xscripts/pod_install.sh54
3 files changed, 157 insertions, 1 deletions
diff --git a/scripts/build.sh b/scripts/build.sh
index 8060ca0..ef10059 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -36,6 +36,13 @@ platform can be one of:
method can be one of:
xcodebuild (default)
cmake
+
+Optionally, reads the environment variable SANITIZERS. If set, it is expected to
+be a string containing a space-separated list with some of the following
+elements:
+ asan
+ tsan
+ ubsan
EOF
exit 1
fi
@@ -53,6 +60,9 @@ if [[ $# -gt 2 ]]; then
fi
echo "Building $product for $platform using $method"
+if [[ -n "${SANITIZERS:-}" ]]; then
+ echo "Using sanitizers: $SANITIZERS"
+fi
# Runs xcodebuild with the given flags, piping output to xcpretty
# If xcodebuild fails with known error codes, retries once.
@@ -103,6 +113,51 @@ xcb_flags+=(
CODE_SIGNING_REQUIRED=NO
)
+# TODO(varconst): --warn-unused-vars - right now, it makes the log overflow on
+# Travis.
+cmake_options=(
+ -Wdeprecated
+ --warn-uninitialized
+)
+
+if [[ -n "${SANITIZERS:-}" ]]; then
+ for sanitizer in $SANITIZERS; do
+ case "$sanitizer" in
+ asan)
+ xcb_flags+=(
+ -enableAddressSanitizer YES
+ )
+ cmake_options+=(
+ -DWITH_ASAN=ON
+ )
+ ;;
+
+ tsan)
+ xcb_flags+=(
+ -enableThreadSanitizer YES
+ )
+ cmake_options+=(
+ -DWITH_TSAN=ON
+ )
+ ;;
+
+ ubsan)
+ xcb_flags+=(
+ -enableUndefinedBehaviorSanitizer YES
+ )
+ cmake_options+=(
+ -DWITH_UBSAN=ON
+ )
+ ;;
+
+ *)
+ echo "Unknown sanitizer '$sanitizer'" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+fi
+
case "$product-$method-$platform" in
Firebase-xcodebuild-*)
RunXcodebuild \
@@ -167,7 +222,7 @@ case "$product-$method-$platform" in
Firestore-cmake-macOS)
test -d build || mkdir build
echo "Preparing cmake build ..."
- (cd build; cmake ..)
+ (cd build; cmake "${cmake_options[@]}" ..)
echo "Building cmake build ..."
cpus=$(sysctl -n hw.ncpu)
diff --git a/scripts/install_prereqs.sh b/scripts/install_prereqs.sh
new file mode 100755
index 0000000..c86663f
--- /dev/null
+++ b/scripts/install_prereqs.sh
@@ -0,0 +1,47 @@
+# 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.
+
+# Within Travis, installs prerequisites for a build.
+
+# Examines the following configured environment variables that should be
+# specified in an env: block
+# - PROJECT - Firebase or Firestore
+# - METHOD - xcodebuild or cmake; default is xcodebuild
+
+if [[ -z "$METHOD" ]]; then
+ METHOD="xcodebuild"
+fi
+
+case "$PROJECT-$METHOD" in
+ *-xcodebuild)
+ bundle install
+ gem install xcpretty
+ ;;
+
+ Firestore-cmake)
+ bundle install
+ # xcpretty is helpful for the intermediate step which builds FirebaseCore
+ # using xcodebuild.
+ gem install xcpretty
+ brew outdated cmake || brew upgrade cmake
+ brew outdated go || brew upgrade go # Somehow the build for Abseil requires this.
+ ;;
+
+ *)
+ echo "Unknown project-method combo" 1>&2
+ echo " PROJECT=$PROJECT" 1>&2
+ echo " METHOD=$METHOD" 1>&2
+ exit 1
+ ;;
+esac
diff --git a/scripts/pod_install.sh b/scripts/pod_install.sh
new file mode 100755
index 0000000..ff5ec96
--- /dev/null
+++ b/scripts/pod_install.sh
@@ -0,0 +1,54 @@
+# 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.
+
+# Within Travis, installs prerequisites for a build.
+
+# Examines the following configured environment variables that should be
+# specified in an env: block
+# - PROJECT - Firebase or Firestore
+# - METHOD - xcodebuild or cmake; default is xcodebuild
+# - PLATFORM - iOS, macOS, or tvOS
+
+if [[ -z "$METHOD" ]]; then
+ METHOD="xcodebuild"
+fi
+
+case "$PROJECT-$METHOD-$PLATFORM" in
+ Firebase-xcodebuild-iOS)
+ bundle exec pod install --project-directory=Example --repo-update
+ bundle exec pod install --project-directory=Functions/Example
+ ;;
+
+ Firebase-xcodebuild-*)
+ bundle exec pod install --project-directory=Example --repo-update
+ ;;
+
+ Firestore-xcodebuild-*)
+ bundle exec pod install --project-directory=Firestore/Example --repo-update
+ ;;
+
+ Firestore-cmake-*)
+ bundle exec pod install --project-directory=Example --repo-update
+ bundle exec pod install --project-directory=Firestore/Example \
+ --no-repo-update
+ ;;
+
+ *)
+ echo "Unknown project-method combo" 1>&2
+ echo " PROJECT=$PROJECT" 1>&2
+ echo " METHOD=$METHOD" 1>&2
+ exit 1
+ ;;
+esac
+