aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2016-08-11 15:48:57 +0000
committerGravatar Yue Gan <yueg@google.com>2016-08-12 08:51:20 +0000
commit0978a8ea1593ef204ea97155014f76baba2508c5 (patch)
tree432293ba19ab848e9d4534ffa772e1406a9209eb /src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
parentc1ffa41b27ebd9ff405909617227eb9c0dd612da (diff)
Record the category of the artifact to be linked in LinkerInput.
It's currently only used for sanity checks, but the idea is that we'll use this field to decide what to do with a given linker input instead of inferring things from its file name. Also make artifact name creation a bit simpler by using the same set of variables for compiler and linker outputs. -- MOS_MIGRATED_REVID=129990944
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
index ef5e4e474b..1a2de41530 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
@@ -95,6 +95,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo
private final CppConfiguration cppConfiguration;
private final LibraryToLink outputLibrary;
+ private final Artifact linkOutput;
private final LibraryToLink interfaceOutputLibrary;
private final Map<String, String> toolchainEnv;
private final ImmutableSet<String> executionRequirements;
@@ -139,6 +140,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo
ImmutableList<Artifact> outputs,
CppConfiguration cppConfiguration,
LibraryToLink outputLibrary,
+ Artifact linkOutput,
LibraryToLink interfaceOutputLibrary,
boolean fake,
boolean isLTOIndexing,
@@ -150,6 +152,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo
this.mandatoryInputs = inputs;
this.cppConfiguration = cppConfiguration;
this.outputLibrary = outputLibrary;
+ this.linkOutput = linkOutput;
this.interfaceOutputLibrary = interfaceOutputLibrary;
this.fake = fake;
this.isLTOIndexing = isLTOIndexing;
@@ -208,6 +211,10 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo
return linkCommandLine;
}
+ /**
+ * Returns the output of this action as a {@link LibraryToLink} or null if it is an executable.
+ */
+ @Nullable
public LibraryToLink getOutputLibrary() {
return outputLibrary;
}
@@ -217,10 +224,17 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo
}
/**
+ * Returns the output of the linking.
+ */
+ public Artifact getLinkOutput() {
+ return linkOutput;
+ }
+
+ /**
* Returns the path to the output artifact produced by the linker.
*/
public Path getOutputFile() {
- return outputLibrary.getArtifact().getPath();
+ return linkOutput.getPath();
}
@Override
@@ -440,8 +454,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo
@Override
protected String getRawProgressMessage() {
- return (isLTOIndexing ? "LTO indexing " : "Linking ")
- + outputLibrary.getArtifact().prettyPrint();
+ return (isLTOIndexing ? "LTO indexing " : "Linking ") + linkOutput.prettyPrint();
}
@Override
@@ -505,6 +518,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo
final NestedSet<Artifact> crosstoolInputs;
final Artifact runtimeMiddleman;
final NestedSet<Artifact> runtimeInputs;
+ final ArtifactCategory runtimeType;
final NestedSet<Artifact> compilationInputs;
final ImmutableSet<Artifact> linkstamps;
final ImmutableList<String> linkopts;
@@ -530,6 +544,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo
this.runtimeMiddleman = builder.getRuntimeMiddleman();
this.runtimeInputs =
NestedSetBuilder.<Artifact>stableOrder().addTransitive(builder.getRuntimeInputs()).build();
+ this.runtimeType = builder.getRuntimeType();
this.compilationInputs = NestedSetBuilder.<Artifact>stableOrder()
.addTransitive(builder.getCompilationInputs().build()).build();
this.linkstamps = ImmutableSet.copyOf(builder.getLinkstamps());