Support shorten_virtual_includes

Copybara Import from https://github.com/bazelbuild/rules_cc/pull/438

BEGIN_PUBLIC
Support shorten_virtual_includes (#438)

Context: https://github.com/bazelbuild/bazel/pull/26528, https://github.com/protocolbuffers/protobuf/issues/20085

Enable `shorten_virtual_includes` for MSVC toolchains to shorten virtual include paths to mitigate long path issue on windows.

Closes #438
END_PUBLIC

COPYBARA_INTEGRATE_REVIEW=https://github.com/bazelbuild/rules_cc/pull/438 from meteorcloudy:shorten_virtual_includes 5ab4b9465c725a59b13d5ebaa69cafdb6006dac1
PiperOrigin-RevId: 781977791
Change-Id: Ia683103cb9da2eed8cca165ccf1243f3ee1357da
diff --git a/cc/private/toolchain/BUILD.windows.tpl b/cc/private/toolchain/BUILD.windows.tpl
index 75fbd0a..1d0f8a0 100644
--- a/cc/private/toolchain/BUILD.windows.tpl
+++ b/cc/private/toolchain/BUILD.windows.tpl
@@ -330,6 +330,7 @@
     dbg_mode_debug_flag = "%{dbg_mode_debug_flag_x64}",
     fastbuild_mode_debug_flag = "%{fastbuild_mode_debug_flag_x64}",
     supports_parse_showincludes = %{msvc_parse_showincludes_x64},
+    shorten_virtual_includes = True,
 )
 
 toolchain(
@@ -399,6 +400,7 @@
     dbg_mode_debug_flag = "%{dbg_mode_debug_flag_x86}",
     fastbuild_mode_debug_flag = "%{fastbuild_mode_debug_flag_x86}",
     supports_parse_showincludes = %{msvc_parse_showincludes_x86},
+    shorten_virtual_includes = True,
 )
 
 toolchain(
@@ -468,6 +470,7 @@
     dbg_mode_debug_flag = "%{dbg_mode_debug_flag_arm}",
     fastbuild_mode_debug_flag = "%{fastbuild_mode_debug_flag_arm}",
     supports_parse_showincludes = %{msvc_parse_showincludes_arm},
+    shorten_virtual_includes = True,
 )
 
 toolchain(
@@ -537,6 +540,7 @@
     dbg_mode_debug_flag = "%{dbg_mode_debug_flag_arm64}",
     fastbuild_mode_debug_flag = "%{fastbuild_mode_debug_flag_arm64}",
     supports_parse_showincludes = %{msvc_parse_showincludes_arm64},
+    shorten_virtual_includes = True,
 )
 
 toolchain(
diff --git a/cc/private/toolchain/windows_cc_toolchain_config.bzl b/cc/private/toolchain/windows_cc_toolchain_config.bzl
index d8cf50e..af17bb4 100644
--- a/cc/private/toolchain/windows_cc_toolchain_config.bzl
+++ b/cc/private/toolchain/windows_cc_toolchain_config.bzl
@@ -943,6 +943,11 @@
             enabled = True,
         )
 
+        shorten_virtual_includes_feature = feature(
+            name = "shorten_virtual_includes",
+            enabled = ctx.attr.shorten_virtual_includes,
+        )
+
         treat_warnings_as_errors_feature = feature(
             name = "treat_warnings_as_errors",
             flag_sets = [
@@ -1277,6 +1282,7 @@
             preprocessor_defines_feature,
             parse_showincludes_feature,
             no_dotd_file_feature,
+            shorten_virtual_includes_feature,
             generate_pdb_file_feature,
             generate_linkmap_feature,
             shared_flag_feature,
@@ -1657,6 +1663,7 @@
         "msvc_lib_path": attr.string(default = "vc_installation_error.bat"),
         "msvc_link_path": attr.string(default = "vc_installation_error.bat"),
         "msvc_ml_path": attr.string(default = "vc_installation_error.bat"),
+        "shorten_virtual_includes": attr.bool(default = False),
         "supports_parse_showincludes": attr.bool(),
         "target_libc": attr.string(),
         "target_system_name": attr.string(),