Refactor windows_cc_configure.bzl

Separate the template variables for different toolchains, this will make it easier to add proper toolchain support for other compiler, eg. clang-cl and cl for x86 or arm64 platforms.

Related https://github.com/bazelbuild/bazel/issues/8353

RELNOTES: None
PiperOrigin-RevId: 258528733
diff --git a/tools/cpp/windows_cc_configure.bzl b/tools/cpp/windows_cc_configure.bzl
index 08866e2..8cd9771 100644
--- a/tools/cpp/windows_cc_configure.bzl
+++ b/tools/cpp/windows_cc_configure.bzl
@@ -463,29 +463,23 @@
     # Stderr should look like "clang version X.X.X ..."
     return result.stderr.strip().split(" ")[2]
 
-def configure_windows_toolchain(repository_ctx):
-    """Configure C++ toolchain on Windows."""
-    paths = resolve_labels(repository_ctx, [
-        "@bazel_tools//tools/cpp:BUILD.windows.tpl",
-        "@bazel_tools//tools/cpp:windows_cc_toolchain_config.bzl",
-        "@bazel_tools//tools/cpp:armeabi_cc_toolchain_config.bzl",
-        "@bazel_tools//tools/cpp:vc_installation_error.bat.tpl",
-        "@bazel_tools//tools/cpp:msys_gcc_installation_error.bat",
-    ])
+def _get_msys_mingw_vars(repository_ctx):
+    """Get the variables we need to populate the msys/mingw toolchains."""
+    tool_paths, tool_bin_path, inc_dir_msys = _get_escaped_windows_msys_starlark_content(repository_ctx)
+    tool_paths_mingw, tool_bin_path_mingw, inc_dir_mingw = _get_escaped_windows_msys_starlark_content(repository_ctx, use_mingw = True)
+    msys_mingw_vars = {
+        "%{cxx_builtin_include_directories}": inc_dir_msys,
+        "%{mingw_cxx_builtin_include_directories}": inc_dir_mingw,
+        "%{tool_paths}": tool_paths,
+        "%{mingw_tool_paths}": tool_paths_mingw,
+        "%{tool_bin_path}": tool_bin_path,
+        "%{mingw_tool_bin_path}": tool_bin_path_mingw,
+    }
+    return msys_mingw_vars
 
-    repository_ctx.symlink(
-        paths["@bazel_tools//tools/cpp:windows_cc_toolchain_config.bzl"],
-        "windows_cc_toolchain_config.bzl",
-    )
-    repository_ctx.symlink(
-        paths["@bazel_tools//tools/cpp:armeabi_cc_toolchain_config.bzl"],
-        "armeabi_cc_toolchain_config.bzl",
-    )
-    repository_ctx.symlink(
-        paths["@bazel_tools//tools/cpp:msys_gcc_installation_error.bat"],
-        "msys_gcc_installation_error.bat",
-    )
-
+def _get_msvc_vars(repository_ctx, paths):
+    """Get the variables we need to populate the MSVC toolchains."""
+    msvc_vars = dict()
     vc_path = find_vc_path(repository_ctx)
     missing_tools = None
     if not vc_path:
@@ -510,33 +504,21 @@
                 {"%{vc_error_message}": message},
             )
 
-    tool_paths_mingw, tool_bin_path_mingw, inc_dir_mingw = _get_escaped_windows_msys_starlark_content(repository_ctx, use_mingw = True)
-    tool_paths, tool_bin_path, inc_dir_msys = _get_escaped_windows_msys_starlark_content(repository_ctx)
     if not vc_path or missing_tools:
-        repository_ctx.template(
-            "BUILD",
-            paths["@bazel_tools//tools/cpp:BUILD.windows.tpl"],
-            {
-                "%{msvc_env_tmp}": "msvc_not_found",
-                "%{msvc_env_path}": "msvc_not_found",
-                "%{msvc_env_include}": "msvc_not_found",
-                "%{msvc_env_lib}": "msvc_not_found",
-                "%{msvc_cl_path}": "vc_installation_error.bat",
-                "%{msvc_ml_path}": "vc_installation_error.bat",
-                "%{msvc_link_path}": "vc_installation_error.bat",
-                "%{msvc_lib_path}": "vc_installation_error.bat",
-                "%{dbg_mode_debug_flag}": "/DEBUG",
-                "%{fastbuild_mode_debug_flag}": "/DEBUG",
-                "%{cxx_builtin_include_directories}": inc_dir_msys,
-                "%{mingw_cxx_builtin_include_directories}": inc_dir_mingw,
-                "%{msvc_cxx_builtin_include_directories}": "",
-                "%{tool_paths}": tool_paths,
-                "%{mingw_tool_paths}": tool_paths_mingw,
-                "%{tool_bin_path}": tool_bin_path,
-                "%{mingw_tool_bin_path}": tool_bin_path_mingw,
-            },
-        )
-        return
+        msvc_vars = {
+            "%{msvc_env_tmp}": "msvc_not_found",
+            "%{msvc_env_path}": "msvc_not_found",
+            "%{msvc_env_include}": "msvc_not_found",
+            "%{msvc_env_lib}": "msvc_not_found",
+            "%{msvc_cl_path}": "vc_installation_error.bat",
+            "%{msvc_ml_path}": "vc_installation_error.bat",
+            "%{msvc_link_path}": "vc_installation_error.bat",
+            "%{msvc_lib_path}": "vc_installation_error.bat",
+            "%{dbg_mode_debug_flag}": "/DEBUG",
+            "%{fastbuild_mode_debug_flag}": "/DEBUG",
+            "%{msvc_cxx_builtin_include_directories}": "",
+        }
+        return msvc_vars
 
     env = setup_vc_env_vars(repository_ctx, vc_path)
     escaped_paths = escape_string(env["PATH"])
