diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
index 5fda430..289690f 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
@@ -74,6 +74,7 @@
       SkylarkList<String> includes,
       SkylarkList<String> quoteIncludes,
       SkylarkList<String> systemIncludes,
+      SkylarkList<String> frameworkIncludes,
       SkylarkList<String> defines,
       SkylarkList<String> userCompileFlags,
       SkylarkList<CcCompilationContext> ccCompilationContexts,
@@ -93,6 +94,7 @@
         includes,
         quoteIncludes,
         systemIncludes,
+        frameworkIncludes,
         defines,
         userCompileFlags,
         ccCompilationContexts,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
index ade3695..0bfdeb4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
@@ -154,6 +154,17 @@
   }
 
   @Override
+  public SkylarkNestedSet getSkylarkFrameworkIncludeDirs() {
+    return SkylarkNestedSet.of(
+        String.class,
+        NestedSetBuilder.wrap(
+            Order.STABLE_ORDER,
+            getFrameworkIncludeDirs().stream()
+                .map(PathFragment::getSafePathString)
+                .collect(ImmutableList.toImmutableList())));
+  }
+
+  @Override
   public SkylarkNestedSet getSkylarkIncludeDirs() {
     return SkylarkNestedSet.of(
         String.class,
@@ -231,6 +242,16 @@
   }
 
   /**
+   * Returns the immutable list of include directories to be added with "-F" (possibly empty but
+   * never null). This includes the include dirs from the transitive deps closure of the target.
+   * This list does not contain duplicates. All fragments are either absolute or relative to the
+   * exec root (see {@link com.google.devtools.build.lib.analysis.BlazeDirectories#getExecRoot}).
+   */
+  public ImmutableList<PathFragment> getFrameworkIncludeDirs() {
+    return commandLineCcCompilationContext.frameworkIncludeDirs;
+  }
+
+  /**
    * Returns the immutable set of declared include directories, relative to a "-I" or "-iquote"
    * directory" (possibly empty but never null).
    */
@@ -458,16 +479,19 @@
     private final ImmutableList<PathFragment> includeDirs;
     private final ImmutableList<PathFragment> quoteIncludeDirs;
     private final ImmutableList<PathFragment> systemIncludeDirs;
+    private final ImmutableList<PathFragment> frameworkIncludeDirs;
     private final ImmutableList<String> defines;
 
     CommandLineCcCompilationContext(
         ImmutableList<PathFragment> includeDirs,
         ImmutableList<PathFragment> quoteIncludeDirs,
         ImmutableList<PathFragment> systemIncludeDirs,
+        ImmutableList<PathFragment> frameworkIncludeDirs,
         ImmutableList<String> defines) {
       this.includeDirs = includeDirs;
       this.quoteIncludeDirs = quoteIncludeDirs;
       this.systemIncludeDirs = systemIncludeDirs;
+      this.frameworkIncludeDirs = frameworkIncludeDirs;
       this.defines = defines;
     }
   }
@@ -487,6 +511,7 @@
     private final Set<PathFragment> includeDirs = new LinkedHashSet<>();
     private final Set<PathFragment> quoteIncludeDirs = new LinkedHashSet<>();
     private final Set<PathFragment> systemIncludeDirs = new LinkedHashSet<>();
+    private final Set<PathFragment> frameworkIncludeDirs = new LinkedHashSet<>();
     private final NestedSetBuilder<PathFragment> declaredIncludeDirs =
         NestedSetBuilder.stableOrder();
     private final NestedSetBuilder<Artifact> declaredIncludeSrcs =
@@ -554,6 +579,7 @@
       includeDirs.addAll(otherCcCompilationContext.getIncludeDirs());
       quoteIncludeDirs.addAll(otherCcCompilationContext.getQuoteIncludeDirs());
       systemIncludeDirs.addAll(otherCcCompilationContext.getSystemIncludeDirs());
