aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2015-08-27 11:40:45 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-08-27 14:45:28 +0000
commiteb4f2ad9bc2aa6efe788f8bf63f53c942a193a4b (patch)
tree172f49618f4f44d772081687b6639de099826c45 /src/main/java/com/google/devtools/build
parent74265b31c7af7058352cad0440acbeb11666603b (diff)
Fix link order for all rules using the java library helper.
By default, we collect Java-specific link options first, and only collect C++ link options if the dependency does not have Java ones. Longer term, the language-specific link options providers should be replaced by aspects. -- MOS_MIGRATED_REVID=101669588
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java
index 0343f34121..8c7386f0bd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java
@@ -33,6 +33,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDe
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Builder;
+import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore;
import com.google.devtools.build.lib.rules.cpp.CcSpecificLinkParamsProvider;
import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode;
@@ -105,6 +106,7 @@ public final class JavaLibraryHelper {
private StrictDepsMode strictDepsMode = StrictDepsMode.OFF;
private JavaClasspathMode classpathMode = JavaClasspathMode.OFF;
private boolean emitProviders = true;
+ private boolean legacyCollectCppAndJavaLinkOptions;
public JavaLibraryHelper(RuleContext ruleContext) {
this.ruleContext = ruleContext;
@@ -220,6 +222,16 @@ public final class JavaLibraryHelper {
}
/**
+ * Collects link options from both Java and C++ dependencies. This is never what you want, and
+ * only exists for backwards compatibility.
+ */
+ public JavaLibraryHelper setLegacyCollectCppAndJavaLinkOptions(
+ boolean legacyCollectCppAndJavaLinkOptions) {
+ this.legacyCollectCppAndJavaLinkOptions = legacyCollectCppAndJavaLinkOptions;
+ return this;
+ }
+
+ /**
* Creates the compile actions and providers.
*/
public Info build(JavaSemantics semantics) {
@@ -373,14 +385,18 @@ public final class JavaLibraryHelper {
return new CcLinkParamsStore() {
@Override
protected void collect(Builder builder, boolean linkingStatically, boolean linkShared) {
- builder.addTransitiveLangTargets(
- deps,
- JavaCcLinkParamsProvider.TO_LINK_PARAMS);
- builder.addTransitiveTargets(deps);
- // TODO(bazel-team): This may need to be optional for some clients of this class.
- builder.addTransitiveLangTargets(
- deps,
- CcSpecificLinkParamsProvider.TO_LINK_PARAMS);
+ if (legacyCollectCppAndJavaLinkOptions) {
+ builder.addTransitiveTargets(deps,
+ JavaCcLinkParamsProvider.TO_LINK_PARAMS);
+ builder.addTransitiveTargets(deps,
+ CcLinkParamsProvider.TO_LINK_PARAMS,
+ CcSpecificLinkParamsProvider.TO_LINK_PARAMS);
+ } else {
+ builder.addTransitiveTargets(deps,
+ JavaCcLinkParamsProvider.TO_LINK_PARAMS,
+ CcLinkParamsProvider.TO_LINK_PARAMS,
+ CcSpecificLinkParamsProvider.TO_LINK_PARAMS);
+ }
}
};
}