Migrate more tests to use Starlark cc_toolchain configuration

Issue #5380

RELNOTES: None.
PiperOrigin-RevId: 239580767
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/cc_toolchain_config.bzl b/src/test/java/com/google/devtools/build/lib/analysis/mock/cc_toolchain_config.bzl
index c266971..4052bf9 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/cc_toolchain_config.bzl
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/cc_toolchain_config.bzl
@@ -96,6 +96,7 @@
     def_feature = "def",
     strip_debug_symbols = "strip_debug_symbols",
     disable_pbh = "disable_pbh",
+    optional_cc_flags_feature = "optional_cc_flags_feature",
 )
 
 _disable_pbh_feature = feature(name = _FEATURE_NAMES.disable_pbh)
@@ -364,6 +365,11 @@
     ],
 )
 
+_extra_implies_module_maps_feature = feature(
+    name = "extra",
+    implies = ["module_maps"],
+)
+
 _env_var_feature_configuration = [
     _env_feature,
     _static_env_feature,
@@ -485,6 +491,20 @@
     requires = [feature_set(features = ["nonhost"])],
 )
 
+_simple_thin_lto_feature = feature(
+    name = _FEATURE_NAMES.thin_lto,
+    flag_sets = [
+        flag_set(
+            actions = [ACTION_NAMES.cpp_compile],
+            flag_groups = [
+                flag_group(
+                    flags = ["<thin_lto>"],
+                ),
+            ],
+        ),
+    ],
+)
+
 _thin_lto_linkstatic_tests_use_shared_nonlto_backends_feature = feature(
     name = _FEATURE_NAMES.thin_lto_linkstatic_tests_use_shared_nonlto_backends,
 )
@@ -1019,6 +1039,59 @@
     ),
 ]
 