+      frameworkIncludeDirs.addAll(otherCcCompilationContext.getFrameworkIncludeDirs());
       declaredIncludeDirs.addTransitive(otherCcCompilationContext.getDeclaredIncludeDirs());
       declaredIncludeSrcs.addTransitive(otherCcCompilationContext.getDeclaredIncludeSrcs());
       transitiveHeaderInfo.addTransitive(otherCcCompilationContext.transitiveHeaderInfos);
@@ -636,6 +662,12 @@
       return this;
     }
 
+    /** Add framewrok include directories to be added with "-F". */
+    public Builder addFrameworkIncludeDirs(Iterable<PathFragment> frameworkIncludeDirs) {
+      Iterables.addAll(this.frameworkIncludeDirs, frameworkIncludeDirs);
+      return this;
+    }
+
     /** Add a single declared include dir, relative to a "-I" or "-iquote" directory". */
     public Builder addDeclaredIncludeDir(PathFragment dir) {
       declaredIncludeDirs.add(dir);
@@ -773,6 +805,7 @@
               ImmutableList.copyOf(includeDirs),
               ImmutableList.copyOf(quoteIncludeDirs),
               ImmutableList.copyOf(systemIncludeDirs),
+              ImmutableList.copyOf(frameworkIncludeDirs),
               ImmutableList.copyOf(defines)),
           // TODO(b/110873917): We don't have the middle man compilation prerequisite, therefore, we
           // use the compilation prerequisites as they were passed to the builder, i.e. we use every
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index dda017a..c8fc2b5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -248,6 +248,7 @@
   private final List<PathFragment> systemIncludeDirs = new ArrayList<>();
   private final List<PathFragment> quoteIncludeDirs = new ArrayList<>();
   private final List<PathFragment> includeDirs = new ArrayList<>();
+  private final List<PathFragment> frameworkIncludeDirs = new ArrayList<>();
 
   private HeadersCheckingMode headersCheckingMode = HeadersCheckingMode.LOOSE;
   private boolean fake;
@@ -586,6 +587,15 @@
     return this;
   }
 
+  /**
+   * Adds the given directories to the framework include directories (they are passed with {@code
+   * "-F"} to the compiler); these are also passed to dependent rules.
+   */
+  public CcCompilationHelper addFrameworkIncludeDirs(Iterable<PathFragment> frameworkIncludeDirs) {
+    Iterables.addAll(this.frameworkIncludeDirs, frameworkIncludeDirs);
+    return this;
+  }
+
   /** Adds a variableExtension to template the crosstool. */
   public CcCompilationHelper addVariableExtension(VariablesExtension variableExtension) {
     Preconditions.checkNotNull(variableExtension);
@@ -901,6 +911,7 @@
         configuration.getBinFragment().getRelative(repositoryPath));
 
     ccCompilationContextBuilder.addSystemIncludeDirs(systemIncludeDirs);
+    ccCompilationContextBuilder.addFrameworkIncludeDirs(frameworkIncludeDirs);
 
     for (PathFragment includeDir : includeDirs) {
       ccCompilationContextBuilder.addIncludeDir(includeDir);
@@ -1472,6 +1483,7 @@
         ccCompilationContext.getIncludeDirs(),
         ccCompilationContext.getQuoteIncludeDirs(),
         ccCompilationContext.getSystemIncludeDirs(),
+        ccCompilationContext.getFrameworkIncludeDirs(),
         ccCompilationContext.getDefines());
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index ba16c83..321569f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -218,6 +218,7 @@
       Object includeDirs,
       Object quoteIncludeDirs,
       Object systemIncludeDirs,
+      Object frameworkIncludeDirs,
       Object defines,
       boolean usePic,
       boolean addLegacyCxxOptions)
@@ -248,6 +249,7 @@
         asStringNestedSet(includeDirs),
         asStringNestedSet(quoteIncludeDirs),
         asStringNestedSet(systemIncludeDirs),
+        asStringNestedSet(frameworkIncludeDirs),
         asStringNestedSet(defines));
   }
 
