1# Copyright 2021 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14"""Implements the set of dependencies that bazel-embedded requires.""" 15 16def _toolchain_upstream_repository_impl(rctx): 17 """Creates a remote repository with a set of toolchain components. 18 19 The bazel embedded toolchain expects two targets injected_headers 20 and polyfill. This is rule generates these targets so that 21 bazel-embedded can depend on them and so that the targets can depend 22 on pigweeds implementation of polyfill. This rule is only ever 23 intended to be instantiated with the name 24 "bazel_embedded_upstream_toolchain", and should only be used from 25 the "toolchain_upstream_deps" macro. 26 27 The bazel-embedded package expects to be able to access these 28 targets as @bazel_embedded_upstream_toolchain//:polyfill and 29 @bazel_embedded_upstream_toolchain//:injected_headers. 30 31 Args: 32 rctx: Repository context. 33 """ 34 rctx.file("BUILD", """ 35package(default_visibility = ["//visibility:public"]) 36load( 37 "@bazel_embedded//toolchains/tools/include_tools:defs.bzl", 38 "cc_injected_toolchain_header_library", 39 "cc_polyfill_toolchain_library", 40) 41 42cc_polyfill_toolchain_library( 43 name = "polyfill", 44 deps = ["@pigweed//pw_polyfill:toolchain_polyfill_overrides"], 45) 46 47cc_injected_toolchain_header_library( 48 name = "injected_headers", 49 deps = ["@pigweed//pw_polyfill:toolchain_injected_headers"], 50) 51""") 52 53_toolchain_upstream_repository = repository_rule( 54 _toolchain_upstream_repository_impl, 55 doc = """ 56toolchain_upstream_repository creates a remote repository that can be 57accessed by a toolchain repository to configure system includes. 58 59It's recommended to use this rule through the 'toolchain_upstream_deps' 60macro rather than using this rule directly. 61""", 62) 63 64def toolchain_upstream_deps(): 65 """Implements the set of dependencies that bazel-embedded requires. 66 67 These targets are used to override the default toolchain 68 requirements in the remote bazel-embedded toolchain. The remote 69 toolchain expects to find two targets; 70 - "@bazel_embedded_upstream_toolchain//:polyfill" -> Additional 71 system headers for the toolchain 72 - "@bazel_embedded_upstream_toolchain//:injected_headers" -> 73 Headers that are injected into the toolchain via the -include 74 command line argument 75 """ 76 _toolchain_upstream_repository( 77 name = "bazel_embedded_upstream_toolchain", 78 ) 79