# Protocol Buffers - Google's data interchange format # Copyright 2024 Google Inc. All rights reserved. # # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file or at # https://developers.google.com/open-source/licenses/bsd # """ Toolchain helpers. The helpers here should be used for a migration to toolchain in proto rules. Anybody that needs them in another repository should copy them, because after the migration is finished, the helpers can be removed. """ load("//bazel/common:proto_lang_toolchain_info.bzl", "ProtoLangToolchainInfo") load("//bazel/private:native.bzl", "native_proto_common") _incompatible_toolchain_resolution = getattr(native_proto_common, "INCOMPATIBLE_ENABLE_PROTO_TOOLCHAIN_RESOLUTION", False) def _find_toolchain(ctx, legacy_attr, toolchain_type): if _incompatible_toolchain_resolution: toolchain = ctx.toolchains[toolchain_type] if not toolchain: fail("No toolchains registered for '%s'." % toolchain_type) return toolchain.proto else: return getattr(ctx.attr, legacy_attr)[ProtoLangToolchainInfo] def _use_toolchain(toolchain_type): if _incompatible_toolchain_resolution: return [config_common.toolchain_type(toolchain_type, mandatory = False)] else: return [] def _if_legacy_toolchain(legacy_attr_dict): if _incompatible_toolchain_resolution: return {} else: return legacy_attr_dict toolchains = struct( use_toolchain = _use_toolchain, find_toolchain = _find_toolchain, if_legacy_toolchain = _if_legacy_toolchain, INCOMPATIBLE_ENABLE_PROTO_TOOLCHAIN_RESOLUTION = _incompatible_toolchain_resolution, PROTO_TOOLCHAIN = "@rules_proto//proto:toolchain_type", )