From 673e59ea247296c95c51ac01de67f4de8f7a846a Mon Sep 17 00:00:00 2001 From: A Googler Date: Wed, 20 Sep 2023 08:39:36 -0700 Subject: [PATCH] Wrap proto_lang_toolchain into a macro creating a toolchain Issue: https://github.com/bazelbuild/rules_proto/issues/179 PiperOrigin-RevId: 566975629 --- proto/defs.bzl | 15 +++--------- proto/proto_lang_toolchain.bzl | 42 ++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 proto/proto_lang_toolchain.bzl diff --git a/proto/defs.bzl b/proto/defs.bzl index 3fb566f..80af9f8 100644 --- a/proto/defs.bzl +++ b/proto/defs.bzl @@ -14,6 +14,7 @@ """Starlark rules for building protocol buffers.""" +load("//proto:proto_lang_toolchain.bzl", _proto_lang_toolchain = "proto_lang_toolchain") load("//proto/private:native.bzl", "NativeProtoInfo", "native_proto_common") load("//proto/private/rules:proto_descriptor_set.bzl", _proto_descriptor_set = "proto_descriptor_set") @@ -26,18 +27,6 @@ def _add_migration_tag(attrs): attrs["tags"] = [_MIGRATION_TAG] return attrs -def proto_lang_toolchain(**attrs): - """Bazel proto_lang_toolchain rule. - - https://docs.bazel.build/versions/master/be/protocol-buffer.html#proto_lang_toolchain - - Args: - **attrs: Rule attributes - """ - - # buildifier: disable=native-proto - native.proto_lang_toolchain(**_add_migration_tag(attrs)) - def proto_library(**attrs): """Bazel proto_library rule. @@ -52,6 +41,8 @@ def proto_library(**attrs): proto_descriptor_set = _proto_descriptor_set +proto_lang_toolchain = _proto_lang_toolchain + # Encapsulates information provided by `proto_library`. # # https://docs.bazel.build/versions/master/skylark/lib/ProtoInfo.html diff --git a/proto/proto_lang_toolchain.bzl b/proto/proto_lang_toolchain.bzl new file mode 100644 index 0000000..3ab721a --- /dev/null +++ b/proto/proto_lang_toolchain.bzl @@ -0,0 +1,42 @@ +# Copyright 2019 The Bazel Authors. All rights reserved. +# +# 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 +# +# http://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. +"""proto_lang_toolchain rule""" + +def proto_lang_toolchain(*, name, toolchain_type = None, exec_compatible_with = [], target_compatible_with = [], **attrs): + """Creates a proto_lang_toolchain and corresponding toolchain target. + + Toolchain target is only created when toolchain_type is set. + + https://docs.bazel.build/versions/master/be/protocol-buffer.html#proto_lang_toolchain + + Args: + + name: name of the toolchain + toolchain_type: The toolchain type + exec_compatible_with: ([constraints]) List of constraints the prebuild binaries is compatible with. + target_compatible_with: ([constraints]) List of constraints the target libraries are compatible with. + **attrs: Rule attributes + """ + + # buildifier: disable=native-proto + native.proto_lang_toolchain(name = name, **attrs) + + if toolchain_type: + native.toolchain( + name = name + "_toolchain", + toolchain_type = toolchain_type, + exec_compatible_with = exec_compatible_with, + target_compatible_with = target_compatible_with, + toolchain = name, + )