aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
diff options
context:
space:
mode:
authorGravatar Sergio Campama <kaipi@google.com>2016-08-16 04:22:30 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2016-08-16 15:21:27 +0000
commitaaa58714859459d2bac3814579a74f5d56297d1b (patch)
treeffa1b3786fa64ea207a941ce93eaadf607231bd3 /src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
parent74c075aa1864875c5529540f62bcbe3fe80fc311 (diff)
Adds proto grouping behavior so that generation and compilation actions are much smaller. This adds more granularity and helps prevent excessive compilation by minimizing the number of inputs for each action.
-- MOS_MIGRATED_REVID=130359288
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java57
1 files changed, 27 insertions, 30 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
index 4c878e648d..1d3ac278c7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
@@ -44,7 +44,6 @@ import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs;
import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes;
-import com.google.devtools.build.lib.rules.objc.ProtoSupport.TargetType;
import java.util.List;
import java.util.Set;
@@ -95,11 +94,28 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
ObjcProvider.Builder objcProviderBuilder = new ObjcProvider.Builder();
for (BuildConfiguration childConfig : childConfigurations) {
+ Optional<ObjcProvider> protosObjcProvider = Optional.absent();
+ ObjcConfiguration objcConfiguration = childConfig.getFragment(ObjcConfiguration.class);
+ if (objcConfiguration.experimentalAutoTopLevelUnionObjCProtos()) {
+ ProtobufSupport protoSupport =
+ new ProtobufSupport(ruleContext)
+ .registerGenerationActions()
+ .registerCompilationActions();
+
+ protosObjcProvider = Optional.of(protoSupport.getObjcProvider());
+ }
+
IntermediateArtifacts intermediateArtifacts =
ObjcRuleClasses.intermediateArtifacts(ruleContext, childConfig);
- ObjcCommon common = common(ruleContext, childConfig, intermediateArtifacts,
- nullToEmptyList(configToDepsCollectionMap.get(childConfig)),
- nullToEmptyList(configurationToNonPropagatedObjcMap.get(childConfig)));
+
+ ObjcCommon common =
+ common(
+ ruleContext,
+ childConfig,
+ intermediateArtifacts,
+ nullToEmptyList(configToDepsCollectionMap.get(childConfig)),
+ nullToEmptyList(configurationToNonPropagatedObjcMap.get(childConfig)),
+ protosObjcProvider);
ImmutableList.Builder<J2ObjcMappingFileProvider> j2ObjcMappingFileProviders =
ImmutableList.builder();
J2ObjcEntryClassProvider.Builder j2ObjcEntryClassProviderBuilder =
@@ -119,19 +135,6 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
binariesToLipo.add(intermediateArtifacts.strippedSingleArchitectureBinary());
- ObjcConfiguration objcConfiguration = childConfig.getFragment(ObjcConfiguration.class);
- if (objcConfiguration.experimentalAutoTopLevelUnionObjCProtos()) {
- ProtoSupport protoSupport =
- new ProtoSupport(ruleContext, TargetType.LINKING_TARGET).registerActions();
-
- ObjcCommon protoCommon = protoSupport.getCommon();
- new CompilationSupport(
- ruleContext,
- protoSupport.getIntermediateArtifacts(),
- new CompilationAttributes.Builder().build())
- .registerCompileAndArchiveActions(protoCommon, protoSupport.getUserHeaderSearchPaths());
- }
-
new CompilationSupport(ruleContext, childConfig)
.registerCompileAndArchiveActions(common)
.registerLinkActions(
@@ -143,7 +146,7 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
DsymOutputType.APP)
.validateAttributes();
ruleContext.assertNoErrors();
-
+
objcProviderBuilder.addTransitiveAndPropagate(common.getObjcProvider());
}
@@ -165,23 +168,17 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
return targetBuilder.build();
}
- private ObjcCommon common(RuleContext ruleContext, BuildConfiguration buildConfiguration,
+ private ObjcCommon common(
+ RuleContext ruleContext,
+ BuildConfiguration buildConfiguration,
IntermediateArtifacts intermediateArtifacts,
List<TransitiveInfoCollection> propagatedDeps,
- List<ObjcProvider> nonPropagatedObjcDeps) {
+ List<ObjcProvider> nonPropagatedObjcDeps,
+ Optional<ObjcProvider> protosObjcProvider) {
CompilationArtifacts compilationArtifacts =
CompilationSupport.compilationArtifacts(ruleContext, intermediateArtifacts);
- Optional<Artifact> protoLib;
- ObjcConfiguration objcConfiguration = buildConfiguration.getFragment(ObjcConfiguration.class);
- if (objcConfiguration.experimentalAutoTopLevelUnionObjCProtos()) {
- ProtoSupport protoSupport = new ProtoSupport(ruleContext, TargetType.LINKING_TARGET);
- protoLib = protoSupport.getCommon().getCompiledArchive();
- } else {
- protoLib = Optional.absent();
- }
-
return new ObjcCommon.Builder(ruleContext, buildConfiguration)
.setCompilationAttributes(
CompilationAttributes.Builder.fromRuleContext(ruleContext).build())
@@ -191,12 +188,12 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
.addDeps(propagatedDeps)
.addDepObjcProviders(
ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.class))
+ .addDepObjcProviders(protosObjcProvider.asSet())
.addNonPropagatedDepObjcProviders(nonPropagatedObjcDeps)
.setIntermediateArtifacts(intermediateArtifacts)
.setAlwayslink(false)
// TODO(b/29152500): Enable module map generation.
.setLinkedBinary(intermediateArtifacts.strippedSingleArchitectureBinary())
- .addExtraImportLibraries(protoLib.asSet())
.build();
}