diff options
author | 2016-12-22 08:04:06 +0000 | |
---|---|---|
committer | 2016-12-22 09:58:06 +0000 | |
commit | 5374d4fd8ee670b96fe39fe47b04b641c3587342 (patch) | |
tree | 006766b2ccbb32256a0e86df5fa7c4c4c321e1a0 /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | ac0e4ecd58587b453bdd7a7d76d35eaa0e6b1e20 (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.java | 33 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java | 23 |
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}'", " }", " }", |