# Copyright 2022 Google LLC # # 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. """Rule for simple expansion of template files.""" def _template_rule_impl(ctx): """Modifies ctx.file.src keys in ctx.attr.substitutions with corresponding values.""" ctx.actions.expand_template( template = ctx.file.src, output = ctx.outputs.out, substitutions = ctx.attr.substitutions, ) # Rule for simple expansion of template files. Modifies the templates in src substituting the keys # in substitutions with the corresponding values; the result is output to out. # # Borrowed from TensorFlow (https://github.com/tensorflow/tensorflow) # # Typical usage: # template_rule( # name = "ExpandMyTemplate", # src = "my.template", # out = "my.txt", # substitutions = { # "$VAR1": "foo", # "$VAR2": "bar", # } # ) # # Args: # name: The name of the rule. # src: The template file to expand # out: The destination of the expanded file # substitutions: A dictionary mapping strings to their substitutions template_rule = rule( attrs = { "src": attr.label( mandatory = True, allow_single_file = True, ), "substitutions": attr.string_dict(mandatory = True), "out": attr.output(mandatory = True), }, # output_to_genfiles is required for header files. output_to_genfiles = True, implementation = _template_rule_impl, )