xref: /aosp_15_r20/external/pytorch/third_party/substitution.bzl (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker# This Bazel rules file is derived from https://github.com/tensorflow/tensorflow/blob/master/third_party/common.bzl
2*da0073e9SAndroid Build Coastguard Worker
3*da0073e9SAndroid Build Coastguard Worker# Rule for simple expansion of template files. This performs a simple
4*da0073e9SAndroid Build Coastguard Worker# search over the template file for the keys in substitutions,
5*da0073e9SAndroid Build Coastguard Worker# and replaces them with the corresponding values.
6*da0073e9SAndroid Build Coastguard Worker#
7*da0073e9SAndroid Build Coastguard Worker# Typical usage:
8*da0073e9SAndroid Build Coastguard Worker#   load("/tools/build_rules/template_rule", "template_rule")
9*da0073e9SAndroid Build Coastguard Worker#   template_rule(
10*da0073e9SAndroid Build Coastguard Worker#       name = "ExpandMyTemplate",
11*da0073e9SAndroid Build Coastguard Worker#       src = "my.template",
12*da0073e9SAndroid Build Coastguard Worker#       out = "my.txt",
13*da0073e9SAndroid Build Coastguard Worker#       substitutions = {
14*da0073e9SAndroid Build Coastguard Worker#         "$VAR1": "foo",
15*da0073e9SAndroid Build Coastguard Worker#         "$VAR2": "bar",
16*da0073e9SAndroid Build Coastguard Worker#       }
17*da0073e9SAndroid Build Coastguard Worker#   )
18*da0073e9SAndroid Build Coastguard Worker#
19*da0073e9SAndroid Build Coastguard Worker# Args:
20*da0073e9SAndroid Build Coastguard Worker#   name: The name of the rule.
21*da0073e9SAndroid Build Coastguard Worker#   template: The template file to expand
22*da0073e9SAndroid Build Coastguard Worker#   out: The destination of the expanded file
23*da0073e9SAndroid Build Coastguard Worker#   substitutions: A dictionary mapping strings to their substitutions
24*da0073e9SAndroid Build Coastguard Worker
25*da0073e9SAndroid Build Coastguard Workerdef template_rule_impl(ctx):
26*da0073e9SAndroid Build Coastguard Worker    ctx.actions.expand_template(
27*da0073e9SAndroid Build Coastguard Worker        template = ctx.file.src,
28*da0073e9SAndroid Build Coastguard Worker        output = ctx.outputs.out,
29*da0073e9SAndroid Build Coastguard Worker        substitutions = ctx.attr.substitutions,
30*da0073e9SAndroid Build Coastguard Worker    )
31*da0073e9SAndroid Build Coastguard Worker
32*da0073e9SAndroid Build Coastguard Workertemplate_rule = rule(
33*da0073e9SAndroid Build Coastguard Worker    attrs = {
34*da0073e9SAndroid Build Coastguard Worker        "out": attr.output(mandatory = True),
35*da0073e9SAndroid Build Coastguard Worker        "src": attr.label(
36*da0073e9SAndroid Build Coastguard Worker            mandatory = True,
37*da0073e9SAndroid Build Coastguard Worker            allow_single_file = True,
38*da0073e9SAndroid Build Coastguard Worker        ),
39*da0073e9SAndroid Build Coastguard Worker        "substitutions": attr.string_dict(mandatory = True),
40*da0073e9SAndroid Build Coastguard Worker    },
41*da0073e9SAndroid Build Coastguard Worker    # output_to_genfiles is required for header files.
42*da0073e9SAndroid Build Coastguard Worker    output_to_genfiles = True,
43*da0073e9SAndroid Build Coastguard Worker    implementation = template_rule_impl,
44*da0073e9SAndroid Build Coastguard Worker)
45*da0073e9SAndroid Build Coastguard Worker
46*da0073e9SAndroid Build Coastguard Worker# Header template rule is an extension of template substitution rule
47*da0073e9SAndroid Build Coastguard Worker# That also makes this header a valid dependency for cc_library
48*da0073e9SAndroid Build Coastguard Worker# From https://stackoverflow.com/a/55407399
49*da0073e9SAndroid Build Coastguard Workerdef header_template_rule_impl(ctx):
50*da0073e9SAndroid Build Coastguard Worker    ctx.actions.expand_template(
51*da0073e9SAndroid Build Coastguard Worker        template = ctx.file.src,
52*da0073e9SAndroid Build Coastguard Worker        output = ctx.outputs.out,
53*da0073e9SAndroid Build Coastguard Worker        substitutions = ctx.attr.substitutions,
54*da0073e9SAndroid Build Coastguard Worker    )
55*da0073e9SAndroid Build Coastguard Worker    return [
56*da0073e9SAndroid Build Coastguard Worker        # create a provider which says that this
57*da0073e9SAndroid Build Coastguard Worker        # out file should be made available as a header
58*da0073e9SAndroid Build Coastguard Worker        CcInfo(compilation_context = cc_common.create_compilation_context(
59*da0073e9SAndroid Build Coastguard Worker
60*da0073e9SAndroid Build Coastguard Worker            # pass out the include path for finding this header
61*da0073e9SAndroid Build Coastguard Worker            system_includes = depset([ctx.attr.include, ctx.outputs.out.dirname, ctx.bin_dir.path]),
62*da0073e9SAndroid Build Coastguard Worker
63*da0073e9SAndroid Build Coastguard Worker            # and the actual header here.
64*da0073e9SAndroid Build Coastguard Worker            headers = depset([ctx.outputs.out]),
65*da0073e9SAndroid Build Coastguard Worker        )),
66*da0073e9SAndroid Build Coastguard Worker    ]
67*da0073e9SAndroid Build Coastguard Worker
68*da0073e9SAndroid Build Coastguard Workerheader_template_rule = rule(
69*da0073e9SAndroid Build Coastguard Worker    attrs = {
70*da0073e9SAndroid Build Coastguard Worker        "include": attr.string(),
71*da0073e9SAndroid Build Coastguard Worker        "out": attr.output(mandatory = True),
72*da0073e9SAndroid Build Coastguard Worker        "src": attr.label(
73*da0073e9SAndroid Build Coastguard Worker            mandatory = True,
74*da0073e9SAndroid Build Coastguard Worker            allow_single_file = True,
75*da0073e9SAndroid Build Coastguard Worker        ),
76*da0073e9SAndroid Build Coastguard Worker        "substitutions": attr.string_dict(mandatory = True),
77*da0073e9SAndroid Build Coastguard Worker    },
78*da0073e9SAndroid Build Coastguard Worker    # output_to_genfiles is required for header files.
79*da0073e9SAndroid Build Coastguard Worker    output_to_genfiles = True,
80*da0073e9SAndroid Build Coastguard Worker    implementation = header_template_rule_impl,
81*da0073e9SAndroid Build Coastguard Worker)
82