@@ -501,7 +503,12 @@
 
   @Override
   public CcCompilationContext createCcCompilationContext(
-      Object headers, Object systemIncludes, Object includes, Object quoteIncludes, Object defines)
+      Object headers,
+      Object systemIncludes,
+      Object includes,
+      Object quoteIncludes,
+      Object frameworkIncludes,
+      Object defines)
       throws EvalException {
     CcCompilationContext.Builder ccCompilationContext =
         CcCompilationContext.builder(
@@ -521,6 +528,13 @@
         toNestedSetOfStrings(quoteIncludes, "quote_includes").getSet(String.class).toList().stream()
             .map(x -> PathFragment.create(x))
             .collect(ImmutableList.toImmutableList()));
+    ccCompilationContext.addFrameworkIncludeDirs(
+        toNestedSetOfStrings(frameworkIncludes, "framework_includes")
+            .getSet(String.class)
+            .toList()
+            .stream()
+            .map(x -> PathFragment.create(x))
+            .collect(ImmutableList.toImmutableList()));
     ccCompilationContext.addDefines(toNestedSetOfStrings(defines, "defines").getSet(String.class));
     return ccCompilationContext.build();
   }
@@ -1491,6 +1505,7 @@
       SkylarkList<String> includes,
       SkylarkList<String> quoteIncludes,
       SkylarkList<String> systemIncludes,
+      SkylarkList<String> frameworkIncludes,
       SkylarkList<String> defines,
       SkylarkList<String> userCompileFlags,
       SkylarkList<CcCompilationContext> ccCompilationContexts,
@@ -1559,6 +1574,10 @@
                 systemIncludes.stream()
                     .map(PathFragment::create)
                     .collect(ImmutableList.toImmutableList()))
+            .addFrameworkIncludeDirs(
+                frameworkIncludes.stream()
+                    .map(PathFragment::create)
+                    .collect(ImmutableList.toImmutableList()))
             .addDefines(defines)
             .setCopts(userCompileFlags)
             .addAdditionalCompilationInputs(headersForClifDoNotUseThisParam)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java
index 41e246e..ad1ee48 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java
@@ -53,15 +53,21 @@
   /**
    * Variable for the collection of quote include paths.
    *
-   * @see CcCompilationContext#getIncludeDirs().
+   * @see CcCompilationContext#getQuoteIncludeDirs().
    */
   QUOTE_INCLUDE_PATHS("quote_include_paths"),
   /**
    * Variable for the collection of system include paths.
    *
-   * @see CcCompilationContext#getIncludeDirs().
+   * @see CcCompilationContext#getSystemIncludeDirs().
    */
   SYSTEM_INCLUDE_PATHS("system_include_paths"),
+  /**
+   * Variable for the collection of framework include paths.
+   *
+   * @see CcCompilationContext#getFrameworkIncludeDirs().
+   */
+  FRAMEWORK_PATHS("framework_include_paths"),
   /** Variable for the module map file name. */
   MODULE_MAP_FILE("module_map_file"),
   /** Variable for the dependent module map file name. */
@@ -126,6 +132,7 @@
       Iterable<PathFragment> includeDirs,
       Iterable<PathFragment> quoteIncludeDirs,
       Iterable<PathFragment> systemIncludeDirs,
