aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2018-02-08 11:59:38 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-08 12:01:28 -0800
commit1c6d061ea448ee19022f6e609099515a25a5a131 (patch)
treeee5bf2e5e282ef9989e5339c52a766cacaaf28ed /src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
parent5ac4d7ad1ef9685b04aa58d4dfa15a38a42573d8 (diff)
Add a CODEC for LibraryToLink, which is required to serialize CppLinkAction.
PiperOrigin-RevId: 185029456
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java51
1 files changed, 43 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
index 469d424da5..70ab54de4f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
@@ -20,6 +20,11 @@ import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.CollectionUtils;
import com.google.devtools.build.lib.concurrent.ThreadSafety;
+import com.google.devtools.build.lib.skyframe.serialization.InjectingObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
+import com.google.devtools.build.lib.vfs.FileSystemProvider;
/**
* Factory for creating new {@link LinkerInput} objects.
@@ -135,7 +140,11 @@ public abstract class LinkerInputs {
* A library the user can link to. This is different from a simple linker input in that it also
* has a library identifier.
*/
+ @AutoCodec(strategy = Strategy.POLYMORPHIC, dependency = FileSystemProvider.class)
public interface LibraryToLink extends LinkerInput {
+ public static final InjectingObjectCodec<LibraryToLink, FileSystemProvider> CODEC =
+ new LinkerInputs_LibraryToLink_AutoCodec();
+
ImmutableMap<Artifact, Artifact> getLtoBitcodeFiles();
/**
@@ -156,17 +165,23 @@ public abstract class LinkerInputs {
}
/**
- * This class represents a solib library symlink. Its library identifier is inherited from
- * the library that it links to.
+ * This class represents a solib library symlink. Its library identifier is inherited from the
+ * library that it links to.
*/
@ThreadSafety.Immutable
+ @AutoCodec(dependency = FileSystemProvider.class)
public static class SolibLibraryToLink implements LibraryToLink {
+ public static final InjectingObjectCodec<SolibLibraryToLink, FileSystemProvider> CODEC =
+ new LinkerInputs_SolibLibraryToLink_AutoCodec();
+
private final Artifact solibSymlinkArtifact;
private final Artifact libraryArtifact;
private final String libraryIdentifier;
- private SolibLibraryToLink(Artifact solibSymlinkArtifact, Artifact libraryArtifact,
- String libraryIdentifier) {
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ SolibLibraryToLink(
+ Artifact solibSymlinkArtifact, Artifact libraryArtifact, String libraryIdentifier) {
Preconditions.checkArgument(
Link.SHARED_LIBRARY_FILETYPES.matches(solibSymlinkArtifact.getFilename()));
this.solibSymlinkArtifact = solibSymlinkArtifact;
@@ -249,11 +264,14 @@ public abstract class LinkerInputs {
}
}
- /**
- * This class represents a library that may contain object files.
- */
+ /** This class represents a library that may contain object files. */
@ThreadSafety.Immutable
- private static class CompoundLibraryToLink implements LibraryToLink {
+ @AutoCodec(dependency = FileSystemProvider.class)
+ @VisibleForSerialization
+ static class CompoundLibraryToLink implements LibraryToLink {
+ public static final InjectingObjectCodec<CompoundLibraryToLink, FileSystemProvider> CODEC =
+ new LinkerInputs_CompoundLibraryToLink_AutoCodec();
+
private final Artifact libraryArtifact;
private final ArtifactCategory category;
private final String libraryIdentifier;
@@ -261,6 +279,23 @@ public abstract class LinkerInputs {
private final ImmutableMap<Artifact, Artifact> ltoBitcodeFiles;
private final ImmutableMap<Artifact, LtoBackendArtifacts> sharedNonLtoBackends;
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ CompoundLibraryToLink(
+ Artifact libraryArtifact,
+ ArtifactCategory category,
+ String libraryIdentifier,
+ Iterable<Artifact> objectFiles,
+ ImmutableMap<Artifact, Artifact> ltoBitcodeFiles,
+ ImmutableMap<Artifact, LtoBackendArtifacts> sharedNonLtoBackends) {
+ this.libraryArtifact = libraryArtifact;
+ this.category = category;
+ this.libraryIdentifier = libraryIdentifier;
+ this.objectFiles = objectFiles;
+ this.ltoBitcodeFiles = ltoBitcodeFiles;
+ this.sharedNonLtoBackends = sharedNonLtoBackends;
+ }
+
private CompoundLibraryToLink(
Artifact libraryArtifact,
ArtifactCategory category,