aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java1
4 files changed, 17 insertions, 30 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 aa1f902cc0..55d65ef316 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
@@ -166,7 +166,6 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
.setHeadersCheckingMode(common.determineHeadersCheckingMode())
.addCopts(common.getCopts())
.setNoCopts(common.getNoCopts())
- .addLinkopts(common.getLinkopts())
.addDefines(common.getDefines())
.addCompilationPrerequisites(common.getSharedLibrariesFromSrcs())
.addCompilationPrerequisites(common.getStaticLibrariesFromSrcs())
@@ -380,37 +379,13 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
}
// Then libraries from the closure of deps.
- List<String> linkopts = new ArrayList<>();
- Map<Artifact, ImmutableList<Artifact>> linkstamps = new LinkedHashMap<>();
-
- NestedSet<LibraryToLink> librariesInDepsClosure =
- findLibrariesToLinkInDepsClosure(context, common, cppConfiguration, linkopts, linkstamps);
- builder.addLinkopts(linkopts);
- builder.addLinkstamps(linkstamps);
-
- builder.addLibraries(librariesInDepsClosure);
- return builder;
- }
-
- /**
- * Explore the transitive closure of our deps to collect linking information.
- */
- private static NestedSet<LibraryToLink> findLibrariesToLinkInDepsClosure(
- RuleContext context,
- CcCommon common,
- CppConfiguration cppConfiguration,
- List<String> linkopts,
- Map<Artifact,
- ImmutableList<Artifact>> linkstamps) {
// This is true for both FULLY STATIC and MOSTLY STATIC linking.
boolean linkingStatically =
getLinkStaticness(context, common, cppConfiguration) != LinkStaticness.DYNAMIC;
-
CcLinkParams linkParams = collectCcLinkParams(
context, common, linkingStatically, isLinkShared(context));
- linkopts.addAll(linkParams.flattenedLinkopts());
- linkstamps.putAll(CppHelper.resolveLinkstamps(context, linkParams));
- return linkParams.getLibraries();
+ builder.addLinkParams(linkParams, context);
+ return builder;
}
/**
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 14bfbf0b65..6833e291d7 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
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.Util;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.packages.RuleErrorConsumer;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Linkstamp;
import com.google.devtools.build.lib.rules.cpp.CppCompilationContext.Builder;
@@ -315,13 +316,13 @@ public class CppHelper {
* <p>Emits a warning on the rule if there are identical linkstamp artifacts with different
* compilation contexts.
*/
- public static Map<Artifact, ImmutableList<Artifact>> resolveLinkstamps(RuleContext ruleContext,
+ public static Map<Artifact, ImmutableList<Artifact>> resolveLinkstamps(RuleErrorConsumer listener,
CcLinkParams linkParams) {
Map<Artifact, ImmutableList<Artifact>> result = new LinkedHashMap<>();
for (Linkstamp pair : linkParams.getLinkstamps()) {
Artifact artifact = pair.getArtifact();
if (result.containsKey(artifact)) {
- ruleContext.ruleWarning("rule inherits the '" + artifact.toDetailString()
+ listener.ruleWarning("rule inherits the '" + artifact.toDetailString()
+ "' linkstamp file from more than one cc_library rule");
}
result.put(artifact, pair.getDeclaredIncludeSrcs());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
index b6e9f24407..d62c6bba15 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
@@ -50,6 +50,7 @@ import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
+import com.google.devtools.build.lib.packages.RuleErrorConsumer;
import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink;
@@ -952,6 +953,17 @@ public final class CppLinkAction extends AbstractAction {
}
/**
+ * Merges the given link params into this builder by calling {@link #addLinkopts}, {@link
+ * #addLibraries}, and {@link #addLinkstamps}.
+ */
+ public Builder addLinkParams(CcLinkParams linkParams, RuleErrorConsumer errorListener) {
+ addLinkopts(linkParams.flattenedLinkopts());
+ addLibraries(linkParams.getLibraries());
+ addLinkstamps(CppHelper.resolveLinkstamps(errorListener, linkParams));
+ return this;
+ }
+
+ /**
* Sets whether this link action will be used for a cc_fake_binary; false by
* default.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
index 2318a2a9f9..09a68241bf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
@@ -130,7 +130,6 @@ public abstract class NativeDepsHelper {
private static NativeDepsRunfiles maybeCreateNativeDepsAction(final RuleContext ruleContext,
CcLinkParams linkParams, Collection<String> extraLinkOpts, BuildConfiguration configuration,
CcToolchainProvider toolchain, PathFragment nativeDepsPath, Root bindirIfShared) {
-
if (linkParams.getLibraries().isEmpty()) {
return NativeDepsRunfiles.EMPTY;
}