+      Iterable<PathFragment> frameworkIncludeDirs,
       Iterable<String> defines) {
     try {
       return setupVariablesOrThrowEvalException(
@@ -152,6 +159,7 @@
           getSafePathStrings(includeDirs),
           getSafePathStrings(quoteIncludeDirs),
           getSafePathStrings(systemIncludeDirs),
+          getSafePathStrings(frameworkIncludeDirs),
           defines);
     } catch (EvalException e) {
       ruleErrorConsumer.ruleError(e.getMessage());
@@ -183,12 +191,14 @@
       Iterable<String> includeDirs,
       Iterable<String> quoteIncludeDirs,
       Iterable<String> systemIncludeDirs,
+      Iterable<String> frameworkIncludeDirs,
       Iterable<String> defines)
       throws EvalException {
     Preconditions.checkNotNull(directModuleMaps);
     Preconditions.checkNotNull(includeDirs);
     Preconditions.checkNotNull(quoteIncludeDirs);
     Preconditions.checkNotNull(systemIncludeDirs);
+    Preconditions.checkNotNull(frameworkIncludeDirs);
     Preconditions.checkNotNull(defines);
     CcToolchainVariables.Builder buildVariables =
         CcToolchainVariables.builder(
@@ -239,6 +249,9 @@
       buildVariables.addStringSequenceVariable(INCLUDES.getVariableName(), includes);
     }
 
+    buildVariables.addStringSequenceVariable(
+        FRAMEWORK_PATHS.getVariableName(), frameworkIncludeDirs);
+
     Iterable<String> allDefines;
     if (fdoStamp != null) {
       // Stamp FDO builds with FDO subtype string
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
index 79a98a6..cd8a3ff 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
@@ -256,6 +256,10 @@
                         "      flag: '-isystem'",
                         "      flag: '%{system_include_paths}'",
                         "    }",
+                        "    flag_group {",
+                        "      iterate_over: 'framework_include_paths'",
+                        "      flag: '-F%{framework_include_paths}'",
+                        "    }",
                         "  }")));
       }
       if (!existingFeatureNames.contains(CppRuleClasses.FDO_INSTRUMENT)) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelper.java
index 1b9ec5f..86c6808 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelper.java
@@ -178,6 +178,7 @@
         /* includeDirs= */ ImmutableList.of(PathFragment.create(".")),
         /* quoteIncludeDirs= */ ImmutableList.of(),
         /* systemIncludeDirs= */ ImmutableList.of(),
+        /* frameworkIncludeDirs= */ ImmutableList.of(),
         computeAllLinkstampDefines(
             labelReplacement,
             outputReplacement,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
index a568fdc..6ccac29 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
@@ -144,6 +144,17 @@
             defaultValue = "[]",
             type = SkylarkList.class),
         @Param(
+            name = "framework_includes",
+            doc =
+                "Search paths for header files from Apple frameworks. They can be either relative "
+                    + "to the exec root or absolute. Usually passed with -F. Propagated to "
+                    + "dependents transitively.",
+            positional = false,
+            named = true,
+            noneable = true,
+            defaultValue = "[]",
+            type = SkylarkList.class),
+        @Param(
             name = "defines",
             doc = "Set of defines needed to compile this target. Each define is a string.",
             positional = false,
@@ -198,6 +209,7 @@
       SkylarkList<String> includes,
       SkylarkList<String> quoteIncludes,
       SkylarkList<String> systemIncludes,
+      SkylarkList<String> frameworkIncludes,
       SkylarkList<String> defines,
       SkylarkList<String> userCompileFlags,
       SkylarkList<CompilationContextT> ccCompilationContexts,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
index eb05776..80115c8 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
@@ -44,26 +44,34 @@
   @SkylarkCallable(
       name = "system_includes",
       doc =
-          "Returns the set of search paths for header files referenced by angle brackets, e.g. "
-              + "#include <foo/bar/header.h>. They can be either relative to the exec root "
-              + "or absolute. Usually passed with -isystem.",
+          "Returns the set of search paths (as strings) for header files referenced by angle"
+              + " brackets, e.g. #include <foo/bar/header.h>. They can be either relative to the"
+              + " exec root or absolute. Usually passed with -isystem.",
       structField = true)
   SkylarkNestedSet getSkylarkSystemIncludeDirs();
 
   @SkylarkCallable(
+      name = "framework_includes",
+      doc =
+          "Returns the set of search paths (as strings) for framework header files. Usually passed"
+              + " with -F.",
+      structField = true)
+  SkylarkNestedSet getSkylarkFrameworkIncludeDirs();
+
+  @SkylarkCallable(
       name = "includes",
       doc =
-          "Returns the set of search paths for header files referenced both by angle bracket and "
-              + "quotes Usually passed with -I.",
+          "Returns the set of search paths (as strings) for header files referenced both by angle"
+              + " bracket and quotes. Usually passed with -I.",
       structField = true)
   SkylarkNestedSet getSkylarkIncludeDirs();
 
   @SkylarkCallable(
       name = "quote_includes",
       doc =
-          "Returns the set of search paths for header files referenced by quotes, e.g. "
-              + "#include \"foo/bar/header.h\". They can be either relative to the exec "
-              + "root or absolute. Usually passed with -iquote.",
+          "Returns the set of search paths (as strings) for header files referenced by quotes,"
+              + " e.g. #include \"foo/bar/header.h\". They can be either relative to the exec root"
+              + " or absolute. Usually passed with -iquote.",
       structField = true)
   SkylarkNestedSet getSkylarkQuoteIncludeDirs();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
index 4a15796..41bddc3 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
@@ -339,6 +339,17 @@
               @ParamType(type = SkylarkNestedSet.class)
             }),
         @Param(
+            name = "framework_include_directories",
+            doc = "Depset of framework include directories.",
+            positional = false,
+            named = true,
+            defaultValue = "None",
+            noneable = true,
+            allowedTypes = {
+              @ParamType(type = NoneType.class),
+              @ParamType(type = SkylarkNestedSet.class)
+            }),
+        @Param(
             name = "preprocessor_defines",
             doc = "Depset of preprocessor defines.",
             positional = false,
@@ -372,6 +383,7 @@
       Object includeDirs,
       Object quoteIncludeDirs,
       Object systemIncludeDirs,
+      Object frameworkIncludeDirs,
       Object defines,
       boolean usePic,
       boolean addLegacyCxxOptions)
