diff options
author | 2018-02-08 11:59:38 -0800 | |
---|---|---|
committer | 2018-02-08 12:01:28 -0800 | |
commit | 1c6d061ea448ee19022f6e609099515a25a5a131 (patch) | |
tree | ee5bf2e5e282ef9989e5339c52a766cacaaf28ed /src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java | |
parent | 5ac4d7ad1ef9685b04aa58d4dfa15a38a42573d8 (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.java | 51 |
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, |