+_same_symbol_provided_configuration = [
+    feature(name = "a1", provides = ["a"]),
+    feature(name = "a2", provides = ["a"]),
+]
+
+_optional_cc_flags_feature = feature(
+    name = _FEATURE_NAMES.optional_cc_flags_feature,
+    flag_sets = [
+        flag_set(
+            actions = [ACTION_NAMES.cc_flags_make_variable],
+            flag_groups = [
+                flag_group(flags = ["optional_feature_flag"]),
+            ],
+        ),
+    ],
+)
+
+_layering_check_module_maps_header_modules_simple_features = [
+    feature(
+        name = _FEATURE_NAMES.module_maps,
+        flag_sets = [
+            flag_set(
+                actions = [ACTION_NAMES.cpp_compile],
+                flag_groups = [
+                    flag_group(flags = ["<maps>"]),
+                ],
+            ),
+        ],
+    ),
+    feature(
+        name = _FEATURE_NAMES.layering_check,
+        flag_sets = [
+            flag_set(
+                actions = [ACTION_NAMES.cpp_compile],
+                flag_groups = [
+                    flag_group(flags = ["<layering>"]),
+                ],
+            ),
+        ],
+    ),
+    feature(
+        name = _FEATURE_NAMES.header_modules,
+        flag_sets = [
+            flag_set(
+                actions = [ACTION_NAMES.cpp_compile],
+                flag_groups = [
+                    flag_group(flags = ["<modules>"]),
+                ],
+            ),
+        ],
+    ),
+]
+
 _feature_name_to_feature = {
     _FEATURE_NAMES.no_legacy_features: _no_legacy_features_feature,
     _FEATURE_NAMES.do_not_split_linking_cmdline: _do_not_split_linking_cmdline_feature,
@@ -1073,6 +1146,7 @@
     _FEATURE_NAMES.def_feature: _def_feature,
     _FEATURE_NAMES.strip_debug_symbols: _strip_debug_symbols_feature,
     _FEATURE_NAMES.disable_pbh: _disable_pbh_feature,
+    _FEATURE_NAMES.optional_cc_flags_feature: _optional_cc_flags_feature,
     "header_modules_feature_configuration": _header_modules_feature_configuration,
     "env_var_feature_configuration": _env_var_feature_configuration,
     "host_and_nonhost_configuration": _host_and_nonhost_configuration,
@@ -1082,6 +1156,42 @@
     "simple_module_maps": _simple_module_maps_feature,
     "simple_header_modules": _simple_header_modules_feature,
     "portable_overrides_configuration": _portable_overrides_configuration,
+    "same_symbol_provided_configuration": _same_symbol_provided_configuration,
+    "simple_thin_lto": _simple_thin_lto_feature,
+    "extra_implies_module_maps": _extra_implies_module_maps_feature,
+    "layering_check_module_maps_header_modules_simple_features": _layering_check_module_maps_header_modules_simple_features,
+}
+
+_cc_flags_action_config_foo_bar_baz_config = action_config(
+    action_name = "cc-flags-make-variable",
+    flag_sets = [
+        flag_set(
+            flag_groups = [
+                flag_group(
+                    flags = ["foo", "bar", "baz"],
+                ),
+            ],
+        ),
+    ],
+)
+
+_sysroot_in_action_config = action_config(
+    action_name = "cc-flags-make-variable",
+    flag_sets = [
+        flag_set(
+            flag_groups = [
+                flag_group(
+                    expand_if_available = "sysroot",
+                    flags = ["fc-start", "--sysroot=%{sysroot}-from-feature", "fc-end"],
+                ),
+            ],
+        ),
+    ],
+)
+
+_action_name_to_action = {
+    "cc_flags_action_config_foo_bar_baz": _cc_flags_action_config_foo_bar_baz_config,
+    "sysroot_in_action_config": _sysroot_in_action_config,
 }
 
 _tool_for_action_config = {
@@ -1186,9 +1296,13 @@
     action_configs = []
 
     for name in ctx.attr.action_configs:
-        action_configs.append(
-            _get_action_config(name, _tool_for_action_config.get(name, default = "DUMMY_TOOL")),
-        )
+        custom_config = _action_name_to_action.get(name, default = None)
+        if custom_config != None:
+            action_configs.append(custom_config)
+        else:
+            action_configs.append(
+                _get_action_config(name, _tool_for_action_config.get(name, default = "DUMMY_TOOL")),
+            )
     if should_add_multiple_tools_action_config:
         action_configs.append(_multiple_tools_action_config)
 
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRuleCommandSubstitutionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRuleCommandSubstitutionTest.java
index bef6e1c..2f871ac 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRuleCommandSubstitutionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRuleCommandSubstitutionTest.java
@@ -21,6 +21,7 @@
 import com.google.devtools.build.lib.analysis.actions.SpawnAction;
 import com.google.devtools.build.lib.analysis.util.AnalysisMock;
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.packages.util.Crosstool.CcToolchainConfig;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.junit.Test;
@@ -481,19 +482,9 @@
   public void testCcFlagsFromFeatureConfiguration() throws Exception {
     AnalysisMock.get()
         .ccSupport()
-        .setupCrosstool(
+        .setupCcToolchainConfig(
             mockToolsConfig,
-            "action_config {",
-            "  action_name: 'cc-flags-make-variable'",
-            "  config_name: 'cc-flags-make-variable'",
-            "  flag_set {",
-            "    flag_group {",
-            "      flag: 'foo'",
-            "      flag: 'bar'",
-            "      flag: 'baz'",
-            "    }",
-            "  }",
-            "}");
+            CcToolchainConfig.builder().withActionConfigs("cc_flags_action_config_foo_bar_baz"));
     useConfiguration();
     scratch.file(
         "foo/BUILD",
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java b/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java
index 708bce4..6dc1b53 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java
@@ -52,6 +52,7 @@
     private final String abiLibcVersion;
     private final String targetLibc;
     private final String builtinSysroot;
+    private final String ccTargetOs;
     private final ImmutableList<String> features;
     private final ImmutableList<String> actionConfigs;
     private final ImmutableList<ImmutableList<String>> artifactNamePatterns;
@@ -69,6 +70,7 @@
         String abiLibcVersion,
         String targetLibc,
         String builtinSysroot,
+        String ccTargetOs,
         ImmutableList<String> features,
         ImmutableList<String> actionConfigs,
         ImmutableList<ImmutableList<String>> artifactNamePatterns,
@@ -90,6 +92,7 @@
       this.builtinSysroot = builtinSysroot;
       this.cxxBuiltinIncludeDirectories = cxxBuiltinIncludeDirectories;
       this.makeVariables = makeVariables;
+      this.ccTargetOs = ccTargetOs;
     }
 
     public static Builder builder() {
@@ -105,6 +108,7 @@
       private String builtinSysroot = "/usr/grte/v1";
       private ImmutableList<String> cxxBuiltinIncludeDirectories = ImmutableList.of();
       private ImmutableList<Pair<String, String>> makeVariables = ImmutableList.of();
+      private String ccTargetOs = "";
 
       public Builder withFeatures(String... features) {
         this.features = ImmutableList.copyOf(features);
@@ -137,6 +141,11 @@
         return this;
       }
 
+      public Builder withCcTargetOs(String ccTargetOs) {
+        this.ccTargetOs = ccTargetOs;
+        return this;
+      }
+
       public Builder withCxxBuiltinIncludeDirectories(String... directories) {
         this.cxxBuiltinIncludeDirectories = ImmutableList.copyOf(directories);
         return this;
@@ -158,6 +167,7 @@
             /* abiLibcVersion= */ "local",
             /* targetLibc= */ "local",
             /* builtinSysroot= */ builtinSysroot,
+            /* ccTargetOs= */ ccTargetOs,
             features,
             actionConfigs,
             artifactNamePatterns,
@@ -194,6 +204,7 @@
           /* abiLibcVersion= */ "mock-abi-libc-for-" + cpu,
           /* targetLibc= */ "mock-libc-for-" + cpu,
           /* builtinSysroot= */ "",
+          /* ccTargetOs= */ "",
           /* features= */ ImmutableList.of(),
           /* actionConfigs= */ ImmutableList.of(),
           /* artifactNamePatterns= */ ImmutableList.of(),
@@ -254,6 +265,7 @@
                   "  artifact_name_patterns = {%s},", Joiner.on(",\n    ").join(patternsList)),
               String.format("  tool_paths = {%s},", Joiner.on(",\n    ").join(toolPathsList)),
               "  builtin_sysroot = '" + builtinSysroot + "',",
+              "  cc_target_os = '" + ccTargetOs + "',",
               String.format(
                   "  cxx_builtin_include_directories = [%s],",
                   Joiner.on(",\n    ").join(directoriesList)),
@@ -340,6 +352,7 @@
                 toolchain.getAbiLibcVersion(),
                 toolchain.getTargetLibc(),
                 toolchain.getBuiltinSysroot(),
+                toolchain.getCcTargetOs(),
                 toolchain.getFeatureList().stream()
                     .map(feature -> feature.getName())
                     .collect(ImmutableList.toImmutableList()),
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
index 35daea3..65fb24c 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
@@ -965,10 +965,9 @@
     reporter.removeHandler(failFastHandler);
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(
+        .setupCcToolchainConfig(
             mockToolsConfig,
-            "feature { name: 'a1' provides: 'a' }",
-            "feature { name: 'a2' provides: 'a' }");
+            CcToolchainConfig.builder().withFeatures("same_symbol_provided_configuration"));
     useConfiguration("--features=a1", "--features=a2");
 
     scratch.file("x/BUILD", "cc_library(name = 'foo', srcs = ['a.cc'])");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java
index b95507c..a64c3e5 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java
@@ -25,6 +25,7 @@
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
 import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.packages.util.Crosstool.CcToolchainConfig;
 import com.google.devtools.build.lib.packages.util.MockCcSupport;
 import com.google.devtools.build.lib.packages.util.ResourceLoader;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
@@ -59,7 +60,10 @@
     scratch.file("a/BUILD", "cc_toolchain_alias(name = 'b')");
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(mockToolsConfig, MockCcSupport.SUPPORTS_INTERFACE_SHARED_LIBRARIES_FEATURE);
+        .setupCcToolchainConfig(
+            mockToolsConfig,
+            CcToolchainConfig.builder()
+                .withFeatures(CppRuleClasses.SUPPORTS_INTERFACE_SHARED_LIBRARIES));
     useConfiguration("--features=-supports_interface_shared_libraries");
     invalidatePackages();
 
@@ -103,7 +107,9 @@
     // Default configuration: disabled.
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(mockToolsConfig, MockCcSupport.PER_OBJECT_DEBUG_INFO_CONFIGURATION);
+        .setupCcToolchainConfig(
+            mockToolsConfig,
+            CcToolchainConfig.builder().withFeatures(CppRuleClasses.PER_OBJECT_DEBUG_INFO));
     useConfiguration();
 
     assertThat(getCppCompileOutputs()).doesNotContain("yolo");
@@ -165,7 +171,8 @@
     assertThat(usePicForBinariesWithConfiguration("--cpu=k8", "-c", "opt")).isFalse();
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(mockToolsConfig, MockCcSupport.SUPPORTS_PIC_FEATURE);
+        .setupCcToolchainConfig(
+            mockToolsConfig, CcToolchainConfig.builder().withFeatures(CppRuleClasses.SUPPORTS_PIC));
     invalidatePackages();
     assertThat(usePicForBinariesWithConfiguration("--cpu=k8")).isTrue();
     assertThat(usePicForBinariesWithConfiguration("--cpu=k8", "-c", "opt")).isFalse();
@@ -208,7 +215,9 @@
 
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(mockToolsConfig, MockCcSupport.STATIC_LINK_CPP_RUNTIMES_FEATURE);
+        .setupCcToolchainConfig(
+            mockToolsConfig,
+            CcToolchainConfig.builder().withFeatures(CppRuleClasses.STATIC_LINK_CPP_RUNTIMES));
 
     useConfiguration();
 
@@ -219,6 +228,7 @@
   public void testDynamicMode() throws Exception {
     scratch.file(
         "a/BUILD",
+        "load(':cc_toolchain_config.bzl', 'cc_toolchain_config')",
         "filegroup(",
         "   name='empty')",
         "filegroup(",
@@ -227,6 +237,7 @@
         "cc_toolchain(",
         "    name = 'b',",
         "    toolchain_identifier = 'toolchain-identifier-k8',",
+        "    toolchain_config = ':toolchain_config',",
         "    cpu = 'banana',",
         "    all_files = ':banana',",
         "    ar_files = ':empty',",
@@ -237,8 +248,9 @@
         "    strip_files = ':empty',",
         "    objcopy_files = ':empty',",
         "    dynamic_runtime_lib = ':empty',",
-        "    static_runtime_lib = ':empty')");
-    scratch.file("a/CROSSTOOL", MockCcSupport.EMPTY_CROSSTOOL);
+        "    static_runtime_lib = ':empty')",
+        "cc_toolchain_config(name='toolchain_config')");
+    scratch.file("a/cc_toolchain_config.bzl", MockCcSupport.EMPTY_CC_TOOLCHAIN);
 
     // Check defaults.
     useConfiguration();
@@ -318,7 +330,8 @@
       scratch.overwriteFile("a/BUILD", "cc_toolchain_alias(name = 'b')");
       getAnalysisMock()
           .ccSupport()
-          .setupCrosstool(mockToolsConfig, "cxx_builtin_include_directory: '" + entry + "'");
+          .setupCcToolchainConfig(
+              mockToolsConfig, CcToolchainConfig.builder().withCxxBuiltinIncludeDirectories(entry));
 
       useConfiguration();
       invalidatePackages();
@@ -502,11 +515,13 @@
     reporter.removeHandler(failFastHandler);
     scratch.file(
         "a/BUILD",
+        "load(':cc_toolchain_config.bzl', 'cc_toolchain_config')",
         "filegroup(",
         "   name='empty')",
         "cc_toolchain(",
         "    name = 'b',",
         "    toolchain_identifier = 'toolchain-identifier-k8',",
+        "    toolchain_config = ':toolchain_config',",
         "    cpu = 'banana',",
         "    all_files = ':empty',",
         "    ar_files = ':empty',",
@@ -515,13 +530,14 @@
         "    dwp_files = ':empty',",
         "    linker_files = ':empty',",
         "    strip_files = ':empty',",
-        "    objcopy_files = ':empty')");
+        "    objcopy_files = ':empty')",
+        "cc_toolchain_config(name = 'toolchain_config')");
     scratch.file("fdo/my_profile.afdo", "");
     scratch.file(
         "fdo/BUILD",
         "exports_files(['my_profile.afdo'])",
         "fdo_profile(name = 'fdo', profile = ':my_profile.profdata')");
-    scratch.file("a/CROSSTOOL", MockCcSupport.EMPTY_CROSSTOOL);
+    scratch.file("a/cc_toolchain_config.bzl", MockCcSupport.EMPTY_CC_TOOLCHAIN);
 
     useConfiguration();
     assertThat(getPrerequisites(getConfiguredTarget("//a:b"), ":zipper")).isEmpty();
@@ -563,7 +579,8 @@
 
     getAnalysisMock().ccSupport().setupCrosstool(mockToolsConfig, "abi_version: 'orange'");
 
-    useConfiguration("--incompatible_enable_cc_toolchain_resolution");
+    useConfiguration(
+        "--incompatible_enable_cc_toolchain_resolution", "--noincompatible_disable_crosstool_file");
 
     ConfiguredTarget target = getConfiguredTarget("//a:b");
     CcToolchainProvider toolchainProvider =
@@ -586,7 +603,7 @@
 
     getAnalysisMock().ccSupport().setupCrosstool(mockToolsConfig, "abi_version: 'orange'");
 
-    useConfiguration("--cpu=k8");
+    useConfiguration("--cpu=k8", "--noincompatible_disable_crosstool_file");
 
     ConfiguredTarget target = getConfiguredTarget("//a:a");
     CcToolchainProvider toolchainProvider =
@@ -602,8 +619,6 @@
     loadCcToolchainConfigLib();
     writeStarlarkRule();
 
-    getAnalysisMock().ccSupport();
-
     useConfiguration("--cpu=k8");
 
     ConfiguredTarget target = getConfiguredTarget("//a:a");
@@ -705,8 +720,6 @@
   public void testSupportsDynamicLinkerIsFalseWhenFeatureNotSet() throws Exception {
     scratch.file("a/BUILD", "cc_toolchain_alias(name = 'b')");
 
-    getAnalysisMock().ccSupport().setupCrosstool(mockToolsConfig);
-
     ConfiguredTarget target = getConfiguredTarget("//a:b");
     CcToolchainProvider toolchainProvider =
         (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
@@ -719,7 +732,6 @@
   @Test
   public void testStaticLinkCppRuntimesSetViaSupportsEmbeddedRuntimesUnset() throws Exception {
     scratch.file("a/BUILD", "cc_toolchain_alias(name = 'b')");
-    getAnalysisMock().ccSupport().setupCrosstool(mockToolsConfig);
     useConfiguration();
     ConfiguredTarget target = getConfiguredTarget("//a:b");
     CcToolchainProvider toolchainProvider =
@@ -756,7 +768,9 @@
   public void testSupportsEmbeddedRuntimesNoFeatureAtAll() throws Exception {
     FeatureConfiguration featureConfiguration =
         getFeatureConfigurationForStaticLinkCppRuntimes(
-            "supports_embedded_runtimes: true", "--noincompatible_disable_legacy_crosstool_fields");
+            "supports_embedded_runtimes: true",
+            "--noincompatible_disable_legacy_crosstool_fields",
+            "--noincompatible_disable_crosstool_file");
     assertThat(featureConfiguration.isEnabled(CppRuleClasses.STATIC_LINK_CPP_RUNTIMES)).isTrue();
   }
 
@@ -768,7 +782,8 @@
         getFeatureConfigurationForStaticLinkCppRuntimes(
             "supports_embedded_runtimes: true",
             "--features=static_link_cpp_runtimes",
-            "--noincompatible_disable_legacy_crosstool_fields");
+            "--noincompatible_disable_legacy_crosstool_fields",
+            "--noincompatible_disable_crosstool_file");
     assertThat(featureConfiguration.isEnabled(CppRuleClasses.STATIC_LINK_CPP_RUNTIMES)).isTrue();
   }
 
@@ -780,7 +795,8 @@
         getFeatureConfigurationForStaticLinkCppRuntimes(
             "supports_embedded_runtimes: true",
             "--features=-static_link_cpp_runtimes",
-            "--noincompatible_disable_legacy_crosstool_fields");
+            "--noincompatible_disable_legacy_crosstool_fields",
+            "--noincompatible_disable_crosstool_file");
     assertThat(featureConfiguration.isEnabled(CppRuleClasses.STATIC_LINK_CPP_RUNTIMES)).isFalse();
   }
 
