aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc
diff options
context:
space:
mode:
authorGravatar plf <plf@google.com>2017-08-31 19:24:14 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-09-01 12:27:43 +0200
commitca58a3e431b003bde02be043bfca74226ac4a238 (patch)
treed232bab0fde07fdf534d64bace5e9fdfc831baa3 /src/main/java/com/google/devtools/build/lib/rules/objc
parent9d9e1a7f11d68680c87aefd16ac26ad6af4fd94c (diff)
Automated rollback of commit fc41c430e4de4594a1d699f573d191cbad52a2fb.
PiperOrigin-RevId: 167154793
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java45
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java13
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,
/**