diff options
author | 2018-01-12 09:01:13 -0800 | |
---|---|---|
committer | 2018-01-12 09:02:32 -0800 | |
commit | d4c19e65c9e219772d22720761ef7646cdb210f8 (patch) | |
tree | 71f3e5dc98823a1fea347bccd0505aba1f0381ca /src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java | |
parent | 849cec256c606db47dc179c788f937d7482087ae (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.java | 39 |
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)); + } } } } |