diff options
Diffstat (limited to 'src/main')
5 files changed, 46 insertions, 38 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java index 3ae158d230..bd97ed5712 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java @@ -901,14 +901,17 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { CcCompilationInfo.Builder ccCompilationInfoBuilder = CcCompilationInfo.Builder.create(); ccCompilationInfoBuilder.setCcCompilationContextInfo(ccCompilationContextInfo); + CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create(); + ccLinkingInfoBuilder.setCcExecutionDynamicLibrariesInfo( + new CcExecutionDynamicLibrariesInfo( + collectExecutionDynamicLibraryArtifacts( + ruleContext, linkingOutputs.getExecutionDynamicLibraries()))); + builder .setFilesToBuild(filesToBuild) .addNativeDeclaredProvider(ccCompilationInfoBuilder.build()) .addProvider(TransitiveLipoInfoProvider.class, transitiveLipoInfo) - .addNativeDeclaredProvider( - new CcExecutionDynamicLibrariesInfo( - collectExecutionDynamicLibraryArtifacts( - ruleContext, linkingOutputs.getExecutionDynamicLibraries()))) + .addNativeDeclaredProvider(ccLinkingInfoBuilder.build()) .addProvider( CcNativeLibraryProvider.class, new CcNativeLibraryProvider( @@ -941,13 +944,17 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { return NestedSetBuilder.wrap(Order.STABLE_ORDER, artifacts); } - Iterable<CcExecutionDynamicLibrariesInfo> deps = - ruleContext.getPrerequisites("deps", Mode.TARGET, CcExecutionDynamicLibrariesInfo.PROVIDER); - NestedSetBuilder<Artifact> builder = NestedSetBuilder.stableOrder(); - for (CcExecutionDynamicLibrariesInfo dep : deps) { - builder.addTransitive(dep.getExecutionDynamicLibraryArtifacts()); + for (CcLinkingInfo ccLinkingInfo : + ruleContext.getPrerequisites("deps", Mode.TARGET, CcLinkingInfo.PROVIDER)) { + CcExecutionDynamicLibrariesInfo ccExecutionDynamicLibrariesInfo = + ccLinkingInfo.getCcExecutionDynamicLibrariesInfo(); + if (ccExecutionDynamicLibrariesInfo != null) { + builder.addTransitive( + ccExecutionDynamicLibrariesInfo.getExecutionDynamicLibraryArtifacts()); + } } + return builder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcExecutionDynamicLibrariesInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcExecutionDynamicLibrariesInfo.java index 253803e8f6..a40c387279 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcExecutionDynamicLibrariesInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcExecutionDynamicLibrariesInfo.java @@ -18,8 +18,6 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; 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.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -33,18 +31,13 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; category = SkylarkModuleCategory.PROVIDER, doc = "." ) -public final class CcExecutionDynamicLibrariesInfo extends NativeInfo { - public static final NativeProvider<CcExecutionDynamicLibrariesInfo> PROVIDER = - new NativeProvider<CcExecutionDynamicLibrariesInfo>( - CcExecutionDynamicLibrariesInfo.class, "CcExecutionDynamicLibrariesInfo") {}; - +public final class CcExecutionDynamicLibrariesInfo { public static final CcExecutionDynamicLibrariesInfo EMPTY = new CcExecutionDynamicLibrariesInfo(NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)); private final NestedSet<Artifact> ccExecutionDynamicLibraries; public CcExecutionDynamicLibrariesInfo(NestedSet<Artifact> ccExecutionDynamicLibraries) { - super(PROVIDER); this.ccExecutionDynamicLibraries = ccExecutionDynamicLibraries; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java index ef4cc9ed16..0499950d9a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java @@ -373,6 +373,8 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory { (CcLinkingInfo) linkingInfo.getProviders().getProvider(CcLinkingInfo.PROVIDER.getKey()); CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create(); ccLinkingInfoBuilder.setCcLinkParamsInfo(ccLinkingInfo.getCcLinkParamsInfo()); + ccLinkingInfoBuilder.setCcExecutionDynamicLibrariesInfo( + ccLinkingInfo.getCcExecutionDynamicLibrariesInfo()); ccLinkingInfoBuilder.setCcRunfilesInfo(new CcRunfilesInfo(staticRunfiles, sharedRunfiles)); return ccLinkingInfoBuilder.build(); 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 a1fe50ba50..3e3bbcdc78 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 @@ -536,8 +536,6 @@ public final class CcLinkingHelper { if (emitCcNativeLibrariesProvider) { providers.add(new CcNativeLibraryProvider(collectNativeCcLibraries(ccLinkingOutputs))); } - providers.put( - collectExecutionDynamicLibraryArtifacts(ccLinkingOutputs.getExecutionDynamicLibraries())); Runfiles cppStaticRunfiles = collectCppRunfiles(ccLinkingOutputs, true); Runfiles cppSharedRunfiles = collectCppRunfiles(ccLinkingOutputs, false); @@ -545,6 +543,8 @@ public final class CcLinkingHelper { CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create(); ccLinkingInfoBuilder.setCcRunfilesInfo( new CcRunfilesInfo(cppStaticRunfiles, cppSharedRunfiles)); + ccLinkingInfoBuilder.setCcExecutionDynamicLibrariesInfo( + collectExecutionDynamicLibraryArtifacts(ccLinkingOutputs.getExecutionDynamicLibraries())); CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class); boolean forcePic = cppConfiguration.forcePic(); @@ -683,9 +683,13 @@ public final class CcLinkingHelper { } NestedSetBuilder<Artifact> builder = NestedSetBuilder.stableOrder(); - for (CcExecutionDynamicLibrariesInfo dep : - AnalysisUtils.getProviders(deps, CcExecutionDynamicLibrariesInfo.PROVIDER)) { - builder.addTransitive(dep.getExecutionDynamicLibraryArtifacts()); + for (CcLinkingInfo dep : AnalysisUtils.getProviders(deps, CcLinkingInfo.PROVIDER)) { + CcExecutionDynamicLibrariesInfo ccExecutionDynamicLibrariesInfo = + dep.getCcExecutionDynamicLibrariesInfo(); + if (ccExecutionDynamicLibrariesInfo != null) { + builder.addTransitive( + ccExecutionDynamicLibrariesInfo.getExecutionDynamicLibraryArtifacts()); + } } return builder.isEmpty() ? CcExecutionDynamicLibrariesInfo.EMPTY 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 index f0b5a0faca..a5cdeb13ed 100644 --- 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 @@ -15,9 +15,6 @@ 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; @@ -41,13 +38,18 @@ public final class CcLinkingInfo extends NativeInfo { private final CcLinkParamsInfo ccLinkParamsInfo; private final CcRunfilesInfo ccRunfilesInfo; + private final CcExecutionDynamicLibrariesInfo ccExecutionDynamicLibrariesInfo; @AutoCodec.Instantiator @VisibleForSerialization - CcLinkingInfo(CcLinkParamsInfo ccLinkParamsInfo, CcRunfilesInfo ccRunfilesInfo) { + CcLinkingInfo( + CcLinkParamsInfo ccLinkParamsInfo, + CcRunfilesInfo ccRunfilesInfo, + CcExecutionDynamicLibrariesInfo ccExecutionDynamicLibrariesInfo) { super(PROVIDER); this.ccLinkParamsInfo = ccLinkParamsInfo; this.ccRunfilesInfo = ccRunfilesInfo; + this.ccExecutionDynamicLibrariesInfo = ccExecutionDynamicLibrariesInfo; } public CcLinkParamsInfo getCcLinkParamsInfo() { @@ -58,10 +60,15 @@ public final class CcLinkingInfo extends NativeInfo { return ccRunfilesInfo; } + public CcExecutionDynamicLibrariesInfo getCcExecutionDynamicLibrariesInfo() { + return ccExecutionDynamicLibrariesInfo; + } + /** A Builder for {@link CcLinkingInfo}. */ public static class Builder { CcLinkParamsInfo ccLinkParamsInfo; CcRunfilesInfo ccRunfilesInfo; + CcExecutionDynamicLibrariesInfo ccExecutionDynamicLibrariesInfo; public static CcLinkingInfo.Builder create() { return new CcLinkingInfo.Builder(); @@ -79,20 +86,15 @@ public final class CcLinkingInfo extends NativeInfo { return this; } - public CcLinkingInfo build() { - return new CcLinkingInfo(ccLinkParamsInfo, ccRunfilesInfo); + public Builder setCcExecutionDynamicLibrariesInfo( + CcExecutionDynamicLibrariesInfo ccExecutionDynamicLibrariesInfo) { + Preconditions.checkState(this.ccExecutionDynamicLibrariesInfo == null); + this.ccExecutionDynamicLibrariesInfo = ccExecutionDynamicLibrariesInfo; + return this; } - } - 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); - } + public CcLinkingInfo build() { + return new CcLinkingInfo(ccLinkParamsInfo, ccRunfilesInfo, ccExecutionDynamicLibrariesInfo); } - return ccLinkParamsInfosBuilder.build(); } } |