1*9e965d6fSRomain Jobredeaux# Copyright 2019 The Bazel Authors. All rights reserved. 2*9e965d6fSRomain Jobredeaux# 3*9e965d6fSRomain Jobredeaux# Licensed under the Apache License, Version 2.0 (the "License"); 4*9e965d6fSRomain Jobredeaux# you may not use this file except in compliance with the License. 5*9e965d6fSRomain Jobredeaux# You may obtain a copy of the License at 6*9e965d6fSRomain Jobredeaux# 7*9e965d6fSRomain Jobredeaux# http://www.apache.org/licenses/LICENSE-2.0 8*9e965d6fSRomain Jobredeaux# 9*9e965d6fSRomain Jobredeaux# Unless required by applicable law or agreed to in writing, software 10*9e965d6fSRomain Jobredeaux# distributed under the License is distributed on an "AS IS" BASIS, 11*9e965d6fSRomain Jobredeaux# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*9e965d6fSRomain Jobredeaux# See the License for the specific language governing permissions and 13*9e965d6fSRomain Jobredeaux# limitations under the License. 14*9e965d6fSRomain Jobredeaux 15*9e965d6fSRomain Jobredeaux"""Android toolchain.""" 16*9e965d6fSRomain Jobredeaux 17*9e965d6fSRomain Jobredeaux_ATTRS = dict( 18*9e965d6fSRomain Jobredeaux aapt2 = attr.label( 19*9e965d6fSRomain Jobredeaux allow_files = True, 20*9e965d6fSRomain Jobredeaux cfg = "exec", 21*9e965d6fSRomain Jobredeaux default = "@androidsdk//:aapt2_binary", 22*9e965d6fSRomain Jobredeaux ), 23*9e965d6fSRomain Jobredeaux aar_import_checks = attr.label( 24*9e965d6fSRomain Jobredeaux allow_single_file = True, 25*9e965d6fSRomain Jobredeaux cfg = "exec", 26*9e965d6fSRomain Jobredeaux default = "//src/validations/aar_import_checks", 27*9e965d6fSRomain Jobredeaux executable = True, 28*9e965d6fSRomain Jobredeaux ), 29*9e965d6fSRomain Jobredeaux aar_embedded_jars_extractor = attr.label( 30*9e965d6fSRomain Jobredeaux allow_files = True, 31*9e965d6fSRomain Jobredeaux cfg = "exec", 32*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:aar_embedded_jars_extractor", 33*9e965d6fSRomain Jobredeaux executable = True, 34*9e965d6fSRomain Jobredeaux ), 35*9e965d6fSRomain Jobredeaux aar_embedded_proguard_extractor = attr.label( 36*9e965d6fSRomain Jobredeaux allow_files = True, 37*9e965d6fSRomain Jobredeaux cfg = "exec", 38*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:aar_embedded_proguard_extractor", 39*9e965d6fSRomain Jobredeaux executable = True, 40*9e965d6fSRomain Jobredeaux ), 41*9e965d6fSRomain Jobredeaux aar_native_libs_zip_creator = attr.label( 42*9e965d6fSRomain Jobredeaux allow_files = True, 43*9e965d6fSRomain Jobredeaux cfg = "exec", 44*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:aar_native_libs_zip_creator", 45*9e965d6fSRomain Jobredeaux executable = True, 46*9e965d6fSRomain Jobredeaux ), 47*9e965d6fSRomain Jobredeaux aar_resources_extractor = attr.label( 48*9e965d6fSRomain Jobredeaux allow_files = True, 49*9e965d6fSRomain Jobredeaux cfg = "exec", 50*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:aar_resources_extractor", 51*9e965d6fSRomain Jobredeaux executable = True, 52*9e965d6fSRomain Jobredeaux ), 53*9e965d6fSRomain Jobredeaux adb = attr.label( 54*9e965d6fSRomain Jobredeaux allow_files = True, 55*9e965d6fSRomain Jobredeaux cfg = "exec", 56*9e965d6fSRomain Jobredeaux default = "@androidsdk//:platform-tools/adb", 57*9e965d6fSRomain Jobredeaux executable = True, 58*9e965d6fSRomain Jobredeaux ), 59*9e965d6fSRomain Jobredeaux add_g3itr_xslt = attr.label( 60*9e965d6fSRomain Jobredeaux cfg = "exec", 61*9e965d6fSRomain Jobredeaux default = Label("//tools/android/xslt:add_g3itr.xslt"), 62*9e965d6fSRomain Jobredeaux allow_files = True, 63*9e965d6fSRomain Jobredeaux ), 64*9e965d6fSRomain Jobredeaux android_archive_jar_optimization_inputs_validator = attr.label( 65*9e965d6fSRomain Jobredeaux allow_files = True, 66*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", 67*9e965d6fSRomain Jobredeaux cfg = "exec", 68*9e965d6fSRomain Jobredeaux executable = True, 69*9e965d6fSRomain Jobredeaux ), 70*9e965d6fSRomain Jobredeaux android_archive_packages_validator = attr.label( 71*9e965d6fSRomain Jobredeaux allow_files = True, 72*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", 73*9e965d6fSRomain Jobredeaux cfg = "exec", 74*9e965d6fSRomain Jobredeaux executable = True, 75*9e965d6fSRomain Jobredeaux ), 76*9e965d6fSRomain Jobredeaux android_kit = attr.label( 77*9e965d6fSRomain Jobredeaux allow_files = True, 78*9e965d6fSRomain Jobredeaux cfg = "exec", 79*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", # TODO: "//src/tools/ak", needs Go 80*9e965d6fSRomain Jobredeaux executable = True, 81*9e965d6fSRomain Jobredeaux ), 82*9e965d6fSRomain Jobredeaux android_resources_busybox = attr.label( 83*9e965d6fSRomain Jobredeaux allow_files = True, 84*9e965d6fSRomain Jobredeaux cfg = "exec", 85*9e965d6fSRomain Jobredeaux default = "@bazel_tools//src/tools/android/java/com/google/devtools/build/android:ResourceProcessorBusyBox_deploy.jar", 86*9e965d6fSRomain Jobredeaux executable = True, 87*9e965d6fSRomain Jobredeaux ), 88*9e965d6fSRomain Jobredeaux apk_to_bundle_tool = attr.label( 89*9e965d6fSRomain Jobredeaux allow_files = True, 90*9e965d6fSRomain Jobredeaux cfg = "exec", 91*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", 92*9e965d6fSRomain Jobredeaux executable = True, 93*9e965d6fSRomain Jobredeaux ), 94*9e965d6fSRomain Jobredeaux bundletool = attr.label( 95*9e965d6fSRomain Jobredeaux allow_files = True, 96*9e965d6fSRomain Jobredeaux cfg = "exec", 97*9e965d6fSRomain Jobredeaux default = "//tools/android:bundletool_deploy.jar", 98*9e965d6fSRomain Jobredeaux executable = True, 99*9e965d6fSRomain Jobredeaux ), 100*9e965d6fSRomain Jobredeaux bundletool_module_builder = attr.label( 101*9e965d6fSRomain Jobredeaux allow_single_file = True, 102*9e965d6fSRomain Jobredeaux cfg = "exec", 103*9e965d6fSRomain Jobredeaux default = "//src/tools/bundletool_module_builder", 104*9e965d6fSRomain Jobredeaux executable = True, 105*9e965d6fSRomain Jobredeaux ), 106*9e965d6fSRomain Jobredeaux centralize_r_class_tool = attr.label( 107*9e965d6fSRomain Jobredeaux allow_files = True, 108*9e965d6fSRomain Jobredeaux cfg = "exec", 109*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", 110*9e965d6fSRomain Jobredeaux executable = True, 111*9e965d6fSRomain Jobredeaux ), 112*9e965d6fSRomain Jobredeaux data_binding_annotation_processor = attr.label( 113*9e965d6fSRomain Jobredeaux cfg = "exec", 114*9e965d6fSRomain Jobredeaux default = "//tools/android:compiler_annotation_processor", 115*9e965d6fSRomain Jobredeaux ), 116*9e965d6fSRomain Jobredeaux data_binding_annotation_template = attr.label( 117*9e965d6fSRomain Jobredeaux default = "//rules:data_binding_annotation_template.txt", 118*9e965d6fSRomain Jobredeaux allow_files = True, 119*9e965d6fSRomain Jobredeaux ), 120*9e965d6fSRomain Jobredeaux data_binding_exec = attr.label( 121*9e965d6fSRomain Jobredeaux cfg = "exec", 122*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:databinding_exec", 123*9e965d6fSRomain Jobredeaux executable = True, 124*9e965d6fSRomain Jobredeaux ), 125*9e965d6fSRomain Jobredeaux desugar = attr.label( 126*9e965d6fSRomain Jobredeaux cfg = "exec", 127*9e965d6fSRomain Jobredeaux default = Label("@bazel_tools//tools/android:desugar_java8"), 128*9e965d6fSRomain Jobredeaux executable = True, 129*9e965d6fSRomain Jobredeaux ), 130*9e965d6fSRomain Jobredeaux desugar_java8_extra_bootclasspath = attr.label( 131*9e965d6fSRomain Jobredeaux allow_files = True, 132*9e965d6fSRomain Jobredeaux cfg = "exec", 133*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:desugar_java8_extra_bootclasspath", 134*9e965d6fSRomain Jobredeaux executable = True, 135*9e965d6fSRomain Jobredeaux ), 136*9e965d6fSRomain Jobredeaux dexbuilder = attr.label( 137*9e965d6fSRomain Jobredeaux cfg = "exec", 138*9e965d6fSRomain Jobredeaux default = Label("@bazel_tools//tools/android:dexbuilder"), 139*9e965d6fSRomain Jobredeaux executable = True, 140*9e965d6fSRomain Jobredeaux ), 141*9e965d6fSRomain Jobredeaux dexbuilder_after_proguard = attr.label( 142*9e965d6fSRomain Jobredeaux cfg = "exec", 143*9e965d6fSRomain Jobredeaux default = Label("@bazel_tools//tools/android:dexbuilder_after_proguard"), 144*9e965d6fSRomain Jobredeaux executable = True, 145*9e965d6fSRomain Jobredeaux ), 146*9e965d6fSRomain Jobredeaux dexmerger = attr.label( 147*9e965d6fSRomain Jobredeaux cfg = "exec", 148*9e965d6fSRomain Jobredeaux default = Label("@bazel_tools//tools/android:dexmerger"), 149*9e965d6fSRomain Jobredeaux executable = True, 150*9e965d6fSRomain Jobredeaux ), 151*9e965d6fSRomain Jobredeaux dexsharder = attr.label( 152*9e965d6fSRomain Jobredeaux cfg = "exec", 153*9e965d6fSRomain Jobredeaux default = Label("@bazel_tools//tools/android:dexsharder"), 154*9e965d6fSRomain Jobredeaux executable = True, 155*9e965d6fSRomain Jobredeaux ), 156*9e965d6fSRomain Jobredeaux enforce_min_sdk_floor_tool = attr.label( 157*9e965d6fSRomain Jobredeaux allow_files = True, 158*9e965d6fSRomain Jobredeaux cfg = "exec", 159*9e965d6fSRomain Jobredeaux default = "//src/tools/enforce_min_sdk_floor", 160*9e965d6fSRomain Jobredeaux executable = True, 161*9e965d6fSRomain Jobredeaux ), 162*9e965d6fSRomain Jobredeaux idlclass = attr.label( 163*9e965d6fSRomain Jobredeaux allow_files = True, 164*9e965d6fSRomain Jobredeaux cfg = "exec", 165*9e965d6fSRomain Jobredeaux default = "@bazel_tools//src/tools/android/java/com/google/devtools/build/android/idlclass:IdlClass_deploy.jar", 166*9e965d6fSRomain Jobredeaux executable = True, 167*9e965d6fSRomain Jobredeaux ), 168*9e965d6fSRomain Jobredeaux import_deps_checker = attr.label( 169*9e965d6fSRomain Jobredeaux allow_files = True, 170*9e965d6fSRomain Jobredeaux cfg = "exec", 171*9e965d6fSRomain Jobredeaux default = "@android_tools//:ImportDepsChecker_deploy.jar", 172*9e965d6fSRomain Jobredeaux executable = True, 173*9e965d6fSRomain Jobredeaux ), 174*9e965d6fSRomain Jobredeaux jacocorunner = attr.label( 175*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", 176*9e965d6fSRomain Jobredeaux ), 177*9e965d6fSRomain Jobredeaux java_stub = attr.label( 178*9e965d6fSRomain Jobredeaux allow_files = True, 179*9e965d6fSRomain Jobredeaux # used in android_local_test 180*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/java:java_stub_template.txt", 181*9e965d6fSRomain Jobredeaux ), 182*9e965d6fSRomain Jobredeaux jdeps_tool = attr.label( 183*9e965d6fSRomain Jobredeaux allow_files = True, 184*9e965d6fSRomain Jobredeaux cfg = "exec", 185*9e965d6fSRomain Jobredeaux # used in android_local_test 186*9e965d6fSRomain Jobredeaux default = "//src/tools/jdeps", 187*9e965d6fSRomain Jobredeaux executable = True, 188*9e965d6fSRomain Jobredeaux ), 189*9e965d6fSRomain Jobredeaux merge_baseline_profiles_tool = attr.label( 190*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", 191*9e965d6fSRomain Jobredeaux cfg = "exec", 192*9e965d6fSRomain Jobredeaux executable = True, 193*9e965d6fSRomain Jobredeaux ), 194*9e965d6fSRomain Jobredeaux object_method_rewriter = attr.label( 195*9e965d6fSRomain Jobredeaux allow_files = True, 196*9e965d6fSRomain Jobredeaux cfg = "exec", 197*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", 198*9e965d6fSRomain Jobredeaux executable = True, 199*9e965d6fSRomain Jobredeaux ), 200*9e965d6fSRomain Jobredeaux proguard_allowlister = attr.label( 201*9e965d6fSRomain Jobredeaux cfg = "exec", 202*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/jdk:proguard_whitelister", 203*9e965d6fSRomain Jobredeaux executable = True, 204*9e965d6fSRomain Jobredeaux ), 205*9e965d6fSRomain Jobredeaux profgen = attr.label( 206*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", 207*9e965d6fSRomain Jobredeaux cfg = "exec", 208*9e965d6fSRomain Jobredeaux executable = True, 209*9e965d6fSRomain Jobredeaux ), 210*9e965d6fSRomain Jobredeaux proto_map_generator = attr.label( 211*9e965d6fSRomain Jobredeaux cfg = "exec", 212*9e965d6fSRomain Jobredeaux default = "@androidsdk//:fail", 213*9e965d6fSRomain Jobredeaux allow_files = True, 214*9e965d6fSRomain Jobredeaux executable = True, 215*9e965d6fSRomain Jobredeaux ), 216*9e965d6fSRomain Jobredeaux r8 = attr.label( 217*9e965d6fSRomain Jobredeaux cfg = "exec", 218*9e965d6fSRomain Jobredeaux default = "//tools/android:r8_deploy.jar", 219*9e965d6fSRomain Jobredeaux executable = True, 220*9e965d6fSRomain Jobredeaux allow_files = True, 221*9e965d6fSRomain Jobredeaux ), 222*9e965d6fSRomain Jobredeaux resource_shrinker = attr.label( 223*9e965d6fSRomain Jobredeaux cfg = "exec", 224*9e965d6fSRomain Jobredeaux default = "//tools/android:resource_shrinker_deploy.jar", 225*9e965d6fSRomain Jobredeaux executable = True, 226*9e965d6fSRomain Jobredeaux allow_files = True, 227*9e965d6fSRomain Jobredeaux ), 228*9e965d6fSRomain Jobredeaux res_v3_dummy_manifest = attr.label( 229*9e965d6fSRomain Jobredeaux allow_files = True, 230*9e965d6fSRomain Jobredeaux default = "//rules:res_v3_dummy_AndroidManifest.xml", 231*9e965d6fSRomain Jobredeaux ), 232*9e965d6fSRomain Jobredeaux res_v3_dummy_r_txt = attr.label( 233*9e965d6fSRomain Jobredeaux allow_files = True, 234*9e965d6fSRomain Jobredeaux default = "//rules:res_v3_dummy_R.txt", 235*9e965d6fSRomain Jobredeaux ), 236*9e965d6fSRomain Jobredeaux robolectric_template = attr.label( 237*9e965d6fSRomain Jobredeaux allow_files = True, 238*9e965d6fSRomain Jobredeaux default = "//rules:robolectric_properties_template.txt", 239*9e965d6fSRomain Jobredeaux ), 240*9e965d6fSRomain Jobredeaux sandboxed_sdk_toolbox = attr.label( 241*9e965d6fSRomain Jobredeaux allow_single_file = True, 242*9e965d6fSRomain Jobredeaux cfg = "exec", 243*9e965d6fSRomain Jobredeaux default = "//src/tools/java/com/google/devtools/build/android/sandboxedsdktoolbox:sandboxed_sdk_toolbox_deploy.jar", 244*9e965d6fSRomain Jobredeaux executable = True, 245*9e965d6fSRomain Jobredeaux ), 246*9e965d6fSRomain Jobredeaux shuffle_jars = attr.label( 247*9e965d6fSRomain Jobredeaux cfg = "exec", 248*9e965d6fSRomain Jobredeaux default = Label("@bazel_tools//tools/android:shuffle_jars"), 249*9e965d6fSRomain Jobredeaux executable = True, 250*9e965d6fSRomain Jobredeaux ), 251*9e965d6fSRomain Jobredeaux testsupport = attr.label( 252*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/jdk:TestRunner", 253*9e965d6fSRomain Jobredeaux ), 254*9e965d6fSRomain Jobredeaux unzip_tool = attr.label( 255*9e965d6fSRomain Jobredeaux cfg = "exec", 256*9e965d6fSRomain Jobredeaux default = "//toolchains/android:unzip", 257*9e965d6fSRomain Jobredeaux executable = True, 258*9e965d6fSRomain Jobredeaux ), 259*9e965d6fSRomain Jobredeaux xsltproc_tool = attr.label( 260*9e965d6fSRomain Jobredeaux cfg = "exec", 261*9e965d6fSRomain Jobredeaux default = Label("//tools/android/xslt:xslt"), 262*9e965d6fSRomain Jobredeaux allow_files = True, 263*9e965d6fSRomain Jobredeaux executable = True, 264*9e965d6fSRomain Jobredeaux ), 265*9e965d6fSRomain Jobredeaux zip_tool = attr.label( 266*9e965d6fSRomain Jobredeaux cfg = "exec", 267*9e965d6fSRomain Jobredeaux default = "//toolchains/android:zip", 268*9e965d6fSRomain Jobredeaux executable = True, 269*9e965d6fSRomain Jobredeaux ), 270*9e965d6fSRomain Jobredeaux zip_filter = attr.label( 271*9e965d6fSRomain Jobredeaux cfg = "exec", 272*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:zip_filter", 273*9e965d6fSRomain Jobredeaux executable = True, 274*9e965d6fSRomain Jobredeaux ), 275*9e965d6fSRomain Jobredeaux zipper = attr.label( 276*9e965d6fSRomain Jobredeaux allow_single_file = True, 277*9e965d6fSRomain Jobredeaux cfg = "exec", 278*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/zip:zipper", 279*9e965d6fSRomain Jobredeaux executable = True, 280*9e965d6fSRomain Jobredeaux ), 281*9e965d6fSRomain Jobredeaux dex_zips_merger = attr.label( 282*9e965d6fSRomain Jobredeaux cfg = "exec", 283*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:merge_dexzips", 284*9e965d6fSRomain Jobredeaux executable = True, 285*9e965d6fSRomain Jobredeaux ), 286*9e965d6fSRomain Jobredeaux java8_legacy_dex = attr.label( 287*9e965d6fSRomain Jobredeaux allow_single_file = True, 288*9e965d6fSRomain Jobredeaux cfg = "exec", 289*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:java8_legacy_dex", 290*9e965d6fSRomain Jobredeaux ), 291*9e965d6fSRomain Jobredeaux build_java8_legacy_dex = attr.label( 292*9e965d6fSRomain Jobredeaux cfg = "exec", 293*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:build_java8_legacy_dex", 294*9e965d6fSRomain Jobredeaux executable = True, 295*9e965d6fSRomain Jobredeaux ), 296*9e965d6fSRomain Jobredeaux dex_list_obfuscator = attr.label( 297*9e965d6fSRomain Jobredeaux cfg = "exec", 298*9e965d6fSRomain Jobredeaux default = "@bazel_tools//tools/android:dex_list_obfuscator", 299*9e965d6fSRomain Jobredeaux executable = True, 300*9e965d6fSRomain Jobredeaux ), 301*9e965d6fSRomain Jobredeaux) 302*9e965d6fSRomain Jobredeaux 303*9e965d6fSRomain Jobredeauxdef _impl(ctx): 304*9e965d6fSRomain Jobredeaux return [platform_common.ToolchainInfo( 305*9e965d6fSRomain Jobredeaux **{name: getattr(ctx.attr, name) for name in _ATTRS.keys()} 306*9e965d6fSRomain Jobredeaux )] 307*9e965d6fSRomain Jobredeaux 308*9e965d6fSRomain Jobredeauxandroid_toolchain = rule( 309*9e965d6fSRomain Jobredeaux implementation = _impl, 310*9e965d6fSRomain Jobredeaux attrs = _ATTRS, 311*9e965d6fSRomain Jobredeaux) 312