1*481dde66SAndroid Build Coastguard Worker#!/bin/bash 2*481dde66SAndroid Build Coastguard Worker# 3*481dde66SAndroid Build Coastguard Worker# Copyright 2020, Google Inc. 4*481dde66SAndroid Build Coastguard Worker# All rights reserved. 5*481dde66SAndroid Build Coastguard Worker# 6*481dde66SAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without 7*481dde66SAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions are 8*481dde66SAndroid Build Coastguard Worker# met: 9*481dde66SAndroid Build Coastguard Worker# 10*481dde66SAndroid Build Coastguard Worker# * Redistributions of source code must retain the above copyright 11*481dde66SAndroid Build Coastguard Worker# notice, this list of conditions and the following disclaimer. 12*481dde66SAndroid Build Coastguard Worker# * Redistributions in binary form must reproduce the above 13*481dde66SAndroid Build Coastguard Worker# copyright notice, this list of conditions and the following disclaimer 14*481dde66SAndroid Build Coastguard Worker# in the documentation and/or other materials provided with the 15*481dde66SAndroid Build Coastguard Worker# distribution. 16*481dde66SAndroid Build Coastguard Worker# * Neither the name of Google Inc. nor the names of its 17*481dde66SAndroid Build Coastguard Worker# contributors may be used to endorse or promote products derived from 18*481dde66SAndroid Build Coastguard Worker# this software without specific prior written permission. 19*481dde66SAndroid Build Coastguard Worker# 20*481dde66SAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21*481dde66SAndroid Build Coastguard Worker# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22*481dde66SAndroid Build Coastguard Worker# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23*481dde66SAndroid Build Coastguard Worker# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24*481dde66SAndroid Build Coastguard Worker# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25*481dde66SAndroid Build Coastguard Worker# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26*481dde66SAndroid Build Coastguard Worker# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27*481dde66SAndroid Build Coastguard Worker# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28*481dde66SAndroid Build Coastguard Worker# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29*481dde66SAndroid Build Coastguard Worker# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30*481dde66SAndroid Build Coastguard Worker# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31*481dde66SAndroid Build Coastguard Worker 32*481dde66SAndroid Build Coastguard Workerset -euox pipefail 33*481dde66SAndroid Build Coastguard Worker 34*481dde66SAndroid Build Coastguard Workerreadonly LINUX_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20240523" 35*481dde66SAndroid Build Coastguard Workerreadonly LINUX_GCC_FLOOR_CONTAINER="gcr.io/google.com/absl-177019/linux_gcc-floor:20230120" 36*481dde66SAndroid Build Coastguard Worker 37*481dde66SAndroid Build Coastguard Workerif [[ -z ${GTEST_ROOT:-} ]]; then 38*481dde66SAndroid Build Coastguard Worker GTEST_ROOT="$(realpath $(dirname ${0})/..)" 39*481dde66SAndroid Build Coastguard Workerfi 40*481dde66SAndroid Build Coastguard Worker 41*481dde66SAndroid Build Coastguard Workerif [[ -z ${STD:-} ]]; then 42*481dde66SAndroid Build Coastguard Worker STD="c++14 c++17 c++20" 43*481dde66SAndroid Build Coastguard Workerfi 44*481dde66SAndroid Build Coastguard Worker 45*481dde66SAndroid Build Coastguard Worker# Test the CMake build 46*481dde66SAndroid Build Coastguard Workerfor cc in /usr/local/bin/gcc /opt/llvm/clang/bin/clang; do 47*481dde66SAndroid Build Coastguard Worker for cmake_off_on in OFF ON; do 48*481dde66SAndroid Build Coastguard Worker time docker run \ 49*481dde66SAndroid Build Coastguard Worker --volume="${GTEST_ROOT}:/src:ro" \ 50*481dde66SAndroid Build Coastguard Worker --tmpfs="/build:exec" \ 51*481dde66SAndroid Build Coastguard Worker --workdir="/build" \ 52*481dde66SAndroid Build Coastguard Worker --rm \ 53*481dde66SAndroid Build Coastguard Worker --env="CC=${cc}" \ 54*481dde66SAndroid Build Coastguard Worker --env=CXXFLAGS="-Werror -Wdeprecated" \ 55*481dde66SAndroid Build Coastguard Worker ${LINUX_LATEST_CONTAINER} \ 56*481dde66SAndroid Build Coastguard Worker /bin/bash -c " 57*481dde66SAndroid Build Coastguard Worker cmake /src \ 58*481dde66SAndroid Build Coastguard Worker -DCMAKE_CXX_STANDARD=14 \ 59*481dde66SAndroid Build Coastguard Worker -Dgtest_build_samples=ON \ 60*481dde66SAndroid Build Coastguard Worker -Dgtest_build_tests=ON \ 61*481dde66SAndroid Build Coastguard Worker -Dgmock_build_tests=ON \ 62*481dde66SAndroid Build Coastguard Worker -Dcxx_no_exception=${cmake_off_on} \ 63*481dde66SAndroid Build Coastguard Worker -Dcxx_no_rtti=${cmake_off_on} && \ 64*481dde66SAndroid Build Coastguard Worker make -j$(nproc) && \ 65*481dde66SAndroid Build Coastguard Worker ctest -j$(nproc) --output-on-failure" 66*481dde66SAndroid Build Coastguard Worker done 67*481dde66SAndroid Build Coastguard Workerdone 68*481dde66SAndroid Build Coastguard Worker 69*481dde66SAndroid Build Coastguard Worker# Do one test with an older version of GCC 70*481dde66SAndroid Build Coastguard Worker# TODO(googletest-team): This currently uses Bazel 5. When upgrading to a 71*481dde66SAndroid Build Coastguard Worker# version of Bazel that supports Bzlmod, add --enable_bzlmod=false to keep test 72*481dde66SAndroid Build Coastguard Worker# coverage for the old WORKSPACE dependency management. 73*481dde66SAndroid Build Coastguard Workertime docker run \ 74*481dde66SAndroid Build Coastguard Worker --volume="${GTEST_ROOT}:/src:ro" \ 75*481dde66SAndroid Build Coastguard Worker --workdir="/src" \ 76*481dde66SAndroid Build Coastguard Worker --rm \ 77*481dde66SAndroid Build Coastguard Worker --env="CC=/usr/local/bin/gcc" \ 78*481dde66SAndroid Build Coastguard Worker --env="BAZEL_CXXOPTS=-std=c++14" \ 79*481dde66SAndroid Build Coastguard Worker ${LINUX_GCC_FLOOR_CONTAINER} \ 80*481dde66SAndroid Build Coastguard Worker /usr/local/bin/bazel test ... \ 81*481dde66SAndroid Build Coastguard Worker --copt="-Wall" \ 82*481dde66SAndroid Build Coastguard Worker --copt="-Werror" \ 83*481dde66SAndroid Build Coastguard Worker --copt="-Wuninitialized" \ 84*481dde66SAndroid Build Coastguard Worker --copt="-Wundef" \ 85*481dde66SAndroid Build Coastguard Worker --copt="-Wno-error=pragmas" \ 86*481dde66SAndroid Build Coastguard Worker --features=external_include_paths \ 87*481dde66SAndroid Build Coastguard Worker --keep_going \ 88*481dde66SAndroid Build Coastguard Worker --show_timestamps \ 89*481dde66SAndroid Build Coastguard Worker --test_output=errors 90*481dde66SAndroid Build Coastguard Worker 91*481dde66SAndroid Build Coastguard Worker# Test GCC 92*481dde66SAndroid Build Coastguard Workerfor std in ${STD}; do 93*481dde66SAndroid Build Coastguard Worker for absl in 0 1; do 94*481dde66SAndroid Build Coastguard Worker time docker run \ 95*481dde66SAndroid Build Coastguard Worker --volume="${GTEST_ROOT}:/src:ro" \ 96*481dde66SAndroid Build Coastguard Worker --workdir="/src" \ 97*481dde66SAndroid Build Coastguard Worker --rm \ 98*481dde66SAndroid Build Coastguard Worker --env="CC=/usr/local/bin/gcc" \ 99*481dde66SAndroid Build Coastguard Worker --env="BAZEL_CXXOPTS=-std=${std}" \ 100*481dde66SAndroid Build Coastguard Worker ${LINUX_LATEST_CONTAINER} \ 101*481dde66SAndroid Build Coastguard Worker /usr/local/bin/bazel test ... \ 102*481dde66SAndroid Build Coastguard Worker --copt="-Wall" \ 103*481dde66SAndroid Build Coastguard Worker --copt="-Werror" \ 104*481dde66SAndroid Build Coastguard Worker --copt="-Wuninitialized" \ 105*481dde66SAndroid Build Coastguard Worker --copt="-Wundef" \ 106*481dde66SAndroid Build Coastguard Worker --define="absl=${absl}" \ 107*481dde66SAndroid Build Coastguard Worker --enable_bzlmod=true \ 108*481dde66SAndroid Build Coastguard Worker --features=external_include_paths \ 109*481dde66SAndroid Build Coastguard Worker --keep_going \ 110*481dde66SAndroid Build Coastguard Worker --show_timestamps \ 111*481dde66SAndroid Build Coastguard Worker --test_output=errors 112*481dde66SAndroid Build Coastguard Worker done 113*481dde66SAndroid Build Coastguard Workerdone 114*481dde66SAndroid Build Coastguard Worker 115*481dde66SAndroid Build Coastguard Worker# Test Clang 116*481dde66SAndroid Build Coastguard Workerfor std in ${STD}; do 117*481dde66SAndroid Build Coastguard Worker for absl in 0 1; do 118*481dde66SAndroid Build Coastguard Worker time docker run \ 119*481dde66SAndroid Build Coastguard Worker --volume="${GTEST_ROOT}:/src:ro" \ 120*481dde66SAndroid Build Coastguard Worker --workdir="/src" \ 121*481dde66SAndroid Build Coastguard Worker --rm \ 122*481dde66SAndroid Build Coastguard Worker --env="CC=/opt/llvm/clang/bin/clang" \ 123*481dde66SAndroid Build Coastguard Worker --env="BAZEL_CXXOPTS=-std=${std}" \ 124*481dde66SAndroid Build Coastguard Worker ${LINUX_LATEST_CONTAINER} \ 125*481dde66SAndroid Build Coastguard Worker /usr/local/bin/bazel test ... \ 126*481dde66SAndroid Build Coastguard Worker --copt="--gcc-toolchain=/usr/local" \ 127*481dde66SAndroid Build Coastguard Worker --copt="-Wall" \ 128*481dde66SAndroid Build Coastguard Worker --copt="-Werror" \ 129*481dde66SAndroid Build Coastguard Worker --copt="-Wuninitialized" \ 130*481dde66SAndroid Build Coastguard Worker --copt="-Wundef" \ 131*481dde66SAndroid Build Coastguard Worker --define="absl=${absl}" \ 132*481dde66SAndroid Build Coastguard Worker --enable_bzlmod=true \ 133*481dde66SAndroid Build Coastguard Worker --features=external_include_paths \ 134*481dde66SAndroid Build Coastguard Worker --keep_going \ 135*481dde66SAndroid Build Coastguard Worker --linkopt="--gcc-toolchain=/usr/local" \ 136*481dde66SAndroid Build Coastguard Worker --show_timestamps \ 137*481dde66SAndroid Build Coastguard Worker --test_output=errors 138*481dde66SAndroid Build Coastguard Worker done 139*481dde66SAndroid Build Coastguard Workerdone 140