aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
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
parent9d9e1a7f11d68680c87aefd16ac26ad6af4fd94c (diff)
Automated rollback of commit fc41c430e4de4594a1d699f573d191cbad52a2fb.
PiperOrigin-RevId: 167154793
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java72
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/TransitiveSourcesProvider.java67
-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
19 files changed, 74 insertions, 264 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
index 316f50e2bd..7522d099b5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
@@ -230,14 +230,6 @@ public final class RuleConfiguredTargetBuilder {
return this;
}
- /** Adds a group of {@link TransitiveInfoProviderMap} instances. */
- public <T extends TransitiveInfoProvider> RuleConfiguredTargetBuilder addProviderMaps(
- Iterable<TransitiveInfoProviderMap> providerMaps) {
- for (TransitiveInfoProviderMap providerMap : providerMaps) {
- addProviders(providerMap);
- }
- return this;
- }
/**
* Add a specific provider with a given value.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 8cd4315b08..3f28614cb7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -866,17 +866,6 @@ public final class RuleContext extends TargetContext
}
/**
- * Returns all the providers of the specified type that are listed under the specified attribute
- * of this target in the BUILD file, or an empty list of that attribute is not defined.
- */
- public <C extends TransitiveInfoProvider> Iterable<C> getPrerequisitesSafe(
- String attributeName, Mode mode, final Class<C> classType) {
- return attributes().has(attributeName)
- ? getPrerequisites(attributeName, mode, classType)
- : ImmutableList.of();
- }
-
- /**
* Returns all the declared providers (native and Skylark) for the specified constructor under the
* specified attribute of this target in the BUILD file.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 32c8cf9dc1..4856b0a1e6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -19,7 +19,6 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
import com.google.devtools.build.lib.actions.Artifact;
@@ -39,7 +38,6 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
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.Attribute.ConfigurationTransition;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper.SourceCategory;
@@ -48,7 +46,6 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfig
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.DynamicMode;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
-import com.google.devtools.build.lib.rules.cpp.TransitiveSourcesProvider.SourceUsage;
import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
@@ -60,7 +57,6 @@ import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
-import java.util.stream.Collectors;
import javax.annotation.Nullable;
/**
@@ -223,22 +219,12 @@ public final class CcCommon {
return new TransitiveLipoInfoProvider(scannableBuilder.build());
}
- /** Returns true if the given rule has sources in the target configuration. */
- static boolean hasSourcesInTargetConfig(RuleContext ruleContext) {
- return (ruleContext.attributes().has("srcs")
- && ruleContext.attributes().getAttributeDefinition("srcs").getConfigurationTransition()
- == ConfigurationTransition.NONE);
- }
-
/**
- * Returns a list of ({@link Artifact}, {@link Label}) pairs. Each pair represents an input source
- * file and the label of the rule that generates it (or the label of the source file itself if it
- * is an input file).
+ * Returns a list of ({@link Artifact}, {@link Label}) pairs. Each pair represents an input
+ * source file and the label of the rule that generates it (or the label of the source file
+ * itself if it is an input file).
*/
- static List<Pair<Artifact, Label>> getSources(RuleContext ruleContext) {
- if (!ruleContext.attributes().has("srcs")) {
- return ImmutableList.of();
- }
+ List<Pair<Artifact, Label>> getSources() {
Map<Artifact, Label> map = Maps.newLinkedHashMap();
Iterable<? extends TransitiveInfoCollection> providers =
ruleContext.getPrerequisitesIf("srcs", Mode.TARGET, FileProvider.class);
@@ -269,15 +255,6 @@ public final class CcCommon {
}
/**
- * Returns a list of ({@link Artifact}, {@link Label}) pairs. Each pair represents an input source
- * file and the label of the rule that generates it (or the label of the source file itself if it
- * is an input file).
- */
- List<Pair<Artifact, Label>> getSources() {
- return getSources(ruleContext);
- }
-
- /**
* Returns the files from headers and does some sanity checks. Note that this method reports
* warnings to the {@link RuleContext} as a side effect, and so should only be called once for any
* given rule.
@@ -591,40 +568,6 @@ public final class CcCommon {
}
}
- /** Computes the {@link TransitiveSourcesProvider} for this target using the given target. */
- public static TransitiveSourcesProvider getTransitiveSourcesProvider(RuleContext ruleContext) {
- List<String> sources =
- getSources(ruleContext)
- .stream()
- .map(pair -> pair.getSecond().getCanonicalForm())
- .collect(Collectors.toList());
- return getTransitiveSourcesProvider(ruleContext, sources);
- }
-
- /** Computes the {@link TransitiveSourcesProvider} for this target using the given target. */
- public static TransitiveSourcesProvider getTransitiveSourcesProvider(
- RuleContext ruleContext, List<String> sources) {
- TransitiveSourcesProvider.Builder result = new TransitiveSourcesProvider.Builder();
- Iterable<TransitiveSourcesProvider> depTransitiveSourcesProviders =
- ruleContext.getPrerequisitesSafe("deps", Mode.TARGET, TransitiveSourcesProvider.class);
- for (SourceUsage sourceUsage : SourceUsage.values()) {
- boolean sourceIsUsed = false;
- // If dependencies use this source type, then the source type is used.
- sourceIsUsed |=
- (Lists.newArrayList(depTransitiveSourcesProviders)
- .stream()
- .anyMatch(provider -> provider.uses(sourceUsage)));
-
- // If this target uses this source type, then the source type is used.
- sourceIsUsed |= (sources.stream().anyMatch(source -> sourceUsage.matches(source)));
-
- if (sourceIsUsed) {
- result.doesUse(sourceUsage);
- }
- }
- return result.build();
- }
-
/**
* Creates the feature configuration for a given rule.
*
@@ -668,13 +611,6 @@ public final class CcCommon {
requestedFeatures.addAll(sourceCategory.getActionConfigSet());
- // We check that this target has "srcs" in the target configuration to prevent failing in
- // getSources() for rules like cc_embed_data, which have "srcs" in the data configuration.
- if (hasSourcesInTargetConfig(ruleContext)
- && getTransitiveSourcesProvider(ruleContext).uses(SourceUsage.OBJC)) {
- requestedFeatures.add(CppRuleClasses.CONTAINS_OBJC_SOURCE);
- }
-
FeatureSpecification currentFeatureSpecification =
FeatureSpecification.create(requestedFeatures.build(), unsupportedFeatures);
try {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
index 6294cbe30a..a7ffab3456 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
@@ -68,7 +68,6 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.regex.Pattern;
-import java.util.stream.Collectors;
import javax.annotation.Nullable;
/**
@@ -1086,18 +1085,6 @@ public final class CcLibraryHelper {
new CcLinkParamsInfo(
createCcLinkParamsStore(ccLinkingOutputs, cppCompilationContext, forcePic)));
}
-
- if (CcCommon.hasSourcesInTargetConfig(ruleContext)) {
- List<String> sources =
- compilationUnitSources
- .stream()
- .map(cppSource -> cppSource.getSource().getExecPathString())
- .collect(Collectors.toList());
- providers.put(
- TransitiveSourcesProvider.class,
- CcCommon.getTransitiveSourcesProvider(ruleContext, sources));
- }
-
return new Info(
providers.build(),
outputGroups,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
index 28c1735da9..06e4c9b687 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
@@ -365,7 +365,4 @@ public class CppRuleClasses {
/** A string constant for the match-clif feature. */
public static final String MATCH_CLIF = "match_clif";
-
- /** A string constant for the contains_objc_source feature. */
- public static final String CONTAINS_OBJC_SOURCE = "contains_objc_source";
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/TransitiveSourcesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/TransitiveSourcesProvider.java
deleted file mode 100644
index a83ce68d34..0000000000
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/TransitiveSourcesProvider.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2017 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.rules.cpp;
-
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.util.FileTypeSet;
-
-/** Provides information on sources in the transitive closure of a target. */
-// TODO(b/65016770): Add SWIFT to this provider.
-public class TransitiveSourcesProvider implements TransitiveInfoProvider {
-
- /** Signal that a certain source type is used. */
- public enum SourceUsage {
- CPP(FileTypeSet.of(CppFileTypes.CPP_SOURCE, CppFileTypes.OBJCPP_SOURCE)),
- OBJC(FileTypeSet.of(CppFileTypes.OBJC_SOURCE));
-
- private final FileTypeSet fileType;
-
- SourceUsage(FileTypeSet fileType) {
- this.fileType = fileType;
- }
-
- /** If true, the presence of the given source signals this source usage. */
- public boolean matches(String fileName) {
- return fileType.matches(fileName);
- }
- }
-
- private final ImmutableList<SourceUsage> sources;
-
- private TransitiveSourcesProvider(ImmutableList<SourceUsage> sources) {
- this.sources = sources;
- }
-
- /** True if sources of the given type are used in this build. */
- public boolean uses(SourceUsage source) {
- return sources.contains(source);
- }
-
- /** Builder for TransitiveSourcesProvider */
- public static class Builder {
- private final ImmutableList.Builder<SourceUsage> sources = ImmutableList.builder();
-
- /** Signals that the build uses sources of the provided type. */
- public Builder doesUse(SourceUsage source) {
- this.sources.add(source);
- return this;
- }
-
- public TransitiveSourcesProvider build() {
- return new TransitiveSourcesProvider(this.sources.build());
- }
- }
-}
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,
/**