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:paths.bzl", "paths") 16*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:sets.bzl", "sets") 17*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") 18*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_library_shared.bzl", "cc_library_shared") 19*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_library_static.bzl", "cc_library_static") 20*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/test_common:args.bzl", "get_arg_value", "get_arg_values") 21*7594170eSAndroid Build Coastguard Workerload(":abi_dump.bzl", "abi_dump", "find_abi_config") 22*7594170eSAndroid Build Coastguard Worker 23*7594170eSAndroid Build Coastguard WorkerABI_LINKER = "prebuilts/clang-tools/linux-x86/bin/header-abi-linker" 24*7594170eSAndroid Build Coastguard WorkerABI_DIFF = "prebuilts/clang-tools/linux-x86/bin/header-abi-diff" 25*7594170eSAndroid Build Coastguard Worker 26*7594170eSAndroid Build Coastguard Worker# cxa_demangle.cpp is added as part of the stl in cc_library_shared, so it's dump 27*7594170eSAndroid Build Coastguard Worker# file is always created. 28*7594170eSAndroid Build Coastguard WorkerCXA_DEMANGLE = "external/libcxxabi/external/libcxxabi/src/libc++demangle.cxa_demangle.cpp.sdump" 29*7594170eSAndroid Build Coastguard WorkerREF_DUMPS_HOME = "build/bazel/rules/abi/abi-dumps" 30*7594170eSAndroid Build Coastguard WorkerARCH = "x86_64" 31*7594170eSAndroid Build Coastguard WorkerBITNESS = 64 32*7594170eSAndroid Build Coastguard WorkerCONFIG_SETTING_COVERAGE = { 33*7594170eSAndroid Build Coastguard Worker "//command_line_option:collect_code_coverage": True, 34*7594170eSAndroid Build Coastguard Worker} 35*7594170eSAndroid Build Coastguard WorkerCONFIG_SETTING_SKIP_ABI_CHECK = { 36*7594170eSAndroid Build Coastguard Worker "@//build/bazel/flags/cc/abi:skip_abi_checks": True, 37*7594170eSAndroid Build Coastguard Worker} 38*7594170eSAndroid Build Coastguard WorkerCONFIG_SETTING_IN_APEX = { 39*7594170eSAndroid Build Coastguard Worker "@//build/bazel/rules/apex:within_apex": True, 40*7594170eSAndroid Build Coastguard Worker} 41*7594170eSAndroid Build Coastguard Worker 42*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_test_impl(ctx): 43*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 44*7594170eSAndroid Build Coastguard Worker bin_home = analysistest.target_bin_dir_path(env) 45*7594170eSAndroid Build Coastguard Worker bazel_out_base = paths.join(bin_home, ctx.label.package) 46*7594170eSAndroid Build Coastguard Worker 47*7594170eSAndroid Build Coastguard Worker actions = analysistest.target_actions(env) 48*7594170eSAndroid Build Coastguard Worker link_actions = [a for a in actions if a.mnemonic == "AbiLink"] 49*7594170eSAndroid Build Coastguard Worker 50*7594170eSAndroid Build Coastguard Worker asserts.true( 51*7594170eSAndroid Build Coastguard Worker env, 52*7594170eSAndroid Build Coastguard Worker len(link_actions) == 1, 53*7594170eSAndroid Build Coastguard Worker "Abi link action not found: %s" % link_actions, 54*7594170eSAndroid Build Coastguard Worker ) 55*7594170eSAndroid Build Coastguard Worker 56*7594170eSAndroid Build Coastguard Worker action = link_actions[0] 57*7594170eSAndroid Build Coastguard Worker 58*7594170eSAndroid Build Coastguard Worker output_lib_dir = ctx.attr.lib_name + "_stripped" 59*7594170eSAndroid Build Coastguard Worker stripped_so = paths.join(bazel_out_base, output_lib_dir, "lib" + output_lib_dir + ".so") 60*7594170eSAndroid Build Coastguard Worker symbol_file = paths.join(ctx.label.package, ctx.attr.symbol_file) 61*7594170eSAndroid Build Coastguard Worker asserts.set_equals( 62*7594170eSAndroid Build Coastguard Worker env, 63*7594170eSAndroid Build Coastguard Worker expected = sets.make( 64*7594170eSAndroid Build Coastguard Worker [paths.join(bazel_out_base, ctx.label.package, file + ".sdump") for file in ctx.attr.dumps] + [ 65*7594170eSAndroid Build Coastguard Worker ABI_LINKER, 66*7594170eSAndroid Build Coastguard Worker paths.join(bin_home, CXA_DEMANGLE), 67*7594170eSAndroid Build Coastguard Worker stripped_so, 68*7594170eSAndroid Build Coastguard Worker symbol_file, 69*7594170eSAndroid Build Coastguard Worker ], 70*7594170eSAndroid Build Coastguard Worker ), 71*7594170eSAndroid Build Coastguard Worker actual = sets.make([ 72*7594170eSAndroid Build Coastguard Worker file.path 73*7594170eSAndroid Build Coastguard Worker for file in action.inputs.to_list() 74*7594170eSAndroid Build Coastguard Worker ]), 75*7594170eSAndroid Build Coastguard Worker ) 76*7594170eSAndroid Build Coastguard Worker 77*7594170eSAndroid Build Coastguard Worker lsdump_file = paths.join(bazel_out_base, ctx.attr.lib_name + ".so.lsdump") 78*7594170eSAndroid Build Coastguard Worker asserts.set_equals( 79*7594170eSAndroid Build Coastguard Worker env, 80*7594170eSAndroid Build Coastguard Worker expected = sets.make([lsdump_file]), 81*7594170eSAndroid Build Coastguard Worker actual = sets.make([ 82*7594170eSAndroid Build Coastguard Worker file.path 83*7594170eSAndroid Build Coastguard Worker for file in action.outputs.to_list() 84*7594170eSAndroid Build Coastguard Worker ]), 85*7594170eSAndroid Build Coastguard Worker ) 86*7594170eSAndroid Build Coastguard Worker 87*7594170eSAndroid Build Coastguard Worker argv = action.argv 88*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "--root-dir", ".") 89*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-o", lsdump_file) 90*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-so", stripped_so) 91*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-arch", ARCH) 92*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-v", symbol_file) 93*7594170eSAndroid Build Coastguard Worker _test_arg_set_multi_values_correctly(env, argv, "--exclude-symbol-version", ctx.attr.exclude_symbol_versions) 94*7594170eSAndroid Build Coastguard Worker _test_arg_set_multi_values_correctly(env, argv, "--exclude-symbol-tag", ctx.attr.exclude_symbol_tags) 95*7594170eSAndroid Build Coastguard Worker _test_arg_set_multi_values_correctly( 96*7594170eSAndroid Build Coastguard Worker env, 97*7594170eSAndroid Build Coastguard Worker argv, 98*7594170eSAndroid Build Coastguard Worker "-I", 99*7594170eSAndroid Build Coastguard Worker [paths.join(bazel_out_base, file) for file in ctx.attr.export_includes] + 100*7594170eSAndroid Build Coastguard Worker [paths.join(ctx.label.package, file) for file in ctx.attr.export_includes] + 101*7594170eSAndroid Build Coastguard Worker ctx.attr.export_absolute_includes + 102*7594170eSAndroid Build Coastguard Worker [paths.join(bin_home, file) for file in ctx.attr.export_absolute_includes], 103*7594170eSAndroid Build Coastguard Worker ) 104*7594170eSAndroid Build Coastguard Worker 105*7594170eSAndroid Build Coastguard Worker sdump_files = [] 106*7594170eSAndroid Build Coastguard Worker args = " ".join(argv).split(" ") 107*7594170eSAndroid Build Coastguard Worker args_len = len(args) 108*7594170eSAndroid Build Coastguard Worker 109*7594170eSAndroid Build Coastguard Worker # The .sdump files are at the end of the args, the abi linker binary is always at index 0. 110*7594170eSAndroid Build Coastguard Worker for i in reversed(range(args_len)): 111*7594170eSAndroid Build Coastguard Worker if ".sdump" in args[i]: 112*7594170eSAndroid Build Coastguard Worker sdump_files.append(args[i]) 113*7594170eSAndroid Build Coastguard Worker else: 114*7594170eSAndroid Build Coastguard Worker break 115*7594170eSAndroid Build Coastguard Worker 116*7594170eSAndroid Build Coastguard Worker asserts.set_equals( 117*7594170eSAndroid Build Coastguard Worker env, 118*7594170eSAndroid Build Coastguard Worker expected = sets.make( 119*7594170eSAndroid Build Coastguard Worker [paths.join(bazel_out_base, ctx.label.package, file + ".sdump") for file in ctx.attr.dumps] + [ 120*7594170eSAndroid Build Coastguard Worker paths.join(bin_home, CXA_DEMANGLE), 121*7594170eSAndroid Build Coastguard Worker ], 122*7594170eSAndroid Build Coastguard Worker ), 123*7594170eSAndroid Build Coastguard Worker actual = sets.make(sdump_files), 124*7594170eSAndroid Build Coastguard Worker ) 125*7594170eSAndroid Build Coastguard Worker 126*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 127*7594170eSAndroid Build Coastguard Worker 128*7594170eSAndroid Build Coastguard Worker__abi_linker_action_test = analysistest.make( 129*7594170eSAndroid Build Coastguard Worker impl = _abi_linker_action_test_impl, 130*7594170eSAndroid Build Coastguard Worker attrs = { 131*7594170eSAndroid Build Coastguard Worker "dumps": attr.string_list(), 132*7594170eSAndroid Build Coastguard Worker "lib_name": attr.string(), 133*7594170eSAndroid Build Coastguard Worker "symbol_file": attr.string(), 134*7594170eSAndroid Build Coastguard Worker "exclude_symbol_versions": attr.string_list(), 135*7594170eSAndroid Build Coastguard Worker "exclude_symbol_tags": attr.string_list(), 136*7594170eSAndroid Build Coastguard Worker "export_includes": attr.string_list(), 137*7594170eSAndroid Build Coastguard Worker "export_absolute_includes": attr.string_list(), 138*7594170eSAndroid Build Coastguard Worker "_platform_utils": attr.label(default = Label("//build/bazel/platforms:platform_utils")), 139*7594170eSAndroid Build Coastguard Worker }, 140*7594170eSAndroid Build Coastguard Worker) 141*7594170eSAndroid Build Coastguard Worker 142*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_test(**kwargs): 143*7594170eSAndroid Build Coastguard Worker __abi_linker_action_test( 144*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 145*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:x86_64", 146*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:android", 147*7594170eSAndroid Build Coastguard Worker ], 148*7594170eSAndroid Build Coastguard Worker **kwargs 149*7594170eSAndroid Build Coastguard Worker ) 150*7594170eSAndroid Build Coastguard Worker 151*7594170eSAndroid Build Coastguard Workerdef _test_abi_linker_action(): 152*7594170eSAndroid Build Coastguard Worker name = "abi_linker_action" 153*7594170eSAndroid Build Coastguard Worker static_dep_a = name + "_static_dep_a" 154*7594170eSAndroid Build Coastguard Worker static_dep_b = name + "_static_dep_b" 155*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 156*7594170eSAndroid Build Coastguard Worker 157*7594170eSAndroid Build Coastguard Worker cc_library_static( 158*7594170eSAndroid Build Coastguard Worker name = static_dep_a, 159*7594170eSAndroid Build Coastguard Worker srcs = ["static_a.cpp"], 160*7594170eSAndroid Build Coastguard Worker srcs_c = ["static_a.c"], 161*7594170eSAndroid Build Coastguard Worker export_includes = ["export_includes_static_a"], 162*7594170eSAndroid Build Coastguard Worker export_absolute_includes = ["export_absolute_includes_static_a"], 163*7594170eSAndroid Build Coastguard Worker export_system_includes = ["export_system_includes_static_a"], 164*7594170eSAndroid Build Coastguard Worker local_includes = ["local_includes_static_a"], 165*7594170eSAndroid Build Coastguard Worker absolute_includes = ["absolute_includes_static_a"], 166*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 167*7594170eSAndroid Build Coastguard Worker ) 168*7594170eSAndroid Build Coastguard Worker 169*7594170eSAndroid Build Coastguard Worker cc_library_static( 170*7594170eSAndroid Build Coastguard Worker name = static_dep_b, 171*7594170eSAndroid Build Coastguard Worker srcs = ["static_b.cpp"], 172*7594170eSAndroid Build Coastguard Worker srcs_c = ["static_b.c"], 173*7594170eSAndroid Build Coastguard Worker deps = [":" + static_dep_a], 174*7594170eSAndroid Build Coastguard Worker export_includes = ["export_includes_static_b"], 175*7594170eSAndroid Build Coastguard Worker export_absolute_includes = ["export_absolute_includes_static_b"], 176*7594170eSAndroid Build Coastguard Worker export_system_includes = ["export_system_includes_static_b"], 177*7594170eSAndroid Build Coastguard Worker local_includes = ["local_includes_static_b"], 178*7594170eSAndroid Build Coastguard Worker absolute_includes = ["absolute_includes_static_b"], 179*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 180*7594170eSAndroid Build Coastguard Worker ) 181*7594170eSAndroid Build Coastguard Worker 182*7594170eSAndroid Build Coastguard Worker symbol_file = "shared_a.map.txt" 183*7594170eSAndroid Build Coastguard Worker exclude_symbol_versions = ["30", "31"] 184*7594170eSAndroid Build Coastguard Worker exclude_symbol_tags = ["func_1", "func_2"] 185*7594170eSAndroid Build Coastguard Worker 186*7594170eSAndroid Build Coastguard Worker cc_library_shared( 187*7594170eSAndroid Build Coastguard Worker name = name, 188*7594170eSAndroid Build Coastguard Worker srcs = ["shared.cpp"], 189*7594170eSAndroid Build Coastguard Worker srcs_c = ["shared.c"], 190*7594170eSAndroid Build Coastguard Worker deps = [":" + static_dep_b], 191*7594170eSAndroid Build Coastguard Worker export_includes = ["export_includes_shared"], 192*7594170eSAndroid Build Coastguard Worker export_absolute_includes = ["export_absolute_includes_shared"], 193*7594170eSAndroid Build Coastguard Worker export_system_includes = ["export_system_includes_shared"], 194*7594170eSAndroid Build Coastguard Worker local_includes = ["local_includes_shared"], 195*7594170eSAndroid Build Coastguard Worker absolute_includes = ["absolute_includes_shared"], 196*7594170eSAndroid Build Coastguard Worker stubs_symbol_file = name + ".map.txt", 197*7594170eSAndroid Build Coastguard Worker abi_checker_symbol_file = symbol_file, 198*7594170eSAndroid Build Coastguard Worker abi_checker_exclude_symbol_versions = exclude_symbol_versions, 199*7594170eSAndroid Build Coastguard Worker abi_checker_exclude_symbol_tags = exclude_symbol_tags, 200*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 201*7594170eSAndroid Build Coastguard Worker ) 202*7594170eSAndroid Build Coastguard Worker 203*7594170eSAndroid Build Coastguard Worker _abi_linker_action_test( 204*7594170eSAndroid Build Coastguard Worker name = test_name, 205*7594170eSAndroid Build Coastguard Worker target_under_test = name + "_abi_dump", 206*7594170eSAndroid Build Coastguard Worker dumps = [ 207*7594170eSAndroid Build Coastguard Worker static_dep_a + ".static_a.cpp", 208*7594170eSAndroid Build Coastguard Worker static_dep_b + ".static_b.cpp", 209*7594170eSAndroid Build Coastguard Worker name + "__internal_root.shared.cpp", 210*7594170eSAndroid Build Coastguard Worker static_dep_a + ".static_a.c", 211*7594170eSAndroid Build Coastguard Worker static_dep_b + ".static_b.c", 212*7594170eSAndroid Build Coastguard Worker name + "__internal_root.shared.c", 213*7594170eSAndroid Build Coastguard Worker ], 214*7594170eSAndroid Build Coastguard Worker lib_name = name, 215*7594170eSAndroid Build Coastguard Worker symbol_file = symbol_file, 216*7594170eSAndroid Build Coastguard Worker exclude_symbol_versions = exclude_symbol_versions, 217*7594170eSAndroid Build Coastguard Worker exclude_symbol_tags = exclude_symbol_tags, 218*7594170eSAndroid Build Coastguard Worker export_includes = [ 219*7594170eSAndroid Build Coastguard Worker "export_includes_shared", 220*7594170eSAndroid Build Coastguard Worker "export_includes_static_a", 221*7594170eSAndroid Build Coastguard Worker "export_includes_static_b", 222*7594170eSAndroid Build Coastguard Worker ], 223*7594170eSAndroid Build Coastguard Worker export_absolute_includes = [ 224*7594170eSAndroid Build Coastguard Worker "export_absolute_includes_shared", 225*7594170eSAndroid Build Coastguard Worker "export_absolute_includes_static_a", 226*7594170eSAndroid Build Coastguard Worker "export_absolute_includes_static_b", 227*7594170eSAndroid Build Coastguard Worker ], 228*7594170eSAndroid Build Coastguard Worker ) 229*7594170eSAndroid Build Coastguard Worker 230*7594170eSAndroid Build Coastguard Worker return test_name 231*7594170eSAndroid Build Coastguard Worker 232*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_run_test_impl(ctx): 233*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 234*7594170eSAndroid Build Coastguard Worker 235*7594170eSAndroid Build Coastguard Worker actions = analysistest.target_actions(env) 236*7594170eSAndroid Build Coastguard Worker link_actions = [a for a in actions if a.mnemonic == "AbiLink"] 237*7594170eSAndroid Build Coastguard Worker 238*7594170eSAndroid Build Coastguard Worker asserts.true( 239*7594170eSAndroid Build Coastguard Worker env, 240*7594170eSAndroid Build Coastguard Worker len(link_actions) == 1, 241*7594170eSAndroid Build Coastguard Worker "Abi link action not found: %s" % link_actions, 242*7594170eSAndroid Build Coastguard Worker ) 243*7594170eSAndroid Build Coastguard Worker 244*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 245*7594170eSAndroid Build Coastguard Worker 246*7594170eSAndroid Build Coastguard Worker__abi_linker_action_run_test = analysistest.make( 247*7594170eSAndroid Build Coastguard Worker impl = _abi_linker_action_run_test_impl, 248*7594170eSAndroid Build Coastguard Worker) 249*7594170eSAndroid Build Coastguard Worker 250*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_run_test(**kwargs): 251*7594170eSAndroid Build Coastguard Worker __abi_linker_action_run_test( 252*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 253*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:x86_64", 254*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:android", 255*7594170eSAndroid Build Coastguard Worker ], 256*7594170eSAndroid Build Coastguard Worker **kwargs 257*7594170eSAndroid Build Coastguard Worker ) 258*7594170eSAndroid Build Coastguard Worker 259*7594170eSAndroid Build Coastguard Workerdef _test_abi_linker_action_run_for_enabled(): 260*7594170eSAndroid Build Coastguard Worker name = "abi_linker_action_run_for_enabled" 261*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 262*7594170eSAndroid Build Coastguard Worker 263*7594170eSAndroid Build Coastguard Worker cc_library_shared( 264*7594170eSAndroid Build Coastguard Worker name = name, 265*7594170eSAndroid Build Coastguard Worker abi_checker_enabled = True, 266*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 267*7594170eSAndroid Build Coastguard Worker ) 268*7594170eSAndroid Build Coastguard Worker 269*7594170eSAndroid Build Coastguard Worker _abi_linker_action_run_test( 270*7594170eSAndroid Build Coastguard Worker name = test_name, 271*7594170eSAndroid Build Coastguard Worker target_under_test = name + "_abi_dump", 272*7594170eSAndroid Build Coastguard Worker ) 273*7594170eSAndroid Build Coastguard Worker 274*7594170eSAndroid Build Coastguard Worker return test_name 275*7594170eSAndroid Build Coastguard Worker 276*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_not_run_test_impl(ctx): 277*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 278*7594170eSAndroid Build Coastguard Worker 279*7594170eSAndroid Build Coastguard Worker actions = analysistest.target_actions(env) 280*7594170eSAndroid Build Coastguard Worker link_actions = [a for a in actions if a.mnemonic == "AbiLink"] 281*7594170eSAndroid Build Coastguard Worker 282*7594170eSAndroid Build Coastguard Worker asserts.true( 283*7594170eSAndroid Build Coastguard Worker env, 284*7594170eSAndroid Build Coastguard Worker len(link_actions) == 0, 285*7594170eSAndroid Build Coastguard Worker "Abi link action found: %s" % link_actions, 286*7594170eSAndroid Build Coastguard Worker ) 287*7594170eSAndroid Build Coastguard Worker 288*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 289*7594170eSAndroid Build Coastguard Worker 290*7594170eSAndroid Build Coastguard Worker__abi_linker_action_not_run_test = analysistest.make( 291*7594170eSAndroid Build Coastguard Worker impl = _abi_linker_action_not_run_test_impl, 292*7594170eSAndroid Build Coastguard Worker) 293*7594170eSAndroid Build Coastguard Worker 294*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_not_run_test(**kwargs): 295*7594170eSAndroid Build Coastguard Worker __abi_linker_action_not_run_test( 296*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 297*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:x86_64", 298*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:android", 299*7594170eSAndroid Build Coastguard Worker ], 300*7594170eSAndroid Build Coastguard Worker **kwargs 301*7594170eSAndroid Build Coastguard Worker ) 302*7594170eSAndroid Build Coastguard Worker 303*7594170eSAndroid Build Coastguard Worker__abi_linker_action_not_run_for_no_device_test = analysistest.make( 304*7594170eSAndroid Build Coastguard Worker impl = _abi_linker_action_not_run_test_impl, 305*7594170eSAndroid Build Coastguard Worker) 306*7594170eSAndroid Build Coastguard Worker 307*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_not_run_for_no_device_test(**kwargs): 308*7594170eSAndroid Build Coastguard Worker __abi_linker_action_not_run_for_no_device_test( 309*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 310*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:x86_64", 311*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:linux", 312*7594170eSAndroid Build Coastguard Worker ], 313*7594170eSAndroid Build Coastguard Worker **kwargs 314*7594170eSAndroid Build Coastguard Worker ) 315*7594170eSAndroid Build Coastguard Worker 316*7594170eSAndroid Build Coastguard Worker__abi_linker_action_not_run_for_coverage_test = analysistest.make( 317*7594170eSAndroid Build Coastguard Worker impl = _abi_linker_action_not_run_test_impl, 318*7594170eSAndroid Build Coastguard Worker config_settings = CONFIG_SETTING_COVERAGE, 319*7594170eSAndroid Build Coastguard Worker) 320*7594170eSAndroid Build Coastguard Worker 321*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_not_run_for_coverage_test(**kwargs): 322*7594170eSAndroid Build Coastguard Worker __abi_linker_action_not_run_for_coverage_test( 323*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 324*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:x86_64", 325*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:android", 326*7594170eSAndroid Build Coastguard Worker ], 327*7594170eSAndroid Build Coastguard Worker **kwargs 328*7594170eSAndroid Build Coastguard Worker ) 329*7594170eSAndroid Build Coastguard Worker 330*7594170eSAndroid Build Coastguard Worker__abi_linker_action_not_run_if_skipped_test = analysistest.make( 331*7594170eSAndroid Build Coastguard Worker impl = _abi_linker_action_not_run_test_impl, 332*7594170eSAndroid Build Coastguard Worker config_settings = CONFIG_SETTING_SKIP_ABI_CHECK, 333*7594170eSAndroid Build Coastguard Worker) 334*7594170eSAndroid Build Coastguard Worker 335*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_not_run_if_skipped_test(**kwargs): 336*7594170eSAndroid Build Coastguard Worker __abi_linker_action_not_run_if_skipped_test( 337*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 338*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:x86_64", 339*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:android", 340*7594170eSAndroid Build Coastguard Worker ], 341*7594170eSAndroid Build Coastguard Worker **kwargs 342*7594170eSAndroid Build Coastguard Worker ) 343*7594170eSAndroid Build Coastguard Worker 344*7594170eSAndroid Build Coastguard Worker__abi_linker_action_not_run_apex_no_stubs_test = analysistest.make( 345*7594170eSAndroid Build Coastguard Worker impl = _abi_linker_action_not_run_test_impl, 346*7594170eSAndroid Build Coastguard Worker config_settings = CONFIG_SETTING_IN_APEX, 347*7594170eSAndroid Build Coastguard Worker) 348*7594170eSAndroid Build Coastguard Worker 349*7594170eSAndroid Build Coastguard Workerdef _abi_linker_action_not_run_apex_no_stubs_test(**kwargs): 350*7594170eSAndroid Build Coastguard Worker __abi_linker_action_not_run_apex_no_stubs_test( 351*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 352*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:x86_64", 353*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:android", 354*7594170eSAndroid Build Coastguard Worker ], 355*7594170eSAndroid Build Coastguard Worker **kwargs 356*7594170eSAndroid Build Coastguard Worker ) 357*7594170eSAndroid Build Coastguard Worker 358*7594170eSAndroid Build Coastguard Workerdef _test_abi_linker_action_not_run_for_default(): 359*7594170eSAndroid Build Coastguard Worker name = "abi_linker_action_not_run_for_default" 360*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 361*7594170eSAndroid Build Coastguard Worker 362*7594170eSAndroid Build Coastguard Worker cc_library_shared( 363*7594170eSAndroid Build Coastguard Worker name = name, 364*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 365*7594170eSAndroid Build Coastguard Worker ) 366*7594170eSAndroid Build Coastguard Worker 367*7594170eSAndroid Build Coastguard Worker _abi_linker_action_not_run_test( 368*7594170eSAndroid Build Coastguard Worker name = test_name, 369*7594170eSAndroid Build Coastguard Worker target_under_test = name + "_abi_dump", 370*7594170eSAndroid Build Coastguard Worker ) 371*7594170eSAndroid Build Coastguard Worker 372*7594170eSAndroid Build Coastguard Worker return test_name 373*7594170eSAndroid Build Coastguard Worker 374*7594170eSAndroid Build Coastguard Workerdef _test_abi_linker_action_not_run_for_disabled(): 375*7594170eSAndroid Build Coastguard Worker name = "abi_linker_action_not_run_for_disabled" 376*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 377*7594170eSAndroid Build Coastguard Worker 378*7594170eSAndroid Build Coastguard Worker cc_library_shared( 379*7594170eSAndroid Build Coastguard Worker name = name, 380*7594170eSAndroid Build Coastguard Worker stubs_symbol_file = name + ".map.txt", 381*7594170eSAndroid Build Coastguard Worker abi_checker_enabled = False, 382*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 383*7594170eSAndroid Build Coastguard Worker ) 384*7594170eSAndroid Build Coastguard Worker 385*7594170eSAndroid Build Coastguard Worker _abi_linker_action_not_run_test( 386*7594170eSAndroid Build Coastguard Worker name = test_name, 387*7594170eSAndroid Build Coastguard Worker target_under_test = name + "_abi_dump", 388*7594170eSAndroid Build Coastguard Worker ) 389*7594170eSAndroid Build Coastguard Worker 390*7594170eSAndroid Build Coastguard Worker return test_name 391*7594170eSAndroid Build Coastguard Worker 392*7594170eSAndroid Build Coastguard Workerdef _test_abi_linker_action_not_run_for_no_device(): 393*7594170eSAndroid Build Coastguard Worker name = "abi_linker_action_not_run_for_no_device" 394*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 395*7594170eSAndroid Build Coastguard Worker 396*7594170eSAndroid Build Coastguard Worker cc_library_shared( 397*7594170eSAndroid Build Coastguard Worker name = name, 398*7594170eSAndroid Build Coastguard Worker abi_checker_enabled = True, 399*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 400*7594170eSAndroid Build Coastguard Worker ) 401*7594170eSAndroid Build Coastguard Worker 402*7594170eSAndroid Build Coastguard Worker _abi_linker_action_not_run_for_no_device_test( 403*7594170eSAndroid Build Coastguard Worker name = test_name, 404*7594170eSAndroid Build Coastguard Worker target_under_test = name + "_abi_dump", 405*7594170eSAndroid Build Coastguard Worker ) 406*7594170eSAndroid Build Coastguard Worker 407*7594170eSAndroid Build Coastguard Worker return test_name 408*7594170eSAndroid Build Coastguard Worker 409*7594170eSAndroid Build Coastguard Workerdef _test_abi_linker_action_not_run_if_skipped(): 410*7594170eSAndroid Build Coastguard Worker name = "abi_linker_action_not_run_if_skipped" 411*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 412*7594170eSAndroid Build Coastguard Worker 413*7594170eSAndroid Build Coastguard Worker cc_library_shared( 414*7594170eSAndroid Build Coastguard Worker name = name, 415*7594170eSAndroid Build Coastguard Worker abi_checker_enabled = True, 416*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 417*7594170eSAndroid Build Coastguard Worker ) 418*7594170eSAndroid Build Coastguard Worker 419*7594170eSAndroid Build Coastguard Worker _abi_linker_action_not_run_if_skipped_test( 420*7594170eSAndroid Build Coastguard Worker name = test_name, 421*7594170eSAndroid Build Coastguard Worker target_under_test = name + "_abi_dump", 422*7594170eSAndroid Build Coastguard Worker ) 423*7594170eSAndroid Build Coastguard Worker 424*7594170eSAndroid Build Coastguard Worker return test_name 425*7594170eSAndroid Build Coastguard Worker 426*7594170eSAndroid Build Coastguard Workerdef _test_abi_linker_action_not_run_for_coverage_enabled(): 427*7594170eSAndroid Build Coastguard Worker name = "abi_linker_action_not_run_for_coverage_enabled" 428*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 429*7594170eSAndroid Build Coastguard Worker 430*7594170eSAndroid Build Coastguard Worker cc_library_shared( 431*7594170eSAndroid Build Coastguard Worker name = name, 432*7594170eSAndroid Build Coastguard Worker abi_checker_enabled = True, 433*7594170eSAndroid Build Coastguard Worker features = ["coverage"], 434*7594170eSAndroid Build Coastguard Worker # Coverage will add an extra lib to all the shared libs, we try to avoid 435*7594170eSAndroid Build Coastguard Worker # that by clearing the system_dynamic_deps and stl. 436*7594170eSAndroid Build Coastguard Worker system_dynamic_deps = [], 437*7594170eSAndroid Build Coastguard Worker stl = "none", 438*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 439*7594170eSAndroid Build Coastguard Worker ) 440*7594170eSAndroid Build Coastguard Worker 441*7594170eSAndroid Build Coastguard Worker _abi_linker_action_not_run_for_coverage_test( 442*7594170eSAndroid Build Coastguard Worker name = test_name, 443*7594170eSAndroid Build Coastguard Worker target_under_test = name + "_abi_dump", 444*7594170eSAndroid Build Coastguard Worker ) 445*7594170eSAndroid Build Coastguard Worker 446*7594170eSAndroid Build Coastguard Worker return test_name 447*7594170eSAndroid Build Coastguard Worker 448*7594170eSAndroid Build Coastguard Workerdef _test_abi_linker_action_not_run_for_apex_no_stubs(): 449*7594170eSAndroid Build Coastguard Worker name = "abi_linker_action_not_run_for_apex_no_stubs" 450*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 451*7594170eSAndroid Build Coastguard Worker 452*7594170eSAndroid Build Coastguard Worker cc_library_shared( 453*7594170eSAndroid Build Coastguard Worker name = name, 454*7594170eSAndroid Build Coastguard Worker abi_checker_enabled = True, 455*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 456*7594170eSAndroid Build Coastguard Worker ) 457*7594170eSAndroid Build Coastguard Worker 458*7594170eSAndroid Build Coastguard Worker _abi_linker_action_not_run_apex_no_stubs_test( 459*7594170eSAndroid Build Coastguard Worker name = test_name, 460*7594170eSAndroid Build Coastguard Worker target_under_test = name + "_abi_dump", 461*7594170eSAndroid Build Coastguard Worker ) 462*7594170eSAndroid Build Coastguard Worker 463*7594170eSAndroid Build Coastguard Worker return test_name 464*7594170eSAndroid Build Coastguard Worker 465*7594170eSAndroid Build Coastguard Workerdef _abi_diff_action_test_impl(ctx): 466*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 467*7594170eSAndroid Build Coastguard Worker actions = analysistest.target_actions(env) 468*7594170eSAndroid Build Coastguard Worker diff_actions = [a for a in actions if a.mnemonic == "AbiDiff"] 469*7594170eSAndroid Build Coastguard Worker 470*7594170eSAndroid Build Coastguard Worker asserts.true( 471*7594170eSAndroid Build Coastguard Worker env, 472*7594170eSAndroid Build Coastguard Worker len(diff_actions) == 2, 473*7594170eSAndroid Build Coastguard Worker "There should be two abi diff actions: %s" % diff_actions, 474*7594170eSAndroid Build Coastguard Worker ) 475*7594170eSAndroid Build Coastguard Worker 476*7594170eSAndroid Build Coastguard Worker prev_version, version = find_abi_config(ctx) 477*7594170eSAndroid Build Coastguard Worker _verify_abi_diff_action(ctx, env, diff_actions[0], prev_version, True) 478*7594170eSAndroid Build Coastguard Worker _verify_abi_diff_action(ctx, env, diff_actions[1], version, False) 479*7594170eSAndroid Build Coastguard Worker 480*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 481*7594170eSAndroid Build Coastguard Worker 482*7594170eSAndroid Build Coastguard Workerdef _verify_abi_diff_action(ctx, env, action, version, is_prev_version): 483*7594170eSAndroid Build Coastguard Worker bin_home = analysistest.target_bin_dir_path(env) 484*7594170eSAndroid Build Coastguard Worker bazel_out_base = paths.join(bin_home, ctx.label.package) 485*7594170eSAndroid Build Coastguard Worker lsdump_file = paths.join(bazel_out_base, ctx.attr.lib_name + ".so.lsdump") 486*7594170eSAndroid Build Coastguard Worker 487*7594170eSAndroid Build Coastguard Worker ref_dump = paths.join( 488*7594170eSAndroid Build Coastguard Worker REF_DUMPS_HOME, 489*7594170eSAndroid Build Coastguard Worker "platform", 490*7594170eSAndroid Build Coastguard Worker str(version), 491*7594170eSAndroid Build Coastguard Worker str(BITNESS), 492*7594170eSAndroid Build Coastguard Worker ARCH, 493*7594170eSAndroid Build Coastguard Worker "source-based", 494*7594170eSAndroid Build Coastguard Worker ctx.attr.lib_name + ".so.lsdump", 495*7594170eSAndroid Build Coastguard Worker ) 496*7594170eSAndroid Build Coastguard Worker asserts.set_equals( 497*7594170eSAndroid Build Coastguard Worker env, 498*7594170eSAndroid Build Coastguard Worker expected = sets.make([ 499*7594170eSAndroid Build Coastguard Worker lsdump_file, 500*7594170eSAndroid Build Coastguard Worker ABI_DIFF, 501*7594170eSAndroid Build Coastguard Worker ref_dump, 502*7594170eSAndroid Build Coastguard Worker ]), 503*7594170eSAndroid Build Coastguard Worker actual = sets.make([ 504*7594170eSAndroid Build Coastguard Worker file.path 505*7594170eSAndroid Build Coastguard Worker for file in action.inputs.to_list() 506*7594170eSAndroid Build Coastguard Worker ]), 507*7594170eSAndroid Build Coastguard Worker ) 508*7594170eSAndroid Build Coastguard Worker 509*7594170eSAndroid Build Coastguard Worker if is_prev_version: 510*7594170eSAndroid Build Coastguard Worker diff_file = paths.join(bazel_out_base, ".".join([ctx.attr.lib_name, "so", str(version), "abidiff"])) 511*7594170eSAndroid Build Coastguard Worker else: 512*7594170eSAndroid Build Coastguard Worker diff_file = paths.join(bazel_out_base, ".".join([ctx.attr.lib_name, "so", "abidiff"])) 513*7594170eSAndroid Build Coastguard Worker 514*7594170eSAndroid Build Coastguard Worker asserts.set_equals( 515*7594170eSAndroid Build Coastguard Worker env, 516*7594170eSAndroid Build Coastguard Worker expected = sets.make([diff_file]), 517*7594170eSAndroid Build Coastguard Worker actual = sets.make([ 518*7594170eSAndroid Build Coastguard Worker file.path 519*7594170eSAndroid Build Coastguard Worker for file in action.outputs.to_list() 520*7594170eSAndroid Build Coastguard Worker ]), 521*7594170eSAndroid Build Coastguard Worker ) 522*7594170eSAndroid Build Coastguard Worker 523*7594170eSAndroid Build Coastguard Worker argv = action.argv 524*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-o", diff_file) 525*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-old", ref_dump) 526*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-new", lsdump_file) 527*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-lib", ctx.attr.lib_name) 528*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-arch", ARCH) 529*7594170eSAndroid Build Coastguard Worker _test_arg_exists(env, argv, "-allow-unreferenced-changes") 530*7594170eSAndroid Build Coastguard Worker _test_arg_exists(env, argv, "-allow-unreferenced-elf-symbol-changes") 531*7594170eSAndroid Build Coastguard Worker _test_arg_exists(env, argv, "-allow-extensions") 532*7594170eSAndroid Build Coastguard Worker if is_prev_version: 533*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-target-version", str(version + 1)) 534*7594170eSAndroid Build Coastguard Worker else: 535*7594170eSAndroid Build Coastguard Worker _test_arg_set_correctly(env, argv, "-target-version", "current") 536*7594170eSAndroid Build Coastguard Worker 537*7594170eSAndroid Build Coastguard Worker__abi_diff_action_test = analysistest.make( 538*7594170eSAndroid Build Coastguard Worker impl = _abi_diff_action_test_impl, 539*7594170eSAndroid Build Coastguard Worker attrs = { 540*7594170eSAndroid Build Coastguard Worker "lib_name": attr.string(), 541*7594170eSAndroid Build Coastguard Worker "_platform_utils": attr.label(default = Label("//build/bazel/platforms:platform_utils")), 542*7594170eSAndroid Build Coastguard Worker }, 543*7594170eSAndroid Build Coastguard Worker) 544*7594170eSAndroid Build Coastguard Worker 545*7594170eSAndroid Build Coastguard Workerdef _abi_diff_action_test(**kwargs): 546*7594170eSAndroid Build Coastguard Worker __abi_diff_action_test( 547*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 548*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:x86_64", 549*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:android", 550*7594170eSAndroid Build Coastguard Worker ], 551*7594170eSAndroid Build Coastguard Worker **kwargs 552*7594170eSAndroid Build Coastguard Worker ) 553*7594170eSAndroid Build Coastguard Worker 554*7594170eSAndroid Build Coastguard Workerdef _test_abi_diff_action(): 555*7594170eSAndroid Build Coastguard Worker name = "abi_diff_action" 556*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 557*7594170eSAndroid Build Coastguard Worker 558*7594170eSAndroid Build Coastguard Worker cc_library_shared( 559*7594170eSAndroid Build Coastguard Worker name = name, 560*7594170eSAndroid Build Coastguard Worker srcs = ["shared.cpp"], 561*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 562*7594170eSAndroid Build Coastguard Worker ) 563*7594170eSAndroid Build Coastguard Worker 564*7594170eSAndroid Build Coastguard Worker lib_name = "lib" + name 565*7594170eSAndroid Build Coastguard Worker abi_dump_name = name + "_abi_dump_new" 566*7594170eSAndroid Build Coastguard Worker abi_dump( 567*7594170eSAndroid Build Coastguard Worker name = abi_dump_name, 568*7594170eSAndroid Build Coastguard Worker shared = name + "_stripped", 569*7594170eSAndroid Build Coastguard Worker root = name + "__internal_root", 570*7594170eSAndroid Build Coastguard Worker soname = lib_name + ".so", 571*7594170eSAndroid Build Coastguard Worker enabled = True, 572*7594170eSAndroid Build Coastguard Worker abi_ref_dumps_platform = "//build/bazel/rules/abi/abi-dumps/platform:bp2build_all_srcs", 573*7594170eSAndroid Build Coastguard Worker ref_dumps_home = "build/bazel/rules/abi/abi-dumps", 574*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 575*7594170eSAndroid Build Coastguard Worker ) 576*7594170eSAndroid Build Coastguard Worker 577*7594170eSAndroid Build Coastguard Worker _abi_diff_action_test( 578*7594170eSAndroid Build Coastguard Worker name = test_name, 579*7594170eSAndroid Build Coastguard Worker target_under_test = abi_dump_name, 580*7594170eSAndroid Build Coastguard Worker lib_name = lib_name, 581*7594170eSAndroid Build Coastguard Worker ) 582*7594170eSAndroid Build Coastguard Worker 583*7594170eSAndroid Build Coastguard Worker return test_name 584*7594170eSAndroid Build Coastguard Worker 585*7594170eSAndroid Build Coastguard Workerdef _abi_diff_action_not_run_test_impl(ctx): 586*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 587*7594170eSAndroid Build Coastguard Worker actions = analysistest.target_actions(env) 588*7594170eSAndroid Build Coastguard Worker diff_actions = [a for a in actions if a.mnemonic == "AbiDiff"] 589*7594170eSAndroid Build Coastguard Worker 590*7594170eSAndroid Build Coastguard Worker asserts.true( 591*7594170eSAndroid Build Coastguard Worker env, 592*7594170eSAndroid Build Coastguard Worker len(diff_actions) == 0, 593*7594170eSAndroid Build Coastguard Worker "Abi diff action found: %s" % diff_actions, 594*7594170eSAndroid Build Coastguard Worker ) 595*7594170eSAndroid Build Coastguard Worker 596*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 597*7594170eSAndroid Build Coastguard Worker 598*7594170eSAndroid Build Coastguard Worker__abi_diff_action_not_run_test = analysistest.make( 599*7594170eSAndroid Build Coastguard Worker impl = _abi_diff_action_not_run_test_impl, 600*7594170eSAndroid Build Coastguard Worker) 601*7594170eSAndroid Build Coastguard Worker 602*7594170eSAndroid Build Coastguard Workerdef _abi_diff_action_not_run_test(**kwargs): 603*7594170eSAndroid Build Coastguard Worker __abi_diff_action_not_run_test( 604*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 605*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:x86_64", 606*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:android", 607*7594170eSAndroid Build Coastguard Worker ], 608*7594170eSAndroid Build Coastguard Worker **kwargs 609*7594170eSAndroid Build Coastguard Worker ) 610*7594170eSAndroid Build Coastguard Worker 611*7594170eSAndroid Build Coastguard Workerdef _test_abi_diff_action_not_run_if_no_ref_dump_found(): 612*7594170eSAndroid Build Coastguard Worker name = "abi_diff_action_not_run_if_no_ref_dump_found" 613*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 614*7594170eSAndroid Build Coastguard Worker 615*7594170eSAndroid Build Coastguard Worker cc_library_shared( 616*7594170eSAndroid Build Coastguard Worker name = name, 617*7594170eSAndroid Build Coastguard Worker srcs = ["shared.cpp"], 618*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 619*7594170eSAndroid Build Coastguard Worker ) 620*7594170eSAndroid Build Coastguard Worker 621*7594170eSAndroid Build Coastguard Worker lib_name = "lib" + name 622*7594170eSAndroid Build Coastguard Worker abi_dump_name = name + "_abi_dump_new" 623*7594170eSAndroid Build Coastguard Worker abi_dump( 624*7594170eSAndroid Build Coastguard Worker name = abi_dump_name, 625*7594170eSAndroid Build Coastguard Worker shared = name + "_stripped", 626*7594170eSAndroid Build Coastguard Worker root = name + "__internal_root", 627*7594170eSAndroid Build Coastguard Worker soname = lib_name + ".so", 628*7594170eSAndroid Build Coastguard Worker enabled = True, 629*7594170eSAndroid Build Coastguard Worker ref_dumps_home = "build/bazel/rules/abi/abi-dumps", 630*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 631*7594170eSAndroid Build Coastguard Worker ) 632*7594170eSAndroid Build Coastguard Worker 633*7594170eSAndroid Build Coastguard Worker _abi_diff_action_not_run_test( 634*7594170eSAndroid Build Coastguard Worker name = test_name, 635*7594170eSAndroid Build Coastguard Worker target_under_test = abi_dump_name, 636*7594170eSAndroid Build Coastguard Worker ) 637*7594170eSAndroid Build Coastguard Worker 638*7594170eSAndroid Build Coastguard Worker return test_name 639*7594170eSAndroid Build Coastguard Worker 640*7594170eSAndroid Build Coastguard Workerdef _test_arg_set_correctly(env, argv, arg_name, expected): 641*7594170eSAndroid Build Coastguard Worker arg = get_arg_value(argv, arg_name) 642*7594170eSAndroid Build Coastguard Worker asserts.true( 643*7594170eSAndroid Build Coastguard Worker env, 644*7594170eSAndroid Build Coastguard Worker arg == expected, 645*7594170eSAndroid Build Coastguard Worker "%s is not set correctly: expected %s, actual %s" % (arg_name, expected, arg), 646*7594170eSAndroid Build Coastguard Worker ) 647*7594170eSAndroid Build Coastguard Worker 648*7594170eSAndroid Build Coastguard Workerdef _test_arg_set_multi_values_correctly(env, argv, arg_name, expected): 649*7594170eSAndroid Build Coastguard Worker args = get_arg_values(argv, arg_name) 650*7594170eSAndroid Build Coastguard Worker asserts.set_equals( 651*7594170eSAndroid Build Coastguard Worker env, 652*7594170eSAndroid Build Coastguard Worker expected = sets.make(expected), 653*7594170eSAndroid Build Coastguard Worker actual = sets.make(args), 654*7594170eSAndroid Build Coastguard Worker ) 655*7594170eSAndroid Build Coastguard Worker 656*7594170eSAndroid Build Coastguard Workerdef _test_arg_exists(env, argv, arg_name): 657*7594170eSAndroid Build Coastguard Worker asserts.true( 658*7594170eSAndroid Build Coastguard Worker env, 659*7594170eSAndroid Build Coastguard Worker arg_name in argv, 660*7594170eSAndroid Build Coastguard Worker "arg %s is not found" % arg_name, 661*7594170eSAndroid Build Coastguard Worker ) 662*7594170eSAndroid Build Coastguard Worker 663*7594170eSAndroid Build Coastguard Workerdef abi_dump_test_suite(name): 664*7594170eSAndroid Build Coastguard Worker native.test_suite( 665*7594170eSAndroid Build Coastguard Worker name = name, 666*7594170eSAndroid Build Coastguard Worker tests = [ 667*7594170eSAndroid Build Coastguard Worker _test_abi_linker_action(), 668*7594170eSAndroid Build Coastguard Worker _test_abi_linker_action_not_run_for_default(), 669*7594170eSAndroid Build Coastguard Worker _test_abi_linker_action_not_run_for_disabled(), 670*7594170eSAndroid Build Coastguard Worker _test_abi_linker_action_run_for_enabled(), 671*7594170eSAndroid Build Coastguard Worker _test_abi_linker_action_not_run_for_no_device(), 672*7594170eSAndroid Build Coastguard Worker _test_abi_linker_action_not_run_for_coverage_enabled(), 673*7594170eSAndroid Build Coastguard Worker _test_abi_linker_action_not_run_if_skipped(), 674*7594170eSAndroid Build Coastguard Worker _test_abi_linker_action_not_run_for_apex_no_stubs(), 675*7594170eSAndroid Build Coastguard Worker _test_abi_diff_action(), 676*7594170eSAndroid Build Coastguard Worker _test_abi_diff_action_not_run_if_no_ref_dump_found(), 677*7594170eSAndroid Build Coastguard Worker ], 678*7594170eSAndroid Build Coastguard Worker ) 679