1*481dde66SAndroid Build Coastguard Worker# Copyright 2017 Google Inc. 2*481dde66SAndroid Build Coastguard Worker# All Rights Reserved. 3*481dde66SAndroid Build Coastguard Worker# 4*481dde66SAndroid Build Coastguard Worker# 5*481dde66SAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without 6*481dde66SAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions are 7*481dde66SAndroid Build Coastguard Worker# met: 8*481dde66SAndroid Build Coastguard Worker# 9*481dde66SAndroid Build Coastguard Worker# * Redistributions of source code must retain the above copyright 10*481dde66SAndroid Build Coastguard Worker# notice, this list of conditions and the following disclaimer. 11*481dde66SAndroid Build Coastguard Worker# * Redistributions in binary form must reproduce the above 12*481dde66SAndroid Build Coastguard Worker# copyright notice, this list of conditions and the following disclaimer 13*481dde66SAndroid Build Coastguard Worker# in the documentation and/or other materials provided with the 14*481dde66SAndroid Build Coastguard Worker# distribution. 15*481dde66SAndroid Build Coastguard Worker# * Neither the name of Google Inc. nor the names of its 16*481dde66SAndroid Build Coastguard Worker# contributors may be used to endorse or promote products derived from 17*481dde66SAndroid Build Coastguard Worker# this software without specific prior written permission. 18*481dde66SAndroid Build Coastguard Worker# 19*481dde66SAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20*481dde66SAndroid Build Coastguard Worker# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21*481dde66SAndroid Build Coastguard Worker# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22*481dde66SAndroid Build Coastguard Worker# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23*481dde66SAndroid Build Coastguard Worker# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24*481dde66SAndroid Build Coastguard Worker# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25*481dde66SAndroid Build Coastguard Worker# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26*481dde66SAndroid Build Coastguard Worker# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27*481dde66SAndroid Build Coastguard Worker# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28*481dde66SAndroid Build Coastguard Worker# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29*481dde66SAndroid Build Coastguard Worker# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*481dde66SAndroid Build Coastguard Worker# 31*481dde66SAndroid Build Coastguard Worker# Bazel Build for Google C++ Testing Framework(Google Test) 32*481dde66SAndroid Build Coastguard Worker 33*481dde66SAndroid Build Coastguard Workerpackage(default_visibility = ["//visibility:public"]) 34*481dde66SAndroid Build Coastguard Worker 35*481dde66SAndroid Build Coastguard Workerlicenses(["notice"]) 36*481dde66SAndroid Build Coastguard Worker 37*481dde66SAndroid Build Coastguard Workerexports_files(["LICENSE"]) 38*481dde66SAndroid Build Coastguard Worker 39*481dde66SAndroid Build Coastguard Workerconfig_setting( 40*481dde66SAndroid Build Coastguard Worker name = "qnx", 41*481dde66SAndroid Build Coastguard Worker constraint_values = ["@platforms//os:qnx"], 42*481dde66SAndroid Build Coastguard Worker) 43*481dde66SAndroid Build Coastguard Worker 44*481dde66SAndroid Build Coastguard Workerconfig_setting( 45*481dde66SAndroid Build Coastguard Worker name = "windows", 46*481dde66SAndroid Build Coastguard Worker constraint_values = ["@platforms//os:windows"], 47*481dde66SAndroid Build Coastguard Worker) 48*481dde66SAndroid Build Coastguard Worker 49*481dde66SAndroid Build Coastguard Workerconfig_setting( 50*481dde66SAndroid Build Coastguard Worker name = "freebsd", 51*481dde66SAndroid Build Coastguard Worker constraint_values = ["@platforms//os:freebsd"], 52*481dde66SAndroid Build Coastguard Worker) 53*481dde66SAndroid Build Coastguard Worker 54*481dde66SAndroid Build Coastguard Workerconfig_setting( 55*481dde66SAndroid Build Coastguard Worker name = "openbsd", 56*481dde66SAndroid Build Coastguard Worker constraint_values = ["@platforms//os:openbsd"], 57*481dde66SAndroid Build Coastguard Worker) 58*481dde66SAndroid Build Coastguard Worker 59*481dde66SAndroid Build Coastguard Worker# NOTE: Fuchsia is not an officially supported platform. 60*481dde66SAndroid Build Coastguard Workerconfig_setting( 61*481dde66SAndroid Build Coastguard Worker name = "fuchsia", 62*481dde66SAndroid Build Coastguard Worker constraint_values = ["@platforms//os:fuchsia"], 63*481dde66SAndroid Build Coastguard Worker) 64*481dde66SAndroid Build Coastguard Worker 65*481dde66SAndroid Build Coastguard Workerconfig_setting( 66*481dde66SAndroid Build Coastguard Worker name = "msvc_compiler", 67*481dde66SAndroid Build Coastguard Worker flag_values = { 68*481dde66SAndroid Build Coastguard Worker "@bazel_tools//tools/cpp:compiler": "msvc-cl", 69*481dde66SAndroid Build Coastguard Worker }, 70*481dde66SAndroid Build Coastguard Worker visibility = [":__subpackages__"], 71*481dde66SAndroid Build Coastguard Worker) 72*481dde66SAndroid Build Coastguard Worker 73*481dde66SAndroid Build Coastguard Workerconfig_setting( 74*481dde66SAndroid Build Coastguard Worker name = "has_absl", 75*481dde66SAndroid Build Coastguard Worker values = {"define": "absl=1"}, 76*481dde66SAndroid Build Coastguard Worker) 77*481dde66SAndroid Build Coastguard Worker 78*481dde66SAndroid Build Coastguard Worker# Library that defines the FRIEND_TEST macro. 79*481dde66SAndroid Build Coastguard Workercc_library( 80*481dde66SAndroid Build Coastguard Worker name = "gtest_prod", 81*481dde66SAndroid Build Coastguard Worker hdrs = ["googletest/include/gtest/gtest_prod.h"], 82*481dde66SAndroid Build Coastguard Worker includes = ["googletest/include"], 83*481dde66SAndroid Build Coastguard Worker) 84*481dde66SAndroid Build Coastguard Worker 85*481dde66SAndroid Build Coastguard Worker# Google Test including Google Mock 86*481dde66SAndroid Build Coastguard Workercc_library( 87*481dde66SAndroid Build Coastguard Worker name = "gtest", 88*481dde66SAndroid Build Coastguard Worker srcs = glob( 89*481dde66SAndroid Build Coastguard Worker include = [ 90*481dde66SAndroid Build Coastguard Worker "googletest/src/*.cc", 91*481dde66SAndroid Build Coastguard Worker "googletest/src/*.h", 92*481dde66SAndroid Build Coastguard Worker "googletest/include/gtest/**/*.h", 93*481dde66SAndroid Build Coastguard Worker "googlemock/src/*.cc", 94*481dde66SAndroid Build Coastguard Worker "googlemock/include/gmock/**/*.h", 95*481dde66SAndroid Build Coastguard Worker ], 96*481dde66SAndroid Build Coastguard Worker exclude = [ 97*481dde66SAndroid Build Coastguard Worker "googletest/src/gtest-all.cc", 98*481dde66SAndroid Build Coastguard Worker "googletest/src/gtest_main.cc", 99*481dde66SAndroid Build Coastguard Worker "googlemock/src/gmock-all.cc", 100*481dde66SAndroid Build Coastguard Worker "googlemock/src/gmock_main.cc", 101*481dde66SAndroid Build Coastguard Worker ], 102*481dde66SAndroid Build Coastguard Worker ), 103*481dde66SAndroid Build Coastguard Worker hdrs = glob([ 104*481dde66SAndroid Build Coastguard Worker "googletest/include/gtest/*.h", 105*481dde66SAndroid Build Coastguard Worker "googlemock/include/gmock/*.h", 106*481dde66SAndroid Build Coastguard Worker ]), 107*481dde66SAndroid Build Coastguard Worker copts = select({ 108*481dde66SAndroid Build Coastguard Worker ":qnx": [], 109*481dde66SAndroid Build Coastguard Worker ":windows": [], 110*481dde66SAndroid Build Coastguard Worker "//conditions:default": ["-pthread"], 111*481dde66SAndroid Build Coastguard Worker }), 112*481dde66SAndroid Build Coastguard Worker defines = select({ 113*481dde66SAndroid Build Coastguard Worker ":has_absl": ["GTEST_HAS_ABSL=1"], 114*481dde66SAndroid Build Coastguard Worker "//conditions:default": [], 115*481dde66SAndroid Build Coastguard Worker }), 116*481dde66SAndroid Build Coastguard Worker features = select({ 117*481dde66SAndroid Build Coastguard Worker ":windows": ["windows_export_all_symbols"], 118*481dde66SAndroid Build Coastguard Worker "//conditions:default": [], 119*481dde66SAndroid Build Coastguard Worker }), 120*481dde66SAndroid Build Coastguard Worker includes = [ 121*481dde66SAndroid Build Coastguard Worker "googlemock", 122*481dde66SAndroid Build Coastguard Worker "googlemock/include", 123*481dde66SAndroid Build Coastguard Worker "googletest", 124*481dde66SAndroid Build Coastguard Worker "googletest/include", 125*481dde66SAndroid Build Coastguard Worker ], 126*481dde66SAndroid Build Coastguard Worker linkopts = select({ 127*481dde66SAndroid Build Coastguard Worker ":qnx": ["-lregex"], 128*481dde66SAndroid Build Coastguard Worker ":windows": [], 129*481dde66SAndroid Build Coastguard Worker ":freebsd": [ 130*481dde66SAndroid Build Coastguard Worker "-lm", 131*481dde66SAndroid Build Coastguard Worker "-pthread", 132*481dde66SAndroid Build Coastguard Worker ], 133*481dde66SAndroid Build Coastguard Worker ":openbsd": [ 134*481dde66SAndroid Build Coastguard Worker "-lm", 135*481dde66SAndroid Build Coastguard Worker "-pthread", 136*481dde66SAndroid Build Coastguard Worker ], 137*481dde66SAndroid Build Coastguard Worker "//conditions:default": ["-pthread"], 138*481dde66SAndroid Build Coastguard Worker }), 139*481dde66SAndroid Build Coastguard Worker deps = select({ 140*481dde66SAndroid Build Coastguard Worker ":has_absl": [ 141*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/container:flat_hash_set", 142*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/debugging:failure_signal_handler", 143*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/debugging:stacktrace", 144*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/debugging:symbolize", 145*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/flags:flag", 146*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/flags:parse", 147*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/flags:reflection", 148*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/flags:usage", 149*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/strings", 150*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/types:any", 151*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/types:optional", 152*481dde66SAndroid Build Coastguard Worker "@abseil-cpp//absl/types:variant", 153*481dde66SAndroid Build Coastguard Worker "@re2//:re2", 154*481dde66SAndroid Build Coastguard Worker ], 155*481dde66SAndroid Build Coastguard Worker "//conditions:default": [], 156*481dde66SAndroid Build Coastguard Worker }) + select({ 157*481dde66SAndroid Build Coastguard Worker # `gtest-death-test.cc` has `EXPECT_DEATH` that spawns a process, 158*481dde66SAndroid Build Coastguard Worker # expects it to crash and inspects its logs with the given matcher, 159*481dde66SAndroid Build Coastguard Worker # so that's why these libraries are needed. 160*481dde66SAndroid Build Coastguard Worker # Otherwise, builds targeting Fuchsia would fail to compile. 161*481dde66SAndroid Build Coastguard Worker ":fuchsia": [ 162*481dde66SAndroid Build Coastguard Worker "@fuchsia_sdk//pkg/fdio", 163*481dde66SAndroid Build Coastguard Worker "@fuchsia_sdk//pkg/syslog", 164*481dde66SAndroid Build Coastguard Worker "@fuchsia_sdk//pkg/zx", 165*481dde66SAndroid Build Coastguard Worker ], 166*481dde66SAndroid Build Coastguard Worker "//conditions:default": [], 167*481dde66SAndroid Build Coastguard Worker }), 168*481dde66SAndroid Build Coastguard Worker) 169*481dde66SAndroid Build Coastguard Worker 170*481dde66SAndroid Build Coastguard Workercc_library( 171*481dde66SAndroid Build Coastguard Worker name = "gtest_main", 172*481dde66SAndroid Build Coastguard Worker srcs = ["googlemock/src/gmock_main.cc"], 173*481dde66SAndroid Build Coastguard Worker features = select({ 174*481dde66SAndroid Build Coastguard Worker ":windows": ["windows_export_all_symbols"], 175*481dde66SAndroid Build Coastguard Worker "//conditions:default": [], 176*481dde66SAndroid Build Coastguard Worker }), 177*481dde66SAndroid Build Coastguard Worker deps = [":gtest"], 178*481dde66SAndroid Build Coastguard Worker) 179*481dde66SAndroid Build Coastguard Worker 180*481dde66SAndroid Build Coastguard Worker# The following rules build samples of how to use gTest. 181*481dde66SAndroid Build Coastguard Workercc_library( 182*481dde66SAndroid Build Coastguard Worker name = "gtest_sample_lib", 183*481dde66SAndroid Build Coastguard Worker srcs = [ 184*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample1.cc", 185*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample2.cc", 186*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample4.cc", 187*481dde66SAndroid Build Coastguard Worker ], 188*481dde66SAndroid Build Coastguard Worker hdrs = [ 189*481dde66SAndroid Build Coastguard Worker "googletest/samples/prime_tables.h", 190*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample1.h", 191*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample2.h", 192*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample3-inl.h", 193*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample4.h", 194*481dde66SAndroid Build Coastguard Worker ], 195*481dde66SAndroid Build Coastguard Worker features = select({ 196*481dde66SAndroid Build Coastguard Worker ":windows": ["windows_export_all_symbols"], 197*481dde66SAndroid Build Coastguard Worker "//conditions:default": [], 198*481dde66SAndroid Build Coastguard Worker }), 199*481dde66SAndroid Build Coastguard Worker) 200*481dde66SAndroid Build Coastguard Worker 201*481dde66SAndroid Build Coastguard Workercc_test( 202*481dde66SAndroid Build Coastguard Worker name = "gtest_samples", 203*481dde66SAndroid Build Coastguard Worker size = "small", 204*481dde66SAndroid Build Coastguard Worker # All Samples except: 205*481dde66SAndroid Build Coastguard Worker # sample9 (main) 206*481dde66SAndroid Build Coastguard Worker # sample10 (main and takes a command line option and needs to be separate) 207*481dde66SAndroid Build Coastguard Worker srcs = [ 208*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample1_unittest.cc", 209*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample2_unittest.cc", 210*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample3_unittest.cc", 211*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample4_unittest.cc", 212*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample5_unittest.cc", 213*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample6_unittest.cc", 214*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample7_unittest.cc", 215*481dde66SAndroid Build Coastguard Worker "googletest/samples/sample8_unittest.cc", 216*481dde66SAndroid Build Coastguard Worker ], 217*481dde66SAndroid Build Coastguard Worker linkstatic = 0, 218*481dde66SAndroid Build Coastguard Worker deps = [ 219*481dde66SAndroid Build Coastguard Worker "gtest_sample_lib", 220*481dde66SAndroid Build Coastguard Worker ":gtest_main", 221*481dde66SAndroid Build Coastguard Worker ], 222*481dde66SAndroid Build Coastguard Worker) 223*481dde66SAndroid Build Coastguard Worker 224*481dde66SAndroid Build Coastguard Workercc_test( 225*481dde66SAndroid Build Coastguard Worker name = "sample9_unittest", 226*481dde66SAndroid Build Coastguard Worker size = "small", 227*481dde66SAndroid Build Coastguard Worker srcs = ["googletest/samples/sample9_unittest.cc"], 228*481dde66SAndroid Build Coastguard Worker deps = [":gtest"], 229*481dde66SAndroid Build Coastguard Worker) 230*481dde66SAndroid Build Coastguard Worker 231*481dde66SAndroid Build Coastguard Workercc_test( 232*481dde66SAndroid Build Coastguard Worker name = "sample10_unittest", 233*481dde66SAndroid Build Coastguard Worker size = "small", 234*481dde66SAndroid Build Coastguard Worker srcs = ["googletest/samples/sample10_unittest.cc"], 235*481dde66SAndroid Build Coastguard Worker deps = [":gtest"], 236*481dde66SAndroid Build Coastguard Worker) 237