Fold FdoSupport into FdoSupportValue and remove FdoSupportProvider to FdoProvider.
Also add a few stern warnings about the extreme badness of the idea of handling a Path object in the analysis phase.
RELNOTES: None.
PiperOrigin-RevId: 210115418
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index 9781d79..74f7052 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -227,7 +227,7 @@
}
LinkingMode linkingMode = getLinkStaticness(ruleContext, cppConfiguration);
- FdoSupportProvider fdoSupport = common.getFdoSupport();
+ FdoProvider fdoProvider = common.getFdoProvider();
FeatureConfiguration featureConfiguration =
CcCommon.configureFeaturesOrReportRuleError(
ruleContext,
@@ -243,7 +243,7 @@
CcCompilationHelper compilationHelper =
new CcCompilationHelper(
- ruleContext, semantics, featureConfiguration, ccToolchain, fdoSupport)
+ ruleContext, semantics, featureConfiguration, ccToolchain, fdoProvider)
.fromCommon(common, /* additionalCopts= */ ImmutableList.of())
.addPrivateHeaders(common.getPrivateHeaders())
.addSources(common.getSources())
@@ -279,7 +279,7 @@
semantics,
featureConfiguration,
ccToolchain,
- fdoSupport,
+ fdoProvider,
ruleContext.getConfiguration())
.fromCommon(common)
.addDeps(ImmutableList.of(CppHelper.mallocForTarget(ruleContext)))
@@ -300,7 +300,7 @@
ruleContext,
ccToolchain,
featureConfiguration,
- fdoSupport,
+ fdoProvider,
common,
precompiledFiles,
ccCompilationOutputs,
@@ -554,7 +554,7 @@
RuleContext context,
CcToolchainProvider toolchain,
FeatureConfiguration featureConfiguration,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
CcCommon common,
PrecompiledFiles precompiledFiles,
CcCompilationOutputs compilationOutputs,
@@ -568,7 +568,7 @@
throws InterruptedException {
CppLinkActionBuilder builder =
new CppLinkActionBuilder(
- context, binary, toolchain, fdoSupport, featureConfiguration, cppSemantics)
+ context, binary, toolchain, fdoProvider, featureConfiguration, cppSemantics)
.setCrosstoolInputs(toolchain.getLink())
.addNonCodeInputs(compilationPrerequisites);
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 49530cf..41b0dfd 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
@@ -49,7 +49,7 @@
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.CollidingProvidesException;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
@@ -159,16 +159,16 @@
private final CcToolchainProvider ccToolchain;
- private final FdoSupportProvider fdoSupport;
+ private final FdoProvider fdoProvider;
public CcCommon(RuleContext ruleContext) {
this.ruleContext = ruleContext;
this.ccToolchain =
Preconditions.checkNotNull(
CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext));
- this.fdoSupport =
+ this.fdoProvider =
Preconditions.checkNotNull(
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext));
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext));
}
/**
@@ -410,8 +410,8 @@
/**
* Returns the C++ FDO optimization support provider.
*/
- public FdoSupportProvider getFdoSupport() {
- return fdoSupport;
+ public FdoProvider getFdoProvider() {
+ return fdoProvider;
}
/**
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 9962f29..ddd7a54 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
@@ -50,7 +50,7 @@
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.VariablesExtension;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
import com.google.devtools.build.lib.skylarkbuildapi.cpp.CompilationInfoApi;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.util.FileTypeSet;
@@ -95,42 +95,42 @@
ImmutableMap.Builder<String, String> variablesBuilder,
CppCompileActionBuilder builder,
FeatureConfiguration featureConfiguration,
- FdoSupportProvider fdoSupportProvider) {
+ FdoProvider fdoProvider) {
- if (fdoSupportProvider != null && fdoSupportProvider.getPrefetchHintsArtifact() != null) {
+ if (fdoProvider != null && fdoProvider.getPrefetchHintsArtifact() != null) {
variablesBuilder.put(
CompileBuildVariables.FDO_PREFETCH_HINTS_PATH.getVariableName(),
- fdoSupportProvider.getPrefetchHintsArtifact().getExecPathString());
+ fdoProvider.getPrefetchHintsArtifact().getExecPathString());
}
// FDO is disabled -> do nothing.
- if (fdoSupportProvider.getFdoInstrument() == null
- && fdoSupportProvider.getFdoMode() == FdoMode.OFF) {
+ if (fdoProvider.getFdoInstrument() == null
+ && fdoProvider.getFdoMode() == FdoMode.OFF) {
return;
}
if (featureConfiguration.isEnabled(CppRuleClasses.FDO_INSTRUMENT)) {
variablesBuilder.put(
CompileBuildVariables.FDO_INSTRUMENT_PATH.getVariableName(),
- fdoSupportProvider.getFdoInstrument());
+ fdoProvider.getFdoInstrument());
}
// Optimization phase
- if (fdoSupportProvider.getFdoMode() != FdoMode.OFF) {
- Iterable<Artifact> auxiliaryInputs = getAuxiliaryFdoInputs(fdoSupportProvider);
+ if (fdoProvider.getFdoMode() != FdoMode.OFF) {
+ Iterable<Artifact> auxiliaryInputs = getAuxiliaryFdoInputs(fdoProvider);
builder.addMandatoryInputs(auxiliaryInputs);
if (!Iterables.isEmpty(auxiliaryInputs)) {
if (featureConfiguration.isEnabled(CppRuleClasses.AUTOFDO)
|| featureConfiguration.isEnabled(CppRuleClasses.XBINARYFDO)) {
variablesBuilder.put(
CompileBuildVariables.FDO_PROFILE_PATH.getVariableName(),
- fdoSupportProvider.getProfileArtifact().getExecPathString());
+ fdoProvider.getProfileArtifact().getExecPathString());
}
if (featureConfiguration.isEnabled(CppRuleClasses.FDO_OPTIMIZE)) {
- if (fdoSupportProvider.getFdoMode() == FdoMode.LLVM_FDO) {
+ if (fdoProvider.getFdoMode() == FdoMode.LLVM_FDO) {
variablesBuilder.put(
CompileBuildVariables.FDO_PROFILE_PATH.getVariableName(),
- fdoSupportProvider.getProfileArtifact().getExecPathString());
+ fdoProvider.getProfileArtifact().getExecPathString());
}
}
}
@@ -138,16 +138,16 @@
}
/** Returns the auxiliary files that need to be added to the {@link CppCompileAction}. */
- private static Iterable<Artifact> getAuxiliaryFdoInputs(FdoSupportProvider fdoSupportProvider) {
+ private static Iterable<Artifact> getAuxiliaryFdoInputs(FdoProvider fdoProvider) {
ImmutableSet.Builder<Artifact> auxiliaryInputs = ImmutableSet.builder();
- if (fdoSupportProvider.getPrefetchHintsArtifact() != null) {
- auxiliaryInputs.add(fdoSupportProvider.getPrefetchHintsArtifact());
+ if (fdoProvider.getPrefetchHintsArtifact() != null) {
+ auxiliaryInputs.add(fdoProvider.getPrefetchHintsArtifact());
}
// If --fdo_optimize was not specified, we don't have any additional inputs.
- if (fdoSupportProvider.getFdoMode() != FdoMode.OFF) {
- auxiliaryInputs.add(fdoSupportProvider.getProfileArtifact());
+ if (fdoProvider.getFdoMode() != FdoMode.OFF) {
+ auxiliaryInputs.add(fdoProvider.getProfileArtifact());
}
return auxiliaryInputs.build();
@@ -293,7 +293,7 @@
private final FeatureConfiguration featureConfiguration;
private final CcToolchainProvider ccToolchain;
- private final FdoSupportProvider fdoSupport;
+ private final FdoProvider fdoProvider;
private boolean useDeps = true;
private boolean generateModuleMap = true;
private String purpose = null;
@@ -314,7 +314,7 @@
* @param featureConfiguration activated features and action configs for the build
* @param sourceCatagory the candidate source types for the build
* @param ccToolchain the C++ toolchain provider for the build
- * @param fdoSupport the C++ FDO optimization support provider for the build
+ * @param fdoProvider the C++ FDO optimization support provider for the build
*/
public CcCompilationHelper(
RuleContext ruleContext,
@@ -322,14 +322,14 @@
FeatureConfiguration featureConfiguration,
SourceCategory sourceCatagory,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport) {
+ FdoProvider fdoProvider) {
this(
ruleContext,
semantics,
featureConfiguration,
sourceCatagory,
ccToolchain,
- fdoSupport,
+ fdoProvider,
ruleContext.getConfiguration());
}
@@ -341,7 +341,7 @@
* @param featureConfiguration activated features and action configs for the build
* @param sourceCatagory the candidate source types for the build
* @param ccToolchain the C++ toolchain provider for the build
- * @param fdoSupport the C++ FDO optimization support provider for the build
+ * @param fdoProvider the C++ FDO optimization support provider for the build
* @param configuration the configuration that gives the directory of output artifacts
*/
public CcCompilationHelper(
@@ -350,14 +350,14 @@
FeatureConfiguration featureConfiguration,
SourceCategory sourceCatagory,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
BuildConfiguration configuration) {
this.ruleContext = Preconditions.checkNotNull(ruleContext);
this.semantics = Preconditions.checkNotNull(semantics);
this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration);
this.sourceCategory = Preconditions.checkNotNull(sourceCatagory);
this.ccToolchain = Preconditions.checkNotNull(ccToolchain);
- this.fdoSupport = Preconditions.checkNotNull(fdoSupport);
+ this.fdoProvider = Preconditions.checkNotNull(fdoProvider);
this.configuration = Preconditions.checkNotNull(configuration);
this.cppConfiguration =
Preconditions.checkNotNull(ruleContext.getFragment(CppConfiguration.class));
@@ -376,15 +376,15 @@
* @param semantics CppSemantics for the build
* @param featureConfiguration activated features and action configs for the build
* @param ccToolchain the C++ toolchain provider for the build
- * @param fdoSupport the C++ FDO optimization support provider for the build
+ * @param fdoProvider the C++ FDO optimization support provider for the build
*/
public CcCompilationHelper(
RuleContext ruleContext,
CppSemantics semantics,
FeatureConfiguration featureConfiguration,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport) {
- this(ruleContext, semantics, featureConfiguration, SourceCategory.CC, ccToolchain, fdoSupport);
+ FdoProvider fdoProvider) {
+ this(ruleContext, semantics, featureConfiguration, SourceCategory.CC, ccToolchain, fdoProvider);
}
/** Sets fields that overlap for cc_library and cc_binary rules. */
@@ -1536,7 +1536,7 @@
allAdditionalBuildVariables.putAll(additionalBuildVariables);
if (ccRelativeName != null) {
configureFdoBuildVariables(
- allAdditionalBuildVariables, builder, featureConfiguration, fdoSupport);
+ allAdditionalBuildVariables, builder, featureConfiguration, fdoProvider);
}
return CompileBuildVariables.setupVariablesOrReportRuleError(
ruleContext,
@@ -1552,7 +1552,7 @@
cppModuleMap,
usePic,
builder.getTempOutputFile(),
- CppHelper.getFdoBuildStamp(ruleContext, fdoSupport),
+ CppHelper.getFdoBuildStamp(ruleContext, fdoProvider),
dotdFileExecPath,
ImmutableList.copyOf(variablesExtensions),
allAdditionalBuildVariables.build(),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
index d06979b..14a4092 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
@@ -69,14 +69,14 @@
CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext);
FeatureConfiguration featureConfiguration =
CcCommon.configureFeaturesOrReportRuleError(ruleContext, ccToolchain);
- FdoSupportProvider fdoSupport =
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+ FdoProvider fdoProvider =
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
// Add headers to compilation step.
final CcCommon common = new CcCommon(ruleContext);
CompilationInfo compilationInfo =
new CcCompilationHelper(
- ruleContext, semantics, featureConfiguration, ccToolchain, fdoSupport)
+ ruleContext, semantics, featureConfiguration, ccToolchain, fdoProvider)
.addPublicHeaders(common.getHeaders())
.setHeadersCheckingMode(HeadersCheckingMode.STRICT)
.compile();
@@ -99,7 +99,7 @@
semantics,
featureConfiguration,
ccToolchain,
- fdoSupport,
+ fdoProvider,
ruleContext.getConfiguration());
if (staticLibrary != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index 319f7d8..46c1678 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -109,7 +109,7 @@
ruleContext.initConfigurationMakeVariableContext(new CcFlagsSupplier(ruleContext));
}
- FdoSupportProvider fdoSupport = common.getFdoSupport();
+ FdoProvider fdoProvider = common.getFdoProvider();
FeatureConfiguration featureConfiguration =
CcCommon.configureFeaturesOrReportRuleError(ruleContext, ccToolchain);
PrecompiledFiles precompiledFiles = new PrecompiledFiles(ruleContext);
@@ -121,7 +121,7 @@
CcCompilationHelper compilationHelper =
new CcCompilationHelper(
- ruleContext, semantics, featureConfiguration, ccToolchain, fdoSupport)
+ ruleContext, semantics, featureConfiguration, ccToolchain, fdoProvider)
.fromCommon(common, additionalCopts)
.addSources(common.getSources())
.addPrivateHeaders(common.getPrivateHeaders())
@@ -135,7 +135,7 @@
semantics,
featureConfiguration,
ccToolchain,
- fdoSupport,
+ fdoProvider,
ruleContext.getConfiguration())
.fromCommon(common)
.addLinkopts(common.getLinkopts())
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
index 34aac7f..ba6907f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
@@ -175,7 +175,7 @@
private final FeatureConfiguration featureConfiguration;
private final CcToolchainProvider ccToolchain;
- private final FdoSupportProvider fdoSupport;
+ private final FdoProvider fdoProvider;
private String linkedArtifactNameSuffix = "";
/**
@@ -185,7 +185,7 @@
* @param semantics CppSemantics for the build
* @param featureConfiguration activated features and action configs for the build
* @param ccToolchain the C++ toolchain provider for the build
- * @param fdoSupport the C++ FDO optimization support provider for the build
+ * @param fdoProvider the C++ FDO optimization support provider for the build
* @param configuration the configuration that gives the directory of output artifacts
*/
public CcLinkingHelper(
@@ -193,13 +193,13 @@
CppSemantics semantics,
FeatureConfiguration featureConfiguration,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
BuildConfiguration configuration) {
this.ruleContext = Preconditions.checkNotNull(ruleContext);
this.semantics = Preconditions.checkNotNull(semantics);
this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration);
this.ccToolchain = Preconditions.checkNotNull(ccToolchain);
- this.fdoSupport = Preconditions.checkNotNull(fdoSupport);
+ this.fdoProvider = Preconditions.checkNotNull(fdoProvider);
this.configuration = Preconditions.checkNotNull(configuration);
this.cppConfiguration =
Preconditions.checkNotNull(ruleContext.getFragment(CppConfiguration.class));
@@ -973,7 +973,7 @@
private CppLinkActionBuilder newLinkActionBuilder(Artifact outputArtifact) {
return new CppLinkActionBuilder(
- ruleContext, outputArtifact, ccToolchain, fdoSupport, featureConfiguration, semantics)
+ ruleContext, outputArtifact, ccToolchain, fdoProvider, featureConfiguration, semantics)
.setCrosstoolInputs(ccToolchain.getLink());
}
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 f37e897..1fc0fe2 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
@@ -259,7 +259,7 @@
/* interfaceLibraryOutput= */ null,
/* ltoOutputRootPrefix= */ null,
convertFromNoneable(defFile, /* defaultValue= */ null),
- /* fdoSupport= */ null,
+ /* fdoProvider= */ null,
asStringNestedSet(runtimeLibrarySearchDirectories),
/* librariesToLink= */ null,
asStringNestedSet(librarySearchDirectories),
@@ -418,8 +418,8 @@
convertFromNoneable(skylarkFeatureConfiguration, null);
Pair<List<Artifact>, List<Artifact>> separatedHeadersAndSources =
separateSourcesFromHeaders(sources);
- FdoSupportProvider fdoSupport =
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+ FdoProvider fdoProvider =
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
// TODO(plf): Need to flatten the nested set to convert the Strings to PathFragment. This could
// be avoided if path fragments are ever added to Skylark or in the C++ code we take Strings
// instead of PathFragments.
@@ -431,7 +431,7 @@
featureConfiguration,
CcCompilationHelper.SourceCategory.CC,
ccToolchainProvider,
- fdoSupport)
+ fdoProvider)
.addPublicHeaders(headers)
.addIncludeDirs(
includeDirs
@@ -497,8 +497,8 @@
CcToolchainProvider ccToolchainProvider = convertFromNoneable(skylarkCcToolchainProvider, null);
FeatureConfiguration featureConfiguration =
convertFromNoneable(skylarkFeatureConfiguration, null);
- FdoSupportProvider fdoSupport =
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+ FdoProvider fdoProvider =
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
NestedSet<String> linkopts =
convertSkylarkListOrNestedSetToNestedSet(skylarkLinkopts, String.class);
CcLinkingHelper helper =
@@ -507,7 +507,7 @@
cppSemantics,
featureConfiguration,
ccToolchainProvider,
- fdoSupport,
+ fdoProvider,
ruleContext.getConfiguration())
.addLinkopts(linkopts)
.setShouldCreateStaticLibraries(shouldCreateStaticLibraries)
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 3d68b2d..d10135f 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
@@ -54,7 +54,7 @@
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.License;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.Pair;
@@ -529,12 +529,12 @@
if (fdoMode == FdoMode.LLVM_FDO) {
profileArtifact =
convertLLVMRawProfileToIndexed(
- fdoSupport.getFdoSupport().getFdoProfile().asFragment(), toolchainInfo, ruleContext);
+ fdoSupport.getFdoProfile().asFragment(), toolchainInfo, ruleContext);
if (ruleContext.hasErrors()) {
return null;
}
} else if (fdoMode == FdoMode.AUTO_FDO || fdoMode == FdoMode.XBINARY_FDO) {
- Path fdoProfile = fdoSupport.getFdoSupport().getFdoProfile();
+ Path fdoProfile = fdoSupport.getFdoProfile();
profileArtifact = ruleContext.getUniqueDirectoryArtifact(
"fdo",
fdoProfile.getBaseName(),
@@ -597,8 +597,8 @@
new RuleConfiguredTargetBuilder(ruleContext)
.addNativeDeclaredProvider(ccProvider)
.addNativeDeclaredProvider(templateVariableInfo)
- .addProvider(new FdoSupportProvider(
- fdoSupport.getFdoSupport(), fdoMode, cppConfiguration.getFdoInstrument(),
+ .addProvider(new FdoProvider(
+ fdoSupport.getFdoProfile(), fdoMode, cppConfiguration.getFdoInstrument(),
profileArtifact, prefetchHintsArtifact))
.setFilesToBuild(crosstool)
.addProvider(RunfilesProvider.simple(Runfiles.EMPTY));
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 c702eae..5ac50d3 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
@@ -30,7 +30,7 @@
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainProviderApi;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index c0b4502..e8ccf33 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -57,7 +57,7 @@
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Linkstamp;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.lib.syntax.Type;
@@ -248,22 +248,22 @@
}
/**
- * Return {@link FdoSupportProvider} using default cc_toolchain attribute name.
+ * Return {@link FdoProvider} using default cc_toolchain attribute name.
*
* <p>Be careful to provide explicit attribute name if the rule doesn't store cc_toolchain under
* the default name.
*/
@Nullable
- public static FdoSupportProvider getFdoSupportUsingDefaultCcToolchainAttribute(
+ public static FdoProvider getFdoProviderUsingDefaultCcToolchainAttribute(
RuleContext ruleContext) {
- return getFdoSupport(ruleContext, CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME);
+ return getFdoProvider(ruleContext, CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME);
}
- @Nullable public static FdoSupportProvider getFdoSupport(RuleContext ruleContext,
+ @Nullable public static FdoProvider getFdoProvider(RuleContext ruleContext,
String ccToolchainAttribute) {
return ruleContext
.getPrerequisite(ccToolchainAttribute, Mode.TARGET)
- .getProvider(FdoSupportProvider.class);
+ .getProvider(FdoProvider.class);
}
public static NestedSet<Pair<String, String>> getCoverageEnvironmentIfNeeded(
@@ -632,15 +632,15 @@
/**
* Returns the FDO build subtype.
*/
- public static String getFdoBuildStamp(RuleContext ruleContext, FdoSupportProvider fdoSupport) {
+ public static String getFdoBuildStamp(RuleContext ruleContext, FdoProvider fdoProvider) {
CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
- if (fdoSupport.getFdoMode() == FdoMode.AUTO_FDO) {
+ if (fdoProvider.getFdoMode() == FdoMode.AUTO_FDO) {
return "AFDO";
}
if (cppConfiguration.isFdo()) {
return "FDO";
}
- if (fdoSupport.getFdoMode() == FdoMode.XBINARY_FDO) {
+ if (fdoProvider.getFdoMode() == FdoMode.XBINARY_FDO) {
return "XFDO";
}
return null;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
index 23796ff..f0627c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
@@ -98,7 +98,7 @@
// can be null for CppLinkAction.createTestBuilder()
@Nullable private final CcToolchainProvider toolchain;
- private final FdoSupportProvider fdoSupport;
+ private final FdoProvider fdoProvider;
private Artifact interfaceOutput;
private Artifact symbolCounts;
/** Directory where toolchain stores language-runtime libraries (libstdc++, libc++ ...) */
@@ -148,14 +148,14 @@
* @param ruleContext the rule that owns the action
* @param output the output artifact
* @param toolchain the C++ toolchain provider
- * @param fdoSupport the C++ FDO optimization support
+ * @param fdoProvider the C++ FDO optimization support
* @param cppSemantics to be used for linkstamp compiles
*/
public CppLinkActionBuilder(
RuleContext ruleContext,
Artifact output,
CcToolchainProvider toolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
FeatureConfiguration featureConfiguration,
CppSemantics cppSemantics) {
this(
@@ -164,7 +164,7 @@
ruleContext.getConfiguration(),
ruleContext.getAnalysisEnvironment(),
toolchain,
- fdoSupport,
+ fdoProvider,
featureConfiguration,
cppSemantics);
}
@@ -176,7 +176,7 @@
* @param output the output artifact
* @param configuration build configuration
* @param toolchain C++ toolchain provider
- * @param fdoSupport the C++ FDO optimization support
+ * @param fdoProvider the C++ FDO optimization support
* @param cppSemantics to be used for linkstamp compiles
*/
public CppLinkActionBuilder(
@@ -184,7 +184,7 @@
Artifact output,
BuildConfiguration configuration,
CcToolchainProvider toolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
FeatureConfiguration featureConfiguration,
CppSemantics cppSemantics) {
this(
@@ -193,7 +193,7 @@
configuration,
ruleContext.getAnalysisEnvironment(),
toolchain,
- fdoSupport,
+ fdoProvider,
featureConfiguration,
cppSemantics);
}
@@ -206,7 +206,7 @@
* @param configuration the configuration used to determine the tool chain and the default link
* options
* @param toolchain the C++ toolchain provider
- * @param fdoSupport the C++ FDO optimization support
+ * @param fdoProvider the C++ FDO optimization support
* @param cppSemantics to be used for linkstamp compiles
*/
private CppLinkActionBuilder(
@@ -215,7 +215,7 @@
BuildConfiguration configuration,
AnalysisEnvironment analysisEnvironment,
CcToolchainProvider toolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
FeatureConfiguration featureConfiguration,
CppSemantics cppSemantics) {
this.ruleContext = ruleContext;
@@ -224,7 +224,7 @@
this.configuration = Preconditions.checkNotNull(configuration);
this.cppConfiguration = configuration.getFragment(CppConfiguration.class);
this.toolchain = toolchain;
- this.fdoSupport = fdoSupport;
+ this.fdoProvider = fdoProvider;
if (featureConfiguration.isEnabled(CppRuleClasses.STATIC_LINK_CPP_RUNTIMES)) {
toolchainLibrariesSolibDir = toolchain.getDynamicRuntimeSolibDir();
}
@@ -241,7 +241,7 @@
* @param linkContext an immutable CppLinkAction.Context from the original builder
* @param configuration build configuration
* @param toolchain the C++ toolchain provider
- * @param fdoSupport the C++ FDO optimization support
+ * @param fdoProvider the C++ FDO optimization support
* @param cppSemantics to be used for linkstamp compiles
*/
public CppLinkActionBuilder(
@@ -250,7 +250,7 @@
Context linkContext,
BuildConfiguration configuration,
CcToolchainProvider toolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
FeatureConfiguration featureConfiguration,
CppSemantics cppSemantics) {
// These Builder-only fields get set in the constructor:
@@ -261,7 +261,7 @@
configuration,
ruleContext.getAnalysisEnvironment(),
toolchain,
- fdoSupport,
+ fdoProvider,
featureConfiguration,
cppSemantics);
Preconditions.checkNotNull(linkContext);
@@ -486,7 +486,7 @@
SHAREABLE_LINK_ARTIFACT_FACTORY,
featureConfiguration,
toolchain,
- fdoSupport,
+ fdoProvider,
usePicForLtoBackendActions,
toolchain.shouldCreatePerObjectDebugInfo(featureConfiguration),
argv)
@@ -499,7 +499,7 @@
linkArtifactFactory,
featureConfiguration,
toolchain,
- fdoSupport,
+ fdoProvider,
usePicForLtoBackendActions,
toolchain.shouldCreatePerObjectDebugInfo(featureConfiguration),
argv);
@@ -956,7 +956,7 @@
interfaceOutput != null ? interfaceOutput.getExecPathString() : null,
ltoOutputRootPrefix,
defFile != null ? defFile.getExecPathString() : null,
- fdoSupport,
+ fdoProvider,
collectedLibrariesToLink.getRuntimeLibrarySearchDirectories(),
collectedLibrariesToLink.getLibrariesToLink(),
collectedLibrariesToLink.getLibrarySearchDirectories(),
@@ -1097,7 +1097,7 @@
toolchain,
configuration.isCodeCoverageEnabled(),
cppConfiguration,
- CppHelper.getFdoBuildStamp(ruleContext, fdoSupport),
+ CppHelper.getFdoBuildStamp(ruleContext, fdoProvider),
featureConfiguration,
cppConfiguration.forcePic()
|| (linkType.isDynamicLibrary() && toolchain.toolchainNeedsPic()),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileProvider.java
index 876d164..6ec40dd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileProvider.java
@@ -20,6 +20,7 @@
/** Provider that contains the profile used for FDO. */
@Immutable
public final class FdoProfileProvider extends NativeInfo {
+
public static final NativeProvider<FdoProfileProvider> PROVIDER =
new NativeProvider<FdoProfileProvider>(FdoProfileProvider.class, "FdoProfileInfo") {};
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProvider.java
new file mode 100644
index 0000000..63e1ce2
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProvider.java
@@ -0,0 +1,98 @@
+// Copyright 2014 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.rules.cpp;
+
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.vfs.Path;
+
+/**
+ * A {@link TransitiveInfoProvider} that describes how C++ FDO compilation should be done.
+ *
+ * <p><b>The {@code fdoProfilePath} member was a mistake. DO NOT USE IT FOR ANYTHING!</b>
+ */
+@Immutable
+@AutoCodec
+public class FdoProvider implements TransitiveInfoProvider {
+ /**
+ * The FDO mode we are operating in.
+ */
+ public enum FdoMode {
+ /** FDO is turned off. */
+ OFF,
+
+ /** FDO based on automatically collected data. */
+ AUTO_FDO,
+
+ /** FDO based on cross binary collected data. */
+ XBINARY_FDO,
+
+ /** Instrumentation-based FDO implemented on LLVM. */
+ LLVM_FDO,
+ }
+
+ /** <b>DO NOT EVER USE PATHS IN THE ANALYSIS PHASE!
+ *
+ * <p>This is buggy and incorrect because Bazel cannot track file system accesses done through
+ * raw file system objects like {@link Path} (as opposed to going through Skyframe). This is
+ * bad code, it was a mistake to submit it in the first place and will go away at the first
+ * opportunity we get.
+ */
+ @Deprecated
+ private final Path fdoProfilePath;
+ private final FdoMode fdoMode;
+ private final String fdoInstrument;
+ private final Artifact profileArtifact;
+ private final Artifact prefetchHintsArtifact;
+
+ @AutoCodec.Instantiator
+ public FdoProvider(Path fdoProfilePath, FdoMode fdoMode, String fdoInstrument,
+ Artifact profileArtifact, Artifact prefetchHintsArtifact) {
+ this.fdoProfilePath = fdoProfilePath;
+ this.fdoMode = fdoMode;
+ this.fdoInstrument = fdoInstrument;
+ this.profileArtifact = profileArtifact;
+ this.prefetchHintsArtifact = prefetchHintsArtifact;
+ }
+
+ /** <b>DO NOT EVER USE PATHS IN THE ANALYSIS PHASE!
+ *
+ * <p>This is buggy and incorrect because Bazel cannot track file system accesses done through
+ * raw file system objects like {@link Path} (as opposed to going through Skyframe). This is
+ * bad code, it was a mistake to submit it in the first place and will go away at the first
+ * opportunity we get.
+ */
+ @Deprecated
+ public Path getFdoProfilePath() {
+ return fdoProfilePath;
+ }
+
+ public String getFdoInstrument() {
+ return fdoInstrument;
+ }
+
+ public FdoMode getFdoMode() {
+ return fdoMode;
+ }
+
+ public Artifact getProfileArtifact() {
+ return profileArtifact;
+ }
+
+ public Artifact getPrefetchHintsArtifact() {
+ return prefetchHintsArtifact;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
deleted file mode 100644
index 6c89bc2..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.rules.cpp;
-
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.build.skyframe.SkyFunction;
-
-/**
- * A container for the path to the FDO profile.
- *
- * <p>{@link FdoSupport} is created from {@link FdoSupportFunction} (a {@link SkyFunction}),
- * which is requested from Skyframe by the {@code cc_toolchain} rule. It's done this way because
- * the path depends on both a command line argument and the location of the workspace and the latter
- * is not available either during configuration creation or during the analysis phase.
- */
-@Immutable
-@AutoCodec
-public final class FdoSupport {
- /**
- * The FDO mode we are operating in.
- */
- public enum FdoMode {
- /** FDO is turned off. */
- OFF,
-
- /** FDO based on automatically collected data. */
- AUTO_FDO,
-
- /** FDO based on cross binary collected data. */
- XBINARY_FDO,
-
- /** Instrumentation-based FDO implemented on LLVM. */
- LLVM_FDO,
- }
-
- /**
- * Path of the profile file passed to {@code --fdo_optimize}
- */
- // TODO(lberki): This should be a PathFragment.
- // Except that CcProtoProfileProvider#getProfile() calls #exists() on it, which is ridiculously
- // incorrect.
- private final Path fdoProfile;
-
- /**
- * Creates an FDO support object.
- *
- * @param fdoProfile path to the profile file passed to --fdo_optimize option
- */
- @VisibleForSerialization
- @AutoCodec.Instantiator
- FdoSupport(Path fdoProfile) {
- this.fdoProfile = fdoProfile;
- }
-
- public Path getFdoProfile() {
- return fdoProfile;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportFunction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportFunction.java
index add8ebc..2c58ce6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportFunction.java
@@ -22,7 +22,8 @@
import javax.annotation.Nullable;
/**
- * Wrapper for {@link FdoSupport} that turns it into a {@link SkyFunction}.
+ * A {@link SkyFunction} that does things for FDO that a regular configured target is not allowed
+ * to.
*
* <p>This only exists because the value of {@code --fdo_optimize} can be a workspace-relative path
* and thus we need to depend on {@link BlazeDirectories} somehow, which neither the configuration
@@ -47,10 +48,9 @@
@Override
public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException {
FdoSupportValue.Key key = (FdoSupportValue.Key) skyKey.argument();
- Path fdoZip =
- key.getFdoZip() == null ? null : directories.getWorkspace().getRelative(key.getFdoZip());
- FdoSupport fdoSupport = new FdoSupport(fdoZip);
- return new FdoSupportValue(fdoSupport);
+ Path resolvedFdoProfile = key.getFdoProfileArgument() == null
+ ? null : directories.getWorkspace().getRelative(key.getFdoProfileArgument());
+ return new FdoSupportValue(resolvedFdoProfile);
}
@Nullable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportProvider.java
deleted file mode 100644
index f24de65..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportProvider.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.rules.cpp;
-
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-
-/**
- * A {@link TransitiveInfoProvider} so that {@code cc_toolchain} can pass {@link FdoSupport} to the
- * C++ rules.
- */
-@Immutable
-@AutoCodec
-public class FdoSupportProvider implements TransitiveInfoProvider {
- private final FdoSupport fdoSupport;
- private final FdoMode fdoMode;
- private final String fdoInstrument;
- private final Artifact profileArtifact;
- private final Artifact prefetchHintsArtifact;
-
- @AutoCodec.Instantiator
- public FdoSupportProvider(FdoSupport fdoSupport, FdoMode fdoMode, String fdoInstrument,
- Artifact profileArtifact, Artifact prefetchHintsArtifact) {
- this.fdoSupport = fdoSupport;
- this.fdoMode = fdoMode;
- this.fdoInstrument = fdoInstrument;
- this.profileArtifact = profileArtifact;
- this.prefetchHintsArtifact = prefetchHintsArtifact;
- }
-
- public FdoSupport getFdoSupport() {
- return fdoSupport;
- }
-
- public String getFdoInstrument() {
- return fdoInstrument;
- }
-
- public FdoMode getFdoMode() {
- return fdoMode;
- }
-
- public Artifact getProfileArtifact() {
- return profileArtifact;
- }
-
- public Artifact getPrefetchHintsArtifact() {
- return prefetchHintsArtifact;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java
index e9dc6c3..f516a19 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java
@@ -17,14 +17,21 @@
import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
+import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.Objects;
/**
- * Wrapper for {@link FdoSupport}.
+ * A container for the path to the FDO profile.
+ *
+ * <p>{@link FdoSupportValue} is created from {@link FdoSupportFunction} (a {@link SkyFunction}),
+ * which is requested from Skyframe by the {@code cc_toolchain} rule. It's done this way because
+ * the path depends on both a command line argument and the location of the workspace and the latter
+ * is not available either during configuration creation or during the analysis phase.
*/
@AutoCodec
@Immutable
@@ -37,20 +44,20 @@
public static class Key implements SkyKey {
private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
- private final PathFragment fdoZip;
+ private final PathFragment fdoProfileArgument;
- private Key(PathFragment fdoZip) {
- this.fdoZip = fdoZip;
+ private Key(PathFragment fdoProfileArgument) {
+ this.fdoProfileArgument = fdoProfileArgument;
}
@AutoCodec.Instantiator
@AutoCodec.VisibleForSerialization
- static Key of(PathFragment fdoZip) {
- return interner.intern(new Key(fdoZip));
+ static Key of(PathFragment fdoProfileArgument) {
+ return interner.intern(new Key(fdoProfileArgument));
}
- public PathFragment getFdoZip() {
- return fdoZip;
+ public PathFragment getFdoProfileArgument() {
+ return fdoProfileArgument;
}
@Override
@@ -64,12 +71,12 @@
}
Key that = (Key) o;
- return Objects.equals(this.fdoZip, that.fdoZip);
+ return Objects.equals(this.fdoProfileArgument, that.fdoProfileArgument);
}
@Override
public int hashCode() {
- return Objects.hash(fdoZip);
+ return Objects.hash(fdoProfileArgument);
}
@Override
@@ -78,17 +85,23 @@
}
}
- private final FdoSupport fdoSupport;
+ /**
+ * Path of the profile file passed to {@code --fdo_optimize}
+ */
+ // TODO(lberki): This should be a PathFragment.
+ // Except that CcProtoProfileProvider#getProfile() calls #exists() on it, which is ridiculously
+ // incorrect.
+ private final Path fdoProfile;
- FdoSupportValue(FdoSupport fdoSupport) {
- this.fdoSupport = fdoSupport;
+ FdoSupportValue(Path fdoProfile) {
+ this.fdoProfile = fdoProfile;
}
- public FdoSupport getFdoSupport() {
- return fdoSupport;
+ public Path getFdoProfile() {
+ return fdoProfile;
}
- public static SkyKey key(PathFragment fdoZip) {
- return Key.of(fdoZip);
+ public static SkyKey key(PathFragment fdoProfileArgument) {
+ return Key.of(fdoProfileArgument);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
index e89274d..69d112d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
@@ -112,7 +112,7 @@
String interfaceLibraryOutput,
PathFragment ltoOutputRootPrefix,
String defFile,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
Iterable<String> runtimeLibrarySearchDirectories,
SequenceBuilder librariesToLink,
Iterable<String> librarySearchDirectories,
@@ -234,7 +234,7 @@
}
if (featureConfiguration.isEnabled(CppRuleClasses.FDO_INSTRUMENT)) {
- buildVariables.addStringVariable("fdo_instrument_path", fdoSupport.getFdoInstrument());
+ buildVariables.addStringVariable("fdo_instrument_path", fdoProvider.getFdoInstrument());
}
Iterable<String> userLinkFlagsWithLtoIndexingIfNeeded;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java
index 39a37f2..7af6b65 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java
@@ -95,7 +95,7 @@
CppLinkAction.LinkArtifactFactory linkArtifactFactory,
FeatureConfiguration featureConfiguration,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
boolean usePic,
boolean generateDwo,
List<String> commandLine) {
@@ -112,7 +112,7 @@
ruleContext,
featureConfiguration,
ccToolchain,
- fdoSupport,
+ fdoProvider,
usePic,
generateDwo,
configuration,
@@ -130,7 +130,7 @@
CppLinkAction.LinkArtifactFactory linkArtifactFactory,
FeatureConfiguration featureConfiguration,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
boolean usePic,
boolean generateDwo,
List<String> commandLine) {
@@ -145,7 +145,7 @@
ruleContext,
featureConfiguration,
ccToolchain,
- fdoSupport,
+ fdoProvider,
usePic,
generateDwo,
configuration,
@@ -181,7 +181,7 @@
RuleContext ruleContext,
FeatureConfiguration featureConfiguration,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
boolean usePic,
boolean generateDwo,
BuildConfiguration configuration,
@@ -231,7 +231,7 @@
// The input to the LTO backend step is the bitcode file.
buildVariablesBuilder.addStringVariable(
"thinlto_input_bitcode_file", bitcodeFile.getExecPath().toString());
- addProfileForLtoBackend(builder, fdoSupport, featureConfiguration, buildVariablesBuilder);
+ addProfileForLtoBackend(builder, fdoProvider, featureConfiguration, buildVariablesBuilder);
if (generateDwo) {
dwoFile =
@@ -268,21 +268,21 @@
@ThreadSafe
private static void addProfileForLtoBackend(
LtoBackendAction.Builder builder,
- FdoSupportProvider fdoSupportProvider,
+ FdoProvider fdoProvider,
FeatureConfiguration featureConfiguration,
CcToolchainVariables.Builder buildVariables) {
- Artifact prefetch = fdoSupportProvider.getPrefetchHintsArtifact();
+ Artifact prefetch = fdoProvider.getPrefetchHintsArtifact();
if (prefetch != null) {
buildVariables.addStringVariable("fdo_prefetch_hints_path", prefetch.getExecPathString());
- builder.addInput(fdoSupportProvider.getPrefetchHintsArtifact());
+ builder.addInput(fdoProvider.getPrefetchHintsArtifact());
}
if (!featureConfiguration.isEnabled(CppRuleClasses.AUTOFDO)
&& !featureConfiguration.isEnabled(CppRuleClasses.XBINARYFDO)) {
return;
}
- Artifact profile = fdoSupportProvider.getProfileArtifact();
+ Artifact profile = fdoProvider.getProfileArtifact();
buildVariables.addStringVariable("fdo_profile_path", profile.getExecPathString());
- builder.addInput(fdoSupportProvider.getProfileArtifact());
+ builder.addInput(fdoProvider.getProfileArtifact());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
index 83d0c7d..95438a4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
@@ -243,7 +243,7 @@
cppSemantics,
featureConfiguration,
ccToolchain(ruleContext),
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext));
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext));
TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
if (runtime != null) {
helper.addDeps(ImmutableList.of(runtime));
@@ -263,7 +263,7 @@
cppSemantics,
featureConfiguration,
ccToolchain(ruleContext),
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
ruleContext.getConfiguration())
.enableCcNativeLibrariesProvider();
TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
index 8d0425e..89e8c48 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
@@ -39,7 +39,7 @@
import com.google.devtools.build.lib.rules.cpp.CppLinkActionBuilder;
import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
import com.google.devtools.build.lib.rules.cpp.CppSemantics;
-import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider;
import com.google.devtools.build.lib.rules.cpp.Link;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
@@ -216,8 +216,8 @@
} else {
sharedLibrary = nativeDeps;
}
- FdoSupportProvider fdoSupport =
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+ FdoProvider fdoProvider =
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
FeatureConfiguration featureConfiguration =
CcCommon.configureFeaturesOrReportRuleError(
ruleContext,
@@ -233,7 +233,7 @@
sharedLibrary,
configuration,
toolchain,
- fdoSupport,
+ fdoProvider,
featureConfiguration,
cppSemantics);
if (useDynamicRuntime) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
index 1ed359b..c321398 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
@@ -161,7 +161,7 @@
objcProvider,
intermediateArtifacts.strippedSingleArchitectureLibrary(),
childConfigurationsAndToolchains.get(childConfig),
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext))
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext))
.validateAttributes();
ruleContext.assertNoErrors();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 5ef84ab..005b5dc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -109,7 +109,7 @@
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction;
import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
-import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider;
import com.google.devtools.build.lib.rules.cpp.IncludeProcessing;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
@@ -300,7 +300,7 @@
VariablesExtension extension,
ExtraCompileArgs extraCompileArgs,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
Iterable<PathFragment> priorityHeaders,
PrecompiledFiles precompiledFiles,
Collection<Artifact> sources,
@@ -319,7 +319,7 @@
getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider),
CcCompilationHelper.SourceCategory.CC_AND_OBJC,
ccToolchain,
- fdoSupport,
+ fdoProvider,
buildConfiguration)
.addSources(sources)
.addPrivateHeaders(privateHdrs)
@@ -369,7 +369,7 @@
ObjcVariablesExtension.Builder extensionBuilder,
ExtraCompileArgs extraCompileArgs,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport,
+ FdoProvider fdoProvider,
Iterable<PathFragment> priorityHeaders,
LinkTargetType linkType,
Artifact linkActionInput)
@@ -398,7 +398,7 @@
extensionBuilder.build(),
extraCompileArgs,
ccToolchain,
- fdoSupport,
+ fdoProvider,
priorityHeaders,
precompiledFiles,
arcSources,
@@ -417,7 +417,7 @@
extensionBuilder.build(),
extraCompileArgs,
ccToolchain,
- fdoSupport,
+ fdoProvider,
priorityHeaders,
precompiledFiles,
nonArcSources,
@@ -434,7 +434,7 @@
semantics,
getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider),
ccToolchain,
- fdoSupport,
+ fdoProvider,
buildConfiguration)
.addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET))
.setLinkedArtifactNameSuffix(intermediateArtifacts.archiveFileNameSuffix())
@@ -960,7 +960,7 @@
ExtraCompileArgs.NONE,
ImmutableList.<PathFragment>of(),
toolchain,
- maybeGetFdoSupport());
+ maybeGetFdoProvider());
}
/**
@@ -998,7 +998,7 @@
* @param extraCompileArgs args to be added to compile actions
* @param priorityHeaders priority headers to be included before the dependency headers
* @param ccToolchain the cpp toolchain provider, may be null
- * @param fdoSupport the cpp FDO support provider, may be null
+ * @param fdoProvider the cpp FDO support provider, may be null
* @return this compilation support
* @throws RuleErrorException for invalid crosstool files
*/
@@ -1008,10 +1008,10 @@
ExtraCompileArgs extraCompileArgs,
Iterable<PathFragment> priorityHeaders,
@Nullable CcToolchainProvider ccToolchain,
- @Nullable FdoSupportProvider fdoSupport)
+ @Nullable FdoProvider fdoProvider)
throws RuleErrorException, InterruptedException {
Preconditions.checkNotNull(ccToolchain);
- Preconditions.checkNotNull(fdoSupport);
+ Preconditions.checkNotNull(fdoProvider);
ObjcVariablesExtension.Builder extension =
new ObjcVariablesExtension.Builder()
.setRuleContext(ruleContext)
@@ -1034,7 +1034,7 @@
extension,
extraCompileArgs,
ccToolchain,
- fdoSupport,
+ fdoProvider,
priorityHeaders,
LinkTargetType.OBJC_ARCHIVE,
objList);
@@ -1050,7 +1050,7 @@
extension,
extraCompileArgs,
ccToolchain,
- fdoSupport,
+ fdoProvider,
priorityHeaders,
/* linkType */ null,
/* linkActionInput */ null);
@@ -1083,7 +1083,7 @@
extraCompileArgs,
priorityHeaders,
toolchain,
- maybeGetFdoSupport());
+ maybeGetFdoProvider());
}
return this;
}
@@ -1159,14 +1159,14 @@
.addVariableCategory(VariableCategory.EXECUTABLE_LINKING_VARIABLES);
Artifact binaryToLink = getBinaryToLink();
- FdoSupportProvider fdoSupport =
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+ FdoProvider fdoProvider =
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
CppLinkActionBuilder executableLinkAction =
new CppLinkActionBuilder(
ruleContext,
binaryToLink,
toolchain,
- fdoSupport,
+ fdoProvider,
getFeatureConfiguration(ruleContext, toolchain, buildConfiguration, objcProvider),
createObjcCppSemantics(
objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
@@ -1294,7 +1294,7 @@
*/
public CompilationSupport registerFullyLinkAction(
ObjcProvider objcProvider, Artifact outputArchive) throws InterruptedException {
- return registerFullyLinkAction(objcProvider, outputArchive, toolchain, maybeGetFdoSupport());
+ return registerFullyLinkAction(objcProvider, outputArchive, toolchain, maybeGetFdoProvider());
}
/**
@@ -1304,17 +1304,17 @@
* @param objcProvider provides all compiling and linking information to create this artifact
* @param outputArchive the output artifact for this action
* @param ccToolchain the cpp toolchain provider, may be null
- * @param fdoSupport the cpp FDO support provider, may be null
+ * @param fdoProvider the cpp FDO support provider, may be null
* @return this {@link CompilationSupport} instance
*/
CompilationSupport registerFullyLinkAction(
ObjcProvider objcProvider,
Artifact outputArchive,
@Nullable CcToolchainProvider ccToolchain,
- @Nullable FdoSupportProvider fdoSupport)
+ @Nullable FdoProvider fdoProvider)
throws InterruptedException {
Preconditions.checkNotNull(ccToolchain);
- Preconditions.checkNotNull(fdoSupport);
+ Preconditions.checkNotNull(fdoProvider);
PathFragment labelName = PathFragment.create(ruleContext.getLabel().getName());
String libraryIdentifier =
ruleContext
@@ -1335,7 +1335,7 @@
ruleContext,
outputArchive,
ccToolchain,
- fdoSupport,
+ fdoProvider,
getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider),
createObjcCppSemantics(
objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
@@ -1863,12 +1863,12 @@
}
@Nullable
- private FdoSupportProvider maybeGetFdoSupport() {
+ private FdoProvider maybeGetFdoProvider() {
// TODO(rduan): Remove this check once all rules are using the crosstool support.
if (ruleContext
.attributes()
.has(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, BuildType.LABEL)) {
- return CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+ return CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
} else {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 5caae39..919024a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -59,7 +59,7 @@
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
-import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider;
import com.google.devtools.build.lib.rules.java.JavaCommon;
import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
import com.google.devtools.build.lib.rules.java.JavaConfiguration;
@@ -257,8 +257,8 @@
try {
CcToolchainProvider ccToolchain =
CppHelper.getToolchain(ruleContext, ":j2objc_cc_toolchain");
- FdoSupportProvider fdoSupport =
- CppHelper.getFdoSupport(ruleContext, ":j2objc_cc_toolchain");
+ FdoProvider fdoProvider =
+ CppHelper.getFdoProvider(ruleContext, ":j2objc_cc_toolchain");
CompilationSupport compilationSupport =
new CompilationSupport.Builder()
.setRuleContext(ruleContext)
@@ -274,12 +274,12 @@
EXTRA_COMPILE_ARGS,
ImmutableList.<PathFragment>of(),
ccToolchain,
- fdoSupport)
+ fdoProvider)
.registerFullyLinkAction(
common.getObjcProvider(),
ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB),
ccToolchain,
- fdoSupport);
+ fdoProvider);
} catch (RuleErrorException e) {
ruleContext.ruleError(e.getMessage());
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
index 9264059..897d4b2 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
@@ -28,7 +28,7 @@
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath;
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 cdfe4c2..af79589 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
@@ -316,7 +316,7 @@
? dynamicOutputFile
: staticOutputFile,
CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext),
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
featureConfiguration,
MockCppSemantics.INSTANCE) {};
if (attributesToFlip.contains(NonStaticAttributes.OUTPUT_FILE)) {
@@ -372,7 +372,7 @@
? staticOutputFile
: dynamicOutputFile,
CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext),
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
featureConfiguration,
MockCppSemantics.INSTANCE) {};
builder.setLinkType(
@@ -402,7 +402,7 @@
ruleContext,
output,
CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext),
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
FeatureConfiguration.EMPTY,
MockCppSemantics.INSTANCE);
builder.setLinkType(LinkTargetType.STATIC_LIBRARY);
@@ -496,7 +496,7 @@
.getBinDirectory(ruleContext.getRule().getRepository())),
ruleContext.getConfiguration(),
CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext),
- CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+ CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
featureConfiguration,
MockCppSemantics.INSTANCE)
.addObjectFiles(nonLibraryInputs)