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("//build/bazel/rules/aidl:aidl_library.bzl", "aidl_library") 16*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_aidl_library.bzl", "cc_aidl_library") 17*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/java:java_aidl_library.bzl", "java_aidl_library") 18*7594170eSAndroid Build Coastguard Worker 19*7594170eSAndroid Build Coastguard WorkerJAVA = "java" 20*7594170eSAndroid Build Coastguard WorkerCPP = "cpp" 21*7594170eSAndroid Build Coastguard WorkerNDK = "ndk" 22*7594170eSAndroid Build Coastguard Worker#TODO(b/246803961) Add support for rust backend 23*7594170eSAndroid Build Coastguard Worker 24*7594170eSAndroid Build Coastguard Workerdef _hash_file(name, version): 25*7594170eSAndroid Build Coastguard Worker return "aidl_api/{}/{}/.hash".format(name, version) 26*7594170eSAndroid Build Coastguard Worker 27*7594170eSAndroid Build Coastguard Workerdef _check_versions_with_info(versions_with_info): 28*7594170eSAndroid Build Coastguard Worker for version_with_info in versions_with_info: 29*7594170eSAndroid Build Coastguard Worker for dep in version_with_info.get("deps", []): 30*7594170eSAndroid Build Coastguard Worker parts = dep.split("-V") 31*7594170eSAndroid Build Coastguard Worker if len(parts) < 2 or not parts[-1].isdigit(): 32*7594170eSAndroid Build Coastguard Worker fail("deps in versions_with_info must specify its version, but", dep) 33*7594170eSAndroid Build Coastguard Worker 34*7594170eSAndroid Build Coastguard Worker versions = [] 35*7594170eSAndroid Build Coastguard Worker 36*7594170eSAndroid Build Coastguard Worker # ensure that all versions are ints 37*7594170eSAndroid Build Coastguard Worker for info in versions_with_info: 38*7594170eSAndroid Build Coastguard Worker version = info["version"] 39*7594170eSAndroid Build Coastguard Worker if version.isdigit() == False: 40*7594170eSAndroid Build Coastguard Worker fail("version %s is not an integer".format(version)) 41*7594170eSAndroid Build Coastguard Worker 42*7594170eSAndroid Build Coastguard Worker versions.append(int(version)) 43*7594170eSAndroid Build Coastguard Worker 44*7594170eSAndroid Build Coastguard Worker if versions != sorted(versions): 45*7594170eSAndroid Build Coastguard Worker fail("versions should be sorted") 46*7594170eSAndroid Build Coastguard Worker 47*7594170eSAndroid Build Coastguard Worker for i, v in enumerate(versions): 48*7594170eSAndroid Build Coastguard Worker if i > 0: 49*7594170eSAndroid Build Coastguard Worker if v == versions[i - 1]: 50*7594170eSAndroid Build Coastguard Worker fail("duplicate version found:", v) 51*7594170eSAndroid Build Coastguard Worker if v <= 0: 52*7594170eSAndroid Build Coastguard Worker fail("all versions should be > 0, but found version:", v) 53*7594170eSAndroid Build Coastguard Worker 54*7594170eSAndroid Build Coastguard Workerdef _create_latest_version_aliases(name, last_version_name, backend_configs, **kwargs): 55*7594170eSAndroid Build Coastguard Worker latest_name = name + "-latest" 56*7594170eSAndroid Build Coastguard Worker native.alias( 57*7594170eSAndroid Build Coastguard Worker name = latest_name, 58*7594170eSAndroid Build Coastguard Worker actual = ":" + last_version_name, 59*7594170eSAndroid Build Coastguard Worker **kwargs 60*7594170eSAndroid Build Coastguard Worker ) 61*7594170eSAndroid Build Coastguard Worker for lang in backend_configs.keys(): 62*7594170eSAndroid Build Coastguard Worker language_binding_name = last_version_name + "-" + lang 63*7594170eSAndroid Build Coastguard Worker native.alias( 64*7594170eSAndroid Build Coastguard Worker name = latest_name + "-" + lang, 65*7594170eSAndroid Build Coastguard Worker actual = ":" + language_binding_name, 66*7594170eSAndroid Build Coastguard Worker **kwargs 67*7594170eSAndroid Build Coastguard Worker ) 68*7594170eSAndroid Build Coastguard Worker 69*7594170eSAndroid Build Coastguard Workerdef _versioned_name(name, version): 70*7594170eSAndroid Build Coastguard Worker if version == "": 71*7594170eSAndroid Build Coastguard Worker return name 72*7594170eSAndroid Build Coastguard Worker 73*7594170eSAndroid Build Coastguard Worker return name + "-V" + version 74*7594170eSAndroid Build Coastguard Worker 75*7594170eSAndroid Build Coastguard Worker# https://cs.android.com/android/platform/superproject/+/master:system/tools/aidl/build/aidl_interface.go;l=782-799;drc=5390d9a42f5e4f99ccb3a84068f554d948cb62b9 76*7594170eSAndroid Build Coastguard Workerdef _next_version(versions_with_info, unstable): 77*7594170eSAndroid Build Coastguard Worker if unstable: 78*7594170eSAndroid Build Coastguard Worker return "" 79*7594170eSAndroid Build Coastguard Worker 80*7594170eSAndroid Build Coastguard Worker if versions_with_info == None or len(versions_with_info) == 0: 81*7594170eSAndroid Build Coastguard Worker return "1" 82*7594170eSAndroid Build Coastguard Worker 83*7594170eSAndroid Build Coastguard Worker return str(int(versions_with_info[-1]["version"]) + 1) 84*7594170eSAndroid Build Coastguard Worker 85*7594170eSAndroid Build Coastguard Workerdef _is_config_enabled(config): 86*7594170eSAndroid Build Coastguard Worker if config == None: 87*7594170eSAndroid Build Coastguard Worker return False 88*7594170eSAndroid Build Coastguard Worker 89*7594170eSAndroid Build Coastguard Worker for key in config: 90*7594170eSAndroid Build Coastguard Worker if key not in ["enabled", "min_sdk_version", "tags", "additional_dynamic_deps"]: 91*7594170eSAndroid Build Coastguard Worker fail("unknown property in aidl configuration: " + str(key)) 92*7594170eSAndroid Build Coastguard Worker 93*7594170eSAndroid Build Coastguard Worker return config.get("enabled", False) == True 94*7594170eSAndroid Build Coastguard Worker 95*7594170eSAndroid Build Coastguard Workerdef aidl_interface( 96*7594170eSAndroid Build Coastguard Worker name, 97*7594170eSAndroid Build Coastguard Worker deps = [], 98*7594170eSAndroid Build Coastguard Worker hdrs = [], 99*7594170eSAndroid Build Coastguard Worker strip_import_prefix = "", 100*7594170eSAndroid Build Coastguard Worker srcs = None, 101*7594170eSAndroid Build Coastguard Worker flags = None, 102*7594170eSAndroid Build Coastguard Worker java_config = None, 103*7594170eSAndroid Build Coastguard Worker cpp_config = None, 104*7594170eSAndroid Build Coastguard Worker ndk_config = None, 105*7594170eSAndroid Build Coastguard Worker stability = None, 106*7594170eSAndroid Build Coastguard Worker versions_with_info = [], 107*7594170eSAndroid Build Coastguard Worker unstable = False, 108*7594170eSAndroid Build Coastguard Worker tags = [], 109*7594170eSAndroid Build Coastguard Worker # TODO(b/261208761): Support frozen attr 110*7594170eSAndroid Build Coastguard Worker frozen = False, 111*7594170eSAndroid Build Coastguard Worker **kwargs): 112*7594170eSAndroid Build Coastguard Worker """aidl_interface creates a versioned aidl_libraries and language-specific *_aidl_libraries 113*7594170eSAndroid Build Coastguard Worker 114*7594170eSAndroid Build Coastguard Worker This macro loops over the list of required versions and searches for all 115*7594170eSAndroid Build Coastguard Worker *.aidl source files located under the path `aidl_api/<version label/`. 116*7594170eSAndroid Build Coastguard Worker For each version, an `aidl_library` is created with the corresponding sources. 117*7594170eSAndroid Build Coastguard Worker For each `aidl_library`, a language-binding library *_aidl_library is created 118*7594170eSAndroid Build Coastguard Worker based on the values passed to the `backends` argument. 119*7594170eSAndroid Build Coastguard Worker 120*7594170eSAndroid Build Coastguard Worker Arguments: 121*7594170eSAndroid Build Coastguard Worker name: string, base name of generated targets: <module-name>-V<version number>-<language-type> 122*7594170eSAndroid Build Coastguard Worker deps: List[AidlGenInfo], a list of other aidl_libraries that all versions of this interface depend on 123*7594170eSAndroid Build Coastguard Worker hdrs: List[AidlGenInfo], a list of other aidl_libraries that all versions of this interface depend on but will not link against for C++ 124*7594170eSAndroid Build Coastguard Worker strip_import_prefix: str, a local directory to pass to the AIDL compiler to satisfy imports 125*7594170eSAndroid Build Coastguard Worker srcs: List[file], a list of files to include in the development (unversioned) version of the aidl_interface 126*7594170eSAndroid Build Coastguard Worker flags: List[string], a list of flags to pass to the AIDL compiler 127*7594170eSAndroid Build Coastguard Worker java_config: Dict{"enabled": bool}, config for java backend 128*7594170eSAndroid Build Coastguard Worker cpp_config: Dict{"enabled": bool, "min_sdk_version": string, "additional_dynamic_deps": List[Label]}, config for cpp backend 129*7594170eSAndroid Build Coastguard Worker ndk_config: Dict{"enabled": bool, "min_sdk_version": string, "additional_dynamic_deps": List[Label]}, config for ndk backend 130*7594170eSAndroid Build Coastguard Worker stability: string, stability promise of the interface. Currently, only supports "vintf" 131*7594170eSAndroid Build Coastguard Worker backends: List[string], a list of the languages to generate bindings for 132*7594170eSAndroid Build Coastguard Worker """ 133*7594170eSAndroid Build Coastguard Worker 134*7594170eSAndroid Build Coastguard Worker # When versions_with_info is set, versions is no-op. 135*7594170eSAndroid Build Coastguard Worker # TODO(b/244349745): Modify bp2build to skip convert versions if versions_with_info is set 136*7594170eSAndroid Build Coastguard Worker if (len(versions_with_info) == 0 and srcs == None): 137*7594170eSAndroid Build Coastguard Worker fail("must specify at least versions_with_info or srcs") 138*7594170eSAndroid Build Coastguard Worker 139*7594170eSAndroid Build Coastguard Worker if len(versions_with_info) == 0: 140*7594170eSAndroid Build Coastguard Worker if frozen == True: 141*7594170eSAndroid Build Coastguard Worker fail("frozen cannot be set without versions_with_info attr being set") 142*7594170eSAndroid Build Coastguard Worker elif unstable == True: 143*7594170eSAndroid Build Coastguard Worker # https://cs.android.com/android/platform/superproject/+/master:system/tools/aidl/build/aidl_interface.go;l=872;drc=5390d9a42f5e4f99ccb3a84068f554d948cb62b9 144*7594170eSAndroid Build Coastguard Worker fail("cannot have versions for unstable interface") 145*7594170eSAndroid Build Coastguard Worker 146*7594170eSAndroid Build Coastguard Worker aidl_flags = ["--structured"] 147*7594170eSAndroid Build Coastguard Worker 148*7594170eSAndroid Build Coastguard Worker enabled_backend_configs = {} 149*7594170eSAndroid Build Coastguard Worker if _is_config_enabled(java_config): 150*7594170eSAndroid Build Coastguard Worker enabled_backend_configs[JAVA] = java_config 151*7594170eSAndroid Build Coastguard Worker if _is_config_enabled(cpp_config): 152*7594170eSAndroid Build Coastguard Worker enabled_backend_configs[CPP] = cpp_config 153*7594170eSAndroid Build Coastguard Worker if _is_config_enabled(ndk_config): 154*7594170eSAndroid Build Coastguard Worker enabled_backend_configs[NDK] = ndk_config 155*7594170eSAndroid Build Coastguard Worker 156*7594170eSAndroid Build Coastguard Worker if stability != None: 157*7594170eSAndroid Build Coastguard Worker if unstable == True: 158*7594170eSAndroid Build Coastguard Worker fail("stability must be unset when unstable is true") 159*7594170eSAndroid Build Coastguard Worker if stability == "vintf": 160*7594170eSAndroid Build Coastguard Worker aidl_flags.append("--stability=" + stability) 161*7594170eSAndroid Build Coastguard Worker 162*7594170eSAndroid Build Coastguard Worker # TODO(b/245738285): Add support for vintf stability in java backend 163*7594170eSAndroid Build Coastguard Worker if JAVA in enabled_backend_configs: 164*7594170eSAndroid Build Coastguard Worker enabled_backend_configs.pop(JAVA) 165*7594170eSAndroid Build Coastguard Worker else: 166*7594170eSAndroid Build Coastguard Worker # https://cs.android.com/android/platform/superproject/+/master:system/tools/aidl/build/aidl_interface.go;l=329;drc=e88d9a9b14eafb064a234d555a5cd96de97ca9e2 167*7594170eSAndroid Build Coastguard Worker # only vintf is allowed currently 168*7594170eSAndroid Build Coastguard Worker fail("stability must be unset or \"vintf\"") 169*7594170eSAndroid Build Coastguard Worker 170*7594170eSAndroid Build Coastguard Worker # next_version will be the last specified version + 1. 171*7594170eSAndroid Build Coastguard Worker # https://cs.android.com/android/platform/superproject/+/master:system/tools/aidl/build/aidl_interface.go;l=791?q=system%2Ftools%2Faidl%2Fbuild%2Faidl_interface.go 172*7594170eSAndroid Build Coastguard Worker next_version = None 173*7594170eSAndroid Build Coastguard Worker 174*7594170eSAndroid Build Coastguard Worker if len(versions_with_info) > 0: 175*7594170eSAndroid Build Coastguard Worker _check_versions_with_info(versions_with_info) 176*7594170eSAndroid Build Coastguard Worker next_version = _next_version(versions_with_info, False) 177*7594170eSAndroid Build Coastguard Worker 178*7594170eSAndroid Build Coastguard Worker for version_with_info in versions_with_info: 179*7594170eSAndroid Build Coastguard Worker deps_for_version = version_with_info.get("deps", []) 180*7594170eSAndroid Build Coastguard Worker version = version_with_info.get("version") 181*7594170eSAndroid Build Coastguard Worker flags_for_version = aidl_flags 182*7594170eSAndroid Build Coastguard Worker 183*7594170eSAndroid Build Coastguard Worker if version == next_version and frozen == False and flags != None: 184*7594170eSAndroid Build Coastguard Worker flags_for_version.extend(flags) 185*7594170eSAndroid Build Coastguard Worker 186*7594170eSAndroid Build Coastguard Worker create_aidl_binding_for_backends( 187*7594170eSAndroid Build Coastguard Worker name = name, 188*7594170eSAndroid Build Coastguard Worker version = version_with_info["version"], 189*7594170eSAndroid Build Coastguard Worker deps = deps_for_version, 190*7594170eSAndroid Build Coastguard Worker hdrs = hdrs, 191*7594170eSAndroid Build Coastguard Worker aidl_flags = flags_for_version, 192*7594170eSAndroid Build Coastguard Worker backend_configs = enabled_backend_configs, 193*7594170eSAndroid Build Coastguard Worker tags = tags, 194*7594170eSAndroid Build Coastguard Worker **kwargs 195*7594170eSAndroid Build Coastguard Worker ) 196*7594170eSAndroid Build Coastguard Worker 197*7594170eSAndroid Build Coastguard Worker _create_latest_version_aliases( 198*7594170eSAndroid Build Coastguard Worker name, 199*7594170eSAndroid Build Coastguard Worker _versioned_name(name, versions_with_info[-1]["version"]), 200*7594170eSAndroid Build Coastguard Worker enabled_backend_configs, 201*7594170eSAndroid Build Coastguard Worker tags = tags, 202*7594170eSAndroid Build Coastguard Worker **kwargs 203*7594170eSAndroid Build Coastguard Worker ) 204*7594170eSAndroid Build Coastguard Worker else: 205*7594170eSAndroid Build Coastguard Worker next_version = _next_version(versions_with_info, unstable) 206*7594170eSAndroid Build Coastguard Worker 207*7594170eSAndroid Build Coastguard Worker # https://cs.android.com/android/platform/superproject/+/master:system/tools/aidl/build/aidl_interface.go;l=941;drc=5390d9a42f5e4f99ccb3a84068f554d948cb62b9 208*7594170eSAndroid Build Coastguard Worker # Create aidl binding for next_version with srcs 209*7594170eSAndroid Build Coastguard Worker if srcs and len(srcs) > 0: 210*7594170eSAndroid Build Coastguard Worker create_aidl_binding_for_backends( 211*7594170eSAndroid Build Coastguard Worker name = name, 212*7594170eSAndroid Build Coastguard Worker version = next_version, 213*7594170eSAndroid Build Coastguard Worker srcs = srcs, 214*7594170eSAndroid Build Coastguard Worker strip_import_prefix = strip_import_prefix, 215*7594170eSAndroid Build Coastguard Worker deps = deps, 216*7594170eSAndroid Build Coastguard Worker hdrs = hdrs, 217*7594170eSAndroid Build Coastguard Worker aidl_flags = aidl_flags, 218*7594170eSAndroid Build Coastguard Worker backend_configs = enabled_backend_configs, 219*7594170eSAndroid Build Coastguard Worker tags = tags, 220*7594170eSAndroid Build Coastguard Worker **kwargs 221*7594170eSAndroid Build Coastguard Worker ) 222*7594170eSAndroid Build Coastguard Worker 223*7594170eSAndroid Build Coastguard Workerdef create_aidl_binding_for_backends( 224*7594170eSAndroid Build Coastguard Worker name, 225*7594170eSAndroid Build Coastguard Worker version = None, 226*7594170eSAndroid Build Coastguard Worker srcs = None, 227*7594170eSAndroid Build Coastguard Worker strip_import_prefix = "", 228*7594170eSAndroid Build Coastguard Worker deps = None, 229*7594170eSAndroid Build Coastguard Worker hdrs = None, 230*7594170eSAndroid Build Coastguard Worker aidl_flags = [], 231*7594170eSAndroid Build Coastguard Worker backend_configs = {}, 232*7594170eSAndroid Build Coastguard Worker tags = [], 233*7594170eSAndroid Build Coastguard Worker **kwargs): 234*7594170eSAndroid Build Coastguard Worker """ 235*7594170eSAndroid Build Coastguard Worker Create aidl_library target and corrending <backend>_aidl_library target for a given version 236*7594170eSAndroid Build Coastguard Worker 237*7594170eSAndroid Build Coastguard Worker Arguments: 238*7594170eSAndroid Build Coastguard Worker name: string, base name of the aidl interface 239*7594170eSAndroid Build Coastguard Worker version: string, version of the aidl interface 240*7594170eSAndroid Build Coastguard Worker srcs: List[Label] list of unversioned AIDL srcs 241*7594170eSAndroid Build Coastguard Worker strip_import_prefix string, the prefix to strip the paths of the .aidl files in srcs 242*7594170eSAndroid Build Coastguard Worker deps: List[AidlGenInfo], a list of other aidl_libraries that the version depends on 243*7594170eSAndroid Build Coastguard Worker hdrs: List[AidlGenInfo], a list of other aidl_libraries that the version depends on but will not link against for C++ 244*7594170eSAndroid Build Coastguard Worker the label of the targets have format <aidl-interface>-V<version_number> 245*7594170eSAndroid Build Coastguard Worker aidl_flags: List[string], a list of flags to pass to the AIDL compiler 246*7594170eSAndroid Build Coastguard Worker backends: List[string], a list of the languages to generate bindings for 247*7594170eSAndroid Build Coastguard Worker """ 248*7594170eSAndroid Build Coastguard Worker aidl_library_name = _versioned_name(name, version) 249*7594170eSAndroid Build Coastguard Worker 250*7594170eSAndroid Build Coastguard Worker # srcs is None when create_aidl_binding_for_backends is called with a 251*7594170eSAndroid Build Coastguard Worker # frozen version specified via versions or versions_with_info. 252*7594170eSAndroid Build Coastguard Worker # next_version being equal to "" means this is an unstable version and 253*7594170eSAndroid Build Coastguard Worker # we should use srcs instead 254*7594170eSAndroid Build Coastguard Worker if version != "": 255*7594170eSAndroid Build Coastguard Worker aidl_flags = aidl_flags + ["--version=" + version] 256*7594170eSAndroid Build Coastguard Worker 257*7594170eSAndroid Build Coastguard Worker hash_file = None 258*7594170eSAndroid Build Coastguard Worker 259*7594170eSAndroid Build Coastguard Worker if srcs == None: 260*7594170eSAndroid Build Coastguard Worker if version == "": 261*7594170eSAndroid Build Coastguard Worker fail("need srcs for unversioned interface") 262*7594170eSAndroid Build Coastguard Worker strip_import_prefix = "aidl_api/{}/{}".format(name, version) 263*7594170eSAndroid Build Coastguard Worker srcs = native.glob([strip_import_prefix + "/**/*.aidl"]) 264*7594170eSAndroid Build Coastguard Worker hash_file = _hash_file(name, version) 265*7594170eSAndroid Build Coastguard Worker 266*7594170eSAndroid Build Coastguard Worker aidl_library( 267*7594170eSAndroid Build Coastguard Worker name = aidl_library_name, 268*7594170eSAndroid Build Coastguard Worker deps = deps + hdrs, 269*7594170eSAndroid Build Coastguard Worker hash_file = hash_file, 270*7594170eSAndroid Build Coastguard Worker version = version, 271*7594170eSAndroid Build Coastguard Worker strip_import_prefix = strip_import_prefix, 272*7594170eSAndroid Build Coastguard Worker srcs = srcs, 273*7594170eSAndroid Build Coastguard Worker flags = aidl_flags, 274*7594170eSAndroid Build Coastguard Worker # The language-specific backends will set more appropriate apex_available values. 275*7594170eSAndroid Build Coastguard Worker tags = tags + ["apex_available=//apex_available:anyapex"], 276*7594170eSAndroid Build Coastguard Worker **kwargs 277*7594170eSAndroid Build Coastguard Worker ) 278*7594170eSAndroid Build Coastguard Worker 279*7594170eSAndroid Build Coastguard Worker for lang, config in backend_configs.items(): 280*7594170eSAndroid Build Coastguard Worker # https://cs.android.com/android/platform/superproject/+/master:system/tools/aidl/build/aidl_gen_rule.go;l=207;drc=a858ae7039b876a30002a1130f24196915a859a4 281*7594170eSAndroid Build Coastguard Worker min_sdk_version = "current" 282*7594170eSAndroid Build Coastguard Worker if "min_sdk_version" in config: 283*7594170eSAndroid Build Coastguard Worker min_sdk_version = config["min_sdk_version"] 284*7594170eSAndroid Build Coastguard Worker 285*7594170eSAndroid Build Coastguard Worker if lang == JAVA: 286*7594170eSAndroid Build Coastguard Worker #TODO(b/285574832) re-enable Java backend 287*7594170eSAndroid Build Coastguard Worker continue 288*7594170eSAndroid Build Coastguard Worker java_aidl_library( 289*7594170eSAndroid Build Coastguard Worker name = aidl_library_name + "-java", 290*7594170eSAndroid Build Coastguard Worker deps = [":" + aidl_library_name], 291*7594170eSAndroid Build Coastguard Worker tags = tags + config.get("tags", []), 292*7594170eSAndroid Build Coastguard Worker # TODO(b/249276008): Pass min_sdk_version to java_aidl_library 293*7594170eSAndroid Build Coastguard Worker **(kwargs | {"target_compatible_with": ["//build/bazel_common_rules/platforms/os:android"]}) 294*7594170eSAndroid Build Coastguard Worker ) 295*7594170eSAndroid Build Coastguard Worker elif lang == CPP or lang == NDK: 296*7594170eSAndroid Build Coastguard Worker dynamic_deps = [] 297*7594170eSAndroid Build Coastguard Worker cppflags = [] 298*7594170eSAndroid Build Coastguard Worker 299*7594170eSAndroid Build Coastguard Worker # https://cs.android.com/android/platform/superproject/+/master:system/tools/aidl/build/aidl_interface_backends.go;l=564;drc=0517d97079d4b08f909e7f35edfa33b88fcc0d0e 300*7594170eSAndroid Build Coastguard Worker if deps != None: 301*7594170eSAndroid Build Coastguard Worker # For each aidl_library target label versioned_name, there's an 302*7594170eSAndroid Build Coastguard Worker # associated cc_library_shared target with label versioned_name-<cpp|ndk> 303*7594170eSAndroid Build Coastguard Worker dynamic_deps.extend(["{}-{}".format(dep, lang) for dep in deps]) 304*7594170eSAndroid Build Coastguard Worker 305*7594170eSAndroid Build Coastguard Worker # https://cs.android.com/android/platform/superproject/+/master:system/tools/aidl/build/aidl_interface_backends.go;l=111;drc=ef9f1352a1a8fec7bb134b1c713e13fc3ccee651 306*7594170eSAndroid Build Coastguard Worker if lang == CPP: 307*7594170eSAndroid Build Coastguard Worker dynamic_deps.extend([ 308*7594170eSAndroid Build Coastguard Worker "//frameworks/native/libs/binder:libbinder", 309*7594170eSAndroid Build Coastguard Worker "//system/core/libutils:libutils", 310*7594170eSAndroid Build Coastguard Worker ]) 311*7594170eSAndroid Build Coastguard Worker elif lang == NDK: 312*7594170eSAndroid Build Coastguard Worker dynamic_deps = dynamic_deps + select({ 313*7594170eSAndroid Build Coastguard Worker "//build/bazel/rules/apex:android-in_apex": ["//frameworks/native/libs/binder/ndk:libbinder_ndk_stub_libs_current"], 314*7594170eSAndroid Build Coastguard Worker "//conditions:default": ["//frameworks/native/libs/binder/ndk:libbinder_ndk"], 315*7594170eSAndroid Build Coastguard Worker }) 316*7594170eSAndroid Build Coastguard Worker 317*7594170eSAndroid Build Coastguard Worker # https://source.corp.google.com/android/system/tools/aidl/build/aidl_interface_backends.go;l=120;rcl=18dd931bde35b502545b7a52987e2363042c151c 318*7594170eSAndroid Build Coastguard Worker cppflags = ["-DBINDER_STABILITY_SUPPORT"] 319*7594170eSAndroid Build Coastguard Worker 320*7594170eSAndroid Build Coastguard Worker if "additional_dynamic_deps" in config: 321*7594170eSAndroid Build Coastguard Worker dynamic_deps += config["additional_dynamic_deps"] 322*7594170eSAndroid Build Coastguard Worker 323*7594170eSAndroid Build Coastguard Worker if hasattr(kwargs, "tidy_checks_as_errors"): 324*7594170eSAndroid Build Coastguard Worker fail("tidy_checks_as_errors cannot be overriden for aidl_interface cc_libraries") 325*7594170eSAndroid Build Coastguard Worker tidy_checks_as_errors = [ 326*7594170eSAndroid Build Coastguard Worker "*", 327*7594170eSAndroid Build Coastguard Worker "-clang-analyzer-deadcode.DeadStores", # b/253079031 328*7594170eSAndroid Build Coastguard Worker "-clang-analyzer-cplusplus.NewDeleteLeaks", # b/253079031 329*7594170eSAndroid Build Coastguard Worker "-clang-analyzer-optin.performance.Padding", # b/253079031 330*7594170eSAndroid Build Coastguard Worker ] 331*7594170eSAndroid Build Coastguard Worker 332*7594170eSAndroid Build Coastguard Worker cc_aidl_library( 333*7594170eSAndroid Build Coastguard Worker name = "{}-{}".format(aidl_library_name, lang), 334*7594170eSAndroid Build Coastguard Worker make_shared = True, 335*7594170eSAndroid Build Coastguard Worker cppflags = cppflags, 336*7594170eSAndroid Build Coastguard Worker deps = [":" + aidl_library_name], 337*7594170eSAndroid Build Coastguard Worker dynamic_deps = dynamic_deps, 338*7594170eSAndroid Build Coastguard Worker lang = lang, 339*7594170eSAndroid Build Coastguard Worker min_sdk_version = min_sdk_version, 340*7594170eSAndroid Build Coastguard Worker tidy = "local", 341*7594170eSAndroid Build Coastguard Worker tidy_checks_as_errors = tidy_checks_as_errors, 342*7594170eSAndroid Build Coastguard Worker tidy_gen_header_filter = True, 343*7594170eSAndroid Build Coastguard Worker tags = tags + config.get("tags", []), 344*7594170eSAndroid Build Coastguard Worker **kwargs 345*7594170eSAndroid Build Coastguard Worker ) 346