Fix layering check whitelist - internal change
PiperOrigin-RevId: 303318401
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
index 2dad150..e886059 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.bazel.rules.cpp;
+import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -109,5 +110,8 @@
}
@Override
- public void validateLayeringCheckFeatures(RuleContext ruleContext) {}
+ public void validateLayeringCheckFeatures(
+ RuleContext ruleContext,
+ CcToolchainProvider ccToolchain,
+ ImmutableSet<String> unsupportedFeatures) {}
}
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 76e209c..dc9b317 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
@@ -833,7 +833,7 @@
ImmutableSet<String> unsupportedFeatures,
CcToolchainProvider toolchain,
CppSemantics cppSemantics) {
- cppSemantics.validateLayeringCheckFeatures(ruleContext);
+ cppSemantics.validateLayeringCheckFeatures(ruleContext, toolchain, ImmutableSet.of());
try {
return configureFeaturesOrThrowEvalException(
requestedFeatures,
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 1f1a3055..bd21553 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
@@ -159,12 +159,15 @@
// flipped.
BuildOptions buildOptions =
ruleContext == null ? null : ruleContext.getConfiguration().getOptions();
- getSemantics().validateLayeringCheckFeatures(ruleContext.getRuleContext());
+ ImmutableSet<String> unsupportedFeaturesSet =
+ ImmutableSet.copyOf(unsupportedFeatures.getContents(String.class, "unsupported_features"));
+ getSemantics()
+ .validateLayeringCheckFeatures(
+ ruleContext.getRuleContext(), toolchain, unsupportedFeaturesSet);
return FeatureConfigurationForStarlark.from(
CcCommon.configureFeaturesOrThrowEvalException(
ImmutableSet.copyOf(requestedFeatures.getContents(String.class, "requested_features")),
- ImmutableSet.copyOf(
- unsupportedFeatures.getContents(String.class, "unsupported_features")),
+ unsupportedFeaturesSet,
toolchain,
cppConfiguration),
cppConfiguration,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index cb06563..a9ad796 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -25,6 +25,7 @@
import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.TemplateVariableInfo;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.Location;
import java.io.Serializable;
import java.util.HashMap;
@@ -42,6 +43,14 @@
/** Default attribute name for the c++ toolchain type */
public static final String CC_TOOLCHAIN_TYPE_ATTRIBUTE_NAME = "$cc_toolchain_type";
+ public static final String ALLOWED_LAYERING_CHECK_FEATURES_WHITELIST =
+ "disabling_parse_headers_and_layering_check_allowed";
+ public static final String ALLOWED_LAYERING_CHECK_FEATURES_TARGET =
+ "@bazel_tools//tools/build_defs/cc/whitelists/parse_headers_and_layering_check:"
+ + ALLOWED_LAYERING_CHECK_FEATURES_WHITELIST;
+ public static final Label ALLOWED_LAYERING_CHECK_FEATURES_LABEL =
+ Label.parseAbsoluteUnchecked(ALLOWED_LAYERING_CHECK_FEATURES_TARGET);
+
@Override
public ConfiguredTarget create(RuleContext ruleContext)
throws InterruptedException, RuleErrorException, ActionConflictException {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
index 5a5d8b1..b32a168 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
@@ -26,8 +26,10 @@
import com.google.devtools.build.lib.analysis.LicensesProvider.TargetLicense;
import com.google.devtools.build.lib.analysis.LicensesProviderImpl;
import com.google.devtools.build.lib.analysis.MiddlemanProvider;
+import com.google.devtools.build.lib.analysis.PackageSpecificationProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.analysis.Whitelist;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.cmdline.Label;
@@ -97,6 +99,7 @@
private final Label ccToolchainLabel;
private final TransitiveInfoCollection staticRuntimeLib;
private final TransitiveInfoCollection dynamicRuntimeLib;
+ private final PackageSpecificationProvider whitelistForLayeringCheck;
public CcToolchainAttributesProvider(
RuleContext ruleContext,
@@ -219,6 +222,9 @@
this.toolchainType = null;
}
this.additionalBuildVariablesComputer = additionalBuildVariablesComputer;
+ this.whitelistForLayeringCheck =
+ Whitelist.fetchPackageSpecificationProvider(
+ ruleContext, CcToolchain.ALLOWED_LAYERING_CHECK_FEATURES_WHITELIST);
}
public String getCpu() {
@@ -406,6 +412,10 @@
return ifsoBuilder;
}
+ public PackageSpecificationProvider getWhitelistForLayeringCheck() {
+ return whitelistForLayeringCheck;
+ }
+
private static NestedSet<Artifact> getMiddlemanOrFiles(RuleContext context, String attribute) {
return getMiddlemanOrFiles(context, attribute, Mode.HOST);
}
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 168c647..cbb52b9 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
@@ -19,6 +19,7 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.LicensesProvider;
+import com.google.devtools.build.lib.analysis.PackageSpecificationProvider;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
@@ -101,7 +102,8 @@
/* abi= */ "",
/* targetSystemName= */ "",
/* additionalMakeVariables= */ ImmutableMap.of(),
- /* legacyCcFlagsMakeVariable= */ "");
+ /* legacyCcFlagsMakeVariable= */ "",
+ /* whitelistForLayeringCheck= */ null);
@Nullable private final CppConfiguration cppConfiguration;
private final PathFragment crosstoolTopPathFragment;
@@ -163,6 +165,7 @@
private final FdoContext fdoContext;
private final LicensesProvider licensesProvider;
+ private final PackageSpecificationProvider whitelistForLayeringCheck;
public CcToolchainProvider(
ImmutableMap<String, Object> values,
@@ -217,7 +220,8 @@
String abi,
String targetSystemName,
ImmutableMap<String, String> additionalMakeVariables,
- String legacyCcFlagsMakeVariable) {
+ String legacyCcFlagsMakeVariable,
+ PackageSpecificationProvider whitelistForLayeringCheck) {
super(values, Location.BUILTIN);
this.cppConfiguration = cppConfiguration;
this.crosstoolTopPathFragment = crosstoolTopPathFragment;
@@ -274,6 +278,7 @@
this.targetSystemName = targetSystemName;
this.additionalMakeVariables = additionalMakeVariables;
this.legacyCcFlagsMakeVariable = legacyCcFlagsMakeVariable;
+ this.whitelistForLayeringCheck = whitelistForLayeringCheck;
}
/**
@@ -904,5 +909,9 @@
NestedSet<Artifact> getDynamicRuntimeLibForTesting() {
return dynamicRuntimeLinkInputs;
}
+
+ public PackageSpecificationProvider getWhitelistForLayeringCheck() {
+ return whitelistForLayeringCheck;
+ }
}
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 c0713a6..ae0f1d7 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
@@ -22,6 +22,7 @@
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.CompilationHelper;
import com.google.devtools.build.lib.analysis.FileProvider;
+import com.google.devtools.build.lib.analysis.PackageSpecificationProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -183,6 +184,9 @@
ImmutableList<PathFragment> builtInIncludeDirectories =
builtInIncludeDirectoriesBuilder.build();
+ PackageSpecificationProvider whitelistForLayeringCheck =
+ attributes.getWhitelistForLayeringCheck();
+
return new CcToolchainProvider(
getToolchainForSkylark(toolPaths),
cppConfiguration,
@@ -244,7 +248,8 @@
toolchainConfigInfo.getAbiVersion(),
toolchainConfigInfo.getTargetSystemName(),
computeAdditionalMakeVariables(toolchainConfigInfo),
- computeLegacyCcFlagsMakeVariable(toolchainConfigInfo));
+ computeLegacyCcFlagsMakeVariable(toolchainConfigInfo),
+ whitelistForLayeringCheck);
}
@Nullable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
index c63f4f2..1452a37 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
@@ -26,6 +26,7 @@
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.TemplateVariableInfo;
+import com.google.devtools.build.lib.analysis.Whitelist;
import com.google.devtools.build.lib.analysis.config.HostTransition;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault;
@@ -355,6 +356,10 @@
.allowedFileTypes()
.mandatoryProviders(CcToolchainConfigInfo.PROVIDER.id())
.mandatory())
+ .add(
+ Whitelist.getAttributeFromWhitelistName(
+ CcToolchain.ALLOWED_LAYERING_CHECK_FEATURES_WHITELIST)
+ .value(CcToolchain.ALLOWED_LAYERING_CHECK_FEATURES_LABEL))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
index a8f4e87..49f8563 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.rules.cpp;
+import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -54,5 +55,8 @@
StructImpl getCcSharedLibraryInfo(TransitiveInfoCollection dep);
/** No-op in Bazel */
- void validateLayeringCheckFeatures(RuleContext ruleContext);
+ void validateLayeringCheckFeatures(
+ RuleContext ruleContext,
+ CcToolchainProvider ccToolchain,
+ ImmutableSet<String> unsupportedFeatures);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
index bc0b939..09645b0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
@@ -16,12 +16,14 @@
import static com.google.devtools.build.lib.rules.objc.CompilationSupport.IncludeProcessingType.INCLUDE_SCANNING;
+import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.rules.cpp.CcCompilationContext;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.CppCompileActionBuilder;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
import com.google.devtools.build.lib.rules.cpp.CppSemantics;
@@ -130,5 +132,8 @@
}
@Override
- public void validateLayeringCheckFeatures(RuleContext ruleContext) {}
+ public void validateLayeringCheckFeatures(
+ RuleContext ruleContext,
+ CcToolchainProvider ccToolchain,
+ ImmutableSet<String> unsupportedFeatures) {}
}
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
index f7a4c79..cbae0fa 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
@@ -54,6 +54,7 @@
writeMacroFile(config);
setupRulesCc(config);
setupCcToolchainConfig(config);
+ createParseHeadersAndLayeringCheckWhitelist(config);
}
@Override
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
index d898d23..b9d088b 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
@@ -251,6 +251,17 @@
config.append(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/cpp/BUILD", "");
}
+ protected static void createParseHeadersAndLayeringCheckWhitelist(MockToolsConfig config)
+ throws IOException {
+ config.create(
+ TestConstants.TOOLS_REPOSITORY_SCRATCH
+ + "tools/build_defs/cc/whitelists/parse_headers_and_layering_check/BUILD",
+ "package_group(",
+ " name = 'disabling_parse_headers_and_layering_check_allowed',",
+ " packages = ['//...']",
+ ")");
+ }
+
protected String getCrosstoolTopPathForConfig(MockToolsConfig config) {
if (config.isRealFileSystem()) {
return getRealFilesystemCrosstoolTopPath();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/MockCppSemantics.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/MockCppSemantics.java
index dce70d9..48f5754 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/MockCppSemantics.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/MockCppSemantics.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.rules.cpp;
+import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -68,6 +69,9 @@
}
@Override
- public void validateLayeringCheckFeatures(RuleContext ruleContext) {}
+ public void validateLayeringCheckFeatures(
+ RuleContext ruleContext,
+ CcToolchainProvider ccToolchain,
+ ImmutableSet<String> unsupportedFeatures) {}
;
}
diff --git a/tools/build_defs/BUILD b/tools/build_defs/BUILD
index ef350c9..e726001 100644
--- a/tools/build_defs/BUILD
+++ b/tools/build_defs/BUILD
@@ -2,6 +2,7 @@
name = "srcs",
srcs = glob(["**"]) + [
"//tools/build_defs/cc:srcs",
+ "//tools/build_defs/cc/whitelists/parse_headers_and_layering_check:srcs",
"//tools/build_defs/hash:srcs",
"//tools/build_defs/pkg:srcs",
"//tools/build_defs/repo:srcs",
@@ -13,6 +14,7 @@
name = "embedded_tools",
srcs = glob(["**"]) + [
"//tools/build_defs/cc:srcs",
+ "//tools/build_defs/cc/whitelists/parse_headers_and_layering_check:srcs",
"//tools/build_defs/hash:srcs",
"//tools/build_defs/pkg:srcs",
"//tools/build_defs/repo:embedded_tools",
diff --git a/tools/build_defs/cc/whitelists/parse_headers_and_layering_check/BUILD b/tools/build_defs/cc/whitelists/parse_headers_and_layering_check/BUILD
new file mode 100644
index 0000000..b078e2d
--- /dev/null
+++ b/tools/build_defs/cc/whitelists/parse_headers_and_layering_check/BUILD
@@ -0,0 +1,12 @@
+licenses(["notice"]) # Apache 2.0
+
+package_group(
+ name = "disabling_parse_headers_and_layering_check_allowed",
+ packages = [],
+)
+
+filegroup(
+ name = "srcs",
+ srcs = ["BUILD"],
+ visibility = ["//tools/build_defs:__pkg__"],
+)