diff options
author | 2016-10-05 20:54:27 +0000 | |
---|---|---|
committer | 2016-10-06 07:41:29 +0000 | |
commit | cddad444da9748f26b4326f8e2de13ad7f26239e (patch) | |
tree | 3e33406810cae9d836c9c800efb122ae2e50d4d4 /src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java | |
parent | 9d62a14f42320742101aeae1863cc0218db35266 (diff) |
BinaryLinkingTargetFactory can use the crosstool backend. objc_binary can turn
on this behavior with a flag.
--
MOS_MIGRATED_REVID=135275324
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java index 9e72c42549..2af307fd94 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RunfilesSupport; +import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; @@ -47,13 +48,23 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory YES, NO; } + /** Indicates whether this binary uses the c++ rules backend, including the crosstool. */ + enum UsesCrosstool { + EXPERIMENTAL, // use the crosstool if --experimental_use_crosstool_for_binary is given + NO; + } + private final HasReleaseBundlingSupport hasReleaseBundlingSupport; private final XcodeProductType productType; + private final UsesCrosstool usesCrosstool; - protected BinaryLinkingTargetFactory(HasReleaseBundlingSupport hasReleaseBundlingSupport, - XcodeProductType productType) { + protected BinaryLinkingTargetFactory( + HasReleaseBundlingSupport hasReleaseBundlingSupport, + XcodeProductType productType, + UsesCrosstool usesCrosstool) { this.hasReleaseBundlingSupport = hasReleaseBundlingSupport; this.productType = productType; + this.usesCrosstool = usesCrosstool; } /** @@ -107,9 +118,6 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory CompilationSupport compilationSupport = new CompilationSupport(ruleContext) - .registerCompileAndArchiveActions(common) - .registerFullyLinkAction(common.getObjcProvider(), - ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB)) .addXcodeSettings(xcodeProviderBuilder, common) .registerLinkActions( objcProvider, @@ -120,6 +128,27 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory DsymOutputType.APP) .validateAttributes(); + TransitiveInfoProviderMap compilationProviders; + if (usesCrosstool == UsesCrosstool.EXPERIMENTAL + && ruleContext.getFragment(ObjcConfiguration.class).useCrosstoolForBinary()) { + CrosstoolSupport crosstoolSupport = new CrosstoolSupport(ruleContext, objcProvider); + CompilationArtifacts compilationArtifacts = + CompilationSupport.compilationArtifacts(ruleContext); + if (compilationArtifacts.getArchive().isPresent()) { + compilationProviders = crosstoolSupport.registerCompileAndArchiveActions(common); + } else { + compilationProviders = crosstoolSupport.registerCompileActions(common); + } + crosstoolSupport.registerFullyLinkAction(common); + } else { + compilationProviders = null; + compilationSupport + .registerCompileAndArchiveActions(common) + .registerFullyLinkAction( + common.getObjcProvider(), + ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB)); + } + Optional<XcTestAppProvider> xcTestAppProvider; Optional<RunfilesSupport> maybeRunfilesSupport = Optional.absent(); switch (hasReleaseBundlingSupport) { @@ -188,6 +217,9 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory RunfilesSupport runfilesSupport = maybeRunfilesSupport.get(); targetBuilder.setRunfilesSupport(runfilesSupport, runfilesSupport.getExecutable()); } + if (compilationProviders != null) { + targetBuilder.addProviders(compilationProviders); + } configureTarget(targetBuilder, ruleContext); return targetBuilder.build(); } |