1*e7b1675dSTing-Kang Chang# Copyright 2022 Google LLC 2*e7b1675dSTing-Kang Chang# 3*e7b1675dSTing-Kang Chang# Licensed under the Apache License, Version 2.0 (the "License"); 4*e7b1675dSTing-Kang Chang# you may not use this file except in compliance with the License. 5*e7b1675dSTing-Kang Chang# You may obtain a copy of the License at 6*e7b1675dSTing-Kang Chang# 7*e7b1675dSTing-Kang Chang# http://www.apache.org/licenses/LICENSE-2.0 8*e7b1675dSTing-Kang Chang# 9*e7b1675dSTing-Kang Chang# Unless required by applicable law or agreed to in writing, software 10*e7b1675dSTing-Kang Chang# distributed under the License is distributed on an "AS IS" BASIS, 11*e7b1675dSTing-Kang Chang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*e7b1675dSTing-Kang Chang# See the License for the specific language governing permissions and 13*e7b1675dSTing-Kang Chang# limitations under the License. 14*e7b1675dSTing-Kang Chang 15*e7b1675dSTing-Kang Chang"""Rule for simple expansion of template files.""" 16*e7b1675dSTing-Kang Chang 17*e7b1675dSTing-Kang Changdef _template_rule_impl(ctx): 18*e7b1675dSTing-Kang Chang """Modifies ctx.file.src keys in ctx.attr.substitutions with corresponding values.""" 19*e7b1675dSTing-Kang Chang ctx.actions.expand_template( 20*e7b1675dSTing-Kang Chang template = ctx.file.src, 21*e7b1675dSTing-Kang Chang output = ctx.outputs.out, 22*e7b1675dSTing-Kang Chang substitutions = ctx.attr.substitutions, 23*e7b1675dSTing-Kang Chang ) 24*e7b1675dSTing-Kang Chang 25*e7b1675dSTing-Kang Chang# Rule for simple expansion of template files. Modifies the templates in src substituting the keys 26*e7b1675dSTing-Kang Chang# in substitutions with the corresponding values; the result is output to out. 27*e7b1675dSTing-Kang Chang# 28*e7b1675dSTing-Kang Chang# Borrowed from TensorFlow (https://github.com/tensorflow/tensorflow) 29*e7b1675dSTing-Kang Chang# 30*e7b1675dSTing-Kang Chang# Typical usage: 31*e7b1675dSTing-Kang Chang# template_rule( 32*e7b1675dSTing-Kang Chang# name = "ExpandMyTemplate", 33*e7b1675dSTing-Kang Chang# src = "my.template", 34*e7b1675dSTing-Kang Chang# out = "my.txt", 35*e7b1675dSTing-Kang Chang# substitutions = { 36*e7b1675dSTing-Kang Chang# "$VAR1": "foo", 37*e7b1675dSTing-Kang Chang# "$VAR2": "bar", 38*e7b1675dSTing-Kang Chang# } 39*e7b1675dSTing-Kang Chang# ) 40*e7b1675dSTing-Kang Chang# 41*e7b1675dSTing-Kang Chang# Args: 42*e7b1675dSTing-Kang Chang# name: The name of the rule. 43*e7b1675dSTing-Kang Chang# src: The template file to expand 44*e7b1675dSTing-Kang Chang# out: The destination of the expanded file 45*e7b1675dSTing-Kang Chang# substitutions: A dictionary mapping strings to their substitutions 46*e7b1675dSTing-Kang Changtemplate_rule = rule( 47*e7b1675dSTing-Kang Chang attrs = { 48*e7b1675dSTing-Kang Chang "src": attr.label( 49*e7b1675dSTing-Kang Chang mandatory = True, 50*e7b1675dSTing-Kang Chang allow_single_file = True, 51*e7b1675dSTing-Kang Chang ), 52*e7b1675dSTing-Kang Chang "substitutions": attr.string_dict(mandatory = True), 53*e7b1675dSTing-Kang Chang "out": attr.output(mandatory = True), 54*e7b1675dSTing-Kang Chang }, 55*e7b1675dSTing-Kang Chang # output_to_genfiles is required for header files. 56*e7b1675dSTing-Kang Chang output_to_genfiles = True, 57*e7b1675dSTing-Kang Chang implementation = _template_rule_impl, 58*e7b1675dSTing-Kang Chang) 59