@@ -836,7 +852,7 @@
 
     getAnalysisMock().ccSupport().setupCrosstool(mockToolsConfig, "default_grte_top: '//libc1'");
 
-    useConfiguration("--cpu=k8");
+    useConfiguration("--cpu=k8", "--noincompatible_disable_crosstool_file");
     ConfiguredTarget target = getConfiguredTarget("//a:a");
     CcToolchainProvider ccToolchainProvider =
         (CcToolchainProvider) target.get(CcToolchainProvider.PROVIDER);
@@ -885,7 +901,7 @@
     scratch.file("libc3/header.h", "#define FOO 3");
 
     getAnalysisMock().ccSupport().setupCrosstool(mockToolsConfig, "default_grte_top: '//libc1'");
-    useConfiguration("--cpu=k8", "--grte_top=//libc3");
+    useConfiguration("--cpu=k8", "--grte_top=//libc3", "--noincompatible_disable_crosstool_file");
     ConfiguredTarget target = getConfiguredTarget("//a:a");
     CcToolchainProvider ccToolchainProvider =
         (CcToolchainProvider) target.get(CcToolchainProvider.PROVIDER);
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
index 46f3493..c20e0bb 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
@@ -39,11 +39,11 @@
 import com.google.devtools.build.lib.analysis.RunfilesProvider;
 import com.google.devtools.build.lib.analysis.util.ActionTester;
 import com.google.devtools.build.lib.analysis.util.ActionTester.ActionCombinationFactory;
