diff options
Diffstat (limited to 'src/main/java')
8 files changed, 120 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java index 9278bea09a..0e540b6106 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.rules.cpp; +import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; @@ -127,4 +128,24 @@ public final class CcCompilationInfo extends NativeInfo implements CcCompilation } return ccCompilationContextsBuilder.build(); } + + @Override + public boolean equals(Object otherObject) { + if (!(otherObject instanceof CcCompilationInfo)) { + return false; + } + CcCompilationInfo other = (CcCompilationInfo) otherObject; + if (this == other) { + return true; + } + if (!this.ccCompilationContext.equals(other.ccCompilationContext)) { + return false; + } + return true; + } + + @Override + public int hashCode() { + return Objects.hashCode(ccCompilationContext); + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java index 36b41fdfdd..e2448cd425 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java @@ -106,6 +106,7 @@ public final class CcLinkingHelper { return outputGroups; } + @Override public CcLinkingOutputs getCcLinkingOutputs() { return linkingOutputs; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java index 91df5b6aac..4f087f374a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.rules.cpp; +import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -109,8 +110,11 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi }; private final CcLinkParamsStore ccLinkParamsStore; - private final CcRunfiles ccRunfiles; - private final CcDynamicLibrariesForRuntime ccDynamicLibrariesForRuntime; + // TODO(b/111289526): These providers are not useful. All the information they provide can be + // obtained from CcLinkParams. CcRunfiles is already dead code and can be removed. + // CcDynamicLibrariesForRuntime is not dead code yet. + @Deprecated private final CcRunfiles ccRunfiles; + @Deprecated private final CcDynamicLibrariesForRuntime ccDynamicLibrariesForRuntime; @AutoCodec.Instantiator @VisibleForSerialization @@ -170,4 +174,24 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi return new CcLinkingInfo(ccLinkParamsStore, ccRunfiles, ccDynamicLibrariesForRuntime); } } + + @Override + public boolean equals(Object otherObject) { + if (!(otherObject instanceof CcLinkingInfo)) { + return false; + } + CcLinkingInfo other = (CcLinkingInfo) otherObject; + if (this == other) { + return true; + } + if (!this.ccLinkParamsStore.equals(other.ccLinkParamsStore)) { + return false; + } + return true; + } + + @Override + public int hashCode() { + return Objects.hashCode(ccLinkParamsStore); + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingOutputs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingOutputs.java index a294a2dcb1..26115f8aa1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingOutputs.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingOutputs.java @@ -21,6 +21,9 @@ import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkingOutputsApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.LibraryToLinkApi; +import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.lib.vfs.FileSystemUtils; import java.util.ArrayList; import java.util.HashSet; @@ -28,10 +31,8 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -/** - * A structured representation of the link outputs of a C++ rule. - */ -public class CcLinkingOutputs { +/** A structured representation of the link outputs of a C++ rule. */ +public class CcLinkingOutputs implements CcLinkingOutputsApi { public static final CcLinkingOutputs EMPTY = new Builder().build(); @@ -66,14 +67,29 @@ public class CcLinkingOutputs { this.dynamicLibrariesForRuntime = dynamicLibrariesForRuntime; } + @Override + public SkylarkList<LibraryToLinkApi> getSkylarkStaticLibraries() { + return SkylarkList.createImmutable(staticLibraries); + } + public ImmutableList<LibraryToLink> getStaticLibraries() { return staticLibraries; } + @Override + public SkylarkList<LibraryToLinkApi> getSkylarkPicStaticLibraries() { + return SkylarkList.createImmutable(picStaticLibraries); + } + public ImmutableList<LibraryToLink> getPicStaticLibraries() { return picStaticLibraries; } + @Override + public SkylarkList<LibraryToLinkApi> getSkylarkDynamicLibrariesForLinking() { + return SkylarkList.createImmutable(dynamicLibrariesForLinking); + } + public ImmutableList<LibraryToLink> getDynamicLibrariesForLinking() { return dynamicLibrariesForLinking; } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingOutputsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingOutputsApi.java new file mode 100644 index 0000000000..93d81e5af6 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingOutputsApi.java @@ -0,0 +1,37 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.skylarkbuildapi.cpp; + +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.syntax.SkylarkList; + +/** Interface for a structured representation of the linking outputs of a C++ rule. */ +@SkylarkModule( + name = "CcLinkingOutputs", + category = SkylarkModuleCategory.BUILTIN, + documented = false, + doc = "Helper class containing CC compilation outputs.") +public interface CcLinkingOutputsApi { + @SkylarkCallable(name = "dynamic_libraries_for_linking", documented = false) + SkylarkList<LibraryToLinkApi> getSkylarkDynamicLibrariesForLinking(); + + @SkylarkCallable(name = "static_libraries", documented = false) + SkylarkList<LibraryToLinkApi> getSkylarkStaticLibraries(); + + @SkylarkCallable(name = "pic_static_libraries", documented = false) + SkylarkList<LibraryToLinkApi> getSkylarkPicStaticLibraries(); +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LibraryToLinkApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LibraryToLinkApi.java index a8421654c7..ff3b6214d0 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LibraryToLinkApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LibraryToLinkApi.java @@ -26,4 +26,4 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; category = SkylarkModuleCategory.BUILTIN, documented = false, doc = "A library the user can link to.") -public interface LibraryToLinkApi {} +public interface LibraryToLinkApi extends LinkerInputApi {} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkerInputApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkerInputApi.java index 13707d21e6..3d33a7eb8a 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkerInputApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkerInputApi.java @@ -16,14 +16,24 @@ package com.google.devtools.build.lib.skylarkbuildapi.cpp; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; /** * Something that appears on the command line of the linker. Since we sometimes expand archive files * to their constituent object files, we need to keep information whether a certain file contains * embedded objects and if so, the list of the object files themselves. */ +@SkylarkModule( + name = "LinkerInputApi", + category = SkylarkModuleCategory.BUILTIN, + documented = false, + doc = "An input that appears in the command line of the linker.") public interface LinkerInputApi { /** Returns the artifact that is the input of the linker. */ @SkylarkCallable(name = "artifact", doc = "Artifact passed to the linker.") Artifact getArtifact(); + + @SkylarkCallable(name = "original_artifact", doc = "Artifact passed to the linker.") + Artifact getOriginalLibraryArtifact(); } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkingInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkingInfoApi.java index d572708906..6b72b92ede 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkingInfoApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkingInfoApi.java @@ -30,5 +30,8 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; public interface LinkingInfoApi { @SkylarkCallable(name = "cc_linking_info", documented = false) - public CcLinkingInfoApi getCcLinkingInfo(); + CcLinkingInfoApi getCcLinkingInfo(); + + @SkylarkCallable(name = "cc_linking_outputs", documented = false) + CcLinkingOutputsApi getCcLinkingOutputs(); } |