aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar Marcel Hlopko <hlopko@google.com>2016-12-22 08:04:06 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-12-22 09:58:06 +0000
commit5374d4fd8ee670b96fe39fe47b04b641c3587342 (patch)
tree006766b2ccbb32256a0e86df5fa7c4c4c321e1a0 /src/main/java/com/google/devtools/build/lib/rules/cpp
parentac0e4ecd58587b453bdd7a7d76d35eaa0e6b1e20 (diff)
Move hardcoded -L linker flags to CROSSTOOL
This cl introduces another build variable: library_search_directories, removes hardcoded -L generation from blaze and updates all the affected crosstools (those which started using action_configs, because the defaults from CppLinkActionConfigs are not applied then). -- PiperOrigin-RevId: 142738674 MOS_MIGRATED_REVID=142738674
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java23
2 files changed, 53 insertions, 3 deletions
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 2b0d081268..6f6939dbb5 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
@@ -75,6 +75,8 @@ public class CppLinkActionBuilder {
*/
public static final String LIBOPTS_VARIABLE = "libopts";
+ public static final String LIBRARY_SEARCH_DIRECTORIES_VARIABLE = "library_search_directories";
+
/** A build variable for flags providing files to link as inputs in the linker invocation */
public static final String LIBRARIES_TO_LINK_VARIABLE = "libraries_to_link";
@@ -1168,6 +1170,7 @@ public class CppLinkActionBuilder {
String rpathRoot;
ImmutableList<String> rpathEntries;
ImmutableSet<String> libopts;
+ ImmutableSet<String> librarySearchDirectories;
SequenceBuilder librariesToLink;
public void setRpathRoot(String rPathRoot) {
@@ -1186,6 +1189,10 @@ public class CppLinkActionBuilder {
this.librariesToLink = librariesToLink;
}
+ public void setLibrarySearchDirectories(ImmutableSet<String> librarySearchDirectories) {
+ this.librarySearchDirectories = librarySearchDirectories;
+ }
+
public String getRpathRoot() {
return rpathRoot;
}
@@ -1201,6 +1208,11 @@ public class CppLinkActionBuilder {
public SequenceBuilder getLibrariesToLink() {
return librariesToLink;
}
+
+ public ImmutableSet<String> getLibrarySearchDirectories() {
+ return librarySearchDirectories;
+ }
+
}
private class CppLinkVariablesExtension implements VariablesExtension {
@@ -1283,6 +1295,9 @@ public class CppLinkActionBuilder {
buildVariables.addCustomBuiltVariable(
LIBRARIES_TO_LINK_VARIABLE, linkArgCollector.getLibrariesToLink());
+ buildVariables.addStringSequenceVariable(
+ LIBRARY_SEARCH_DIRECTORIES_VARIABLE, linkArgCollector.getLibrarySearchDirectories());
+
// mostly static
if (linkStaticness == LinkStaticness.MOSTLY_STATIC && cppConfiguration.skipStaticOutputs()) {
buildVariables.addStringVariable(SKIP_MOSTLY_STATIC_VARIABLE, "");
@@ -1347,6 +1362,7 @@ public class CppLinkActionBuilder {
// Used to collect -L and -Wl,-rpath options, ensuring that each used only once.
ImmutableSet.Builder<String> libOpts = ImmutableSet.builder();
+ ImmutableSet.Builder<String> librarySearchDirectories = ImmutableSet.builder();
// List of command line parameters that need to be placed *outside* of
// --whole-archive ... --no-whole-archive.
@@ -1457,7 +1473,14 @@ public class CppLinkActionBuilder {
if (libDir.equals(solibDir)) {
includeSolibDir = true;
}
- addDynamicInputLinkOptions(input, librariesToLink, false, libOpts, solibDir, rpathRoot);
+ addDynamicInputLinkOptions(
+ input,
+ librariesToLink,
+ false,
+ libOpts,
+ librarySearchDirectories,
+ solibDir,
+ rpathRoot);
} else {
addStaticInputLinkOptions(input, librariesToLink, false, ltoMap);
}
@@ -1474,7 +1497,8 @@ public class CppLinkActionBuilder {
input.getArtifact(),
solibDir);
includeRuntimeSolibDir = true;
- addDynamicInputLinkOptions(input, librariesToLink, true, libOpts, solibDir, rpathRoot);
+ addDynamicInputLinkOptions(
+ input, librariesToLink, true, libOpts, librarySearchDirectories, solibDir, rpathRoot);
} else {
addStaticInputLinkOptions(input, librariesToLink, true, ltoMap);
}
@@ -1494,6 +1518,7 @@ public class CppLinkActionBuilder {
}
linkArgCollector.setLibopts(libOpts.build());
+ linkArgCollector.setLibrarySearchDirectories(librarySearchDirectories.build());
linkArgCollector.setLibrariesToLink(librariesToLink);
@@ -1512,6 +1537,7 @@ public class CppLinkActionBuilder {
SequenceBuilder librariesToLink,
boolean isRuntimeLinkerInput,
ImmutableSet.Builder<String> libOpts,
+ ImmutableSet.Builder<String> librarySearchDirectories,
PathFragment solibDir,
String rpathRoot) {
Preconditions.checkState(input.getArtifactCategory() == ArtifactCategory.DYNAMIC_LIBRARY);
@@ -1532,7 +1558,8 @@ public class CppLinkActionBuilder {
libOpts.add(rpathRoot + dotdots + libDir.relativeTo(commonParent).getPathString());
}
- libOpts.add("-L" + inputArtifact.getExecPath().getParentDirectory().getPathString());
+ librarySearchDirectories.add(
+ inputArtifact.getExecPath().getParentDirectory().getPathString());
String name = inputArtifact.getFilename();
boolean inputIsWholeArchive = !isRuntimeLinkerInput && needWholeArchive;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java
index 6eba06d0f7..a74bc2a0cb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java
@@ -63,6 +63,7 @@ public class CppLinkActionConfigs {
" implies: 'linkstamps'",
" implies: 'output_execpath_flags_executable'",
" implies: 'runtime_root_flags'",
+ " implies: 'library_search_directories'",
" implies: 'input_param_flags'",
" implies: 'libraries_to_link'",
" implies: 'force_pic_flags'",
@@ -80,6 +81,7 @@ public class CppLinkActionConfigs {
" implies: 'linkstamps'",
" implies: 'output_execpath_flags'",
" implies: 'runtime_root_flags'",
+ " implies: 'library_search_directories'",
" implies: 'input_param_flags'",
" implies: 'libraries_to_link'",
"}",
@@ -90,6 +92,7 @@ public class CppLinkActionConfigs {
" tool_path: 'DUMMY_TOOL'",
" }",
" implies: 'runtime_root_flags'",
+ " implies: 'library_search_directories'",
" implies: 'input_param_flags'",
" implies: 'libraries_to_link'",
"}",
@@ -100,6 +103,7 @@ public class CppLinkActionConfigs {
" tool_path: 'DUMMY_TOOL'",
" }",
" implies: 'runtime_root_flags'",
+ " implies: 'library_search_directories'",
" implies: 'input_param_flags'",
" implies: 'libraries_to_link'",
"}",
@@ -110,6 +114,7 @@ public class CppLinkActionConfigs {
" tool_path: 'DUMMY_TOOL'",
" }",
" implies: 'runtime_root_flags'",
+ " implies: 'library_search_directories'",
" implies: 'input_param_flags'",
" implies: 'libraries_to_link'",
"}",
@@ -120,6 +125,7 @@ public class CppLinkActionConfigs {
" tool_path: 'DUMMY_TOOL'",
" }",
" implies: 'runtime_root_flags'",
+ " implies: 'library_search_directories'",
" implies: 'input_param_flags'",
" implies: 'libraries_to_link'",
"}",
@@ -236,6 +242,22 @@ public class CppLinkActionConfigs {
" }",
"}",
"feature {",
+ " name: 'library_search_directories'",
+ " flag_set {",
+ " expand_if_all_available: 'library_search_directories'",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
+ " action: 'c++-link-static-library'",
+ " action: 'c++-link-alwayslink-static-library'",
+ " action: 'c++-link-pic-static-library'",
+ " action: 'c++-link-alwayslink-pic-static-library'",
+ " flag_group {",
+ " iterate_over: 'library_search_directories'",
+ " flag: '-L%{library_search_directories}'",
+ " }",
+ " }",
+ "}",
+ "feature {",
" name: 'input_param_flags'",
" flag_set {",
" expand_if_all_available: 'libopts'",
@@ -246,6 +268,7 @@ public class CppLinkActionConfigs {
" action: 'c++-link-pic-static-library'",
" action: 'c++-link-alwayslink-pic-static-library'",
" flag_group {",
+ " iterate_over: 'libopts'",
" flag: '%{libopts}'",
" }",
" }",