diff options
author | 2016-09-09 15:20:49 +0000 | |
---|---|---|
committer | 2016-09-12 08:54:44 +0000 | |
commit | e3ed60d6e9d7fd222daeb881652ae5403e9ab550 (patch) | |
tree | 1c3d8188bbb130bee7c1ab69d0c10c63ea657d35 /src/main/java/com/google/devtools | |
parent | c02dc27f388debddde0b24eaa7d4590f6979bb42 (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.java | 23 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java | 14 |
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) { |