# 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 # """Testing function for proto_common module""" load("//bazel/common:proto_common.bzl", "proto_common") def _resource_set_callback(_os, inputs_size): return {"memory": 25 + 0.15 * inputs_size, "cpu": 1} def _impl(ctx): outfile = ctx.actions.declare_file(ctx.attr.name) kwargs = {} if ctx.attr.plugin_output == "single": kwargs["plugin_output"] = outfile.path elif ctx.attr.plugin_output == "multiple": kwargs["plugin_output"] = ctx.bin_dir.path elif ctx.attr.plugin_output == "wrong": kwargs["plugin_output"] = ctx.bin_dir.path + "///" if ctx.attr.additional_args: additional_args = ctx.actions.args() additional_args.add_all(ctx.attr.additional_args) kwargs["additional_args"] = additional_args if ctx.files.additional_tools: kwargs["additional_tools"] = ctx.files.additional_tools if ctx.files.additional_inputs: kwargs["additional_inputs"] = depset(ctx.files.additional_inputs) if ctx.attr.use_resource_set: kwargs["resource_set"] = _resource_set_callback if ctx.attr.progress_message: kwargs["experimental_progress_message"] = ctx.attr.progress_message proto_common.compile( ctx.actions, ctx.attr.proto_dep[ProtoInfo], ctx.attr.toolchain[proto_common.ProtoLangToolchainInfo], [outfile], **kwargs ) return [DefaultInfo(files = depset([outfile]))] compile_rule = rule( _impl, attrs = { "proto_dep": attr.label(), "plugin_output": attr.string(), "toolchain": attr.label(default = ":toolchain"), "additional_args": attr.string_list(), "additional_tools": attr.label_list(cfg = "exec"), "additional_inputs": attr.label_list(allow_files = True), "use_resource_set": attr.bool(), "progress_message": attr.string(), }, )