aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2016-09-09 15:20:49 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-09-12 08:54:44 +0000
commite3ed60d6e9d7fd222daeb881652ae5403e9ab550 (patch)
tree1c3d8188bbb130bee7c1ab69d0c10c63ea657d35 /src/main/java/com/google/devtools
parentc02dc27f388debddde0b24eaa7d4590f6979bb42 (diff)
Make cc_toolchain not croak if something that is not a shared library is mentioned in the dynamic_runtime_libs attribute.
-- MOS_MIGRATED_REVID=132676097
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java14
2 files changed, 17 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index f00c3d9d96..ec766a7d72 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -48,6 +48,7 @@ import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyKey;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -141,23 +142,23 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
// Dynamic runtime inputs.
TransitiveInfoCollection dynamicRuntimeLibDep = selectDep(ruleContext, "dynamic_runtime_libs",
cppConfiguration.getDynamicRuntimeLibsLabel());
- final NestedSet<Artifact> dynamicRuntimeLinkInputs;
- final Artifact dynamicRuntimeLinkMiddleman;
+ NestedSet<Artifact> dynamicRuntimeLinkSymlinks;
+ List<Artifact> dynamicRuntimeLinkInputs = new ArrayList<>();
+ Artifact dynamicRuntimeLinkMiddleman;
if (cppConfiguration.supportsEmbeddedRuntimes()) {
- NestedSetBuilder<Artifact> dynamicRuntimeLinkInputsBuilder = NestedSetBuilder.stableOrder();
+ NestedSetBuilder<Artifact> dynamicRuntimeLinkSymlinksBuilder = NestedSetBuilder.stableOrder();
for (Artifact artifact : dynamicRuntimeLibDep
.getProvider(FileProvider.class).getFilesToBuild()) {
if (CppHelper.SHARED_LIBRARY_FILETYPES.matches(artifact.getFilename())) {
- dynamicRuntimeLinkInputsBuilder.add(SolibSymlinkAction.getCppRuntimeSymlink(
+ dynamicRuntimeLinkInputs.add(artifact);
+ dynamicRuntimeLinkSymlinksBuilder.add(SolibSymlinkAction.getCppRuntimeSymlink(
ruleContext, artifact, runtimeSolibDirBase,
ruleContext.getConfiguration()));
- } else {
- dynamicRuntimeLinkInputsBuilder.add(artifact);
}
}
- dynamicRuntimeLinkInputs = dynamicRuntimeLinkInputsBuilder.build();
+ dynamicRuntimeLinkSymlinks = dynamicRuntimeLinkSymlinksBuilder.build();
} else {
- dynamicRuntimeLinkInputs = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
+ dynamicRuntimeLinkSymlinks = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
}
if (!dynamicRuntimeLinkInputs.isEmpty()) {
@@ -165,7 +166,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
CppHelper.getAggregatingMiddlemanForCppRuntimes(
ruleContext,
purposePrefix + "dynamic_runtime_link",
- dynamicRuntimeLibDep,
+ dynamicRuntimeLinkInputs,
runtimeSolibDirBase,
ruleContext.getConfiguration());
dynamicRuntimeLinkMiddleman = dynamicRuntimeLinkMiddlemanSet.isEmpty()
@@ -175,7 +176,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
}
Preconditions.checkState(
- (dynamicRuntimeLinkMiddleman == null) == dynamicRuntimeLinkInputs.isEmpty());
+ (dynamicRuntimeLinkMiddleman == null) == dynamicRuntimeLinkSymlinks.isEmpty());
CppCompilationContext.Builder contextBuilder =
new CppCompilationContext.Builder(ruleContext);
@@ -210,7 +211,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
libcLink,
staticRuntimeLinkInputs,
staticRuntimeLinkMiddleman,
- dynamicRuntimeLinkInputs,
+ dynamicRuntimeLinkSymlinks,
dynamicRuntimeLinkMiddleman,
runtimeSolibDir,
context,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 49eefe9413..f5e0ab5f39 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -457,18 +457,18 @@ public class CppHelper {
* before populating the set of files necessary to execute an action.
*/
static List<Artifact> getAggregatingMiddlemanForCppRuntimes(RuleContext ruleContext,
- String purpose, TransitiveInfoCollection dep, String solibDirOverride,
+ String purpose, Iterable<Artifact> artifacts, String solibDirOverride,
BuildConfiguration configuration) {
return getMiddlemanInternal(ruleContext, ruleContext.getActionOwner(), purpose,
- dep, true, true, solibDirOverride, configuration);
+ artifacts, true, true, solibDirOverride, configuration);
}
@VisibleForTesting
public static List<Artifact> getAggregatingMiddlemanForTesting(
- RuleContext ruleContext, ActionOwner owner, String purpose, TransitiveInfoCollection dep,
+ RuleContext ruleContext, ActionOwner owner, String purpose, Iterable<Artifact> artifacts,
boolean useSolibSymlinks, BuildConfiguration configuration) {
return getMiddlemanInternal(
- ruleContext, owner, purpose, dep, useSolibSymlinks, false, null, configuration);
+ ruleContext, owner, purpose, artifacts, useSolibSymlinks, false, null, configuration);
}
/**
@@ -476,13 +476,9 @@ public class CppHelper {
*/
private static List<Artifact> getMiddlemanInternal(
RuleContext ruleContext, ActionOwner actionOwner, String purpose,
- TransitiveInfoCollection dep, boolean useSolibSymlinks, boolean isCppRuntime,
+ Iterable<Artifact> artifacts, boolean useSolibSymlinks, boolean isCppRuntime,
String solibDirOverride, BuildConfiguration configuration) {
- if (dep == null) {
- return ImmutableList.of();
- }
MiddlemanFactory factory = ruleContext.getAnalysisEnvironment().getMiddlemanFactory();
- Iterable<Artifact> artifacts = dep.getProvider(FileProvider.class).getFilesToBuild();
if (useSolibSymlinks) {
List<Artifact> symlinkedArtifacts = new ArrayList<>();
for (Artifact artifact : artifacts) {