1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2022 The Android Open Source Project 2*7594170eSAndroid Build Coastguard Worker# 3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*7594170eSAndroid Build Coastguard Worker# 7*7594170eSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*7594170eSAndroid Build Coastguard Worker# 9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*7594170eSAndroid Build Coastguard Worker# limitations under the License. 14*7594170eSAndroid Build Coastguard Worker 15*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") 16*7594170eSAndroid Build Coastguard Workerload(":cc_binary.bzl", "cc_binary") 17*7594170eSAndroid Build Coastguard Workerload(":cc_library_common_test.bzl", "target_provides_androidmk_info_test") 18*7594170eSAndroid Build Coastguard Workerload(":cc_library_shared.bzl", "cc_library_shared") 19*7594170eSAndroid Build Coastguard Workerload(":cc_library_static.bzl", "cc_library_static") 20*7594170eSAndroid Build Coastguard Worker 21*7594170eSAndroid Build Coastguard Workerdef strip_test_assert_flags(env, strip_action, strip_flags): 22*7594170eSAndroid Build Coastguard Worker # Extract these flags from strip_action (for example): 23*7594170eSAndroid Build Coastguard Worker # build/soong/scripts/strip.sh --keep-symbols --add-gnu-debuglink -i <in> -o <out> -d <out>.d 24*7594170eSAndroid Build Coastguard Worker # ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ 25*7594170eSAndroid Build Coastguard Worker flag_start_idx = 1 # starts after the strip.sh executable 26*7594170eSAndroid Build Coastguard Worker flag_end_idx = strip_action.argv.index("-i") # end of the flags 27*7594170eSAndroid Build Coastguard Worker asserts.equals( 28*7594170eSAndroid Build Coastguard Worker env, 29*7594170eSAndroid Build Coastguard Worker strip_action.argv[flag_start_idx:flag_end_idx], 30*7594170eSAndroid Build Coastguard Worker strip_flags, 31*7594170eSAndroid Build Coastguard Worker ) 32*7594170eSAndroid Build Coastguard Worker 33*7594170eSAndroid Build Coastguard Workerdef _cc_binary_strip_test(ctx): 34*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 35*7594170eSAndroid Build Coastguard Worker actions = analysistest.target_actions(env) 36*7594170eSAndroid Build Coastguard Worker filtered_actions = [a for a in actions if a.mnemonic == "CcStrip"] 37*7594170eSAndroid Build Coastguard Worker on_target = ctx.target_platform_has_constraint( 38*7594170eSAndroid Build Coastguard Worker ctx.attr._android_constraint[platform_common.ConstraintValueInfo], 39*7594170eSAndroid Build Coastguard Worker ) 40*7594170eSAndroid Build Coastguard Worker if ctx.attr.strip_flags or on_target: 41*7594170eSAndroid Build Coastguard Worker # expected to find strip flags, so look for a CcStrip action. 42*7594170eSAndroid Build Coastguard Worker asserts.true( 43*7594170eSAndroid Build Coastguard Worker env, 44*7594170eSAndroid Build Coastguard Worker len(filtered_actions) == 1, 45*7594170eSAndroid Build Coastguard Worker "expected to find an action with CcStrip mnemonic in %s" % actions, 46*7594170eSAndroid Build Coastguard Worker ) 47*7594170eSAndroid Build Coastguard Worker if ctx.attr.strip_flags or not on_target: 48*7594170eSAndroid Build Coastguard Worker strip_test_assert_flags(env, filtered_actions[0], ctx.attr.strip_flags) 49*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 50*7594170eSAndroid Build Coastguard Worker else: 51*7594170eSAndroid Build Coastguard Worker asserts.true( 52*7594170eSAndroid Build Coastguard Worker env, 53*7594170eSAndroid Build Coastguard Worker len(filtered_actions) == 0, 54*7594170eSAndroid Build Coastguard Worker "expected to not find an action with CcStrip mnemonic in %s" % actions, 55*7594170eSAndroid Build Coastguard Worker ) 56*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 57*7594170eSAndroid Build Coastguard Worker 58*7594170eSAndroid Build Coastguard Workercc_binary_strip_test = analysistest.make( 59*7594170eSAndroid Build Coastguard Worker _cc_binary_strip_test, 60*7594170eSAndroid Build Coastguard Worker attrs = { 61*7594170eSAndroid Build Coastguard Worker "strip_flags": attr.string_list(), 62*7594170eSAndroid Build Coastguard Worker "_android_constraint": attr.label(default = Label("//build/bazel_common_rules/platforms/os:android")), 63*7594170eSAndroid Build Coastguard Worker }, 64*7594170eSAndroid Build Coastguard Worker) 65*7594170eSAndroid Build Coastguard Worker 66*7594170eSAndroid Build Coastguard Workerdef _cc_binary_strip_default(): 67*7594170eSAndroid Build Coastguard Worker name = "cc_binary_strip_default" 68*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 69*7594170eSAndroid Build Coastguard Worker 70*7594170eSAndroid Build Coastguard Worker cc_binary( 71*7594170eSAndroid Build Coastguard Worker name = name, 72*7594170eSAndroid Build Coastguard Worker srcs = ["main.cc"], 73*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 74*7594170eSAndroid Build Coastguard Worker ) 75*7594170eSAndroid Build Coastguard Worker 76*7594170eSAndroid Build Coastguard Worker cc_binary_strip_test( 77*7594170eSAndroid Build Coastguard Worker name = test_name, 78*7594170eSAndroid Build Coastguard Worker target_under_test = name, 79*7594170eSAndroid Build Coastguard Worker strip_flags = [], 80*7594170eSAndroid Build Coastguard Worker ) 81*7594170eSAndroid Build Coastguard Worker 82*7594170eSAndroid Build Coastguard Worker return test_name 83*7594170eSAndroid Build Coastguard Worker 84*7594170eSAndroid Build Coastguard Workerdef _cc_binary_strip_keep_symbols(): 85*7594170eSAndroid Build Coastguard Worker name = "cc_binary_strip_keep_symbols" 86*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 87*7594170eSAndroid Build Coastguard Worker 88*7594170eSAndroid Build Coastguard Worker cc_binary( 89*7594170eSAndroid Build Coastguard Worker name = name, 90*7594170eSAndroid Build Coastguard Worker srcs = ["main.cc"], 91*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 92*7594170eSAndroid Build Coastguard Worker strip = {"keep_symbols": True}, 93*7594170eSAndroid Build Coastguard Worker ) 94*7594170eSAndroid Build Coastguard Worker 95*7594170eSAndroid Build Coastguard Worker cc_binary_strip_test( 96*7594170eSAndroid Build Coastguard Worker name = test_name, 97*7594170eSAndroid Build Coastguard Worker target_under_test = name, 98*7594170eSAndroid Build Coastguard Worker strip_flags = [ 99*7594170eSAndroid Build Coastguard Worker "--keep-symbols", 100*7594170eSAndroid Build Coastguard Worker "--add-gnu-debuglink", 101*7594170eSAndroid Build Coastguard Worker ], 102*7594170eSAndroid Build Coastguard Worker ) 103*7594170eSAndroid Build Coastguard Worker 104*7594170eSAndroid Build Coastguard Worker return test_name 105*7594170eSAndroid Build Coastguard Worker 106*7594170eSAndroid Build Coastguard Workerdef _cc_binary_strip_keep_symbols_and_debug_frame(): 107*7594170eSAndroid Build Coastguard Worker name = "cc_binary_strip_keep_symbols_and_debug_frame" 108*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 109*7594170eSAndroid Build Coastguard Worker 110*7594170eSAndroid Build Coastguard Worker cc_binary( 111*7594170eSAndroid Build Coastguard Worker name = name, 112*7594170eSAndroid Build Coastguard Worker srcs = ["main.cc"], 113*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 114*7594170eSAndroid Build Coastguard Worker strip = {"keep_symbols_and_debug_frame": True}, 115*7594170eSAndroid Build Coastguard Worker ) 116*7594170eSAndroid Build Coastguard Worker 117*7594170eSAndroid Build Coastguard Worker cc_binary_strip_test( 118*7594170eSAndroid Build Coastguard Worker name = test_name, 119*7594170eSAndroid Build Coastguard Worker target_under_test = name, 120*7594170eSAndroid Build Coastguard Worker strip_flags = [ 121*7594170eSAndroid Build Coastguard Worker "--keep-symbols-and-debug-frame", 122*7594170eSAndroid Build Coastguard Worker "--add-gnu-debuglink", 123*7594170eSAndroid Build Coastguard Worker ], 124*7594170eSAndroid Build Coastguard Worker ) 125*7594170eSAndroid Build Coastguard Worker 126*7594170eSAndroid Build Coastguard Worker return test_name 127*7594170eSAndroid Build Coastguard Worker 128*7594170eSAndroid Build Coastguard Workerdef _cc_binary_strip_keep_symbols_list(): 129*7594170eSAndroid Build Coastguard Worker name = "cc_binary_strip_keep_symbols_list" 130*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 131*7594170eSAndroid Build Coastguard Worker 132*7594170eSAndroid Build Coastguard Worker cc_binary( 133*7594170eSAndroid Build Coastguard Worker name = name, 134*7594170eSAndroid Build Coastguard Worker srcs = ["main.cc"], 135*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 136*7594170eSAndroid Build Coastguard Worker strip = {"keep_symbols_list": ["foo", "bar"]}, 137*7594170eSAndroid Build Coastguard Worker ) 138*7594170eSAndroid Build Coastguard Worker 139*7594170eSAndroid Build Coastguard Worker cc_binary_strip_test( 140*7594170eSAndroid Build Coastguard Worker name = test_name, 141*7594170eSAndroid Build Coastguard Worker target_under_test = name, 142*7594170eSAndroid Build Coastguard Worker strip_flags = [ 143*7594170eSAndroid Build Coastguard Worker "-kfoo,bar", 144*7594170eSAndroid Build Coastguard Worker "--add-gnu-debuglink", 145*7594170eSAndroid Build Coastguard Worker ], 146*7594170eSAndroid Build Coastguard Worker ) 147*7594170eSAndroid Build Coastguard Worker 148*7594170eSAndroid Build Coastguard Worker return test_name 149*7594170eSAndroid Build Coastguard Worker 150*7594170eSAndroid Build Coastguard Workerdef _cc_binary_strip_all(): 151*7594170eSAndroid Build Coastguard Worker name = "cc_binary_strip_all" 152*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 153*7594170eSAndroid Build Coastguard Worker 154*7594170eSAndroid Build Coastguard Worker cc_binary( 155*7594170eSAndroid Build Coastguard Worker name = name, 156*7594170eSAndroid Build Coastguard Worker srcs = ["main.cc"], 157*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 158*7594170eSAndroid Build Coastguard Worker strip = {"all": True}, 159*7594170eSAndroid Build Coastguard Worker ) 160*7594170eSAndroid Build Coastguard Worker 161*7594170eSAndroid Build Coastguard Worker cc_binary_strip_test( 162*7594170eSAndroid Build Coastguard Worker name = test_name, 163*7594170eSAndroid Build Coastguard Worker target_under_test = name, 164*7594170eSAndroid Build Coastguard Worker strip_flags = [ 165*7594170eSAndroid Build Coastguard Worker "--add-gnu-debuglink", 166*7594170eSAndroid Build Coastguard Worker ], 167*7594170eSAndroid Build Coastguard Worker ) 168*7594170eSAndroid Build Coastguard Worker 169*7594170eSAndroid Build Coastguard Worker return test_name 170*7594170eSAndroid Build Coastguard Worker 171*7594170eSAndroid Build Coastguard Workerdef _cc_binary_suffix_test_impl(ctx): 172*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 173*7594170eSAndroid Build Coastguard Worker target = analysistest.target_under_test(env) 174*7594170eSAndroid Build Coastguard Worker info = target[DefaultInfo] 175*7594170eSAndroid Build Coastguard Worker suffix = ctx.attr.suffix 176*7594170eSAndroid Build Coastguard Worker 177*7594170eSAndroid Build Coastguard Worker outputs = info.files.to_list() 178*7594170eSAndroid Build Coastguard Worker asserts.true( 179*7594170eSAndroid Build Coastguard Worker env, 180*7594170eSAndroid Build Coastguard Worker len(outputs) == 1, 181*7594170eSAndroid Build Coastguard Worker "Expected 1 output file; got %s" % outputs, 182*7594170eSAndroid Build Coastguard Worker ) 183*7594170eSAndroid Build Coastguard Worker out = outputs[0] 184*7594170eSAndroid Build Coastguard Worker asserts.true( 185*7594170eSAndroid Build Coastguard Worker env, 186*7594170eSAndroid Build Coastguard Worker out.path.endswith(suffix), 187*7594170eSAndroid Build Coastguard Worker "Expected output filename to end in `%s`; it was instead %s" % (suffix, out), 188*7594170eSAndroid Build Coastguard Worker ) 189*7594170eSAndroid Build Coastguard Worker 190*7594170eSAndroid Build Coastguard Worker if ctx.attr.stem: 191*7594170eSAndroid Build Coastguard Worker asserts.equals( 192*7594170eSAndroid Build Coastguard Worker env, 193*7594170eSAndroid Build Coastguard Worker out.basename, 194*7594170eSAndroid Build Coastguard Worker ctx.attr.stem, 195*7594170eSAndroid Build Coastguard Worker "Expected output filename %s to be equal to `stem` attribute %s" % (out, ctx.attr.stem), 196*7594170eSAndroid Build Coastguard Worker ) 197*7594170eSAndroid Build Coastguard Worker 198*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 199*7594170eSAndroid Build Coastguard Worker 200*7594170eSAndroid Build Coastguard Workercc_binary_suffix_test = analysistest.make( 201*7594170eSAndroid Build Coastguard Worker _cc_binary_suffix_test_impl, 202*7594170eSAndroid Build Coastguard Worker attrs = { 203*7594170eSAndroid Build Coastguard Worker "stem": attr.string(), 204*7594170eSAndroid Build Coastguard Worker "suffix": attr.string(), 205*7594170eSAndroid Build Coastguard Worker }, 206*7594170eSAndroid Build Coastguard Worker) 207*7594170eSAndroid Build Coastguard Worker 208*7594170eSAndroid Build Coastguard Workerdef _cc_binary_suffix(): 209*7594170eSAndroid Build Coastguard Worker name = "cc_binary_suffix" 210*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 211*7594170eSAndroid Build Coastguard Worker suffix = "-suf" 212*7594170eSAndroid Build Coastguard Worker 213*7594170eSAndroid Build Coastguard Worker cc_binary( 214*7594170eSAndroid Build Coastguard Worker name, 215*7594170eSAndroid Build Coastguard Worker srcs = ["src.cc"], 216*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 217*7594170eSAndroid Build Coastguard Worker suffix = suffix, 218*7594170eSAndroid Build Coastguard Worker ) 219*7594170eSAndroid Build Coastguard Worker cc_binary_suffix_test( 220*7594170eSAndroid Build Coastguard Worker name = test_name, 221*7594170eSAndroid Build Coastguard Worker target_under_test = name, 222*7594170eSAndroid Build Coastguard Worker suffix = suffix, 223*7594170eSAndroid Build Coastguard Worker ) 224*7594170eSAndroid Build Coastguard Worker return test_name 225*7594170eSAndroid Build Coastguard Worker 226*7594170eSAndroid Build Coastguard Workerdef _cc_binary_empty_suffix(): 227*7594170eSAndroid Build Coastguard Worker name = "cc_binary_empty_suffix" 228*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 229*7594170eSAndroid Build Coastguard Worker 230*7594170eSAndroid Build Coastguard Worker cc_binary( 231*7594170eSAndroid Build Coastguard Worker name, 232*7594170eSAndroid Build Coastguard Worker srcs = ["src.cc"], 233*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 234*7594170eSAndroid Build Coastguard Worker ) 235*7594170eSAndroid Build Coastguard Worker cc_binary_suffix_test( 236*7594170eSAndroid Build Coastguard Worker name = test_name, 237*7594170eSAndroid Build Coastguard Worker target_under_test = name, 238*7594170eSAndroid Build Coastguard Worker ) 239*7594170eSAndroid Build Coastguard Worker return test_name 240*7594170eSAndroid Build Coastguard Worker 241*7594170eSAndroid Build Coastguard Workerdef _cc_binary_with_stem(): 242*7594170eSAndroid Build Coastguard Worker name = "cc_binary_with_stem" 243*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 244*7594170eSAndroid Build Coastguard Worker 245*7594170eSAndroid Build Coastguard Worker cc_binary( 246*7594170eSAndroid Build Coastguard Worker name, 247*7594170eSAndroid Build Coastguard Worker srcs = ["src.cc"], 248*7594170eSAndroid Build Coastguard Worker stem = "bar", 249*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 250*7594170eSAndroid Build Coastguard Worker ) 251*7594170eSAndroid Build Coastguard Worker cc_binary_suffix_test( 252*7594170eSAndroid Build Coastguard Worker name = test_name, 253*7594170eSAndroid Build Coastguard Worker stem = "bar", 254*7594170eSAndroid Build Coastguard Worker target_under_test = name, 255*7594170eSAndroid Build Coastguard Worker ) 256*7594170eSAndroid Build Coastguard Worker return test_name 257*7594170eSAndroid Build Coastguard Worker 258*7594170eSAndroid Build Coastguard Workerdef _cc_binary_provides_androidmk_info(): 259*7594170eSAndroid Build Coastguard Worker name = "cc_binary_provides_androidmk_info" 260*7594170eSAndroid Build Coastguard Worker dep_name = name + "_static_dep" 261*7594170eSAndroid Build Coastguard Worker whole_archive_dep_name = name + "_whole_archive_dep" 262*7594170eSAndroid Build Coastguard Worker dynamic_dep_name = name + "_dynamic_dep" 263*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 264*7594170eSAndroid Build Coastguard Worker 265*7594170eSAndroid Build Coastguard Worker cc_library_static( 266*7594170eSAndroid Build Coastguard Worker name = dep_name, 267*7594170eSAndroid Build Coastguard Worker srcs = ["foo.c"], 268*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 269*7594170eSAndroid Build Coastguard Worker ) 270*7594170eSAndroid Build Coastguard Worker cc_library_static( 271*7594170eSAndroid Build Coastguard Worker name = whole_archive_dep_name, 272*7594170eSAndroid Build Coastguard Worker srcs = ["foo.c"], 273*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 274*7594170eSAndroid Build Coastguard Worker ) 275*7594170eSAndroid Build Coastguard Worker cc_library_shared( 276*7594170eSAndroid Build Coastguard Worker name = dynamic_dep_name, 277*7594170eSAndroid Build Coastguard Worker srcs = ["foo.c"], 278*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 279*7594170eSAndroid Build Coastguard Worker ) 280*7594170eSAndroid Build Coastguard Worker cc_binary( 281*7594170eSAndroid Build Coastguard Worker name = name, 282*7594170eSAndroid Build Coastguard Worker srcs = ["foo.cc"], 283*7594170eSAndroid Build Coastguard Worker deps = [dep_name], 284*7594170eSAndroid Build Coastguard Worker whole_archive_deps = [whole_archive_dep_name], 285*7594170eSAndroid Build Coastguard Worker dynamic_deps = [dynamic_dep_name], 286*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 287*7594170eSAndroid Build Coastguard Worker ) 288*7594170eSAndroid Build Coastguard Worker android_test_name = test_name + "_android" 289*7594170eSAndroid Build Coastguard Worker linux_test_name = test_name + "_linux" 290*7594170eSAndroid Build Coastguard Worker target_provides_androidmk_info_test( 291*7594170eSAndroid Build Coastguard Worker name = android_test_name, 292*7594170eSAndroid Build Coastguard Worker target_under_test = name, 293*7594170eSAndroid Build Coastguard Worker expected_static_libs = [dep_name, "libc++demangle", "libunwind"], 294*7594170eSAndroid Build Coastguard Worker expected_whole_static_libs = [whole_archive_dep_name], 295*7594170eSAndroid Build Coastguard Worker expected_shared_libs = [dynamic_dep_name, "libc++", "libc_stub_libs-current", "libdl_stub_libs-current", "libm_stub_libs-current"], 296*7594170eSAndroid Build Coastguard Worker target_compatible_with = ["//build/bazel_common_rules/platforms/os:android"], 297*7594170eSAndroid Build Coastguard Worker ) 298*7594170eSAndroid Build Coastguard Worker target_provides_androidmk_info_test( 299*7594170eSAndroid Build Coastguard Worker name = linux_test_name, 300*7594170eSAndroid Build Coastguard Worker target_under_test = name, 301*7594170eSAndroid Build Coastguard Worker expected_static_libs = [dep_name], 302*7594170eSAndroid Build Coastguard Worker expected_whole_static_libs = [whole_archive_dep_name], 303*7594170eSAndroid Build Coastguard Worker expected_shared_libs = [dynamic_dep_name, "libc++"], 304*7594170eSAndroid Build Coastguard Worker target_compatible_with = ["//build/bazel_common_rules/platforms/os:linux"], 305*7594170eSAndroid Build Coastguard Worker ) 306*7594170eSAndroid Build Coastguard Worker return [ 307*7594170eSAndroid Build Coastguard Worker android_test_name, 308*7594170eSAndroid Build Coastguard Worker linux_test_name, 309*7594170eSAndroid Build Coastguard Worker ] 310*7594170eSAndroid Build Coastguard Worker 311*7594170eSAndroid Build Coastguard Workerdef _cc_bad_linkopts_test_impl(ctx): 312*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 313*7594170eSAndroid Build Coastguard Worker if ctx.target_platform_has_constraint(ctx.attr._android_constraint[platform_common.ConstraintValueInfo]): 314*7594170eSAndroid Build Coastguard Worker asserts.expect_failure(env, "Library requested via -l is not supported for device builds. Use implementation_deps instead.") 315*7594170eSAndroid Build Coastguard Worker else: 316*7594170eSAndroid Build Coastguard Worker asserts.expect_failure(env, "Host library(s) requested via -l is not available in the toolchain.") 317*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 318*7594170eSAndroid Build Coastguard Worker 319*7594170eSAndroid Build Coastguard Workercc_bad_linkopts_test = analysistest.make( 320*7594170eSAndroid Build Coastguard Worker _cc_bad_linkopts_test_impl, 321*7594170eSAndroid Build Coastguard Worker expect_failure = True, 322*7594170eSAndroid Build Coastguard Worker attrs = { 323*7594170eSAndroid Build Coastguard Worker "_android_constraint": attr.label( 324*7594170eSAndroid Build Coastguard Worker default = Label("//build/bazel_common_rules/platforms/os:android"), 325*7594170eSAndroid Build Coastguard Worker ), 326*7594170eSAndroid Build Coastguard Worker }, 327*7594170eSAndroid Build Coastguard Worker) 328*7594170eSAndroid Build Coastguard Worker 329*7594170eSAndroid Build Coastguard Worker# Test that an error is raised if a user requests a library that is not available in the toolchain. 330*7594170eSAndroid Build Coastguard Workerdef _cc_binary_bad_linkopts(): 331*7594170eSAndroid Build Coastguard Worker subject_name = "cc_binary_bad_linkopts" 332*7594170eSAndroid Build Coastguard Worker test_name = subject_name + "_test" 333*7594170eSAndroid Build Coastguard Worker 334*7594170eSAndroid Build Coastguard Worker cc_binary( 335*7594170eSAndroid Build Coastguard Worker name = subject_name, 336*7594170eSAndroid Build Coastguard Worker linkopts = ["-lunknown"], 337*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 338*7594170eSAndroid Build Coastguard Worker ) 339*7594170eSAndroid Build Coastguard Worker cc_bad_linkopts_test( 340*7594170eSAndroid Build Coastguard Worker name = test_name, 341*7594170eSAndroid Build Coastguard Worker target_under_test = subject_name, 342*7594170eSAndroid Build Coastguard Worker ) 343*7594170eSAndroid Build Coastguard Worker return test_name 344*7594170eSAndroid Build Coastguard Worker 345*7594170eSAndroid Build Coastguard Workerdef cc_binary_test_suite(name): 346*7594170eSAndroid Build Coastguard Worker native.test_suite( 347*7594170eSAndroid Build Coastguard Worker name = name, 348*7594170eSAndroid Build Coastguard Worker tests = [ 349*7594170eSAndroid Build Coastguard Worker _cc_binary_strip_default(), 350*7594170eSAndroid Build Coastguard Worker _cc_binary_strip_keep_symbols(), 351*7594170eSAndroid Build Coastguard Worker _cc_binary_strip_keep_symbols_and_debug_frame(), 352*7594170eSAndroid Build Coastguard Worker _cc_binary_strip_keep_symbols_list(), 353*7594170eSAndroid Build Coastguard Worker _cc_binary_strip_all(), 354*7594170eSAndroid Build Coastguard Worker _cc_binary_suffix(), 355*7594170eSAndroid Build Coastguard Worker _cc_binary_empty_suffix(), 356*7594170eSAndroid Build Coastguard Worker _cc_binary_with_stem(), 357*7594170eSAndroid Build Coastguard Worker _cc_binary_bad_linkopts(), 358*7594170eSAndroid Build Coastguard Worker ] + _cc_binary_provides_androidmk_info(), 359*7594170eSAndroid Build Coastguard Worker ) 360