aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-01-12 09:01:13 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-12 09:02:32 -0800
commitd4c19e65c9e219772d22720761ef7646cdb210f8 (patch)
tree71f3e5dc98823a1fea347bccd0505aba1f0381ca /src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
parent849cec256c606db47dc179c788f937d7482087ae (diff)
RELNOTES: Allow expanding TreeArtifacts for libraries_to_link
PiperOrigin-RevId: 181750466
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java39
1 files changed, 25 insertions, 14 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 df76aad01a..f7646c6d25 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
@@ -969,7 +969,8 @@ public class CppLinkActionBuilder {
.setLinkopts(ImmutableList.copyOf(linkopts));
} else {
List<String> opts = new ArrayList<>(linkopts);
- opts.addAll(featureConfiguration.getCommandLine("lto-indexing", buildVariables));
+ opts.addAll(
+ featureConfiguration.getCommandLine("lto-indexing", buildVariables, null /* expander */));
opts.addAll(cppConfiguration.getLtoIndexOptions());
linkCommandLineBuilder.setLinkopts(ImmutableList.copyOf(opts));
}
@@ -1065,9 +1066,13 @@ public class CppLinkActionBuilder {
}
if (linkCommandLine.getParamFile() != null) {
inputsBuilder.add(ImmutableList.of(linkCommandLine.getParamFile()));
+ // Pass along tree artifacts, so they can be properly expanded.
+ Iterable<Artifact> expandedNonLibraryTreeArtifactInputs =
+ Iterables.filter(expandedNonLibraryInputs, a -> a.isTreeArtifact());
Action parameterFileWriteAction =
new ParameterFileWriteAction(
getOwner(),
+ expandedNonLibraryTreeArtifactInputs,
paramFile,
linkCommandLine.paramCmdLine(),
ParameterFile.ParameterFileType.UNQUOTED,
@@ -1260,15 +1265,6 @@ public class CppLinkActionBuilder {
return this;
}
- private void addObjectFile(LinkerInput input) {
- // We skip file extension checks for TreeArtifacts because they represent directory artifacts
- // without a file extension.
- String name = input.getArtifact().getFilename();
- Preconditions.checkArgument(
- input.getArtifact().isTreeArtifact() || Link.OBJECT_FILETYPES.matches(name), name);
- this.objectFiles.add(input);
- }
-
public CppLinkActionBuilder addLtoBitcodeFiles(ImmutableMap<Artifact, Artifact> files) {
Preconditions.checkState(ltoBitcodeFiles == null);
ltoBitcodeFiles = files;
@@ -1280,6 +1276,15 @@ public class CppLinkActionBuilder {
return this;
}
+ private void addObjectFile(LinkerInput input) {
+ // We skip file extension checks for TreeArtifacts because they represent directory artifacts
+ // without a file extension.
+ String name = input.getArtifact().getFilename();
+ Preconditions.checkArgument(
+ input.getArtifact().isTreeArtifact() || Link.OBJECT_FILETYPES.matches(name), name);
+ this.objectFiles.add(input);
+ }
+
/**
* Adds a single object file to the set of inputs.
*/
@@ -2058,10 +2063,16 @@ public class CppLinkActionBuilder {
name = inputArtifact.getExecPathString();
}
- librariesToLink.addValue(
- artifactCategory.equals(ArtifactCategory.OBJECT_FILE)
- ? LibraryToLinkValue.forObjectFile(name, inputIsWholeArchive)
- : LibraryToLinkValue.forStaticLibrary(name, inputIsWholeArchive));
+ if (artifactCategory.equals(ArtifactCategory.OBJECT_FILE)) {
+ if (inputArtifact.isTreeArtifact()) {
+ librariesToLink.addValue(
+ LibraryToLinkValue.forObjectDirectory(inputArtifact, inputIsWholeArchive));
+ } else {
+ librariesToLink.addValue(LibraryToLinkValue.forObjectFile(name, inputIsWholeArchive));
+ }
+ } else {
+ librariesToLink.addValue(LibraryToLinkValue.forStaticLibrary(name, inputIsWholeArchive));
+ }
}
}
}