diff options
author | 2015-08-27 11:40:45 +0000 | |
---|---|---|
committer | 2015-08-27 14:45:28 +0000 | |
commit | eb4f2ad9bc2aa6efe788f8bf63f53c942a193a4b (patch) | |
tree | 172f49618f4f44d772081687b6639de099826c45 /src/main/java/com/google/devtools/build | |
parent | 74265b31c7af7058352cad0440acbeb11666603b (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.java | 32 |
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); + } } }; } |