xref: /aosp_15_r20/external/googletest/ci/linux-presubmit.sh (revision 481dde660366d6f317d242b6974ef1b20adb843c)
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