@@ -681,6 +693,13 @@
             defaultValue = "unbound",
             type = Object.class),
         @Param(
+            name = "framework_includes",
+            doc = "Set of framework search paths for header files (Apple platform only)",
+            positional = false,
+            named = true,
+            defaultValue = "unbound",
+            type = Object.class),
+        @Param(
             name = "defines",
             doc = "Set of defines needed to compile this target. Each define is a string",
             positional = false,
@@ -689,7 +708,12 @@
             type = Object.class)
       })
   CompilationContextT createCcCompilationContext(
-      Object headers, Object systemIncludes, Object includes, Object quoteIncludes, Object defines)
+      Object headers,
+      Object systemIncludes,
+      Object includes,
+      Object quoteIncludes,
+      Object frameworkIncludes,
+      Object defines)
       throws EvalException;
 
   // TODO(b/65151735): Remove when cc_flags is entirely set from features.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
index 24390b5..c37b315 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
@@ -107,10 +107,19 @@
 
   @Override
   public CcToolchainVariablesApi getCompileBuildVariables(
-      CcToolchainProviderApi ccToolchainProvider, FeatureConfigurationApi featureConfiguration,
-      Object sourceFile, Object outputFile, Object userCompileFlags, Object includeDirs,
-      Object quoteIncludeDirs, Object systemIncludeDirs, Object defines, boolean usePic,
-      boolean addLegacyCxxOptions) throws EvalException {
+      CcToolchainProviderApi ccToolchainProvider,
+      FeatureConfigurationApi featureConfiguration,
+      Object sourceFile,
+      Object outputFile,
+      Object userCompileFlags,
+      Object includeDirs,
+      Object quoteIncludeDirs,
+      Object systemIncludeDirs,
+      Object frameworkIncludeDirs,
+      Object defines,
+      boolean usePic,
+      boolean addLegacyCxxOptions)
+      throws EvalException {
     return null;
   }
 
@@ -161,7 +170,12 @@
 
   @Override
   public CcCompilationContextApi createCcCompilationContext(
-      Object headers, Object systemIncludes, Object includes, Object quoteIncludes, Object defines)
+      Object headers,
+      Object systemIncludes,
+      Object includes,
+      Object quoteIncludes,
+      Object frameworkIncludes,
+      Object defines)
       throws EvalException {
     return null;
   }
