|
|
|
# Protocol Buffers - Google's data interchange format
|
|
|
|
# Copyright 2023 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
|
|
|
|
"""
|
|
|
|
Provide a rule for generating the intermediate feature set defaults used for feature resolution.
|
|
|
|
|
|
|
|
See go/life-of-a-featureset for more information.
|
|
|
|
"""
|
|
|
|
|
|
|
|
load("//bazel/common:proto_info.bzl", "ProtoInfo")
|
|
|
|
|
|
|
|
def _compile_edition_defaults_impl(ctx):
|
|
|
|
out_file = ctx.actions.declare_file(ctx.outputs.output.basename)
|
|
|
|
sources = []
|
|
|
|
paths = []
|
|
|
|
for src in ctx.attr.srcs:
|
|
|
|
sources.extend(src[ProtoInfo].transitive_sources.to_list())
|
|
|
|
paths.extend(src[ProtoInfo].transitive_proto_path.to_list())
|
|
|
|
|
|
|
|
args = ctx.actions.args()
|
|
|
|
args.add("--edition_defaults_out", out_file)
|
|
|
|
|
|
|
|
args.add("--edition_defaults_minimum", ctx.attr.minimum_edition)
|
|
|
|
args.add("--edition_defaults_maximum", ctx.attr.maximum_edition)
|
|
|
|
for p in paths:
|
|
|
|
args.add("--proto_path", p)
|
|
|
|
for source in sources:
|
|
|
|
args.add(source)
|
|
|
|
ctx.actions.run(
|
|
|
|
outputs = [out_file],
|
|
|
|
inputs = sources,
|
|
|
|
executable = ctx.executable.protoc or ctx.executable._protoc_minimal,
|
|
|
|
arguments = [args],
|
|
|
|
progress_message = "Generating edition defaults",
|
|
|
|
)
|
|
|
|
|
|
|
|
compile_edition_defaults = rule(
|
|
|
|
attrs = {
|
|
|
|
"srcs": attr.label_list(
|
|
|
|
mandatory = True,
|
|
|
|
allow_rules = ["proto_library"],
|
|
|
|
providers = [ProtoInfo],
|
|
|
|
),
|
|
|
|
"minimum_edition": attr.string(mandatory = True),
|
|
|
|
"maximum_edition": attr.string(mandatory = True),
|
|
|
|
"protoc": attr.label(
|
|
|
|
mandatory = False,
|
|
|
|
executable = True,
|
|
|
|
cfg = "exec",
|
|
|
|
),
|
|
|
|
"_protoc_minimal": attr.label(
|
|
|
|
default = "//src/google/protobuf/compiler:protoc_minimal",
|
|
|
|
executable = True,
|
|
|
|
cfg = "exec",
|
|
|
|
),
|
|
|
|
},
|
|
|
|
implementation = _compile_edition_defaults_impl,
|
|
|
|
outputs = {
|
|
|
|
"output": "%{name}.binpb",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
def _embed_edition_defaults_impl(ctx):
|
|
|
|
args = ctx.actions.args()
|
|
|
|
args.add(ctx.attr.encoding, format = "--encoding=%s")
|
|
|
|
args.add(ctx.file.defaults, format = "--defaults_path=%s")
|
|
|
|
args.add(ctx.file.template, format = "--template_path=%s")
|
|
|
|
args.add(ctx.outputs.output, format = "--output_path=%s")
|
|
|
|
args.add(ctx.attr.placeholder, format = "--placeholder=%s")
|
|
|
|
|
|
|
|
ctx.actions.run(
|
|
|
|
executable = ctx.executable._escape,
|
|
|
|
arguments = [args],
|
|
|
|
outputs = [ctx.outputs.output],
|
|
|
|
inputs = [ctx.file.defaults, ctx.file.template],
|
|
|
|
)
|
|
|
|
|
|
|
|
embed_edition_defaults = rule(
|
|
|
|
doc = "genrule to embed edition defaults binary data into a template file.",
|
|
|
|
attrs = {
|
|
|
|
"defaults": attr.label(
|
|
|
|
mandatory = True,
|
|
|
|
allow_single_file = True,
|
|
|
|
allow_rules = ["compile_edition_defaults"],
|
|
|
|
providers = [ProtoInfo],
|
|
|
|
doc = "The compile_edition_defaults rule to embed",
|
|
|
|
),
|
|
|
|
"output": attr.output(
|
|
|
|
mandatory = True,
|
|
|
|
doc = "The name of the output file",
|
|
|
|
),
|
|
|
|
"template": attr.label(
|
|
|
|
mandatory = True,
|
|
|
|
allow_single_file = True,
|
|
|
|
doc = "The template to use for generating the output file",
|
|
|
|
),
|
|
|
|
"placeholder": attr.string(
|
|
|
|
mandatory = True,
|
|
|
|
doc = "The placeholder to replace with a serialized string in the template",
|
|
|
|
),
|
|
|
|
"encoding": attr.string(
|
|
|
|
default = "octal",
|
|
|
|
values = ["octal", "base64"],
|
|
|
|
doc = "The encoding format to use for the binary data (octal or base64)",
|
|
|
|
),
|
|
|
|
"_escape": attr.label(
|
|
|
|
default = "//editions:internal_defaults_escape",
|
|
|
|
executable = True,
|
|
|
|
cfg = "exec",
|
|
|
|
),
|
|
|
|
},
|
|
|
|
implementation = _embed_edition_defaults_impl,
|
|
|
|
)
|