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