Avoid using ObjectFilePathHelper in CompilationSupport.java
RELNOTES: None.
PiperOrigin-RevId: 190591828
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 8f94242..2c0a986 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
@@ -63,6 +63,7 @@
import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts;
+import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
@@ -114,7 +115,6 @@
import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.rules.cpp.NoProcessing;
-import com.google.devtools.build.lib.rules.cpp.ObjectFilePathHelper;
import com.google.devtools.build.lib.rules.cpp.PrecompiledFiles;
import com.google.devtools.build.lib.rules.cpp.UmbrellaHeaderAction;
import com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag;
@@ -847,46 +847,19 @@
}
/**
- * TODO(b/76143707): Remove this function after ObjectFilePathHelper is no longer used here.
- *
- * <p>Add constructed object files based on given sources.
- */
- private void addObjectFiles(
- ImmutableList.Builder<Artifact> objectFilesBuilder,
- Iterable<Artifact> sources,
- boolean isArc) {
- ObjectFilePathHelper objectFilePathHelper =
- new ObjectFilePathHelper(
- sources,
- ruleContext.getFragment(CppConfiguration.class).shortenObjFilePath(),
- isArc ? "arc" : "non_arc");
- for (Artifact artifact : sources) {
- objectFilesBuilder.add(
- intermediateArtifacts.objFile(artifact, objectFilePathHelper.getOutputName(artifact)));
- }
- }
-
- /**
* Returns a provider that collects this target's instrumented sources as well as those of its
* dependencies.
*
- * @param common common information about this rule and its dependencies
+ * @param objectFiles the object files generated by this target
* @return an instrumented files provider
*/
- public InstrumentedFilesProvider getInstrumentedFilesProvider(ObjcCommon common) {
- ImmutableList.Builder<Artifact> oFiles = ImmutableList.builder();
-
- if (common.getCompilationArtifacts().isPresent()) {
- CompilationArtifacts artifacts = common.getCompilationArtifacts().get();
- addObjectFiles(oFiles, artifacts.getSrcs(), true);
- addObjectFiles(oFiles, artifacts.getNonArcSrcs(), false);
- }
-
+ private InstrumentedFilesProvider getInstrumentedFilesProvider(
+ ImmutableList<Artifact> objectFiles) {
return InstrumentedFilesCollector.collect(
ruleContext,
INSTRUMENTATION_SPEC,
new ObjcCoverageMetadataCollector(),
- oFiles.build(),
+ objectFiles,
NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER),
// The COVERAGE_GCOV_PATH environment variable is added in TestSupport#getExtraProviders()
NestedSetBuilder.<Pair<String, String>>emptySet(Order.COMPILE_ORDER),
@@ -953,20 +926,24 @@
ExtraCompileArgs.NONE,
ImmutableList.<PathFragment>of(),
toolchain,
- maybeGetFdoSupport());
+ maybeGetFdoSupport(),
+ /* targetBuilder= */ null);
}
/**
* Registers all actions necessary to compile this rule's sources and archive them.
*
* @param common common information about this rule and its dependencies
+ * @param targetBuilder {@link InstrumentedFilesProvider} will be added for this target if
+ * targetBuilder is not null.
* @return this compilation support
* @throws RuleErrorException for invalid crosstool files
*/
- CompilationSupport registerCompileAndArchiveActions(ObjcCommon common)
+ CompilationSupport registerCompileAndArchiveActions(
+ ObjcCommon common, RuleConfiguredTargetBuilder targetBuilder)
throws RuleErrorException, InterruptedException {
return registerCompileAndArchiveActions(
- common, ExtraCompileArgs.NONE, ImmutableList.<PathFragment>of());
+ common, ExtraCompileArgs.NONE, ImmutableList.<PathFragment>of(), targetBuilder);
}
/**
@@ -980,7 +957,8 @@
CompilationSupport registerCompileAndArchiveActions(
ObjcCommon common, Iterable<PathFragment> priorityHeaders)
throws RuleErrorException, InterruptedException {
- return registerCompileAndArchiveActions(common, ExtraCompileArgs.NONE, priorityHeaders);
+ return registerCompileAndArchiveActions(
+ common, ExtraCompileArgs.NONE, priorityHeaders, /* targetBuilder= */ null);
}
/**
@@ -992,6 +970,8 @@
* @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 targetBuilder {@link InstrumentedFilesProvider} will be added for this target if
+ * targetBuilder is not null.
* @return this compilation support
* @throws RuleErrorException for invalid crosstool files
*/
@@ -1001,7 +981,8 @@
ExtraCompileArgs extraCompileArgs,
Iterable<PathFragment> priorityHeaders,
@Nullable CcToolchainProvider ccToolchain,
- @Nullable FdoSupportProvider fdoSupport)
+ @Nullable FdoSupportProvider fdoSupport,
+ RuleConfiguredTargetBuilder targetBuilder)
throws RuleErrorException, InterruptedException {
Preconditions.checkNotNull(ccToolchain);
Preconditions.checkNotNull(fdoSupport);
@@ -1033,7 +1014,8 @@
objList);
// TODO(b/30783125): Signal the need for this action in the CROSSTOOL.
- registerObjFilelistAction(compilationInfo.getFirst().getObjectFiles(false), objList);
+ registerObjFilelistAction(
+ compilationInfo.getFirst().getObjectFiles(/*usePic= */ false), objList);
} else {
compilationInfo =
ccCompileAndLink(
@@ -1050,6 +1032,14 @@
outputGroupCollector.putAll(compilationInfo.getSecond());
+ // If targetBuilder is set, we add InstrumentedFilesProvider for it.
+ if (targetBuilder != null) {
+ targetBuilder.addProvider(
+ InstrumentedFilesProvider.class,
+ getInstrumentedFilesProvider(
+ compilationInfo.getFirst().getObjectFiles(/*usePic= */ false)));
+ }
+
registerHeaderScanningActions(compilationInfo.getFirst(), objcProvider, compilationArtifacts);
return this;
@@ -1061,11 +1051,16 @@
* @param common common information about this rule and its dependencies
* @param extraCompileArgs args to be added to compile actions
* @param priorityHeaders priority headers to be included before the dependency headers
+ * @param targetBuilder InstrumentedFilesProvider will be added for this target if targetBuilder
+ * is not null.
* @return this compilation support
* @throws RuleErrorException for invalid crosstool files
*/
CompilationSupport registerCompileAndArchiveActions(
- ObjcCommon common, ExtraCompileArgs extraCompileArgs, Iterable<PathFragment> priorityHeaders)
+ ObjcCommon common,
+ ExtraCompileArgs extraCompileArgs,
+ Iterable<PathFragment> priorityHeaders,
+ RuleConfiguredTargetBuilder targetBuilder)
throws RuleErrorException, InterruptedException {
if (common.getCompilationArtifacts().isPresent()) {
registerCompileAndArchiveActions(
@@ -1074,7 +1069,8 @@
extraCompileArgs,
priorityHeaders,
toolchain,
- maybeGetFdoSupport());
+ maybeGetFdoSupport(),
+ targetBuilder);
}
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java
index 86cdb0d..9761afc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java
@@ -21,7 +21,6 @@
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap.UmbrellaHeaderStrategy;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -33,8 +32,6 @@
// TODO(bazel-team): This should really be named DerivedArtifacts as it contains methods for
// final as well as intermediate artifacts.
public final class IntermediateArtifacts {
- private static final PathFragment OBJS = PathFragment.create("_objs");
-
static final String LINKMAP_SUFFIX = ".linkmap";
/**
@@ -266,24 +263,6 @@
"lib%s%s.a", basename, archiveFileNameSuffix)));
}
- private Artifact inUniqueObjsDir(String outputName, String extension) {
- PathFragment uniqueDir = OBJS.getRelative(ruleContext.getLabel().getName());
- PathFragment scopeRelativePath = uniqueDir.getRelative(outputName + extension);
- return scopedArtifact(scopeRelativePath);
- }
-
- /**
- * The artifact for the .o file that should be generated when compiling the {@code source}
- * artifact.
- */
- public Artifact objFile(Artifact source, String outputName) {
- if (source.isTreeArtifact()) {
- return CppHelper.getCompileOutputTreeArtifact(ruleContext, source, outputName);
- } else {
- return inUniqueObjsDir(outputName, ".o");
- }
- }
-
/** The artifact for the .headers file output by the header thinning action for this source. */
public Artifact headersListFile(Artifact objectFile) {
return ruleContext.getRelatedArtifact(objectFile.getRootRelativePath(), ".headers_list");
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 3870556..a41676f 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
@@ -278,8 +278,9 @@
common.getObjcProvider(),
EXTRA_COMPILE_ARGS,
ImmutableList.<PathFragment>of(),
- ccToolchain,
- fdoSupport)
+ ccToolchain,
+ fdoSupport,
+ /* targetBuilder= */ null)
.registerFullyLinkAction(
common.getObjcProvider(),
ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
index 0fa2870..6f192d3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
@@ -17,10 +17,10 @@
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
-import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.cpp.CcCompilationInfo;
@@ -68,6 +68,9 @@
NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.<Artifact>stableOrder()
.addAll(common.getCompiledArchive().asSet());
+ RuleConfiguredTargetBuilder targetBuilder =
+ ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build());
+
Map<String, NestedSet<Artifact>> outputGroupCollector = new TreeMap<>();
CompilationSupport compilationSupport =
new CompilationSupport.Builder()
@@ -76,7 +79,7 @@
.build();
compilationSupport
- .registerCompileAndArchiveActions(common)
+ .registerCompileAndArchiveActions(common, targetBuilder)
.registerFullyLinkAction(
common.getObjcProvider(),
ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB))
@@ -98,14 +101,11 @@
.toCollection())
.build();
- return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
+ return targetBuilder
.addNativeDeclaredProvider(common.getObjcProvider())
.addNativeDeclaredProvider(ccCompilationInfo)
.addProvider(J2ObjcEntryClassProvider.class, j2ObjcEntryClassProvider)
.addProvider(J2ObjcMappingFileProvider.class, j2ObjcMappingFileProvider)
- .addProvider(
- InstrumentedFilesProvider.class,
- compilationSupport.getInstrumentedFilesProvider(common))
.addNativeDeclaredProvider(new CcLinkParamsInfo(new ObjcLibraryCcLinkParamsStore(common)))
.addOutputGroups(outputGroupCollector)
.build();