From 1c6d061ea448ee19022f6e609099515a25a5a131 Mon Sep 17 00:00:00 2001 From: cpeyser Date: Thu, 8 Feb 2018 11:59:38 -0800 Subject: Add a CODEC for LibraryToLink, which is required to serialize CppLinkAction. PiperOrigin-RevId: 185029456 --- .../devtools/build/lib/rules/cpp/LinkerInputs.java | 51 ++++++++++++++++++---- 1 file changed, 43 insertions(+), 8 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java') 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 CODEC = + new LinkerInputs_LibraryToLink_AutoCodec(); + ImmutableMap 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 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 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 ltoBitcodeFiles; private final ImmutableMap sharedNonLtoBackends; + @AutoCodec.Instantiator + @VisibleForSerialization + CompoundLibraryToLink( + Artifact libraryArtifact, + ArtifactCategory category, + String libraryIdentifier, + Iterable objectFiles, + ImmutableMap ltoBitcodeFiles, + ImmutableMap 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, -- cgit v1.2.3