diff options
author | 2017-08-31 19:24:14 +0200 | |
---|---|---|
committer | 2017-09-01 12:27:43 +0200 | |
commit | ca58a3e431b003bde02be043bfca74226ac4a238 (patch) | |
tree | d232bab0fde07fdf534d64bace5e9fdfc831baa3 /src/main/java/com/google/devtools/build/lib/rules/objc | |
parent | 9d9e1a7f11d68680c87aefd16ac26ad6af4fd94c (diff) |
Automated rollback of commit fc41c430e4de4594a1d699f573d191cbad52a2fb.
PiperOrigin-RevId: 167154793
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
13 files changed, 70 insertions, 94 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 8e6c2bd426..e919d43cab 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 @@ -33,7 +33,6 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider; @@ -142,7 +141,6 @@ public class AppleBinary implements RuleConfiguredTargetFactory { getDylibProtoProviders(ruleContext)); Map<String, NestedSet<Artifact>> outputGroupCollector = new TreeMap<>(); - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector = ImmutableList.builder(); multiArchBinarySupport.registerActions( platform, getExtraLinkArgs(ruleContext), @@ -150,8 +148,7 @@ public class AppleBinary implements RuleConfiguredTargetFactory { getExtraLinkInputs(ruleContext), configToDepsCollectionMap, outputArtifact, - outputGroupCollector, - providerCollector); + outputGroupCollector); NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.<Artifact>stableOrder().add(outputArtifact); @@ -213,10 +210,7 @@ public class AppleBinary implements RuleConfiguredTargetFactory { } } - targetBuilder - .addNativeDeclaredProvider(builder.build()) - .addProviderMaps(providerCollector.build()) - .addOutputGroups(outputGroupCollector); + targetBuilder.addNativeDeclaredProvider(builder.build()).addOutputGroups(outputGroupCollector); InstrumentedFilesProvider instrumentedFilesProvider = InstrumentedFilesCollector.forward(ruleContext, "deps", "bundle_loader"); 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 ff3e8f9350..732bdbdfed 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 @@ -28,7 +28,6 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; 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; @@ -107,7 +106,6 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT, ObjcProtoProvider.class); Map<String, NestedSet<Artifact>> outputGroupCollector = new TreeMap<>(); - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector = ImmutableList.builder(); for (BuildConfiguration childConfig : childConfigurationsAndToolchains.keySet()) { Iterable<ObjcProtoProvider> objcProtoProviders = objcProtoProvidersMap.get(childConfig); ProtobufSupport protoSupport = @@ -145,7 +143,6 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { .setRuleContext(ruleContext) .setConfig(childConfig) .setOutputGroupCollector(outputGroupCollector) - .setProviderCollector(providerCollector) .build(); compilationSupport @@ -183,8 +180,8 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { targetBuilder .addNativeDeclaredProvider( new AppleStaticLibraryProvider( - ruleIntermediateArtifacts.combinedArchitectureArchive(), objcProvider)) - .addProviderMaps(providerCollector.build()) + ruleIntermediateArtifacts.combinedArchitectureArchive(), + objcProvider)) .addOutputGroups(outputGroupCollector); return targetBuilder.build(); } 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 6f007061e7..e627a7a71c 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 @@ -28,7 +28,6 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; 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.analysis.test.InstrumentedFilesProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -126,12 +125,10 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory .build(); Map<String, NestedSet<Artifact>> outputGroupCollector = new TreeMap<>(); - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector = ImmutableList.builder(); CompilationSupport compilationSupport = new CompilationSupport.Builder() .setRuleContext(ruleContext) .setOutputGroupCollector(outputGroupCollector) - .setProviderCollector(providerCollector) .build(); compilationSupport @@ -191,7 +188,6 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory .addProvider( InstrumentedFilesProvider.class, compilationSupport.getInstrumentedFilesProvider(common)) - .addProviderMaps(providerCollector.build()) .addOutputGroups(outputGroupCollector); if (xcTestAppProvider.isPresent()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index c282b5fc84..b787ebcaf5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java @@ -53,7 +53,6 @@ import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; import com.google.devtools.build.lib.analysis.actions.CommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction; @@ -303,7 +302,6 @@ public abstract class CompilationSupport { protected final boolean useDeps; protected final Map<String, NestedSet<Artifact>> outputGroupCollector; protected final CcToolchainProvider toolchain; - protected final ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector; protected final boolean isTestRule; protected final boolean usePch; @@ -328,7 +326,6 @@ public abstract class CompilationSupport { boolean useDeps, Map<String, NestedSet<Artifact>> outputGroupCollector, CcToolchainProvider toolchain, - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector, boolean isTestRule, boolean usePch) { this.ruleContext = ruleContext; @@ -340,7 +337,6 @@ public abstract class CompilationSupport { this.useDeps = useDeps; this.isTestRule = isTestRule; this.outputGroupCollector = outputGroupCollector; - this.providerCollector = providerCollector; this.usePch = usePch; // TODO(b/62143697): Remove this check once all rules are using the crosstool support. if (ruleContext @@ -364,8 +360,6 @@ public abstract class CompilationSupport { private CompilationAttributes compilationAttributes; private boolean useDeps = true; private Map<String, NestedSet<Artifact>> outputGroupCollector; - private ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector = - ImmutableList.builder(); private boolean isObjcLibrary = false; private CcToolchainProvider toolchain; private boolean isTestRule = false; @@ -455,16 +449,6 @@ public abstract class CompilationSupport { } /** - * Causes the provided list to be updated with providers that should be exported by this target. - */ - public Builder setProviderCollector( - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector) { - Preconditions.checkNotNull(providerCollector); - this.providerCollector = providerCollector; - return this; - } - - /** * Returns a {@link CompilationSupport} instance. This is either a {@link * CrosstoolCompilationSupport} or {@link LegacyCompilationSupport} depending on the value of * --experimental_objc_crosstool. @@ -501,7 +485,6 @@ public abstract class CompilationSupport { useDeps, outputGroupCollector, toolchain, - providerCollector, isTestRule, usePch); } else { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java index cf3752563e..8241b68cfb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java @@ -38,14 +38,11 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.AnalysisEnvironment; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions.AppleBitcodeMode; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; -import com.google.devtools.build.lib.rules.cpp.CcCommon; import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper; import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper.Info; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.CollidingProvidesException; @@ -65,8 +62,7 @@ import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; import com.google.devtools.build.lib.rules.cpp.NoProcessing; import com.google.devtools.build.lib.rules.cpp.PrecompiledFiles; -import com.google.devtools.build.lib.rules.cpp.TransitiveSourcesProvider; -import com.google.devtools.build.lib.rules.cpp.TransitiveSourcesProvider.SourceUsage; +import com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag; import com.google.devtools.build.lib.rules.objc.ObjcVariablesExtension.VariableCategory; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.Collection; @@ -107,6 +103,9 @@ public class CrosstoolCompilationSupport extends CompilationSupport { private static final String GENERATE_LINKMAP_FEATURE_NAME = "generate_linkmap"; + /** Enabled if this target has objc sources in its transitive closure. */ + private static final String CONTAINS_OBJC = "contains_objc_sources"; + private static final ImmutableList<String> ACTIVATED_ACTIONS = ImmutableList.of( "objc-compile", @@ -137,7 +136,6 @@ public class CrosstoolCompilationSupport extends CompilationSupport { /*useDeps=*/ true, outputGroupCollector, null, - ImmutableList.builder(), /*isTestRule=*/ false, /*usePch=*/ true); } @@ -161,7 +159,6 @@ public class CrosstoolCompilationSupport extends CompilationSupport { boolean useDeps, Map<String, NestedSet<Artifact>> outputGroupCollector, CcToolchainProvider toolchain, - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector, boolean isTestRule, boolean usePch) { super( @@ -172,7 +169,6 @@ public class CrosstoolCompilationSupport extends CompilationSupport { useDeps, outputGroupCollector, toolchain, - providerCollector, isTestRule, usePch); } @@ -229,15 +225,6 @@ public class CrosstoolCompilationSupport extends CompilationSupport { Info info = helper.build(); outputGroupCollector.putAll(info.getOutputGroups()); - TransitiveSourcesProvider sourcesProvider = - info.getProviders().getProvider(TransitiveSourcesProvider.class); - if (sourcesProvider != null) { - TransitiveInfoProviderMapBuilder providersToPropagate = - new TransitiveInfoProviderMapBuilder(); - providersToPropagate.add(sourcesProvider); - providerCollector.add(providersToPropagate.build()); - } - registerHeaderScanningActions(info, objcProvider, compilationArtifacts); return this; @@ -271,7 +258,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport { outputArchive, ccToolchain, fdoSupport, - getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration)) + getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider)) .addActionInputs(objcProvider.getObjcLibraries()) .addActionInputs(objcProvider.getCcLibraries()) .addActionInputs(objcProvider.get(IMPORTED_LIBRARY).toSet()) @@ -322,11 +309,10 @@ public class CrosstoolCompilationSupport extends CompilationSupport { registerObjFilelistAction(objFiles, inputFileList); - LinkTargetType linkType = - CcCommon.getTransitiveSourcesProvider(ruleContext).uses(SourceUsage.CPP) - ? LinkTargetType.OBJCPP_EXECUTABLE - : LinkTargetType.OBJC_EXECUTABLE; - + LinkTargetType linkType = (objcProvider.is(Flag.USES_CPP)) + ? LinkTargetType.OBJCPP_EXECUTABLE + : LinkTargetType.OBJC_EXECUTABLE; + ObjcVariablesExtension.Builder extensionBuilder = new ObjcVariablesExtension.Builder() .setRuleContext(ruleContext) @@ -348,7 +334,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport { binaryToLink, toolchain, fdoSupport, - getFeatureConfiguration(ruleContext, toolchain, buildConfiguration)) + getFeatureConfiguration(ruleContext, toolchain, buildConfiguration, objcProvider)) .setMnemonic("ObjcLink") .addActionInputs(bazelBuiltLibraries) .addActionInputs(objcProvider.getCcLibraries()) @@ -449,7 +435,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport { new CcLibraryHelper( ruleContext, semantics, - getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration), + getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider), CcLibraryHelper.SourceCategory.CC_AND_OBJC, ccToolchain, fdoSupport, @@ -497,7 +483,10 @@ public class CrosstoolCompilationSupport extends CompilationSupport { } private FeatureConfiguration getFeatureConfiguration( - RuleContext ruleContext, CcToolchainProvider ccToolchain, BuildConfiguration configuration) { + RuleContext ruleContext, + CcToolchainProvider ccToolchain, + BuildConfiguration configuration, + ObjcProvider objcProvider) { boolean isHost = ruleContext.getConfiguration().isHostConfiguration(); ImmutableSet.Builder<String> activatedCrosstoolSelectables = ImmutableSet.<String>builder() @@ -548,8 +537,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport { if (bitcodeMode != AppleBitcodeMode.NONE) { activatedCrosstoolSelectables.addAll(bitcodeMode.getFeatureNames()); } - if (CcCommon.getTransitiveSourcesProvider(ruleContext).uses(SourceUsage.OBJC)) { - activatedCrosstoolSelectables.add(CppRuleClasses.CONTAINS_OBJC_SOURCE); + if (objcProvider.is(Flag.USES_OBJC)) { + activatedCrosstoolSelectables.add(CONTAINS_OBJC); } activatedCrosstoolSelectables.addAll(ruleContext.getFeatures()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java index 1ca650db16..24f1f9825b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java @@ -31,7 +31,6 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.RunfilesSupport; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; import com.google.devtools.build.lib.analysis.test.ExecutionInfo; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -159,13 +158,8 @@ public final class IosTest implements RuleConfiguredTargetFactory { ruleContext.getPrerequisites("deps", Mode.TARGET, J2ObjcEntryClassProvider.class)) .build(); - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector = ImmutableList.builder(); CompilationSupport compilationSupport = - new CompilationSupport.Builder() - .setProviderCollector(providerCollector) - .setRuleContext(ruleContext) - .setIsTestRule() - .build(); + new CompilationSupport.Builder().setRuleContext(ruleContext).setIsTestRule().build(); compilationSupport .registerLinkActions( @@ -237,7 +231,6 @@ public final class IosTest implements RuleConfiguredTargetFactory { .addNativeDeclaredProvider(new ExecutionInfo(execInfoMapBuilder.build())) .addNativeDeclaredProviders(testSupport.getExtraProviders()) .addProvider(InstrumentedFilesProvider.class, instrumentedFilesProvider) - .addProviderMaps(providerCollector.build()) .setRunfilesSupport(runfilesSupport, executable) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java index f34aab579b..8cd7c33c2d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java @@ -26,7 +26,6 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RunfilesProvider; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.syntax.Type; @@ -95,10 +94,8 @@ public class J2ObjcLibrary implements RuleConfiguredTargetFactory { .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext)) .build(); - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector = ImmutableList.builder(); new CompilationSupport.Builder() .setRuleContext(ruleContext) - .setProviderCollector(providerCollector) .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext)) .doNotUsePch() .build() @@ -113,7 +110,6 @@ public class J2ObjcLibrary implements RuleConfiguredTargetFactory { .add(RunfilesProvider.class, RunfilesProvider.EMPTY) .addProvider(J2ObjcEntryClassProvider.class, j2ObjcEntryClassProvider) .addProvider(J2ObjcMappingFileProvider.class, j2ObjcMappingFileProvider) - .addProviderMaps(providerCollector.build()) .addNativeDeclaredProvider(objcProvider) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java index c3a336b560..52024afae9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.rules.objc; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DEFINE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DYNAMIC_FRAMEWORK_FILE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.FORCE_LOAD_LIBRARY; +import static com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag.USES_CPP; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.HEADER; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.IMPORTED_LIBRARY; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE; @@ -26,6 +27,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.MODULE_MAP; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.STATIC_FRAMEWORK_FILE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.WEAK_SDK_FRAMEWORK; import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.CLANG; +import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.CLANG_PLUSPLUS; import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.COMPILABLE_SRCS_TYPE; import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.DSYMUTIL; import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.HEADERS; @@ -157,7 +159,6 @@ public class LegacyCompilationSupport extends CompilationSupport { useDeps, outputGroupCollector, toolchain, - ImmutableList.builder(), isTestRule, usePch); } @@ -675,7 +676,14 @@ public class LegacyCompilationSupport extends CompilationSupport { CustomCommandLine.Builder commandLine = CustomCommandLine.builder() .addPath(xcrunwrapper(ruleContext).getExecutable().getExecPath()); - commandLine.add(CLANG); + if (objcProvider.is(USES_CPP)) { + commandLine + .add(CLANG_PLUSPLUS) + .add("-stdlib=libc++") + .add("-std=gnu++11"); + } else { + commandLine.add(CLANG); + } // TODO(b/36562173): Replace the "!isTestRule" condition with the presence of "-bundle" in // the command line. 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 79744d4d2d..4da377ce73 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 @@ -25,7 +25,6 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -129,8 +128,6 @@ public class MultiArchBinarySupport { * this support * @param outputMapCollector a map to which output groups created by compile action generation are * added - * @param providerCollector a list to which provider maps created by compile and link action - * generation are added * @throws RuleErrorException if there are attribute errors in the current rule context */ public void registerActions( @@ -140,8 +137,7 @@ public class MultiArchBinarySupport { Iterable<Artifact> extraLinkInputs, ImmutableListMultimap<BuildConfiguration, TransitiveInfoCollection> configToDepsCollectionMap, Artifact outputLipoBinary, - Map<String, NestedSet<Artifact>> outputMapCollector, - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector) + Map<String, NestedSet<Artifact>> outputMapCollector) throws RuleErrorException, InterruptedException { NestedSetBuilder<Artifact> binariesToLipo = @@ -183,7 +179,6 @@ public class MultiArchBinarySupport { .setRuleContext(ruleContext) .setConfig(dependencySpecificConfiguration.config()) .setOutputGroupCollector(outputMapCollector) - .setProviderCollector(providerCollector) .build(); compilationSupport diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index cf1ab2ee59..cd08ee7d1e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -23,7 +23,10 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DEBUG_SYMBOL import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DEFINE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DYNAMIC_FRAMEWORK_DIR; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DYNAMIC_FRAMEWORK_FILE; +import static com.google.devtools.build.lib.rules.objc.ObjcProvider.FLAG; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.FORCE_LOAD_LIBRARY; +import static com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag.USES_CPP; +import static com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag.USES_OBJC; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.HEADER; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.IMPORTED_LIBRARY; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE; @@ -68,8 +71,10 @@ import com.google.devtools.build.lib.rules.apple.AppleToolchain; import com.google.devtools.build.lib.rules.cpp.CcLinkParams; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo; import com.google.devtools.build.lib.rules.cpp.CppCompilationContext; +import com.google.devtools.build.lib.rules.cpp.CppFileTypes; import com.google.devtools.build.lib.rules.cpp.CppModuleMap; import com.google.devtools.build.lib.util.FileType; +import com.google.devtools.build.lib.util.FileTypeSet; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.HashSet; @@ -517,6 +522,24 @@ public final class ObjcCommon { && J2ObjcLibrary.J2OBJC_SUPPORTED_RULES.contains(context.getRule().getRuleClass())) { objcProvider.addAll(J2OBJC_LIBRARY, artifacts.getArchive().asSet()); } + + boolean usesCpp = false; + boolean usesObjc = false; + for (Artifact sourceFile : + Iterables.concat(artifacts.getSrcs(), artifacts.getNonArcSrcs())) { + usesCpp = usesCpp || ObjcRuleClasses.CPP_SOURCES.matches(sourceFile.getExecPath()); + usesObjc = + usesObjc + || FileTypeSet.of(CppFileTypes.OBJC_SOURCE, CppFileTypes.OBJCPP_SOURCE) + .matches(sourceFile.getExecPath().getPathString()); + } + + if (usesCpp) { + objcProvider.add(FLAG, USES_CPP); + } + if (usesObjc) { + objcProvider.add(FLAG, USES_OBJC); + } } if (alwayslink) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java index a32cc320c6..043605f489 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java @@ -14,13 +14,11 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.collect.ImmutableList; 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; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.rules.cpp.CppModuleMap; import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes; @@ -58,10 +56,8 @@ public class ObjcImport implements RuleConfiguredTargetFactory { Iterable<Artifact> publicHeaders = compilationAttributes.hdrs(); CppModuleMap moduleMap = intermediateArtifacts.moduleMap(); - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector = ImmutableList.builder(); new CompilationSupport.Builder() .setRuleContext(ruleContext) - .setProviderCollector(providerCollector) .build() .registerGenerateModuleMapAction(moduleMap, publicHeaders) .validateAttributes(); @@ -70,7 +66,6 @@ public class ObjcImport implements RuleConfiguredTargetFactory { return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) .addNativeDeclaredProvider(common.getObjcProvider()) - .addProviderMaps(providerCollector.build()) .build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java index 85e08c128b..bb7429f019 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java @@ -14,13 +14,11 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.collect.ImmutableList; 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; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -69,12 +67,10 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { .addAll(common.getCompiledArchive().asSet()); Map<String, NestedSet<Artifact>> outputGroupCollector = new TreeMap<>(); - ImmutableList.Builder<TransitiveInfoProviderMap> providerCollector = ImmutableList.builder(); CompilationSupport compilationSupport = new CompilationSupport.Builder() .setRuleContext(ruleContext) .setOutputGroupCollector(outputGroupCollector) - .setProviderCollector(providerCollector) .setIsObjcLibrary() .build(); @@ -100,8 +96,8 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { .addProvider( InstrumentedFilesProvider.class, compilationSupport.getInstrumentedFilesProvider(common)) - .addNativeDeclaredProvider(new CcLinkParamsInfo(new ObjcLibraryCcLinkParamsStore(common))) - .addProviderMaps(providerCollector.build()) + .addNativeDeclaredProvider( + new CcLinkParamsInfo(new ObjcLibraryCcLinkParamsStore(common))) .addOutputGroups(outputGroupCollector) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java index a11c96ffb3..0970d96606 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java @@ -343,8 +343,19 @@ public final class ObjcProvider extends NativeInfo { * flag. If the item is included in the key {@link #FLAG}, then the flag is considered set. */ public enum Flag { + /** + * Indicates that C++ (or Objective-C++) is used in any source file. This affects how the linker + * is invoked. + */ + USES_CPP, + + /** + * Indicates that Objective-C (or Objective-C++) is used in any source file. This affects how + * the linker is invoked. + */ + USES_OBJC, + /** Indicates that Swift dependencies are present. This affects bundling actions. */ - // TODO(b/65016770): Move to TransitiveSourcesProvider. USES_SWIFT, /** |