1*8fb009dcSAndroid Build Coastguard Worker# Copyright (c) 2024, Google Inc. 2*8fb009dcSAndroid Build Coastguard Worker# 3*8fb009dcSAndroid Build Coastguard Worker# Permission to use, copy, modify, and/or distribute this software for any 4*8fb009dcSAndroid Build Coastguard Worker# purpose with or without fee is hereby granted, provided that the above 5*8fb009dcSAndroid Build Coastguard Worker# copyright notice and this permission notice appear in all copies. 6*8fb009dcSAndroid Build Coastguard Worker# 7*8fb009dcSAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8*8fb009dcSAndroid Build Coastguard Worker# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9*8fb009dcSAndroid Build Coastguard Worker# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 10*8fb009dcSAndroid Build Coastguard Worker# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11*8fb009dcSAndroid Build Coastguard Worker# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 12*8fb009dcSAndroid Build Coastguard Worker# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 13*8fb009dcSAndroid Build Coastguard Worker# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14*8fb009dcSAndroid Build Coastguard Worker 15*8fb009dcSAndroid Build Coastguard Workerload("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") 16*8fb009dcSAndroid Build Coastguard Worker 17*8fb009dcSAndroid Build Coastguard Worker# Configure C, C++, and common flags for GCC-compatible toolchains. 18*8fb009dcSAndroid Build Coastguard Worker# 19*8fb009dcSAndroid Build Coastguard Worker# TODO(davidben): Can we remove some of these? In Bazel, are warnings the 20*8fb009dcSAndroid Build Coastguard Worker# toolchain or project's responsibility? -fno-common did not become default 21*8fb009dcSAndroid Build Coastguard Worker# until https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85678. 22*8fb009dcSAndroid Build Coastguard Workergcc_copts = [ 23*8fb009dcSAndroid Build Coastguard Worker # This list of warnings should match those in the top-level CMakeLists.txt. 24*8fb009dcSAndroid Build Coastguard Worker "-Wall", 25*8fb009dcSAndroid Build Coastguard Worker "-Werror", 26*8fb009dcSAndroid Build Coastguard Worker "-Wformat=2", 27*8fb009dcSAndroid Build Coastguard Worker "-Wsign-compare", 28*8fb009dcSAndroid Build Coastguard Worker "-Wmissing-field-initializers", 29*8fb009dcSAndroid Build Coastguard Worker "-Wwrite-strings", 30*8fb009dcSAndroid Build Coastguard Worker "-Wshadow", 31*8fb009dcSAndroid Build Coastguard Worker "-fno-common", 32*8fb009dcSAndroid Build Coastguard Worker] 33*8fb009dcSAndroid Build Coastguard Worker 34*8fb009dcSAndroid Build Coastguard Workergcc_copts_cxx = [ 35*8fb009dcSAndroid Build Coastguard Worker "-Wmissing-declarations", 36*8fb009dcSAndroid Build Coastguard Worker] 37*8fb009dcSAndroid Build Coastguard Worker 38*8fb009dcSAndroid Build Coastguard Workergcc_copts_c = [ 39*8fb009dcSAndroid Build Coastguard Worker "-Wmissing-prototypes", 40*8fb009dcSAndroid Build Coastguard Worker "-Wold-style-definition", 41*8fb009dcSAndroid Build Coastguard Worker "-Wstrict-prototypes", 42*8fb009dcSAndroid Build Coastguard Worker] 43*8fb009dcSAndroid Build Coastguard Worker 44*8fb009dcSAndroid Build Coastguard Workerboringssl_copts_common = select({ 45*8fb009dcSAndroid Build Coastguard Worker # This condition and the asm_srcs_used one below must be kept in sync. 46*8fb009dcSAndroid Build Coastguard Worker "@platforms//os:windows": ["-DOPENSSL_NO_ASM"], 47*8fb009dcSAndroid Build Coastguard Worker "//conditions:default": [], 48*8fb009dcSAndroid Build Coastguard Worker}) + select({ 49*8fb009dcSAndroid Build Coastguard Worker # We assume that non-Windows builds use a GCC-compatible toolchain and that 50*8fb009dcSAndroid Build Coastguard Worker # Windows builds do not. 51*8fb009dcSAndroid Build Coastguard Worker # 52*8fb009dcSAndroid Build Coastguard Worker # TODO(davidben): Should these be querying something in @bazel_tools? 53*8fb009dcSAndroid Build Coastguard Worker # Unfortunately, @bazel_tools is undocumented. See 54*8fb009dcSAndroid Build Coastguard Worker # https://github.com/bazelbuild/bazel/issues/14914 55*8fb009dcSAndroid Build Coastguard Worker "@platforms//os:windows": [], 56*8fb009dcSAndroid Build Coastguard Worker "//conditions:default": gcc_copts, 57*8fb009dcSAndroid Build Coastguard Worker}) + select({ 58*8fb009dcSAndroid Build Coastguard Worker # This is needed on glibc systems to get rwlock in pthreads, but it should 59*8fb009dcSAndroid Build Coastguard Worker # not be set on Apple platforms or FreeBSD, where it instead disables APIs 60*8fb009dcSAndroid Build Coastguard Worker # we use. 61*8fb009dcSAndroid Build Coastguard Worker # See compat(5), sys/cdefs.h, and https://crbug.com/boringssl/471 62*8fb009dcSAndroid Build Coastguard Worker "@platforms//os:linux": ["-D_XOPEN_SOURCE=700"], 63*8fb009dcSAndroid Build Coastguard Worker # Without WIN32_LEAN_AND_MEAN, <windows.h> pulls in wincrypt.h, which 64*8fb009dcSAndroid Build Coastguard Worker # conflicts with our <openssl/x509.h>. 65*8fb009dcSAndroid Build Coastguard Worker "@platforms//os:windows": ["-DWIN32_LEAN_AND_MEAN", "-utf-8"], 66*8fb009dcSAndroid Build Coastguard Worker "//conditions:default": [], 67*8fb009dcSAndroid Build Coastguard Worker}) 68*8fb009dcSAndroid Build Coastguard Worker 69*8fb009dcSAndroid Build Coastguard Worker# We do not specify the C++ version here because Bazel expects C++ version 70*8fb009dcSAndroid Build Coastguard Worker# to come from the top-level toolchain. The concern is that different C++ 71*8fb009dcSAndroid Build Coastguard Worker# versions may cause ABIs, notably Abseil's, to change. 72*8fb009dcSAndroid Build Coastguard Workerboringssl_copts_cxx = boringssl_copts_common + select({ 73*8fb009dcSAndroid Build Coastguard Worker "@platforms//os:windows": [], 74*8fb009dcSAndroid Build Coastguard Worker "//conditions:default": gcc_copts_cxx, 75*8fb009dcSAndroid Build Coastguard Worker}) 76*8fb009dcSAndroid Build Coastguard Worker 77*8fb009dcSAndroid Build Coastguard Worker# We specify the C version because Bazel projects often do not remember to 78*8fb009dcSAndroid Build Coastguard Worker# specify the C version. We do not expect ABIs to vary by C versions, at least 79*8fb009dcSAndroid Build Coastguard Worker# for our code or the headers we include, so configure the C version inside the 80*8fb009dcSAndroid Build Coastguard Worker# library. If Bazel's C/C++ version handling improves, we may reconsider this. 81*8fb009dcSAndroid Build Coastguard Workerboringssl_copts_c = boringssl_copts_common + select({ 82*8fb009dcSAndroid Build Coastguard Worker "@platforms//os:windows": ["/std:c11"], 83*8fb009dcSAndroid Build Coastguard Worker "//conditions:default": ["-std=c11"] + gcc_copts_c, 84*8fb009dcSAndroid Build Coastguard Worker}) 85*8fb009dcSAndroid Build Coastguard Worker 86*8fb009dcSAndroid Build Coastguard Workerdef handle_mixed_c_cxx( 87*8fb009dcSAndroid Build Coastguard Worker name, 88*8fb009dcSAndroid Build Coastguard Worker copts, 89*8fb009dcSAndroid Build Coastguard Worker deps, 90*8fb009dcSAndroid Build Coastguard Worker internal_hdrs, 91*8fb009dcSAndroid Build Coastguard Worker includes, 92*8fb009dcSAndroid Build Coastguard Worker linkopts, 93*8fb009dcSAndroid Build Coastguard Worker srcs, 94*8fb009dcSAndroid Build Coastguard Worker testonly): 95*8fb009dcSAndroid Build Coastguard Worker """ 96*8fb009dcSAndroid Build Coastguard Worker Works around https://github.com/bazelbuild/bazel/issues/22041. Determines 97*8fb009dcSAndroid Build Coastguard Worker whether a target contains C, C++, or both. If the target is multi-language, 98*8fb009dcSAndroid Build Coastguard Worker the C sources are split into a separate library. Returns a tuple of updated 99*8fb009dcSAndroid Build Coastguard Worker (copts, deps, srcs) to apply. 100*8fb009dcSAndroid Build Coastguard Worker """ 101*8fb009dcSAndroid Build Coastguard Worker has_c, has_cxx = False, False 102*8fb009dcSAndroid Build Coastguard Worker for src in srcs: 103*8fb009dcSAndroid Build Coastguard Worker if src.endswith(".c"): 104*8fb009dcSAndroid Build Coastguard Worker has_c = True 105*8fb009dcSAndroid Build Coastguard Worker elif src.endswith(".cc"): 106*8fb009dcSAndroid Build Coastguard Worker has_cxx = True 107*8fb009dcSAndroid Build Coastguard Worker 108*8fb009dcSAndroid Build Coastguard Worker # If a target has both C and C++, we need to split it in two. 109*8fb009dcSAndroid Build Coastguard Worker if has_c and has_cxx: 110*8fb009dcSAndroid Build Coastguard Worker srcs_c = [src for src in srcs if src.endswith(".c") or src.endswith(".h")] 111*8fb009dcSAndroid Build Coastguard Worker name_c = name + "_c" 112*8fb009dcSAndroid Build Coastguard Worker cc_library( 113*8fb009dcSAndroid Build Coastguard Worker name = name_c, 114*8fb009dcSAndroid Build Coastguard Worker srcs = srcs_c + internal_hdrs, 115*8fb009dcSAndroid Build Coastguard Worker copts = copts + boringssl_copts_c, 116*8fb009dcSAndroid Build Coastguard Worker includes = includes, 117*8fb009dcSAndroid Build Coastguard Worker # This target only exists to be linked into the main library, so 118*8fb009dcSAndroid Build Coastguard Worker # always link it statically. 119*8fb009dcSAndroid Build Coastguard Worker linkstatic = True, 120*8fb009dcSAndroid Build Coastguard Worker linkopts = linkopts, 121*8fb009dcSAndroid Build Coastguard Worker deps = deps, 122*8fb009dcSAndroid Build Coastguard Worker testonly = testonly, 123*8fb009dcSAndroid Build Coastguard Worker ) 124*8fb009dcSAndroid Build Coastguard Worker 125*8fb009dcSAndroid Build Coastguard Worker # Build the remainder as a C++-only target. 126*8fb009dcSAndroid Build Coastguard Worker deps += [":" + name_c] 127*8fb009dcSAndroid Build Coastguard Worker srcs = [src for src in srcs if not src.endswith(".c")] 128*8fb009dcSAndroid Build Coastguard Worker has_c = False 129*8fb009dcSAndroid Build Coastguard Worker 130*8fb009dcSAndroid Build Coastguard Worker if has_c: 131*8fb009dcSAndroid Build Coastguard Worker copts += boringssl_copts_c 132*8fb009dcSAndroid Build Coastguard Worker else: 133*8fb009dcSAndroid Build Coastguard Worker copts += boringssl_copts_cxx 134*8fb009dcSAndroid Build Coastguard Worker 135*8fb009dcSAndroid Build Coastguard Worker return copts, deps, srcs 136*8fb009dcSAndroid Build Coastguard Worker 137*8fb009dcSAndroid Build Coastguard Workerdef handle_asm_srcs(asm_srcs): 138*8fb009dcSAndroid Build Coastguard Worker if not asm_srcs: 139*8fb009dcSAndroid Build Coastguard Worker return [] 140*8fb009dcSAndroid Build Coastguard Worker 141*8fb009dcSAndroid Build Coastguard Worker # By default, the C files will expect assembly files, if any, to be linked 142*8fb009dcSAndroid Build Coastguard Worker # in with the build. This default can be flipped with -DOPENSSL_NO_ASM. If 143*8fb009dcSAndroid Build Coastguard Worker # building in a configuration where we have no assembly optimizations, 144*8fb009dcSAndroid Build Coastguard Worker # -DOPENSSL_NO_ASM has no effect, and either value is fine. 145*8fb009dcSAndroid Build Coastguard Worker # 146*8fb009dcSAndroid Build Coastguard Worker # Like C files, assembly files are wrapped in #ifdef (or NASM equivalent), 147*8fb009dcSAndroid Build Coastguard Worker # so it is safe to include a file for the wrong platform in the build. It 148*8fb009dcSAndroid Build Coastguard Worker # will just output an empty object file. However, we need some platform 149*8fb009dcSAndroid Build Coastguard Worker # selectors to distinguish between gas or NASM syntax. 150*8fb009dcSAndroid Build Coastguard Worker # 151*8fb009dcSAndroid Build Coastguard Worker # For all non-Windows platforms, we use gas assembly syntax and can assume 152*8fb009dcSAndroid Build Coastguard Worker # any GCC-compatible toolchain includes a gas-compatible assembler. 153*8fb009dcSAndroid Build Coastguard Worker # 154*8fb009dcSAndroid Build Coastguard Worker # For Windows, we use NASM on x86 and x86_64 and gas, specifically 155*8fb009dcSAndroid Build Coastguard Worker # clang-assembler, on aarch64. We have not yet added NASM support to this 156*8fb009dcSAndroid Build Coastguard Worker # build, and would need to detect MSVC vs clang-cl for aarch64 so, for now, 157*8fb009dcSAndroid Build Coastguard Worker # we just disable assembly on Windows across the board. 158*8fb009dcSAndroid Build Coastguard Worker # 159*8fb009dcSAndroid Build Coastguard Worker # This select and the corresponding one in boringssl_copts_common must be 160*8fb009dcSAndroid Build Coastguard Worker # kept in sync. 161*8fb009dcSAndroid Build Coastguard Worker # 162*8fb009dcSAndroid Build Coastguard Worker # TODO(https://crbug.com/boringssl/531): Enable assembly for Windows. 163*8fb009dcSAndroid Build Coastguard Worker return select({ 164*8fb009dcSAndroid Build Coastguard Worker "@platforms//os:windows": [], 165*8fb009dcSAndroid Build Coastguard Worker "//conditions:default": asm_srcs, 166*8fb009dcSAndroid Build Coastguard Worker }) 167*8fb009dcSAndroid Build Coastguard Worker 168*8fb009dcSAndroid Build Coastguard Workerdef linkstatic_kwargs(linkstatic): 169*8fb009dcSAndroid Build Coastguard Worker # Although Bazel's documentation says linkstatic defaults to True or False 170*8fb009dcSAndroid Build Coastguard Worker # for the various target types, this is not true. The defaults differ by 171*8fb009dcSAndroid Build Coastguard Worker # platform non-Windows and True on Windows. There is now way to request the 172*8fb009dcSAndroid Build Coastguard Worker # default except to omit the parameter, so we must use kwargs. 173*8fb009dcSAndroid Build Coastguard Worker kwargs = {} 174*8fb009dcSAndroid Build Coastguard Worker if linkstatic != None: 175*8fb009dcSAndroid Build Coastguard Worker kwargs["linkstatic"] = linkstatic 176*8fb009dcSAndroid Build Coastguard Worker return kwargs 177*8fb009dcSAndroid Build Coastguard Worker 178*8fb009dcSAndroid Build Coastguard Workerdef bssl_cc_library( 179*8fb009dcSAndroid Build Coastguard Worker name, 180*8fb009dcSAndroid Build Coastguard Worker asm_srcs = [], 181*8fb009dcSAndroid Build Coastguard Worker copts = [], 182*8fb009dcSAndroid Build Coastguard Worker deps = [], 183*8fb009dcSAndroid Build Coastguard Worker hdrs = [], 184*8fb009dcSAndroid Build Coastguard Worker includes = [], 185*8fb009dcSAndroid Build Coastguard Worker internal_hdrs = [], 186*8fb009dcSAndroid Build Coastguard Worker linkopts = [], 187*8fb009dcSAndroid Build Coastguard Worker linkstatic = None, 188*8fb009dcSAndroid Build Coastguard Worker srcs = [], 189*8fb009dcSAndroid Build Coastguard Worker testonly = False, 190*8fb009dcSAndroid Build Coastguard Worker visibility = []): 191*8fb009dcSAndroid Build Coastguard Worker copts, deps, srcs = handle_mixed_c_cxx( 192*8fb009dcSAndroid Build Coastguard Worker name = name, 193*8fb009dcSAndroid Build Coastguard Worker copts = copts, 194*8fb009dcSAndroid Build Coastguard Worker deps = deps, 195*8fb009dcSAndroid Build Coastguard Worker internal_hdrs = hdrs + internal_hdrs, 196*8fb009dcSAndroid Build Coastguard Worker includes = includes, 197*8fb009dcSAndroid Build Coastguard Worker linkopts = linkopts, 198*8fb009dcSAndroid Build Coastguard Worker srcs = srcs, 199*8fb009dcSAndroid Build Coastguard Worker testonly = testonly, 200*8fb009dcSAndroid Build Coastguard Worker ) 201*8fb009dcSAndroid Build Coastguard Worker 202*8fb009dcSAndroid Build Coastguard Worker # BoringSSL's notion of internal headers are slightly different from 203*8fb009dcSAndroid Build Coastguard Worker # Bazel's. libcrypto's internal headers may be used by libssl, but they 204*8fb009dcSAndroid Build Coastguard Worker # cannot be used outside the library. To express this, we make separate 205*8fb009dcSAndroid Build Coastguard Worker # internal and external targets. This impact's Bazel's layering check. 206*8fb009dcSAndroid Build Coastguard Worker name_internal = name 207*8fb009dcSAndroid Build Coastguard Worker if visibility: 208*8fb009dcSAndroid Build Coastguard Worker name_internal = name + "_internal" 209*8fb009dcSAndroid Build Coastguard Worker 210*8fb009dcSAndroid Build Coastguard Worker cc_library( 211*8fb009dcSAndroid Build Coastguard Worker name = name_internal, 212*8fb009dcSAndroid Build Coastguard Worker srcs = srcs + handle_asm_srcs(asm_srcs), 213*8fb009dcSAndroid Build Coastguard Worker hdrs = hdrs + internal_hdrs, 214*8fb009dcSAndroid Build Coastguard Worker copts = copts, 215*8fb009dcSAndroid Build Coastguard Worker includes = includes, 216*8fb009dcSAndroid Build Coastguard Worker linkopts = linkopts, 217*8fb009dcSAndroid Build Coastguard Worker deps = deps, 218*8fb009dcSAndroid Build Coastguard Worker testonly = testonly, 219*8fb009dcSAndroid Build Coastguard Worker **linkstatic_kwargs(linkstatic) 220*8fb009dcSAndroid Build Coastguard Worker ) 221*8fb009dcSAndroid Build Coastguard Worker 222*8fb009dcSAndroid Build Coastguard Worker if visibility: 223*8fb009dcSAndroid Build Coastguard Worker cc_library( 224*8fb009dcSAndroid Build Coastguard Worker name = name, 225*8fb009dcSAndroid Build Coastguard Worker hdrs = hdrs, 226*8fb009dcSAndroid Build Coastguard Worker deps = [":" + name_internal], 227*8fb009dcSAndroid Build Coastguard Worker visibility = visibility, 228*8fb009dcSAndroid Build Coastguard Worker ) 229*8fb009dcSAndroid Build Coastguard Worker 230*8fb009dcSAndroid Build Coastguard Workerdef bssl_cc_binary( 231*8fb009dcSAndroid Build Coastguard Worker name, 232*8fb009dcSAndroid Build Coastguard Worker srcs = [], 233*8fb009dcSAndroid Build Coastguard Worker asm_srcs = [], 234*8fb009dcSAndroid Build Coastguard Worker copts = [], 235*8fb009dcSAndroid Build Coastguard Worker includes = [], 236*8fb009dcSAndroid Build Coastguard Worker linkstatic = None, 237*8fb009dcSAndroid Build Coastguard Worker linkopts = [], 238*8fb009dcSAndroid Build Coastguard Worker deps = [], 239*8fb009dcSAndroid Build Coastguard Worker testonly = False, 240*8fb009dcSAndroid Build Coastguard Worker visibility = []): 241*8fb009dcSAndroid Build Coastguard Worker copts, deps, srcs = handle_mixed_c_cxx( 242*8fb009dcSAndroid Build Coastguard Worker name = name, 243*8fb009dcSAndroid Build Coastguard Worker copts = copts, 244*8fb009dcSAndroid Build Coastguard Worker deps = deps, 245*8fb009dcSAndroid Build Coastguard Worker internal_hdrs = [], 246*8fb009dcSAndroid Build Coastguard Worker includes = includes, 247*8fb009dcSAndroid Build Coastguard Worker linkopts = linkopts, 248*8fb009dcSAndroid Build Coastguard Worker srcs = srcs, 249*8fb009dcSAndroid Build Coastguard Worker testonly = testonly, 250*8fb009dcSAndroid Build Coastguard Worker ) 251*8fb009dcSAndroid Build Coastguard Worker 252*8fb009dcSAndroid Build Coastguard Worker cc_binary( 253*8fb009dcSAndroid Build Coastguard Worker name = name, 254*8fb009dcSAndroid Build Coastguard Worker srcs = srcs + handle_asm_srcs(asm_srcs), 255*8fb009dcSAndroid Build Coastguard Worker copts = copts, 256*8fb009dcSAndroid Build Coastguard Worker includes = includes, 257*8fb009dcSAndroid Build Coastguard Worker linkopts = linkopts, 258*8fb009dcSAndroid Build Coastguard Worker deps = deps, 259*8fb009dcSAndroid Build Coastguard Worker testonly = testonly, 260*8fb009dcSAndroid Build Coastguard Worker visibility = visibility, 261*8fb009dcSAndroid Build Coastguard Worker **linkstatic_kwargs(linkstatic) 262*8fb009dcSAndroid Build Coastguard Worker ) 263*8fb009dcSAndroid Build Coastguard Worker 264*8fb009dcSAndroid Build Coastguard Workerdef bssl_cc_test( 265*8fb009dcSAndroid Build Coastguard Worker name, 266*8fb009dcSAndroid Build Coastguard Worker srcs = [], 267*8fb009dcSAndroid Build Coastguard Worker asm_srcs = [], 268*8fb009dcSAndroid Build Coastguard Worker data = [], 269*8fb009dcSAndroid Build Coastguard Worker size = "medium", 270*8fb009dcSAndroid Build Coastguard Worker internal_hdrs = [], 271*8fb009dcSAndroid Build Coastguard Worker copts = [], 272*8fb009dcSAndroid Build Coastguard Worker includes = [], 273*8fb009dcSAndroid Build Coastguard Worker linkopts = [], 274*8fb009dcSAndroid Build Coastguard Worker linkstatic = None, 275*8fb009dcSAndroid Build Coastguard Worker deps = [], 276*8fb009dcSAndroid Build Coastguard Worker shard_count = None): 277*8fb009dcSAndroid Build Coastguard Worker copts, deps, srcs = handle_mixed_c_cxx( 278*8fb009dcSAndroid Build Coastguard Worker name = name, 279*8fb009dcSAndroid Build Coastguard Worker copts = copts, 280*8fb009dcSAndroid Build Coastguard Worker deps = deps, 281*8fb009dcSAndroid Build Coastguard Worker internal_hdrs = [], 282*8fb009dcSAndroid Build Coastguard Worker includes = includes, 283*8fb009dcSAndroid Build Coastguard Worker linkopts = linkopts, 284*8fb009dcSAndroid Build Coastguard Worker srcs = srcs, 285*8fb009dcSAndroid Build Coastguard Worker testonly = True, 286*8fb009dcSAndroid Build Coastguard Worker ) 287*8fb009dcSAndroid Build Coastguard Worker 288*8fb009dcSAndroid Build Coastguard Worker cc_test( 289*8fb009dcSAndroid Build Coastguard Worker name = name, 290*8fb009dcSAndroid Build Coastguard Worker data = data, 291*8fb009dcSAndroid Build Coastguard Worker deps = deps, 292*8fb009dcSAndroid Build Coastguard Worker srcs = srcs + handle_asm_srcs(asm_srcs), 293*8fb009dcSAndroid Build Coastguard Worker copts = copts, 294*8fb009dcSAndroid Build Coastguard Worker includes = includes, 295*8fb009dcSAndroid Build Coastguard Worker linkopts = linkopts, 296*8fb009dcSAndroid Build Coastguard Worker shard_count = shard_count, 297*8fb009dcSAndroid Build Coastguard Worker size = size, 298*8fb009dcSAndroid Build Coastguard Worker **linkstatic_kwargs(linkstatic) 299*8fb009dcSAndroid Build Coastguard Worker ) 300