aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-05-01 20:01:19 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-05-02 11:26:40 +0200
commit3c484c1294a58ac4145104279532f970b95d89b2 (patch)
tree473e790c2580d30e3737ea01600750ca4a52ded5 /src
parentedcd915c88ae1cfd2e20ec3965aab8b59c2bd2aa (diff)
apple_static_library passes the correct crosstool to platform-specific compile
and fully linke actions. PiperOrigin-RevId: 154733524
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java23
3 files changed, 36 insertions, 36 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 8352f55807..67f9e2f1f5 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
@@ -126,7 +126,7 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT);
ImmutableMap<BuildConfiguration, CcToolchainProvider> childConfigurations =
- getChildConfigurationsAndToolchains(ruleContext);
+ MultiArchBinarySupport.getChildConfigurationsAndToolchains(ruleContext);
Artifact outputArtifact =
ObjcRuleClasses.intermediateArtifacts(ruleContext).combinedArchitectureBinary();
@@ -293,24 +293,6 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
return ImmutableSet.<Artifact>of();
}
- private ImmutableMap<BuildConfiguration, CcToolchainProvider> getChildConfigurationsAndToolchains(
- RuleContext ruleContext) {
- // This is currently a hack to obtain all child configurations regardless of the attribute
- // values of this rule -- this rule does not currently use the actual info provided by
- // this attribute. b/28403953 tracks cc toolchain usage.
- ImmutableListMultimap<BuildConfiguration, CcToolchainProvider> configToProvider =
- ruleContext.getPrerequisitesByConfiguration(
- ObjcRuleClasses.CHILD_CONFIG_ATTR, Mode.SPLIT, CcToolchainProvider.class);
-
- ImmutableMap.Builder<BuildConfiguration, CcToolchainProvider> result = ImmutableMap.builder();
- for (BuildConfiguration config : configToProvider.keySet()) {
- CcToolchainProvider toolchain = Iterables.getOnlyElement(configToProvider.get(config));
- result.put(config, toolchain);
- }
-
- return result.build();
- }
-
private static BinaryType getBinaryType(RuleContext ruleContext) {
String binaryTypeString =
ruleContext.attributes().get(AppleBinaryRule.BINARY_TYPE_ATTR, STRING);
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 bf0acf7d43..83e3b48dfd 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
@@ -30,18 +30,17 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
+import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes;
import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.TreeMap;
/**
@@ -91,7 +90,8 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
ObjcProtoProvider.class);
NestedSet<Artifact> protosToAvoid = protoArtifactsToAvoid(avoidProtoProviders);
- Set<BuildConfiguration> childConfigurations = getChildConfigurations(ruleContext);
+ Map<BuildConfiguration, CcToolchainProvider> childConfigurationsAndToolchains =
+ MultiArchBinarySupport.getChildConfigurationsAndToolchains(ruleContext);
IntermediateArtifacts ruleIntermediateArtifacts =
ObjcRuleClasses.intermediateArtifacts(ruleContext);
@@ -108,7 +108,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT, ObjcProtoProvider.class);
Map<String, NestedSet<Artifact>> outputGroupCollector = new TreeMap<>();
- for (BuildConfiguration childConfig : childConfigurations) {
+ for (BuildConfiguration childConfig : childConfigurationsAndToolchains.keySet()) {
Iterable<ObjcProtoProvider> objcProtoProviders = objcProtoProvidersMap.get(childConfig);
ProtobufSupport protoSupport =
new ProtobufSupport(
@@ -147,9 +147,15 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
.build();
compilationSupport
- .registerCompileAndArchiveActions(common)
+ .registerCompileAndArchiveActions(
+ common.getCompilationArtifacts().get(),
+ objcProvider,
+ childConfigurationsAndToolchains.get(childConfig))
.registerFullyLinkAction(
- objcProvider, intermediateArtifacts.strippedSingleArchitectureLibrary())
+ objcProvider,
+ intermediateArtifacts.strippedSingleArchitectureLibrary(),
+ childConfigurationsAndToolchains.get(childConfig),
+ CppHelper.getFdoSupport(ruleContext, ":cc_toolchain"))
.validateAttributes();
ruleContext.assertNoErrors();
@@ -212,17 +218,6 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
return inputList != null ? inputList : ImmutableList.<T>of();
}
- private Set<BuildConfiguration> getChildConfigurations(RuleContext ruleContext) {
- // This is currently a hack to obtain all child configurations regardless of the attribute
- // values of this rule -- this rule does not currently use the actual info provided by
- // this attribute. b/28403953 tracks cc toolchain usage.
- ImmutableListMultimap<BuildConfiguration, CcToolchainProvider> configToProvider =
- ruleContext.getPrerequisitesByConfiguration(ObjcRuleClasses.CHILD_CONFIG_ATTR, Mode.SPLIT,
- CcToolchainProvider.class);
-
- return configToProvider.keySet();
- }
-
private static NestedSet<Artifact> protoArtifactsToAvoid(
Iterable<ObjcProtoProvider> avoidedProviders) {
NestedSetBuilder<Artifact> avoidArtifacts = NestedSetBuilder.stableOrder();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
index 140779a625..a7c47d8183 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
@@ -18,6 +18,7 @@ import com.google.auto.value.AutoValue;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
@@ -45,6 +46,28 @@ public class MultiArchBinarySupport {
private final RuleContext ruleContext;
/**
+ * Returns all child configurations for this multi-arch target, mapped to the toolchains that they
+ * should use.
+ */
+ static ImmutableMap<BuildConfiguration, CcToolchainProvider> getChildConfigurationsAndToolchains(
+ RuleContext ruleContext) {
+ // This is currently a hack to obtain all child configurations regardless of the attribute
+ // values of this rule -- this rule does not currently use the actual info provided by
+ // this attribute. b/28403953 tracks cc toolchain usage.
+ ImmutableListMultimap<BuildConfiguration, CcToolchainProvider> configToProvider =
+ ruleContext.getPrerequisitesByConfiguration(
+ ObjcRuleClasses.CHILD_CONFIG_ATTR, Mode.SPLIT, CcToolchainProvider.class);
+
+ ImmutableMap.Builder<BuildConfiguration, CcToolchainProvider> result = ImmutableMap.builder();
+ for (BuildConfiguration config : configToProvider.keySet()) {
+ CcToolchainProvider toolchain = Iterables.getOnlyElement(configToProvider.get(config));
+ result.put(config, toolchain);
+ }
+
+ return result.build();
+ }
+
+ /**
* Configuration, toolchain, and provider for for single-arch dependency configurations of a
* multi-arch target.
*/