aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar plf <plf@google.com>2018-04-16 03:12:51 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-16 03:14:36 -0700
commitfa135cf600a957cbcef0ca45f97d5a9009d40859 (patch)
treed64e9ee36356bc68369d61a14cddf7b57c9b910f /src/main/java/com/google/devtools/build/lib/rules
parent0c17f0c79d3c1fdcfb9312b5b06486a45a75c002 (diff)
C++: Wrap CcLinkParamsInfo with CcLinkingInfo.
CcLinkingInfo will eventually wrap all C++ linking providers. CcLinkParamsInfo is no longer a provider and will be renamed in a later CL. RELNOTES:none PiperOrigin-RevId: 193011702
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java85
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java8
-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.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java7
13 files changed, 153 insertions, 44 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
index df9613d460..3941926f45 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
@@ -243,7 +243,10 @@ public final class CcLinkParams {
* the method does not do anything.
*/
public Builder addTransitiveTarget(TransitiveInfoCollection target) {
- return addTransitiveProvider(target.get(CcLinkParamsInfo.PROVIDER));
+ CcLinkingInfo ccLinkingInfo = target.get(CcLinkingInfo.PROVIDER);
+ CcLinkParamsInfo ccLinkParamsInfo =
+ ccLinkingInfo == null ? null : ccLinkingInfo.getCcLinkParamsInfo();
+ return addTransitiveProvider(ccLinkParamsInfo);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java
index 32afe7963a..7597d0ab8c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java
@@ -17,34 +17,23 @@ package com.google.devtools.build.lib.rules.cpp;
import com.google.common.base.Function;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.packages.NativeInfo;
-import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Builder;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore.CcLinkParamsStoreImpl;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
/** A target that provides C linker parameters. */
@Immutable
@AutoCodec
-@SkylarkModule(
- name = "cc_link_params_info",
- title = "cc_link_params_info",
- documented = false,
- category = SkylarkModuleCategory.PROVIDER,
- doc = "Link params provider"
-)
-public final class CcLinkParamsInfo extends NativeInfo {
- public static final NativeProvider<CcLinkParamsInfo> PROVIDER =
- new NativeProvider<CcLinkParamsInfo>(CcLinkParamsInfo.class, "link_params") {};
+public final class CcLinkParamsInfo {
public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS =
input -> {
// ... then try Skylark.
- CcLinkParamsInfo provider = input.get(PROVIDER);
- if (provider != null) {
- return provider.getCcLinkParamsStore();
+ CcLinkingInfo provider = input.get(CcLinkingInfo.PROVIDER);
+ CcLinkParamsInfo ccLinkParamsInfo =
+ provider == null ? null : provider.getCcLinkParamsInfo();
+ if (ccLinkParamsInfo != null) {
+ return ccLinkParamsInfo.getCcLinkParamsStore();
}
return null;
};
@@ -53,7 +42,6 @@ public final class CcLinkParamsInfo extends NativeInfo {
@AutoCodec.Instantiator
public CcLinkParamsInfo(CcLinkParamsStore store) {
- super(PROVIDER);
this.store = new CcLinkParamsStoreImpl(store);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
index 3b85d35add..6a9bab624d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
@@ -107,9 +107,9 @@ public final class CcLinkingHelper {
return providers;
}
- @SkylarkCallable(name = "cc_link_params_info", documented = false)
- public CcLinkParamsInfo getCcLinkParamsInfo() {
- return (CcLinkParamsInfo) providers.getProvider(CcLinkParamsInfo.PROVIDER.getKey());
+ @SkylarkCallable(name = "cc_linking_info", documented = false)
+ public CcLinkingInfo getCcLinkParamsInfo() {
+ return (CcLinkingInfo) providers.getProvider(CcLinkingInfo.PROVIDER.getKey());
}
public Map<String, NestedSet<Artifact>> getOutputGroups() {
@@ -551,9 +551,11 @@ public final class CcLinkingHelper {
new CcSpecificLinkParamsProvider(
createCcLinkParamsStore(ccLinkingOutputs, ccCompilationContextInfo, forcePic)));
} else {
- providers.put(
+ CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create();
+ ccLinkingInfoBuilder.setCcLinkParamsInfo(
new CcLinkParamsInfo(
createCcLinkParamsStore(ccLinkingOutputs, ccCompilationContextInfo, forcePic)));
+ providers.put(ccLinkingInfoBuilder.build());
}
return new LinkingInfo(
providers.build(), outputGroups, ccLinkingOutputs, originalLinkingOutputs);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
new file mode 100644
index 0000000000..2b25eae46d
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
@@ -0,0 +1,85 @@
+// Copyright 2014 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.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.AnalysisUtils;
+import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.NativeInfo;
+import com.google.devtools.build.lib.packages.NativeProvider;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+
+/** Wrapper for every C++ linking provider. */
+@Immutable
+@AutoCodec
+@SkylarkModule(
+ name = "cc_linking_info",
+ documented = false,
+ category = SkylarkModuleCategory.PROVIDER,
+ doc = "Wrapper for every C++ linking provider"
+)
+public final class CcLinkingInfo extends NativeInfo {
+ public static final NativeProvider<CcLinkingInfo> PROVIDER =
+ new NativeProvider<CcLinkingInfo>(CcLinkingInfo.class, "CcLinkingInfo") {};
+
+ private final CcLinkParamsInfo ccLinkParamsInfo;
+
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ CcLinkingInfo(CcLinkParamsInfo ccLinkParamsInfo) {
+ super(PROVIDER);
+ this.ccLinkParamsInfo = ccLinkParamsInfo;
+ }
+
+ public CcLinkParamsInfo getCcLinkParamsInfo() {
+ return ccLinkParamsInfo;
+ }
+
+ /** A Builder for {@link CcLinkingInfo}. */
+ public static class Builder {
+ CcLinkParamsInfo ccLinkParamsInfo;
+
+ public static CcLinkingInfo.Builder create() {
+ return new CcLinkingInfo.Builder();
+ }
+
+ public Builder setCcLinkParamsInfo(CcLinkParamsInfo ccLinkParamsInfo) {
+ Preconditions.checkState(this.ccLinkParamsInfo == null);
+ this.ccLinkParamsInfo = ccLinkParamsInfo;
+ return this;
+ }
+
+ public CcLinkingInfo build() {
+ return new CcLinkingInfo(ccLinkParamsInfo);
+ }
+ }
+
+ public static ImmutableList<CcLinkParamsInfo> getCcLinkParamsInfos(
+ Iterable<? extends TransitiveInfoCollection> deps) {
+ ImmutableList.Builder<CcLinkParamsInfo> ccLinkParamsInfosBuilder = ImmutableList.builder();
+ for (CcLinkingInfo ccLinkingInfo : AnalysisUtils.getProviders(deps, CcLinkingInfo.PROVIDER)) {
+ CcLinkParamsInfo ccLinkParamsInfo = ccLinkingInfo.getCcLinkParamsInfo();
+ if (ccLinkParamsInfo != null) {
+ ccLinkParamsInfosBuilder.add(ccLinkParamsInfo);
+ }
+ }
+ return ccLinkParamsInfosBuilder.build();
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
index 26ece69f1c..3d4fc9bcc5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
@@ -65,7 +65,9 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider {
+ "(possibly empty but never <code>None</code>)")
public NestedSet<Artifact> getLibraries() {
NestedSetBuilder<Artifact> libs = NestedSetBuilder.linkOrder();
- CcLinkParamsInfo ccLinkParams = getInfo().get(CcLinkParamsInfo.PROVIDER);
+ CcLinkingInfo ccLinkingInfo = getInfo().get(CcLinkingInfo.PROVIDER);
+ CcLinkParamsInfo ccLinkParams =
+ ccLinkingInfo == null ? null : ccLinkingInfo.getCcLinkParamsInfo();
if (ccLinkParams == null) {
return libs.build();
}
@@ -84,7 +86,9 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider {
+ "<code>MOSTLY STATIC</code> mode (<code>linkstatic=1</code>) "
+ "(possibly empty but never <code>None</code>)")
public ImmutableList<String> getLinkopts() {
- CcLinkParamsInfo ccLinkParams = getInfo().get(CcLinkParamsInfo.PROVIDER);
+ CcLinkingInfo ccLinkingInfo = getInfo().get(CcLinkingInfo.PROVIDER);
+ CcLinkParamsInfo ccLinkParams =
+ ccLinkingInfo == null ? null : ccLinkingInfo.getCcLinkParamsInfo();
if (ccLinkParams == null) {
return ImmutableList.of();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
index 0047ea27af..ddf8544890 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
@@ -34,6 +34,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
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.CcLinkParamsStore;
+import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo;
import com.google.devtools.build.lib.rules.cpp.LinkerInput;
import com.google.devtools.build.lib.rules.java.JavaCompilationArgs.ClasspathType;
import java.util.LinkedHashSet;
@@ -161,13 +162,17 @@ public class JavaImport implements RuleConfiguredTargetFactory {
.setRuntimeJars(javaArtifacts.getRuntimeJars())
.setNeverlink(neverLink)
.build();
+
+ CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create();
+ ccLinkingInfoBuilder.setCcLinkParamsInfo(new CcLinkParamsInfo(ccLinkParamsStore));
+
return ruleBuilder
.setFilesToBuild(filesToBuild)
.addSkylarkTransitiveInfo(
JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
.addNativeDeclaredProvider(javaInfo)
.add(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
- .addNativeDeclaredProvider(new CcLinkParamsInfo(ccLinkParamsStore))
+ .addNativeDeclaredProvider(ccLinkingInfoBuilder.build())
.add(
JavaNativeLibraryProvider.class,
new JavaNativeLibraryProvider(transitiveJavaNativeLibraries))
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 30f6c1e428..184ef164bc 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
@@ -33,7 +33,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
-import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo;
+import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
@@ -82,9 +82,9 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
ImmutableListMultimap<BuildConfiguration, ObjcProvider> configToObjcAvoidDepsMap =
ruleContext.getPrerequisitesByConfiguration(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME,
Mode.SPLIT, ObjcProvider.SKYLARK_CONSTRUCTOR);
- ImmutableListMultimap<BuildConfiguration, CcLinkParamsInfo> configToCcAvoidDepsMap =
- ruleContext.getPrerequisitesByConfiguration(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME,
- Mode.SPLIT, CcLinkParamsInfo.PROVIDER);
+ ImmutableListMultimap<BuildConfiguration, CcLinkingInfo> configToCcAvoidDepsMap =
+ ruleContext.getPrerequisitesByConfiguration(
+ AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME, Mode.SPLIT, CcLinkingInfo.PROVIDER);
Iterable<ObjcProtoProvider> avoidProtoProviders =
ruleContext.getPrerequisites(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME, Mode.TARGET,
ObjcProtoProvider.SKYLARK_CONSTRUCTOR);
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 cac4fdbe49..c648b78183 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
@@ -35,7 +35,7 @@ import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.apple.ApplePlatform;
-import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo;
+import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs;
import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
@@ -262,8 +262,9 @@ public class MultiArchBinarySupport {
nullToEmptyList(configurationToNonPropagatedObjcMap.get(childConfig)),
additionalDepProviders);
ObjcProvider objcProviderWithDylibSymbols = common.getObjcProvider();
- ObjcProvider objcProvider = objcProviderWithDylibSymbols.subtractSubtrees(dylibObjcProviders,
- ImmutableList.<CcLinkParamsInfo>of());
+ ObjcProvider objcProvider =
+ objcProviderWithDylibSymbols.subtractSubtrees(
+ dylibObjcProviders, ImmutableList.<CcLinkingInfo>of());
childInfoBuilder.add(
DependencySpecificConfiguration.create(
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 7f31bcba8a..c13c0757be 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
@@ -71,6 +71,7 @@ import com.google.devtools.build.lib.rules.cpp.CcCompilationContextInfo;
import com.google.devtools.build.lib.rules.cpp.CcCompilationInfo;
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.CcLinkingInfo;
import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
@@ -267,7 +268,7 @@ public final class ObjcCommon {
addAnyProviders(propagatedObjcDeps, depCT, ObjcProvider.SKYLARK_CONSTRUCTOR);
addAnyProviders(cppDeps, depCT, CcCompilationInfo.PROVIDER);
if (isCcLibrary(dep)) {
- cppDepLinkParams.add(depCT.get(CcLinkParamsInfo.PROVIDER));
+ cppDepLinkParams.add(depCT.get(CcLinkingInfo.PROVIDER).getCcLinkParamsInfo());
CcCompilationContextInfo ccCompilationContextInfo =
depCT.get(CcCompilationInfo.PROVIDER).getCcCompilationContextInfo();
addDefines(ccCompilationContextInfo.getDefines());
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 6f37fab6f3..5d1accfa4a 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
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.cpp.CcCompilationContextInfo;
import com.google.devtools.build.lib.rules.cpp.CcCompilationInfo;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo;
+import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo;
import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes;
import com.google.devtools.build.lib.syntax.Type;
import java.util.Map;
@@ -105,6 +106,10 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory {
CcCompilationInfo.Builder ccCompilationInfoBuilder = CcCompilationInfo.Builder.create();
ccCompilationInfoBuilder.setCcCompilationContextInfo(ccCompilationContextInfo);
+ CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create();
+ ccLinkingInfoBuilder.setCcLinkParamsInfo(
+ new CcLinkParamsInfo(new ObjcLibraryCcLinkParamsStore(common)));
+
return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
.addNativeDeclaredProvider(common.getObjcProvider())
.addNativeDeclaredProvider(ccCompilationInfoBuilder.build())
@@ -113,7 +118,7 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory {
.addProvider(
InstrumentedFilesProvider.class,
compilationSupport.getInstrumentedFilesProvider(objectFilesCollector.build()))
- .addNativeDeclaredProvider(new CcLinkParamsInfo(new ObjcLibraryCcLinkParamsStore(common)))
+ .addNativeDeclaredProvider(ccLinkingInfoBuilder.build())
.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 648be7e6be..5998b72f45 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
@@ -34,6 +34,7 @@ import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.packages.NativeProvider.WithLegacySkylarkName;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo;
+import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink;
@@ -933,17 +934,17 @@ public final class ObjcProvider extends NativeInfo {
* Subtracts dependency subtrees from this provider and returns the result (subtraction does not
* mutate this provider). Note that not all provider keys are subtracted; generally only keys
* which correspond with compiled libraries will be subtracted.
- *
- * <p>This is an expensive operation, as it requires flattening of all nested sets contained
- * in each provider.
+ *
+ * <p>This is an expensive operation, as it requires flattening of all nested sets contained in
+ * each provider.
*
* @param avoidObjcProviders objc providers which contain the dependency subtrees to subtract
* @param avoidCcProviders cc providers which contain the dependency subtrees to subtract
*/
// TODO(b/65156211): Investigate subtraction generalized to NestedSet.
@SuppressWarnings("unchecked") // Due to depending on Key types, when the keys map erases type.
- public ObjcProvider subtractSubtrees(Iterable<ObjcProvider> avoidObjcProviders,
- Iterable<CcLinkParamsInfo> avoidCcProviders) {
+ public ObjcProvider subtractSubtrees(
+ Iterable<ObjcProvider> avoidObjcProviders, Iterable<CcLinkingInfo> avoidCcProviders) {
// LIBRARY and CC_LIBRARY need to be special cased for objc-cc interop.
// A library which is a dependency of a cc_library may be present in all or any of
// three possible locations (and may be duplicated!):
@@ -952,9 +953,13 @@ public final class ObjcProvider extends NativeInfo {
// 3. CcLinkParamsInfo->LibraryToLink->getArtifact()
// TODO(cpeyser): Clean up objc-cc interop.
HashSet<PathFragment> avoidLibrariesSet = new HashSet<>();
- for (CcLinkParamsInfo linkProvider : avoidCcProviders) {
+ for (CcLinkingInfo linkProvider : avoidCcProviders) {
+ CcLinkParamsInfo ccLinkParamsInfo = linkProvider.getCcLinkParamsInfo();
+ if (ccLinkParamsInfo == null) {
+ continue;
+ }
NestedSet<LibraryToLink> librariesToLink =
- linkProvider.getCcLinkParams(true, false).getLibraries();
+ ccLinkParamsInfo.getCcLinkParams(true, false).getLibraries();
for (LibraryToLink libraryToLink : librariesToLink.toList()) {
avoidLibrariesSet.add(libraryToLink.getArtifact().getRunfilesPath());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java
index 8415d171b9..21b38c255a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java
@@ -28,6 +28,7 @@ import com.google.devtools.build.lib.rules.cpp.CcCommon.CcFlagsSupplier;
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.CcLinkParamsStore;
+import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
@@ -122,11 +123,15 @@ public abstract class PyBinary implements RuleConfiguredTargetFactory {
common.addCommonTransitiveInfoProviders(builder, semantics, common.getFilesToBuild());
semantics.postInitBinary(ruleContext, runfilesSupport, common);
+
+ CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create();
+ ccLinkingInfoBuilder.setCcLinkParamsInfo(new CcLinkParamsInfo(ccLinkParamsStore));
+
return builder
.setFilesToBuild(common.getFilesToBuild())
.add(RunfilesProvider.class, runfilesProvider)
.setRunfilesSupport(runfilesSupport, realExecutable)
- .addNativeDeclaredProvider(new CcLinkParamsInfo(ccLinkParamsStore))
+ .addNativeDeclaredProvider(ccLinkingInfoBuilder.build())
.add(PythonImportsProvider.class, new PythonImportsProvider(imports));
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java
index 43f33f7eb5..4a51a4f07d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java
@@ -28,6 +28,7 @@ import com.google.devtools.build.lib.collect.nestedset.Order;
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.CcLinkParamsStore;
+import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.List;
@@ -90,10 +91,14 @@ public abstract class PyLibrary implements RuleConfiguredTargetFactory {
RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext);
common.addCommonTransitiveInfoProviders(builder, semantics, filesToBuild);
+
+ CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create();
+ ccLinkingInfoBuilder.setCcLinkParamsInfo(new CcLinkParamsInfo(ccLinkParamsStore));
+
return builder
.setFilesToBuild(filesToBuild)
.add(RunfilesProvider.class, RunfilesProvider.simple(runfilesBuilder.build()))
- .addNativeDeclaredProvider(new CcLinkParamsInfo(ccLinkParamsStore))
+ .addNativeDeclaredProvider(ccLinkingInfoBuilder.build())
.add(PythonImportsProvider.class, new PythonImportsProvider(imports))
.build();
}