-import com.google.devtools.build.lib.analysis.util.AnalysisMock;
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.packages.util.Crosstool.CcToolchainConfig;
 import com.google.devtools.build.lib.packages.util.MockCcSupport;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.VariableValue;
@@ -239,7 +239,9 @@
   public void testLegacyWholeArchiveHasNoEffectOnDynamicModeDynamicLibraries() throws Exception {
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(mockToolsConfig, MockCcSupport.SUPPORTS_DYNAMIC_LINKER_FEATURE);
+        .setupCcToolchainConfig(
+            mockToolsConfig,
+            CcToolchainConfig.builder().withFeatures(CppRuleClasses.SUPPORTS_DYNAMIC_LINKER));
     scratch.file(
         "x/BUILD",
         "cc_binary(",
@@ -256,7 +258,9 @@
   public void testLegacyWholeArchive() throws Exception {
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(mockToolsConfig, MockCcSupport.SUPPORTS_DYNAMIC_LINKER_FEATURE);
+        .setupCcToolchainConfig(
+            mockToolsConfig,
+            CcToolchainConfig.builder().withFeatures(CppRuleClasses.SUPPORTS_DYNAMIC_LINKER));
     scratch.file(
         "x/BUILD",
         "cc_binary(",
@@ -331,11 +335,13 @@
     }
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(
+        .setupCcToolchainConfig(
             mockToolsConfig,
-            MockCcSupport.SUPPORTS_PIC_FEATURE,
-            MockCcSupport.SUPPORTS_DYNAMIC_LINKER_FEATURE,
-            MockCcSupport.SUPPORTS_INTERFACE_SHARED_LIBRARIES_FEATURE);
+            CcToolchainConfig.builder()
+                .withFeatures(
+                    CppRuleClasses.SUPPORTS_PIC,
+                    CppRuleClasses.SUPPORTS_DYNAMIC_LINKER,
+                    CppRuleClasses.SUPPORTS_INTERFACE_SHARED_LIBRARIES));
 
     scratch.file(
         "x/BUILD",
@@ -371,11 +377,13 @@
     }
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(
+        .setupCcToolchainConfig(
             mockToolsConfig,
-            MockCcSupport.SUPPORTS_PIC_FEATURE,
-            MockCcSupport.SUPPORTS_DYNAMIC_LINKER_FEATURE,
-            MockCcSupport.SUPPORTS_INTERFACE_SHARED_LIBRARIES_FEATURE);
+            CcToolchainConfig.builder()
+                .withFeatures(
+                    CppRuleClasses.SUPPORTS_PIC,
+                    CppRuleClasses.SUPPORTS_DYNAMIC_LINKER,
+                    CppRuleClasses.SUPPORTS_INTERFACE_SHARED_LIBRARIES));
     scratch.file(
         "x/BUILD",
         "cc_test(name='a', srcs=['a.cc'], features=['dynamic_link_test_srcs'])",
@@ -419,10 +427,10 @@
     }
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(
+        .setupCcToolchainConfig(
             mockToolsConfig,
-            MockCcSupport.SUPPORTS_DYNAMIC_LINKER_FEATURE,
-            MockCcSupport.SUPPORTS_PIC_FEATURE);
+            CcToolchainConfig.builder()
+                .withFeatures(CppRuleClasses.SUPPORTS_DYNAMIC_LINKER, CppRuleClasses.SUPPORTS_PIC));
     scratch.file(
         "x/BUILD", "cc_binary(name = 'a', srcs = ['a.cc'], features = ['-static_link_test_srcs'])");
     scratch.file("x/a.cc", "int main() {}");
@@ -756,12 +764,14 @@
 
   @Test
   public void testInterfaceOutputForDynamicLibrary() throws Exception {
-    AnalysisMock.get()
+    getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(
+        .setupCcToolchainConfig(
             mockToolsConfig,
-            MockCcSupport.SUPPORTS_INTERFACE_SHARED_LIBRARIES_FEATURE,
-            MockCcSupport.SUPPORTS_DYNAMIC_LINKER_FEATURE);
+            CcToolchainConfig.builder()
+                .withFeatures(
+                    CppRuleClasses.SUPPORTS_DYNAMIC_LINKER,
+                    CppRuleClasses.SUPPORTS_INTERFACE_SHARED_LIBRARIES));
     useConfiguration();
 
     scratch.file("foo/BUILD", "cc_library(name = 'foo', srcs = ['foo.cc'])");
@@ -1096,7 +1106,9 @@
   public void testSplitExecutableLinkCommandStatic() throws Exception {
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(mockToolsConfig, MockCcSupport.DO_NOT_SPLIT_LINKING_CMDLINE_FEATURE);
+        .setupCcToolchainConfig(
+            mockToolsConfig,
+            CcToolchainConfig.builder().withFeatures(CppRuleClasses.DO_NOT_SPLIT_LINKING_CMDLINE));
 
     RuleContext ruleContext = createDummyRuleContext();
 
@@ -1120,7 +1132,9 @@
   public void testSplitExecutableLinkCommandDynamicWithNoSplitting() throws Exception {
     getAnalysisMock()
         .ccSupport()
-        .setupCrosstool(mockToolsConfig, MockCcSupport.DO_NOT_SPLIT_LINKING_CMDLINE_FEATURE);
+        .setupCcToolchainConfig(
+            mockToolsConfig,
+            CcToolchainConfig.builder().withFeatures(CppRuleClasses.DO_NOT_SPLIT_LINKING_CMDLINE));
     RuleContext ruleContext = createDummyRuleContext();
 
     FeatureConfiguration featureConfiguration = getMockFeatureConfiguration(ruleContext);