xref: /aosp_15_r20/external/jazzer-api/third_party/android/android_configure.bzl (revision 33edd6723662ea34453766bfdca85dbfdd5342b8)
1*33edd672SMark"""Repository rule for Android SKD and NDK autoconfigure"""
2*33edd672SMark
3*33edd672SMarkload("@build_bazel_rules_android//android:rules.bzl", "android_sdk_repository")
4*33edd672SMarkload("@rules_android_ndk//:rules.bzl", "android_ndk_repository")
5*33edd672SMark
6*33edd672SMark_ANDROID_SDK_HOME = "ANDROID_HOME"
7*33edd672SMark_ANDROID_NDK_HOME = "ANDROID_NDK_HOME"
8*33edd672SMark
9*33edd672SMark_ANDROID_REPOS_TEMPLATE = """android_sdk_repository(
10*33edd672SMark        name="androidsdk",
11*33edd672SMark        path={sdk_home},
12*33edd672SMark    )
13*33edd672SMark    android_ndk_repository(
14*33edd672SMark        name="androidndk",
15*33edd672SMark        path={ndk_home},
16*33edd672SMark    )
17*33edd672SMark"""
18*33edd672SMark
19*33edd672SMarkdef _is_windows(repository_ctx):
20*33edd672SMark    """Returns true if the current platform is Windows"""
21*33edd672SMark    return repository_ctx.os.name.lower().startswith("windows")
22*33edd672SMark
23*33edd672SMarkdef _supports_android(repository_ctx):
24*33edd672SMark    sdk_home = repository_ctx.os.environ.get(_ANDROID_SDK_HOME)
25*33edd672SMark    ndk_home = repository_ctx.os.environ.get(_ANDROID_NDK_HOME)
26*33edd672SMark    return sdk_home and ndk_home and not _is_windows(repository_ctx)
27*33edd672SMark
28*33edd672SMarkdef _android_autoconf_impl(repository_ctx):
29*33edd672SMark    """Implementation of the android_autoconf repo rule"""
30*33edd672SMark    sdk_home = repository_ctx.os.environ.get(_ANDROID_SDK_HOME)
31*33edd672SMark    ndk_home = repository_ctx.os.environ.get(_ANDROID_NDK_HOME)
32*33edd672SMark
33*33edd672SMark    # rules_android_ndk does not support Windows yet.
34*33edd672SMark    if _supports_android(repository_ctx):
35*33edd672SMark        repos = _ANDROID_REPOS_TEMPLATE.format(
36*33edd672SMark            sdk_home = repr(sdk_home),
37*33edd672SMark            ndk_home = repr(ndk_home),
38*33edd672SMark        )
39*33edd672SMark    else:
40*33edd672SMark        repos = "pass"
41*33edd672SMark
42*33edd672SMark    repository_ctx.file("BUILD.bazel", "")
43*33edd672SMark    repository_ctx.file("android_configure.bzl", """
44*33edd672SMarkload("@build_bazel_rules_android//android:rules.bzl", "android_sdk_repository")
45*33edd672SMarkload("@rules_android_ndk//:rules.bzl", "android_ndk_repository")
46*33edd672SMark
47*33edd672SMarkdef android_workspace():
48*33edd672SMark    {repos}
49*33edd672SMark    """.format(repos = repos))
50*33edd672SMark
51*33edd672SMarkandroid_configure = repository_rule(
52*33edd672SMark    implementation = _android_autoconf_impl,
53*33edd672SMark    environ = [
54*33edd672SMark        _ANDROID_SDK_HOME,
55*33edd672SMark        _ANDROID_NDK_HOME,
56*33edd672SMark    ],
57*33edd672SMark)
58