diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
index ebe7e94..8d81d55 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
@@ -15,15 +15,12 @@
 
 import static com.google.devtools.build.lib.packages.Attribute.attr;
 import static com.google.devtools.build.lib.packages.BuildType.LABEL;
-import static com.google.devtools.build.lib.packages.BuildType.NODEP_LABEL;
 import static com.google.devtools.build.lib.syntax.Type.BOOLEAN;
 
 import com.google.devtools.build.lib.analysis.RuleDefinition;
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
 import com.google.devtools.build.lib.packages.RuleClass;
-import com.google.devtools.build.lib.rules.cpp.CcToolchain;
-import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
 import com.google.devtools.build.lib.rules.genrule.GenRuleBaseRule;
 
 /**
@@ -49,13 +46,6 @@
 
         // TODO(bazel-team): stamping doesn't seem to work. Fix it or remove attribute.
         .add(attr("stamp", BOOLEAN).value(false))
-        .add(
-            attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL)
-                .mandatoryProviders(CcToolchainProvider.PROVIDER.id())
-                .value(GenRuleBaseRule.ccToolchainAttribute(env)))
-        .add(
-            attr(CcToolchain.CC_TOOLCHAIN_TYPE_ATTRIBUTE_NAME, NODEP_LABEL)
-                .value(GenRuleBaseRule.ccToolchainTypeAttribute(env)))
         .build();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index a19f37e..f184592 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -984,9 +984,8 @@
     FeatureConfiguration featureConfiguration = null;
     CppConfiguration cppConfiguration;
     if (toolchainProvider.requireCtxInConfigureFeatures()) {
-      // When this is flipped, this whole method will go away. But I'm keeping it there
-      // so we can experiment with flags before they are flipped.
-      Preconditions.checkArgument(toolchainProvider.disableGenruleCcToolchainDependency());
+      // When --incompatible_require_ctx_in_configure_features is flipped, this whole method will go
+      // away. But I'm keeping it there so we can experiment with flags before they are flipped.
       cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
     } else {
       cppConfiguration =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index e20b382..33f0c4a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -882,11 +882,6 @@
         .requireCtxInConfigureFeatures();
   }
 
-  public boolean disableGenruleCcToolchainDependency() {
-    return getCppConfigurationEvenThoughItCanBeDifferentThatWhatTargetHas()
-        .disableGenruleCcToolchainDependency();
-  }
-
   @VisibleForTesting
   NestedSet<Artifact> getStaticRuntimeLibForTesting() {
     return staticRuntimeLinkInputs;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
index cb5f7fb..9749e65 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
@@ -110,7 +110,6 @@
     CppToolchainInfo toolchainInfo =
         getCppToolchainInfo(
             ruleContext,
-            cppConfiguration.disableGenruleCcToolchainDependency(),
             cppConfiguration.getTransformedCpuFromOptions(),
             cppConfiguration.getCompilerFromOptions(),
             attributes,
@@ -375,7 +374,6 @@
   /** Finds an appropriate {@link CppToolchainInfo} for this target. */
   private static CppToolchainInfo getCppToolchainInfo(
       RuleContext ruleContext,
-      boolean disableGenruleCcToolchainDependency,
       String cpuFromOptions,
       String compilerFromOptions,
       CcToolchainAttributesProvider attributes,
@@ -388,10 +386,7 @@
 
     if (configInfo != null) {
       try {
-        return CppToolchainInfo.create(
-            ruleContext.getLabel(),
-            configInfo,
-            disableGenruleCcToolchainDependency);
+        return CppToolchainInfo.create(ruleContext.getLabel(), configInfo);
       } catch (EvalException e) {
         throw ruleContext.throwWithRuleError(e.getMessage());
       }
@@ -421,10 +416,7 @@
                   .incompatibleDoNotSplitLinkingCmdline(),
               CppToolchainInfo.getToolsDirectory(attributes.getCcToolchainLabel()));
       CcToolchainConfigInfo ccToolchainConfigInfo = CcToolchainConfigInfo.fromToolchain(toolchain);
-      return CppToolchainInfo.create(
-          attributes.getCcToolchainLabel(),
-          ccToolchainConfigInfo,
-          disableGenruleCcToolchainDependency);
+      return CppToolchainInfo.create(attributes.getCcToolchainLabel(), ccToolchainConfigInfo);
     } catch (EvalException e) {
       throw ruleContext.throwWithRuleError(e.getMessage());
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index ecbbb3b..8a91339 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -631,10 +631,6 @@
     return cppOptions.targetLibcTopLabel;
   }
 
