1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- """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,
- ],
- )
|