<%include file="header_no_license.mako" />

"""
Defines a Fuchsia crosstool workspace.
"""

# TODO(alainv): Do not hardcode download URLs but export the URL from the
#               the one used in //prebuilt/third_party, using the CIPD APIs.
CLANG_LINUX_DOWNLOAD_URL = (
    "https://storage.googleapis.com/fuchsia/clang/linux-amd64/2a605accf10c22e7905d2cabec22ca317869f85d"
)
CLANG_LINUX_SHA256 = (
    "776b8b7b47da73199f095fc0cabca85e9d9ced7e3bbfc7707e0a4afaacc6544b"
)

CLANG_MAC_DOWNLOAD_URL = (
    "https://storage.googleapis.com/fuchsia/clang/mac-amd64/c0cea0a0fa8cff6d286e46aa4530ffc6b85baaaf"
)
CLANG_MAC_SHA256 = (
    "f06e6cf9bcb09963a3042ff8c8bbfe998f43bf4d61dc5bbb1f1c496792d6bea2"
)


def _configure_crosstool_impl(repository_ctx):
    """
    Configures the Fuchsia crosstool repository.
    """
    if repository_ctx.os.name == "linux":
      clang_download_url = CLANG_LINUX_DOWNLOAD_URL
      clang_sha256 = CLANG_LINUX_SHA256
    elif repository_ctx.os.name == "mac os x":
      clang_download_url = CLANG_MAC_DOWNLOAD_URL
      clang_sha256 = CLANG_MAC_SHA256
    else:
      fail("Unsupported platform: %s" % repository_ctx.os.name)

    # Download the toolchain.
    repository_ctx.download_and_extract(
        url = clang_download_url,
        output = "clang",
        sha256 = clang_sha256,
        type = "zip",
    )
    # Set up the BUILD file from the Fuchsia SDK.
    repository_ctx.symlink(
        Label("@fuchsia_sdk//build_defs/internal/crosstool:BUILD.crosstool"),
        "BUILD",
    )
    # Hack to get the path to the sysroot directory, see
    # https://github.com/bazelbuild/bazel/issues/3901
    % for arch in data.arches:
    sysroot_${arch.short_name} = repository_ctx.path(
        Label("@fuchsia_sdk//arch/${arch.short_name}/sysroot:BUILD")).dirname
    % endfor
    # Set up the CROSSTOOL file from the template.
    repository_ctx.template(
        "CROSSTOOL",
        Label("@fuchsia_sdk//build_defs/internal/crosstool:CROSSTOOL.in"),
        substitutions = {
            % for arch in data.arches:
            "%{SYSROOT_${arch.short_name.upper()}}": str(sysroot_${arch.short_name}),
            % endfor
            "%{CROSSTOOL_ROOT}": str(repository_ctx.path("."))
        },
    )


configure_crosstool = repository_rule(
    implementation = _configure_crosstool_impl,
)
