mirror of https://github.com/grpc/grpc.git
Make Compatible with Bazel 5.0 (#28683)
* See what happens when we remove NDK * Try to debug Kokoro in a super hacky way * And echo the external IP too * Attempt to fix NDK installation * And actually run the portion of the code I need to test out * Clean up * Actually test against bazel 5 * Put export in proper file * Make android an optional dependency * Escape paths for Windows * Revert switch to Bazel 5.0reviewable/pr28868/r1
parent
55e4af1b14
commit
b8ee9ac7e5
4 changed files with 74 additions and 11 deletions
@ -0,0 +1,3 @@ |
||||
exports_files([ |
||||
"android_configure.bzl", |
||||
]) |
@ -0,0 +1,62 @@ |
||||
"""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, |
||||
], |
||||
) |
Loading…
Reference in new issue