aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar plf <plf@google.com>2018-04-20 06:05:25 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-20 06:06:37 -0700
commit4d1a3f28ad1b0969d09a65ef19fbda9d5540a05c (patch)
treedabe41859f6d59ddb17f3db74553004745f2b3af /src
parent39d9e1638240cfa3620a20095b9006f34b11eccf (diff)
C++: Wraps CcExecutionDynamicLibrariesInfo inside CcLinkingInfo.
RELNOTES:none PiperOrigin-RevId: 193657227
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcExecutionDynamicLibrariesInfo.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java34
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/LibraryLinkingTest.java3
8 files changed, 56 insertions, 43 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();
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
index 8757040f71..e0b0ead3ed 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
@@ -119,7 +119,8 @@ public class CcCommonTest extends BuildViewTestCase {
}
assertThat(
emptylib
- .get(CcExecutionDynamicLibrariesInfo.PROVIDER)
+ .get(CcLinkingInfo.PROVIDER)
+ .getCcExecutionDynamicLibrariesInfo()
.getExecutionDynamicLibraryArtifacts()
.isEmpty())
.isTrue();
@@ -231,7 +232,8 @@ public class CcCommonTest extends BuildViewTestCase {
" linkstatic=1)");
assertThat(
statically
- .get(CcExecutionDynamicLibrariesInfo.PROVIDER)
+ .get(CcLinkingInfo.PROVIDER)
+ .getCcExecutionDynamicLibrariesInfo()
.getExecutionDynamicLibraryArtifacts()
.isEmpty())
.isTrue();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
index d206db176c..bf9ff66ae4 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
@@ -166,7 +166,8 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase {
.containsExactly(implInterfaceSharedObjectLink);
assertThat(
hello
- .get(CcExecutionDynamicLibrariesInfo.PROVIDER)
+ .get(CcLinkingInfo.PROVIDER)
+ .getCcExecutionDynamicLibrariesInfo()
.getExecutionDynamicLibraryArtifacts())
.containsExactly(implSharedObjectLink);
}
@@ -230,7 +231,8 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase {
.containsExactly(sharedObjectLink);
assertThat(
hello
- .get(CcExecutionDynamicLibrariesInfo.PROVIDER)
+ .get(CcLinkingInfo.PROVIDER)
+ .getCcExecutionDynamicLibrariesInfo()
.getExecutionDynamicLibraryArtifacts())
.containsExactly(implSharedObjectLink);
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/LibraryLinkingTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/LibraryLinkingTest.java
index cc0489f55e..a57d29b301 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/LibraryLinkingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/LibraryLinkingTest.java
@@ -110,7 +110,8 @@ public final class LibraryLinkingTest extends BuildViewTestCase {
Artifact soLib =
Iterables.getOnlyElement(
ccLib
- .get(CcExecutionDynamicLibrariesInfo.PROVIDER)
+ .get(CcLinkingInfo.PROVIDER)
+ .getCcExecutionDynamicLibrariesInfo()
.getExecutionDynamicLibraryArtifacts());
// This artifact is generated by a SolibSymlinkAction, so we need to go back two levels.
CppLinkAction solibLink =