diff options
author | 2017-05-01 20:01:19 +0200 | |
---|---|---|
committer | 2017-05-02 11:26:40 +0200 | |
commit | 3c484c1294a58ac4145104279532f970b95d89b2 (patch) | |
tree | 473e790c2580d30e3737ea01600750ca4a52ded5 /src | |
parent | edcd915c88ae1cfd2e20ec3965aab8b59c2bd2aa (diff) |
apple_static_library passes the correct crosstool to platform-specific compile
and fully linke actions.
PiperOrigin-RevId: 154733524
Diffstat (limited to 'src')
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. */ |