aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2017-06-22 17:06:02 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-06-26 17:53:44 +0200
commit3fdb9174105b8ca7373800b36d7dfa829ed5122b (patch)
tree6a9f90d548cc7c165799b508f5f526a599b1608b /src/main/java/com/google/devtools/build/lib
parent08d7c8eb65b14bcd91df387df3b87a26664d25a9 (diff)
Do not use link_dynamic_library.sh when toolchain doesn't support interface libraries
Before, Bazel would always use link_dynamic_library.sh, even though the toolchain doesn't support interface libraries and therefore its arguments would always be "no ignored ignored ignored". And since link_dynamic_library.sh is a shell script, it unnecessarily complicates the Windows toolchain. This cl also removes the script as a dependency of the toolchain (so it won't be set as an input of c++ actions). RELNOTES: None. PiperOrigin-RevId: 159827038
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java45
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java14
4 files changed, 41 insertions, 25 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 af4c3e5acb..972f413364 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
@@ -368,7 +368,9 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
getBuildVariables(ruleContext),
getBuiltinIncludes(ruleContext),
coverageEnvironment.build(),
- ruleContext.getPrerequisiteArtifact("$link_dynamic_library_tool", Mode.HOST),
+ cppConfiguration.supportsInterfaceSharedObjects()
+ ? ruleContext.getPrerequisiteArtifact("$link_dynamic_library_tool", Mode.HOST)
+ : null,
getEnvironment(ruleContext),
builtInIncludeDirectories,
sysroot);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
index d1a8835c6d..36dfc9eb93 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
@@ -37,9 +37,10 @@ public class CppActionConfigs {
String gccToolPath,
String cppLinkDynamicLibraryToolPath,
String arToolPath,
- boolean supportsEmbeddedRuntimes) {
+ boolean supportsEmbeddedRuntimes,
+ boolean supportsInterfaceSharedLibraries) {
String cppDynamicLibraryLinkerTool = "";
- if (!features.contains("dynamic_library_linker_tool")) {
+ if (!features.contains("dynamic_library_linker_tool") && supportsInterfaceSharedLibraries) {
cppDynamicLibraryLinkerTool =
""
+ "feature {"
@@ -138,8 +139,10 @@ public class CppActionConfigs {
" tool {",
" tool_path: '" + gccToolPath + "'",
" }",
- " implies: 'build_interface_libraries'",
- " implies: 'dynamic_library_linker_tool'",
+ ifTrue(
+ supportsInterfaceSharedLibraries,
+ "implies: 'build_interface_libraries'",
+ "implies: 'dynamic_library_linker_tool'"),
" implies: 'symbol_counts'",
" implies: 'strip_debug_symbols'",
" implies: 'shared_flag'",
@@ -192,22 +195,24 @@ public class CppActionConfigs {
" implies: 'libraries_to_link'",
" implies: 'linker_param_file'",
"}",
- "feature {",
- " name: 'build_interface_libraries'",
- " flag_set {",
- " expand_if_all_available: 'generate_interface_library'",
- " action: 'c++-link-dynamic-library'",
- " flag_group {",
- " flag: '%{generate_interface_library}'",
- " flag: '%{interface_library_builder_path}'",
- " flag: '%{interface_library_input_path}'",
- " flag: '%{interface_library_output_path}'",
- " }",
- " }",
- "}",
- // Order of feature declaration matters, cppDynamicLibraryLinkerTool has to follow
- // right after build_interface_libraries.
- cppDynamicLibraryLinkerTool,
+ ifTrue(
+ supportsInterfaceSharedLibraries,
+ "feature {",
+ " name: 'build_interface_libraries'",
+ " flag_set {",
+ " expand_if_all_available: 'generate_interface_library'",
+ " action: 'c++-link-dynamic-library'",
+ " flag_group {",
+ " flag: '%{generate_interface_library}'",
+ " flag: '%{interface_library_builder_path}'",
+ " flag: '%{interface_library_input_path}'",
+ " flag: '%{interface_library_output_path}'",
+ " }",
+ " }",
+ "}",
+ // Order of feature declaration matters, cppDynamicLibraryLinkerTool has to
+ // follow right after build_interface_libraries.
+ cppDynamicLibraryLinkerTool),
"feature {",
" name: 'symbol_counts'",
" flag_set {",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index c836b1869a..b66c6904e4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -667,7 +667,8 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
gccToolPath,
linkerToolPath,
arToolPath,
- supportsEmbeddedRuntimes),
+ supportsEmbeddedRuntimes,
+ toolchain.getSupportsInterfaceSharedObjects()),
toolchainBuilder);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
index e7ae470655..8dc16d0329 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
@@ -758,8 +758,7 @@ public class CppLinkActionBuilder {
.setFeatureConfiguration(featureConfiguration);
// TODO(b/62693279): Cleanup once internal crosstools specify ifso building correctly.
- if (linkType.equals(LinkTargetType.DYNAMIC_LIBRARY)
- && !featureConfiguration.hasConfiguredLinkerPathInActionConfig()) {
+ if (shouldUseLinkDynamicLibraryTool()) {
linkCommandLineBuilder.forceToolPath(
toolchain.getLinkDynamicLibraryTool().getExecPathString());
}
@@ -783,8 +782,11 @@ public class CppLinkActionBuilder {
// Compute the set of inputs - we only need stable order here.
NestedSetBuilder<Artifact> dependencyInputsBuilder = NestedSetBuilder.stableOrder();
dependencyInputsBuilder.addTransitive(crosstoolInputs);
- dependencyInputsBuilder.add(toolchain.getLinkDynamicLibraryTool());
dependencyInputsBuilder.addTransitive(linkActionInputs.build());
+ // TODO(b/62693279): Cleanup once internal crosstools specify ifso building correctly.
+ if (shouldUseLinkDynamicLibraryTool()) {
+ dependencyInputsBuilder.add(toolchain.getLinkDynamicLibraryTool());
+ }
if (runtimeMiddleman != null) {
dependencyInputsBuilder.add(runtimeMiddleman);
}
@@ -895,6 +897,12 @@ public class CppLinkActionBuilder {
executionRequirements.build());
}
+ private boolean shouldUseLinkDynamicLibraryTool() {
+ return linkType.equals(LinkTargetType.DYNAMIC_LIBRARY)
+ && cppConfiguration.supportsInterfaceSharedObjects()
+ && !featureConfiguration.hasConfiguredLinkerPathInActionConfig();
+ }
+
/** The default heuristic on whether we need to use whole-archive for the link. */
private static boolean needWholeArchive(
LinkStaticness staticness,