mirror of https://github.com/grpc/grpc.git
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
3 years ago
|
"""Repository rule for Android SDK and NDK autoconfiguration.
|
||
|
|
||
|
This rule is a no-op unless the required android environment variables are set.
|
||
|
"""
|
||
|
|
||
|
# Based on https://github.com/tensorflow/tensorflow/tree/34c03ed67692eb76cb3399cebca50ea8bcde064c/third_party/android
|
||
|
# Workaround for https://github.com/bazelbuild/bazel/issues/14260
|
||
|
|
||
|
_ANDROID_NDK_HOME = "ANDROID_NDK_HOME"
|
||
|
_ANDROID_SDK_HOME = "ANDROID_HOME"
|
||
|
|
||
|
def _escape_for_windows(path):
|
||
|
"""Properly escape backslashes for Windows.
|
||
|
|
||
|
Ideally, we would do this conditionally, but there is seemingly no way to
|
||
|
determine whether or not this is being called from Windows.
|
||
|
"""
|
||
|
return path.replace("\\", "\\\\")
|
||
|
|
||
|
def _android_autoconf_impl(repository_ctx):
|
||
|
sdk_home = repository_ctx.os.environ.get(_ANDROID_SDK_HOME)
|
||
|
ndk_home = repository_ctx.os.environ.get(_ANDROID_NDK_HOME)
|
||
|
|
||
|
# version 31.0.0 won't work https://stackoverflow.com/a/68036845
|
||
|
sdk_rule = ""
|
||
|
if sdk_home:
|
||
|
sdk_rule = """
|
||
|
native.android_sdk_repository(
|
||
|
name="androidsdk",
|
||
|
path="{}",
|
||
|
build_tools_version="30.0.3",
|
||
|
)
|
||
|
""".format(_escape_for_windows(sdk_home))
|
||
|
|
||
|
# Note that Bazel does not support NDK 22 yet, and Bazel 3.7.1 only
|
||
|
# supports up to API level 29 for NDK 21
|
||
|
ndk_rule = ""
|
||
|
if ndk_home:
|
||
|
ndk_rule = """
|
||
|
native.android_ndk_repository(
|
||
|
name="androidndk",
|
||
|
path="{}",
|
||
|
)
|
||
|
""".format(_escape_for_windows(ndk_home))
|
||
|
|
||
|
if ndk_rule == "" and sdk_rule == "":
|
||
|
sdk_rule = "pass"
|
||
|
|
||
|
repository_ctx.file("BUILD.bazel", "")
|
||
|
repository_ctx.file("android_configure.bzl", """
|
||
|
def android_workspace():
|
||
|
{}
|
||
|
{}
|
||
|
""".format(sdk_rule, ndk_rule))
|
||
|
|
||
|
android_configure = repository_rule(
|
||
|
implementation = _android_autoconf_impl,
|
||
|
environ = [
|
||
|
_ANDROID_NDK_HOME,
|
||
|
_ANDROID_SDK_HOME,
|
||
|
],
|
||
|
)
|