diff options
author | plf <plf@google.com> | 2018-04-16 03:12:51 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-16 03:14:36 -0700 |
commit | fa135cf600a957cbcef0ca45f97d5a9009d40859 (patch) | |
tree | d64e9ee36356bc68369d61a14cddf7b57c9b910f /src/main/java/com/google/devtools/build/lib/rules | |
parent | 0c17f0c79d3c1fdcfb9312b5b06486a45a75c002 (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')
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(); } |