# Copyright 2021 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

def _toolchain_upstream_repository_impl(rctx):
    """Creates a remote repository with a set of toolchain components.

    The bazel embedded toolchain expects two targets injected_headers
    and polyfill. This is rule generates these targets so that
    bazel-embedded can depend on them and so that the targets can depend
    on pigweeds implementation of polyfill. This rule is only ever
    intended to be instantiated with the name
    "bazel_embedded_upstream_toolchain", and should only be used from
    the "toolchain_upstream_deps" macro.

    The bazel-embedded package expects to be able to access these
    targets as @bazel_embedded_upstream_toolchain//:polyfill and
    @bazel_embedded_upstream_toolchain//:injected_headers.

    Args:
      rctx: Repository context.
    """
    rctx.file("BUILD", """
package(default_visibility = ["//visibility:public"])
load(
    "@bazel_embedded//toolchains/tools/include_tools:defs.bzl",
    "cc_injected_toolchain_header_library",
    "cc_polyfill_toolchain_library",
)

cc_polyfill_toolchain_library(
    name = "polyfill",
    deps = ["@pigweed//pw_polyfill:toolchain_polyfill_overrides"],
)

cc_injected_toolchain_header_library(
    name = "injected_headers",
    deps = ["@pigweed//pw_polyfill:toolchain_injected_headers"],
)
""")

_toolchain_upstream_repository = repository_rule(
    _toolchain_upstream_repository_impl,
    doc = """
toolchain_upstream_repository creates a remote repository that can be
accessed by a toolchain repository to configure system includes.

It's recommended to use this rule through the 'toolchain_upstream_deps'
macro rather than using this rule directly.
""",
)

def toolchain_upstream_deps():
    """Implements the set of dependencies that bazel-embedded requires.

    These targets are used to override the default toolchain
    requirements in the remote bazel-embedded toolchain. The remote
    toolchain expects to find two targets;
      - "@bazel_embedded_upstream_toolchain//:polyfill" -> Additional
        system headers for the toolchain
      - "@bazel_embedded_upstream_toolchain//:injected_headers" ->
        Headers that are injected into the toolchain via the -include
        command line argument
    """
    _toolchain_upstream_repository(
        name = "bazel_embedded_upstream_toolchain",
    )
