blob: 4b7767a22a0f3f735dda280a962215c8cd3012a0 [file] [log] [blame]
# 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",
)