@@ -578,26 +560,50 @@
 
     support_debug_fastlink = _is_support_debug_fastlink(repository_ctx, link_path)
 
+    msvc_vars = {
+        "%{msvc_env_tmp}": escaped_tmp_dir,
+        "%{msvc_env_path}": escaped_paths,
+        "%{msvc_env_include}": escaped_include_paths,
+        "%{msvc_env_lib}": escaped_lib_paths,
+        "%{msvc_cl_path}": cl_path,
+        "%{msvc_ml_path}": msvc_ml_path,
+        "%{msvc_link_path}": link_path,
+        "%{msvc_lib_path}": lib_path,
+        "%{dbg_mode_debug_flag}": "/DEBUG:FULL" if support_debug_fastlink else "/DEBUG",
+        "%{fastbuild_mode_debug_flag}": "/DEBUG:FASTLINK" if support_debug_fastlink else "/DEBUG",
+        "%{msvc_cxx_builtin_include_directories}": "        " + ",\n        ".join(escaped_cxx_include_directories),
+    }
+    return msvc_vars
+
+def configure_windows_toolchain(repository_ctx):
+    """Configure C++ toolchain on Windows."""
+    paths = resolve_labels(repository_ctx, [
+        "@bazel_tools//tools/cpp:BUILD.windows.tpl",
+        "@bazel_tools//tools/cpp:windows_cc_toolchain_config.bzl",
+        "@bazel_tools//tools/cpp:armeabi_cc_toolchain_config.bzl",
+        "@bazel_tools//tools/cpp:vc_installation_error.bat.tpl",
+        "@bazel_tools//tools/cpp:msys_gcc_installation_error.bat",
+    ])
+
+    repository_ctx.symlink(
+        paths["@bazel_tools//tools/cpp:windows_cc_toolchain_config.bzl"],
+        "windows_cc_toolchain_config.bzl",
+    )
+    repository_ctx.symlink(
+        paths["@bazel_tools//tools/cpp:armeabi_cc_toolchain_config.bzl"],
+        "armeabi_cc_toolchain_config.bzl",
+    )
+    repository_ctx.symlink(
+        paths["@bazel_tools//tools/cpp:msys_gcc_installation_error.bat"],
+        "msys_gcc_installation_error.bat",
+    )
+
+    template_vars = dict()
+    template_vars.update(_get_msvc_vars(repository_ctx, paths))
+    template_vars.update(_get_msys_mingw_vars(repository_ctx))
+
     repository_ctx.template(
         "BUILD",
         paths["@bazel_tools//tools/cpp:BUILD.windows.tpl"],
-        {
-            "%{msvc_env_tmp}": escaped_tmp_dir,
-            "%{msvc_env_path}": escaped_paths,
-            "%{msvc_env_include}": escaped_include_paths,
-            "%{msvc_env_lib}": escaped_lib_paths,
-            "%{msvc_cl_path}": cl_path,
-            "%{msvc_ml_path}": msvc_ml_path,
-            "%{msvc_link_path}": link_path,
-            "%{msvc_lib_path}": lib_path,
-            "%{dbg_mode_debug_flag}": "/DEBUG:FULL" if support_debug_fastlink else "/DEBUG",
-            "%{fastbuild_mode_debug_flag}": "/DEBUG:FASTLINK" if support_debug_fastlink else "/DEBUG",
-            "%{cxx_builtin_include_directories}": inc_dir_msys + ",\n        ".join(escaped_cxx_include_directories),
-            "%{msvc_cxx_builtin_include_directories}": "        " + ",\n        ".join(escaped_cxx_include_directories),
-            "%{mingw_cxx_builtin_include_directories}": inc_dir_mingw + ",\n        ".join(escaped_cxx_include_directories),
-            "%{tool_paths}": tool_paths,
-            "%{mingw_tool_paths}": tool_paths_mingw,
-            "%{tool_bin_path}": tool_bin_path,
-            "%{mingw_tool_bin_path}": tool_bin_path_mingw,
-        },
+        template_vars,
     )