aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
diff options
context:
space:
mode:
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.java34
1 files changed, 16 insertions, 18 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 bab857f469..aee8633544 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
@@ -14,13 +14,9 @@
package com.google.devtools.build.lib.rules.objc;
-import static com.google.devtools.build.lib.rules.objc.ObjcProvider.IMPORTED_LIBRARY;
-import static com.google.devtools.build.lib.rules.objc.ObjcProvider.LIBRARY;
-
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
-import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
@@ -59,8 +55,8 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
new AppleBinaryTransitionProvider();
@VisibleForTesting
- static final String REQUIRES_AT_LEAST_ONE_LIBRARY_OR_SOURCE_FILE =
- "At least one library dependency or source file is required.";
+ static final String REQUIRES_AT_LEAST_ONE_SOURCE_FILE =
+ "At least one source file is required (srcs, non_arc_srcs, or precompiled_srcs).";
@Override
public final ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException {
@@ -77,6 +73,8 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
NestedSetBuilder<Artifact> binariesToLipo =
NestedSetBuilder.<Artifact>stableOrder();
+ NestedSetBuilder<Artifact> archivesToLipo =
+ NestedSetBuilder.<Artifact>stableOrder();
NestedSetBuilder<Artifact> filesToBuild =
NestedSetBuilder.<Artifact>stableOrder()
.add(ruleIntermediateArtifacts.combinedArchitectureBinary());
@@ -87,7 +85,6 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
ObjcCommon common = common(ruleContext, childConfig, intermediateArtifacts,
nullToEmptyList(configToDepsCollectionMap.get(childConfig)),
nullToEmptyList(configurationToNonPropagatedObjcMap.get(childConfig)));
- ObjcProvider objcProvider = common.getObjcProvider();
ImmutableList.Builder<J2ObjcMappingFileProvider> j2ObjcMappingFileProviders =
ImmutableList.builder();
J2ObjcEntryClassProvider.Builder j2ObjcEntryClassProviderBuilder =
@@ -105,14 +102,15 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
J2ObjcMappingFileProvider.union(j2ObjcMappingFileProviders.build());
J2ObjcEntryClassProvider j2ObjcEntryClassProvider = j2ObjcEntryClassProviderBuilder.build();
- if (!hasLibraryOrSources(objcProvider)) {
- ruleContext.ruleError(REQUIRES_AT_LEAST_ONE_LIBRARY_OR_SOURCE_FILE);
+ if (!common.getCompilationArtifacts().get().getArchive().isPresent()) {
+ ruleContext.ruleError(REQUIRES_AT_LEAST_ONE_SOURCE_FILE);
return null;
}
if (ruleContext.hasErrors()) {
return null;
}
+ archivesToLipo.add(common.getCompilationArtifacts().get().getArchive().get());
binariesToLipo.add(intermediateArtifacts.strippedSingleArchitectureBinary());
new CompilationSupport(ruleContext, childConfig)
.registerCompileAndArchiveActions(common)
@@ -129,10 +127,15 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
- new LipoSupport(ruleContext).registerCombineArchitecturesAction(
- binariesToLipo.build(),
- ruleIntermediateArtifacts.combinedArchitectureBinary(),
- appleConfiguration.getIosCpuPlatform());
+ new LipoSupport(ruleContext)
+ .registerCombineArchitecturesAction(
+ binariesToLipo.build(),
+ ruleIntermediateArtifacts.combinedArchitectureBinary(),
+ appleConfiguration.getIosCpuPlatform())
+ .registerCombineArchitecturesAction(
+ archivesToLipo.build(),
+ ruleContext.getImplicitOutputArtifact(AppleBinaryRule.LIPO_ARCHIVE),
+ appleConfiguration.getIosCpuPlatform());
RuleConfiguredTargetBuilder targetBuilder =
ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build());
@@ -140,11 +143,6 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
return targetBuilder.build();
}
- private boolean hasLibraryOrSources(ObjcProvider objcProvider) {
- return !Iterables.isEmpty(objcProvider.get(LIBRARY)) // Includes sources from this target.
- || !Iterables.isEmpty(objcProvider.get(IMPORTED_LIBRARY));
- }
-
private ObjcCommon common(RuleContext ruleContext, BuildConfiguration buildConfiguration,
IntermediateArtifacts intermediateArtifacts,
List<TransitiveInfoCollection> propagatedDeps,