@@ -188,6 +202,7 @@
       SkylarkList<String> quoteIncludes,
       SkylarkList<String> defines,
       SkylarkList<String> systemIncludes,
+      SkylarkList<String> frameworkIncludes,
       SkylarkList<String> userCompileFlags,
       SkylarkList<CcCompilationContextApi> ccCompilationContexts,
       String name,
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 ae24710..0e68213 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
@@ -704,6 +704,19 @@
   }
 
   @Test
+  public void testCompileBuildVariablesForFrameworkIncludes() throws Exception {
+    assertThat(
+            commandLineForVariables(
+                CppActionNames.CPP_COMPILE,
+                "cc_common.create_compile_variables(",
+                "feature_configuration = feature_configuration,",
+                "cc_toolchain = toolchain,",
+                "framework_include_directories = depset(['foo/bar'])",
+                ")"))
+        .contains("-Ffoo/bar");
+  }
+
+  @Test
   public void testCompileBuildVariablesForDefines() throws Exception {
     assertThat(
             commandLineForVariables(
@@ -1068,6 +1081,7 @@
         "    system_includes=depset([ctx.attr._system_include]),",
         "    includes=depset([ctx.attr._include]),",
         "    quote_includes=depset([ctx.attr._quote_include]),",
+        "    framework_includes=depset([ctx.attr._framework_include]),",
         "    defines=depset([ctx.attr._define]))",
         "  cc_infos = [CcInfo(compilation_context=compilation_context)]",
         "  for dep in ctx.attr._deps:",
@@ -1080,6 +1094,8 @@
         "          merged_system_includes=merged_cc_info.compilation_context.system_includes,",
         "          merged_includes=merged_cc_info.compilation_context.includes,",
         "          merged_quote_includes=merged_cc_info.compilation_context.quote_includes,",
+        "         "
+            + " merged_framework_includes=merged_cc_info.compilation_context.framework_includes,",
         "          merged_defines=merged_cc_info.compilation_context.defines",
         "      )]",
         "crule = rule(",
@@ -1090,6 +1106,7 @@
         "    '_system_include': attr.string(default='foo/bar'),",
         "    '_include': attr.string(default='baz/qux'),",
         "    '_quote_include': attr.string(default='quux/abc'),",
+        "    '_framework_include': attr.string(default='fuux/fgh'),",
         "    '_define': attr.string(default='MYDEFINE'),",
         "    '_deps': attr.label_list(default=['//a:dep1', '//a:dep2'])",
         "  },",
@@ -1132,6 +1149,12 @@
     List<String> mergedQuoteIncludes =
         ((SkylarkNestedSet) myInfo.getValue("merged_quote_includes")).getSet(String.class).toList();
     assertThat(mergedQuoteIncludes).contains("quux/abc");
+
+    List<String> mergedFrameworkIncludes =
+        ((SkylarkNestedSet) myInfo.getValue("merged_framework_includes"))
+            .getSet(String.class)
+            .toList();
+    assertThat(mergedFrameworkIncludes).contains("fuux/fgh");
   }
 
   @Test
@@ -5165,6 +5188,17 @@
   }
 
   @Test
+  public void testFrameworkIncludeDirs() throws Exception {
+    createFilesForTestingCompilation(
+        scratch, "tools/build_defs/foo", "framework_includes=['foo/bar', 'baz/qux']");
+    ConfiguredTarget target = getConfiguredTarget("//foo:skylark_lib");
+    assertThat(target).isNotNull();
+    CppCompileAction action =
+        (CppCompileAction) getGeneratingAction(artifactByPath(getFilesToBuild(target), ".o"));
+    assertThat(action.getArguments()).containsAtLeast("-Ffoo/bar", "-Fbaz/qux").inOrder();
+  }
+
+  @Test
   public void testDefines() throws Exception {
     createFilesForTestingCompilation(
         scratch, "tools/build_defs/foo", "defines=['DEFINE1', 'DEFINE2']");
