Added `TemplateVariableInfo` to `rust_toolchain`. (#1416)

diff --git a/rust/toolchain.bzl b/rust/toolchain.bzl
index b7a72ef..9a05459 100644
--- a/rust/toolchain.bzl
+++ b/rust/toolchain.bzl
@@ -483,6 +483,8 @@
             "RUSTFMT": sysroot.rustfmt.path,
         })
 
+    make_variable_info = platform_common.TemplateVariableInfo(make_variables)
+
     toolchain = platform_common.ToolchainInfo(
         all_files = sysroot.all_files,
         binary_ext = ctx.attr.binary_ext,
@@ -497,7 +499,7 @@
         libstd_and_allocator_ccinfo = _make_libstd_and_allocator_ccinfo(ctx, rust_std, ctx.attr.allocator_library),
         llvm_cov = ctx.file.llvm_cov,
         llvm_profdata = ctx.file.llvm_profdata,
-        make_variables = platform_common.TemplateVariableInfo(make_variables),
+        make_variables = make_variable_info,
         os = ctx.attr.os,
         rust_doc = sysroot.rustdoc,
         rust_lib = sysroot.rust_std,  # `rust_lib` is deprecated and only exists for legacy support.
@@ -520,7 +522,10 @@
         _rename_first_party_crates = rename_first_party_crates,
         _third_party_dir = third_party_dir,
     )
-    return [toolchain]
+    return [
+        toolchain,
+        make_variable_info,
+    ]
 
 rust_toolchain = rule(
     implementation = _rust_toolchain_impl,
diff --git a/test/unit/toolchain_make_variables/main.rs b/test/unit/toolchain_make_variables/main.rs
index da0f5d9..997d772 100644
--- a/test/unit/toolchain_make_variables/main.rs
+++ b/test/unit/toolchain_make_variables/main.rs
@@ -1 +1,8 @@
-pub fn main() {}
+use std::env;
+use std::fs;
+
+pub fn main() {
+    let argv1 = env::args().nth(1).expect("Missing output argument");
+
+    fs::write(argv1, "").unwrap();
+}
diff --git a/test/unit/toolchain_make_variables/test.rs b/test/unit/toolchain_make_variables/test.rs
new file mode 100644
index 0000000..f328e4d
--- /dev/null
+++ b/test/unit/toolchain_make_variables/test.rs
@@ -0,0 +1 @@
+fn main() {}
diff --git a/test/unit/toolchain_make_variables/toolchain_make_variables_test.bzl b/test/unit/toolchain_make_variables/toolchain_make_variables_test.bzl
index 686d4cf..b20e79e 100644
--- a/test/unit/toolchain_make_variables/toolchain_make_variables_test.bzl
+++ b/test/unit/toolchain_make_variables/toolchain_make_variables_test.bzl
@@ -13,7 +13,7 @@
     "ENV_VAR_RUST_SYSROOT": "$(RUST_SYSROOT)",
 }
 
-def _rustc_env_variable_expansion_test_impl(ctx):
+def _rust_toolchain_make_variable_expansion_test_common_impl(ctx, mnemonic):
     env = analysistest.begin(ctx)
     target = analysistest.target_under_test(env)
     action = target.actions[0]
@@ -21,7 +21,7 @@
     assert_action_mnemonic(
         env = env,
         action = action,
-        mnemonic = "Rustc",
+        mnemonic = mnemonic,
     )
 
     toolchain = ctx.attr._current_rust_toolchain[platform_common.ToolchainInfo]
@@ -45,12 +45,105 @@
 
     return analysistest.end(env)
 