-  public boolean disableGenruleCcToolchainDependency() {
-    return cppOptions.disableGenruleCcToolchainDependency;
-  }
-
   public boolean enableLegacyCcProvider() {
     return !cppOptions.disableLegacyCcProvider;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index 982457a..7600c15 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -833,21 +833,6 @@
   public boolean doNotUseCpuTransformer;
 
   @Option(
-      name = "incompatible_disable_genrule_cc_toolchain_dependency",
-      defaultValue = "true",
-      documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
-      effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
-      metadataTags = {
-        OptionMetadataTag.INCOMPATIBLE_CHANGE,
-        OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
-      },
-      help =
-          "If true, genrule will no longer automatically depend on the cc toolchain. Specifically, "
-              + "this means that the CC_FLAGS Make variable will not be available without using "
-              + "the new cc_flags_supplier rule.")
-  public boolean disableGenruleCcToolchainDependency;
-
-  @Option(
       name = "incompatible_disable_legacy_cc_provider",
       defaultValue = "true",
       documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
@@ -927,7 +912,6 @@
 
     host.enableFdoProfileAbsolutePath = enableFdoProfileAbsolutePath;
     host.doNotUseCpuTransformer = doNotUseCpuTransformer;
-    host.disableGenruleCcToolchainDependency = disableGenruleCcToolchainDependency;
     host.disableExpandIfAllAvailableInFlagSet = disableExpandIfAllAvailableInFlagSet;
     host.disableLegacyCcProvider = disableLegacyCcProvider;
     host.removeCpuCompilerCcToolchainAttributes = removeCpuCompilerCcToolchainAttributes;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java
index 3f3d409..6759819 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java
@@ -81,10 +81,7 @@
    * Creates a CppToolchainInfo from CROSSTOOL info encapsulated in {@link CcToolchainConfigInfo}.
    */
   public static CppToolchainInfo create(
-      Label toolchainLabel,
-      CcToolchainConfigInfo ccToolchainConfigInfo,
-      boolean disableGenruleCcToolchainDependency)
-      throws EvalException {
+      Label toolchainLabel, CcToolchainConfigInfo ccToolchainConfigInfo) throws EvalException {
     ImmutableMap<String, PathFragment> toolPaths =
         computeToolPaths(ccToolchainConfigInfo, getToolsDirectory(toolchainLabel));
     PathFragment defaultSysroot =
@@ -111,7 +108,7 @@
         "_solib_" + ccToolchainConfigInfo.getTargetCpu(),
         ccToolchainConfigInfo.getAbiVersion(),
         ccToolchainConfigInfo.getTargetSystemName(),
-        computeAdditionalMakeVariables(ccToolchainConfigInfo, disableGenruleCcToolchainDependency),
+        computeAdditionalMakeVariables(ccToolchainConfigInfo),
         computeLegacyCcFlagsMakeVariable(ccToolchainConfigInfo));
   }
 
@@ -447,7 +444,7 @@
   }
 
   private static ImmutableMap<String, String> computeAdditionalMakeVariables(
-      CcToolchainConfigInfo ccToolchainConfigInfo, boolean disableGenruleCcToolchainDependency) {
+      CcToolchainConfigInfo ccToolchainConfigInfo) {
     Map<String, String> makeVariablesBuilder = new HashMap<>();
     // The following are to be used to allow some build rules to avoid the limits on stack frame
     // sizes and variable-length arrays.
@@ -457,10 +454,7 @@
     for (Pair<String, String> variable : ccToolchainConfigInfo.getMakeVariables()) {
       makeVariablesBuilder.put(variable.getFirst(), variable.getSecond());
     }
-
-    if (disableGenruleCcToolchainDependency) {
-      makeVariablesBuilder.remove(CppConfiguration.CC_FLAGS_MAKE_VARIABLE_NAME);
-    }
+    makeVariablesBuilder.remove(CppConfiguration.CC_FLAGS_MAKE_VARIABLE_NAME);
 
     return ImmutableMap.copyOf(makeVariablesBuilder);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java
index d91b217..6ae1ca8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java
@@ -14,7 +14,6 @@
 
 package com.google.devtools.build.lib.rules.genrule;
 
-import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
@@ -44,14 +43,11 @@
 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.TargetUtils;
-import com.google.devtools.build.lib.rules.cpp.CcCommon.CcFlagsSupplier;
-import com.google.devtools.build.lib.rules.cpp.CppHelper;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.util.LazyString;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.List;
 import java.util.Map;
-import java.util.regex.Pattern;
 
 /**
  * A base implementation of genrule, to be used by specific implementing rules which can change some
@@ -59,20 +55,6 @@
  */
 public abstract class GenRuleBase implements RuleConfiguredTargetFactory {
 
-  private static final ImmutableList<String> CROSSTOOL_MAKE_VARIABLES = ImmutableList.of("CC",
-      "CC_FLAGS", "AR", "NM", "OBJCOPY", "STRIP", "GCOVTOOL");
-
-  private static Pattern matchesMakeVariables(Iterable<String> variables) {
-    return Pattern.compile("\\$\\((" + Joiner.on("|").join(variables) + ")\\)");
-  }
-
-  private static final Pattern CROSSTOOL_MAKE_VARIABLE_PATTERN =
-      matchesMakeVariables(CROSSTOOL_MAKE_VARIABLES);
-
-  protected static boolean requiresCrosstool(String command) {
-    return CROSSTOOL_MAKE_VARIABLE_PATTERN.matcher(command).find();
-  }
-
   /**
    * Returns {@code true} if the rule should be stamped.
    *
@@ -140,9 +122,6 @@
     // Expand template variables and functions.
     ImmutableList.Builder<MakeVariableSupplier> makeVariableSuppliers =
         new ImmutableList.Builder<>();
-    if (GenRuleBaseRule.enableCcToolchain(ruleContext.getConfiguration())) {
-      makeVariableSuppliers.add(new CcFlagsSupplier(ruleContext));
-    }
     CommandResolverContext commandResolverContext =
         new CommandResolverContext(
             ruleContext, resolvedSrcs, filesToBuild, makeVariableSuppliers.build());
@@ -200,15 +179,6 @@
             ".genrule_script.sh",
             ImmutableMap.copyOf(executionInfo));
 
-    // TODO(bazel-team): Make the make variable expander pass back a list of these.
-    if (GenRuleBaseRule.enableCcToolchain(ruleContext.getConfiguration())
-        && requiresCrosstool(baseCommand)) {
-      // If cc is used, silently throw in the crosstool filegroup as a dependency.
-      inputs.addTransitive(
-          CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext)
-              .getAllFilesMiddleman());
-    }
-
     if (isStampingEnabled(ruleContext)) {
       inputs.add(ruleContext.getAnalysisEnvironment().getStableWorkspaceStatusArtifact());
       inputs.add(ruleContext.getAnalysisEnvironment().getVolatileWorkspaceStatusArtifact());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java
index 6a40f84..9fa5ce2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java
@@ -23,19 +23,13 @@
 import com.google.devtools.build.lib.analysis.BaseRuleClasses;
 import com.google.devtools.build.lib.analysis.RuleDefinition;
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
 import com.google.devtools.build.lib.packages.Attribute;
-import com.google.devtools.build.lib.packages.Attribute.ComputedDefault;
-import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault;
 import com.google.devtools.build.lib.packages.AttributeMap;
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
 import com.google.devtools.build.lib.packages.RuleClass.ExecutionPlatformConstraintsAllowed;
-import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
-import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
-import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.util.FileTypeSet;
 
 /**
@@ -44,50 +38,6 @@
  * as a setup script target.
  */
 public class GenRuleBaseRule implements RuleDefinition {
-  public static boolean enableCcToolchain(BuildConfiguration configuration) {
-    CppConfiguration cppConfiguration = configuration.getFragment(CppConfiguration.class);
-    if (cppConfiguration != null) {
-      return enableCcToolchain(cppConfiguration);
-    }
-    return true;
-  }
-
-  public static boolean enableCcToolchain(CppConfiguration cppConfiguration) {
-    return !cppConfiguration.disableGenruleCcToolchainDependency();
-  }
-
-  /**
-   * Late-bound dependency on the C++ toolchain <i>iff</i> the genrule has make variables that need
-   * that toolchain.
-   */
-  public static LabelLateBoundDefault<?> ccToolchainAttribute(RuleDefinitionEnvironment env) {
-    return LabelLateBoundDefault.fromTargetConfiguration(
-        CppConfiguration.class,
-        env.getToolsLabel(CppRuleClasses.CROSSTOOL_LABEL),
-        // null guards are needed for LateBoundAttributeTest
-        (rule, attributes, cppConfig) -> {
-          if (!enableCcToolchain(cppConfig)) {
-            return null;
-          }
-          return attributes != null
-                  && attributes.get("cmd", Type.STRING) != null
-                  && GenRuleBase.requiresCrosstool(attributes.get("cmd", Type.STRING))
-              ? CppRuleClasses.ccToolchainAttribute(env).resolve(rule, attributes, cppConfig)
-              : null;
-        });
-  }
-
-  /** Computed dependency on the C++ toolchain type. */
-  public static ComputedDefault ccToolchainTypeAttribute(RuleDefinitionEnvironment env) {
-    return new ComputedDefault("cmd") {
-      @Override
-      public Object getDefault(AttributeMap rule) {
-        return GenRuleBase.requiresCrosstool(rule.get("cmd", Type.STRING))
-            ? CppRuleClasses.ccToolchainTypeAttribute(env)
-            : null;
-      }
-    };
-  }
 
   @Override
   public RuleClass build(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
index b74b044..c018e39 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
@@ -4499,7 +4499,6 @@
             mockToolsConfig,
             CcToolchainConfig.builder()
                 .withMakeVariables(Pair.of("CC_FLAGS", "-test-cflag1 -testcflag2")));
-    useConfiguration("--incompatible_disable_genrule_cc_toolchain_dependency");
 
     loadCcToolchainConfigLib();
     scratch.file(
