| # Copyright 2022 The Bazel Authors. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """Module extension to declare Android runtime dependencies for Bazel.""" |
| |
| load("//tools/build_defs/repo:http.bzl", "http_archive", "http_jar") |
| |
| def _remote_android_tools_extensions_impl(_ctx): |
| http_archive( |
| name = "android_tools", |
| sha256 = "2b661a761a735b41c41b3a78089f4fc1982626c76ddb944604ae3ff8c545d3c2", # DO_NOT_REMOVE_THIS_ANDROID_TOOLS_UPDATE_MARKER |
| url = "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.30.0.tar", |
| ) |
| http_jar( |
| name = "android_gmaven_r8", |
| sha256 = "a1d7f902d56cfa8d1e8cd64aa250e63549359fcd096eb793286787b1a1e76db1", |
| url = "https://maven.google.com/com/android/tools/r8/8.2.42/r8-8.2.42.jar", |
| ) |
| |
| remote_android_tools_extensions = module_extension( |
| implementation = _remote_android_tools_extensions_impl, |
| ) |
| |
| def _android_external_repository_impl(repo_ctx): |
| repo_ctx.file( |
| "BUILD", |
| """ |
| alias( |
| name = "has_androidsdk", |
| actual = "%s", |
| visibility = ["//visibility:public"], |
| ) |
| alias( |
| name = "dx_jar_import", |
| actual = "%s", |
| visibility = ["//visibility:public"], |
| ) |
| alias( |
| name = "android_sdk_for_testing", |
| actual = "%s", |
| visibility = ["//visibility:public"], |
| ) |
| alias( |
| name = "android_ndk_for_testing", |
| actual = "%s", |
| visibility = ["//visibility:public"], |
| ) |
| """ % ( |
| repo_ctx.attr.has_androidsdk, |
| repo_ctx.attr.dx_jar_import, |
| repo_ctx.attr.android_sdk_for_testing, |
| repo_ctx.attr.android_ndk_for_testing, |
| ), |
| ) |
| |
| pass |
| |
| android_external_repository = repository_rule( |
| implementation = _android_external_repository_impl, |
| attrs = { |
| "has_androidsdk": attr.label(default = "@bazel_tools//tools/android:always_false"), |
| "dx_jar_import": attr.label(default = "@bazel_tools//tools/android:no_android_sdk_repository_error"), |
| "android_sdk_for_testing": attr.label(default = "@bazel_tools//tools/android:empty"), |
| "android_ndk_for_testing": attr.label(default = "@bazel_tools//tools/android:empty"), |
| }, |
| local = True, |
| ) |
| |
| def _android_sdk_proxy_extensions_impl(module_ctx): |
| root_modules = [m for m in module_ctx.modules if m.is_root] |
| if len(root_modules) > 1: |
| fail("Expected at most one root module, found {}".format(", ".join([x.name for x in root_modules]))) |
| |
| if root_modules: |
| module = root_modules[0] |
| else: |
| module = module_ctx.modules[0] |
| |
| kwargs = {} |
| if module.tags.configure: |
| kwargs["has_androidsdk"] = module.tags.configure[0].has_androidsdk |
| kwargs["dx_jar_import"] = module.tags.configure[0].dx_jar_import |
| kwargs["android_sdk_for_testing"] = module.tags.configure[0].android_sdk_for_testing |
| kwargs["android_ndk_for_testing"] = module.tags.configure[0].android_ndk_for_testing |
| |
| android_external_repository( |
| name = "android_external", |
| **kwargs |
| ) |
| |
| android_sdk_proxy_extensions = module_extension( |
| implementation = _android_sdk_proxy_extensions_impl, |
| tag_classes = { |
| "configure": tag_class(attrs = { |
| "has_androidsdk": attr.label(default = "@bazel_tools//tools/android:always_false"), |
| "dx_jar_import": attr.label(default = "@bazel_tools//tools/android:no_android_sdk_repository_error"), |
| "android_sdk_for_testing": attr.label(default = "@bazel_tools//tools/android:empty"), |
| "android_ndk_for_testing": attr.label(default = "@bazel_tools//tools/android:empty"), |
| }), |
| }, |
| ) |