-rustc_env_variable_expansion_test = analysistest.make(
+def make_toolchain_make_variable_test(impl):
+    return analysistest.make(
+        impl = impl,
+        attrs = {
+            "_current_rust_toolchain": attr.label(
+                doc = "The currently registered rust toolchain",
+                default = Label("//rust/toolchain:current_rust_toolchain"),
+            ),
+        },
+    )
+
+def _rustc_env_variable_expansion_test_impl(ctx):
+    return _rust_toolchain_make_variable_expansion_test_common_impl(ctx, "Rustc")
+
+rustc_env_variable_expansion_test = make_toolchain_make_variable_test(
     impl = _rustc_env_variable_expansion_test_impl,
+)
+
+def _rust_toolchain_make_variable_expansion_test(ctx):
+    return _rust_toolchain_make_variable_expansion_test_common_impl(ctx, "RustToolchainConsumer")
+
+rust_toolchain_make_variable_expansion_test = make_toolchain_make_variable_test(
+    impl = _rust_toolchain_make_variable_expansion_test,
+)
+
+def _current_rust_toolchain_make_variable_expansion_test_impl(ctx):
+    return _rust_toolchain_make_variable_expansion_test_common_impl(ctx, "CurrentRustToolchainConsumer")
+
+current_rust_toolchain_make_variable_expansion_test = make_toolchain_make_variable_test(
+    impl = _current_rust_toolchain_make_variable_expansion_test_impl,
+)
+
+def _rust_toolchain_consumer_common_impl(ctx, mnemonic):
+    output = ctx.actions.declare_file(ctx.label.name)
+
+    args = ctx.actions.args()
+    args.add(output)
+
+    # Expand make variables
+    env = {
+        key: ctx.expand_make_variables(
+            key,
+            val,
+            {},
+        )
+        for key, val in ctx.attr.env.items()
+    }
+
+    ctx.actions.run(
+        outputs = [output],
+        executable = ctx.executable.writer,
+        mnemonic = mnemonic,
+        env = env,
+        arguments = [args],
+    )
+
+    return DefaultInfo(
+        files = depset([output]),
+    )
+
+def _rust_toolchain_consumer_impl(ctx):
+    return _rust_toolchain_consumer_common_impl(ctx, "RustToolchainConsumer")
+
+rust_toolchain_consumer = rule(
+    implementation = _rust_toolchain_consumer_impl,
+    doc = "A helper rule to test make variable expansion of rules that depend on `rust_toolchain`.",
     attrs = {
-        "_current_rust_toolchain": attr.label(
-            doc = "The currently registered rust toolchain",
-            default = Label("//rust/toolchain:current_rust_toolchain"),
+        "env": attr.string_dict(
+            doc = "Environment variables used for expansion",
+            mandatory = True,
+        ),
+        "writer": attr.label(
+            doc = "An executable for creating an action output",
+            cfg = "exec",
+            executable = True,
+            mandatory = True,
+        ),
+    },
+    toolchains = [
+        "@rules_rust//rust:toolchain",
+    ],
+)
+
+def _current_rust_toolchain_consumer_impl(ctx):
+    return _rust_toolchain_consumer_common_impl(ctx, "CurrentRustToolchainConsumer")
+
+current_rust_toolchain_consumer = rule(
+    implementation = _current_rust_toolchain_consumer_impl,
+    doc = "A helper rule to test make variable expansion of `current_rust_toolchain`.",
+    attrs = {
+        "env": attr.string_dict(
+            doc = "Environment variables used for expansion",
+            mandatory = True,
+        ),
+        "writer": attr.label(
+            doc = "An executable for creating an action output",
+            cfg = "exec",
+            executable = True,
+            mandatory = True,
         ),
     },
 )
@@ -59,7 +152,6 @@
     rust_library(
         name = "library",
         srcs = ["main.rs"],
-        toolchains = ["//rust/toolchain:current_rust_toolchain"],
         rustc_env = _ENV,
         edition = "2018",
     )
@@ -67,15 +159,13 @@
     rust_binary(
         name = "binary",
         srcs = ["main.rs"],
-        toolchains = ["//rust/toolchain:current_rust_toolchain"],
         rustc_env = _ENV,
         edition = "2018",
     )
 
     rust_test(
         name = "integration_test",
-        srcs = ["main.rs"],
-        toolchains = ["//rust/toolchain:current_rust_toolchain"],
+        srcs = ["test.rs"],
         rustc_env = _ENV,
         edition = "2018",
     )
@@ -83,10 +173,22 @@
     rust_test(
         name = "unit_test",
         crate = "library",
-        toolchains = ["//rust/toolchain:current_rust_toolchain"],
         rustc_env = _ENV,
     )
 
+    rust_toolchain_consumer(
+        name = "rust_toolchain_consumer",
+        env = _ENV,
+        writer = ":binary",
+    )
+
+    current_rust_toolchain_consumer(
+        name = "current_rust_toolchain_consumer",
+        env = _ENV,
+        toolchains = ["//rust/toolchain:current_rust_toolchain"],
+        writer = ":binary",
+    )
+
 def toolchain_make_variable_test_suite(name):
     """Defines a test suite
 
@@ -115,6 +217,16 @@
         target_under_test = ":unit_test",
     )
 
+    rust_toolchain_make_variable_expansion_test(
+        name = "rust_toolchain_make_variable_expansion_test",
+        target_under_test = ":rust_toolchain_consumer",
+    )
+
+    current_rust_toolchain_make_variable_expansion_test(
+        name = "current_rust_toolchain_make_variable_expansion_test",
+        target_under_test = ":current_rust_toolchain_consumer",
+    )
+
     native.test_suite(
         name = name,
         tests = [
@@ -122,5 +234,7 @@
             ":rustc_env_variable_expansion_binary_test",
             ":rustc_env_variable_expansion_integration_test_test",
             ":rustc_env_variable_expansion_unit_test_test",
+            ":rust_toolchain_make_variable_expansion_test",
+            ":current_rust_toolchain_make_variable_expansion_test",
         ],
     )