| # 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(), |
| }, |
| ) |