diff options
Diffstat (limited to 'src/main/java')
11 files changed, 385 insertions, 24 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java index f4efdad6a6..eb8c6a9a56 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java @@ -22,9 +22,11 @@ import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcLibraryRule; import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcTestRule; import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppRuleClasses; import com.google.devtools.build.lib.rules.core.CoreRules; +import com.google.devtools.build.lib.rules.cpp.CcCompilationInfo; import com.google.devtools.build.lib.rules.cpp.CcHostToolchainAliasRule; import com.google.devtools.build.lib.rules.cpp.CcImportRule; import com.google.devtools.build.lib.rules.cpp.CcLibcTopAlias; +import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; import com.google.devtools.build.lib.rules.cpp.CcModule; import com.google.devtools.build.lib.rules.cpp.CcToolchainAliasRule; import com.google.devtools.build.lib.rules.cpp.CcToolchainRule; @@ -76,6 +78,8 @@ public class CcRules implements RuleSet { builder.addRuleDefinition(new FdoPrefetchHintsRule()); builder.addSkylarkBootstrap(new CcBootstrap(new CcModule())); + builder.addSkylarkAccessibleTopLevels("CcCompilationInfo", CcCompilationInfo.PROVIDER); + builder.addSkylarkAccessibleTopLevels("CcLinkingInfo", CcLinkingInfo.PROVIDER); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java index a026a0a1b3..6a7219c68f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java @@ -52,7 +52,9 @@ import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.packages.TriState; +import com.google.devtools.build.lib.rules.cpp.CcModule.CcSkylarkInfo; import com.google.devtools.build.lib.rules.cpp.CcToolchain; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppFileTypes; @@ -349,7 +351,9 @@ public class BazelCppRuleClasses { attr("deps", LABEL_LIST) .allowedRuleClasses(DEPS_ALLOWED_RULES) .allowedFileTypes(CppFileTypes.LINKER_SCRIPT) - .skipAnalysisTimeFileTypeCheck()) + .skipAnalysisTimeFileTypeCheck() + .mandatoryProviders( + SkylarkProviderIdentifier.forKey(CcSkylarkInfo.PROVIDER.getKey()))) /*<!-- #BLAZE_RULE($cc_rule).ATTRIBUTE(win_def_file) --> The Windows DEF file to be passed to linker. <p>This attribute should only be used when Windows is the target platform. diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java index 0e7eca0a51..baaf365864 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java @@ -17,13 +17,24 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; +import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; +import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.NativeInfo; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Provider; +import com.google.devtools.build.lib.rules.cpp.CcModule.CcSkylarkInfo; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; +import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcModuleApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcSkylarkInfoApi; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; import com.google.devtools.build.lib.syntax.SkylarkDict; @@ -33,7 +44,32 @@ import javax.annotation.Nullable; /** A module that contains Skylark utilities for C++ support. */ public class CcModule - implements CcModuleApi<CcToolchainProvider, FeatureConfiguration, CcToolchainVariables> { + implements CcModuleApi< + CcToolchainProvider, + FeatureConfiguration, + CcToolchainVariables, + LibraryToLink, + CcLinkParams, + CcSkylarkInfo> { + + /** + * C++ Skylark rules should have this provider so that native rules can depend on them. This will + * eventually go away once b/73921130 is fixed. + */ + @Immutable + @AutoCodec + public static final class CcSkylarkInfo extends NativeInfo implements CcSkylarkInfoApi { + public static final ObjectCodec<CcSkylarkInfo> CODEC = new CcModule_CcSkylarkInfo_AutoCodec(); + + public static final NativeProvider<CcSkylarkInfo> PROVIDER = + new NativeProvider<CcSkylarkInfo>(CcSkylarkInfo.class, "CcSkylarkInfo") {}; + + @AutoCodec.Instantiator + @VisibleForSerialization + CcSkylarkInfo() { + super(PROVIDER); + } + } @Override public Provider getCcToolchainProvider() { @@ -182,7 +218,7 @@ public class CcModule } /** Converts an object that can be the either SkylarkNestedSet or None into NestedSet. */ - protected NestedSet<String> asStringNestedSet(Object o) throws EvalException { + protected NestedSet<String> asStringNestedSet(Object o) { SkylarkNestedSet skylarkNestedSet = convertFromNoneable(o, /* defaultValue= */ null); if (skylarkNestedSet != null) { return skylarkNestedSet.getSet(String.class); @@ -190,4 +226,71 @@ public class CcModule return NestedSetBuilder.emptySet(Order.STABLE_ORDER); } } + + @Override + public LibraryToLink createLibraryLinkerInput( + SkylarkRuleContext skylarkRuleContext, Artifact library, String skylarkArtifactCategory) + throws EvalException { + CcCommon.checkRuleWhitelisted(skylarkRuleContext); + ArtifactCategory artifactCategory = + ArtifactCategory.fromString( + skylarkArtifactCategory, + skylarkRuleContext.getRuleContext().getRule().getLocation(), + "artifact_category"); + return LinkerInputs.opaqueLibraryToLink( + library, artifactCategory, CcLinkingOutputs.libraryIdentifierOf(library)); + } + + @Override + public LibraryToLink createSymlinkLibraryLinkerInput( + SkylarkRuleContext skylarkRuleContext, CcToolchainProvider ccToolchain, Artifact library) { + Artifact dynamicLibrarySymlink = + SolibSymlinkAction.getDynamicLibrarySymlink( + skylarkRuleContext.getRuleContext(), + ccToolchain.getSolibDirectory(), + library, + /* preserveName= */ true, + /* prefixConsumer= */ true, + skylarkRuleContext.getRuleContext().getConfiguration()); + return LinkerInputs.solibLibraryToLink( + dynamicLibrarySymlink, library, CcLinkingOutputs.libraryIdentifierOf(library)); + } + + @Override + public CcLinkParams createCcLinkParams( + SkylarkRuleContext skylarkRuleContext, + Object skylarkLibrariesToLink, + Object skylarkDynamicLibrariesForRuntime, + Object skylarkUserLinkFlags) + throws EvalException { + CcCommon.checkRuleWhitelisted(skylarkRuleContext); + + SkylarkNestedSet librariesToLink = convertFromNoneable(skylarkLibrariesToLink, null); + SkylarkNestedSet dynamicLibrariesForRuntime = + convertFromNoneable(skylarkDynamicLibrariesForRuntime, null); + SkylarkNestedSet userLinkFlags = convertFromNoneable(skylarkUserLinkFlags, null); + + CcLinkParams.Builder builder = CcLinkParams.builder(); + if (librariesToLink != null) { + builder.addLibraries(librariesToLink.toCollection(LibraryToLink.class)); + } + if (dynamicLibrariesForRuntime != null) { + builder.addDynamicLibrariesForRuntime( + dynamicLibrariesForRuntime.toCollection(Artifact.class)); + } + if (userLinkFlags != null) { + builder.addLinkOpts(userLinkFlags.toCollection(String.class)); + } + return builder.build(); + } + + @Override + public CcSkylarkInfo createCcSkylarkInfo(Object skylarkRuleContextObject) throws EvalException { + SkylarkRuleContext skylarkRuleContext = + convertFromNoneable(skylarkRuleContextObject, /* defaultValue= */ null); + if (skylarkRuleContext != null) { + CcCommon.checkRuleWhitelisted(skylarkRuleContext); + } + return new CcSkylarkInfo(); + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInput.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInput.java index 9cbcf67434..c2da5135bf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInput.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInput.java @@ -15,23 +15,19 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.LinkerInputApi; /** * 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. */ -public interface LinkerInput { +public interface LinkerInput extends LinkerInputApi { /** * Returns the type of the linker input. */ ArtifactCategory getArtifactCategory(); - /** Returns the artifact that is the input of the linker. */ - @SkylarkCallable(name = "artifact", doc = "Artifact passed to the linker.") - Artifact getArtifact(); - /** * Returns the original library to link. If this library is a solib symlink, returns the * artifact the symlink points to, otherwise, the library itself. 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 5997105792..5ccef60859 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 @@ -22,8 +22,7 @@ import com.google.devtools.build.lib.collect.CollectionUtils; import com.google.devtools.build.lib.concurrent.ThreadSafety; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.LibraryToLinkApi; /** * Factory for creating new {@link LinkerInput} objects. @@ -154,12 +153,7 @@ 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. */ - @SkylarkModule( - name = "LibraryToLink", - category = SkylarkModuleCategory.BUILTIN, - documented = false, - doc = "A library the user can link to.") - public interface LibraryToLink extends LinkerInput { + public interface LibraryToLink extends LinkerInput, LibraryToLinkApi { ImmutableMap<Artifact, Artifact> getLtoBitcodeFiles(); /** diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java index 73c5e498a8..f1e3a65c85 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java @@ -14,8 +14,10 @@ package com.google.devtools.build.lib.skylarkbuildapi.cpp; - +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext; import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.ParamType; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; @@ -33,7 +35,10 @@ import com.google.devtools.build.lib.syntax.SkylarkNestedSet; public interface CcModuleApi< CcToolchainProviderT extends CcToolchainProviderApi, FeatureConfigurationT extends FeatureConfigurationApi, - CcToolchainVariablesT extends CcToolchainVariablesApi> { + CcToolchainVariablesT extends CcToolchainVariablesApi, + LibraryToLinkT extends LibraryToLinkApi, + CcLinkParamsT extends CcLinkParamsApi, + CcSkylarkInfoT extends CcSkylarkInfoApi> { @SkylarkCallable( name = "CcToolchainInfo", @@ -450,4 +455,135 @@ public interface CcModuleApi< @SkylarkCallable(name = "empty_variables", documented = false) CcToolchainVariablesT getVariables(); + + @SkylarkCallable( + name = "create_library_to_link", + documented = false, + parameters = { + @Param( + name = "ctx", + doc = "Skylark rule context.", + positional = false, + named = true, + type = SkylarkRuleContext.class), + @Param( + name = "library", + doc = "Library to be linked.", + positional = false, + named = true, + type = Artifact.class), + @Param( + name = "artifact_category", + doc = + "Artifact category. Can be: static_library, alwayslink_static_library, " + + "dynamic_library or interface_library", + positional = false, + named = true, + type = String.class) + }) + LibraryToLinkT createLibraryLinkerInput( + SkylarkRuleContext skylarkRuleContext, Artifact library, String skylarkArtifactCategory) + throws EvalException; + + @SkylarkCallable( + name = "create_symlink_library_to_link", + documented = false, + parameters = { + @Param( + name = "ctx", + doc = "Skylark rule context.", + positional = false, + named = true, + type = SkylarkRuleContext.class), + @Param( + name = "cc_toolchain", + doc = "C++ toolchain provider to be used.", + positional = false, + named = true, + type = CcToolchainProviderApi.class), + @Param( + name = "library", + doc = "Library that should be symlinked.", + positional = false, + named = true, + type = Artifact.class), + }) + LibraryToLinkT createSymlinkLibraryLinkerInput( + SkylarkRuleContext skylarkRuleContext, CcToolchainProviderT ccToolchain, Artifact library); + + @SkylarkCallable( + name = "create_cc_link_params", + doc = "Creates cc link parameters", + parameters = { + @Param( + name = "ctx", + positional = false, + named = true, + type = SkylarkRuleContextApi.class, + doc = "The rule context."), + @Param( + name = "libraries_to_link", + doc = + "List of libraries that should be passed to the linker/archiver. They can be " + + "static and/or dynamic libraries.", + positional = false, + named = true, + noneable = true, + defaultValue = "None", + allowedTypes = { + @ParamType(type = SkylarkNestedSet.class), + @ParamType(type = NoneType.class) + }), + @Param( + name = "dynamic_libraries_for_runtime", + doc = + "When 'libraries_to_link' has dynamic libraries, then the runtime library can " + + "be specified as well. This is not obligatory though, as we may provide a " + + "library for linking and at runtime the actual library will be provided by " + + "the system.", + positional = false, + named = true, + noneable = true, + defaultValue = "None", + allowedTypes = { + @ParamType(type = SkylarkNestedSet.class), + @ParamType(type = NoneType.class) + }), + @Param( + name = "user_link_flags", + doc = "List of user provided linker flags.", + positional = false, + named = true, + noneable = true, + defaultValue = "None", + allowedTypes = { + @ParamType(type = SkylarkNestedSet.class), + @ParamType(type = NoneType.class) + }) + }) + CcLinkParamsT createCcLinkParams( + SkylarkRuleContext skylarkRuleContext, + Object skylarkLibrariesToLink, + Object skylarkDynamicLibrariesForRuntime, + Object skylarkUserLinkFlags) + throws EvalException; + + @SkylarkCallable( + name = "create_cc_skylark_info", + documented = false, + parameters = { + // TODO(plf): Make this parameter mandatory. Change cc_embed_data.bzl first. + @Param( + name = "ctx", + doc = "Skylark rule context.", + positional = false, + named = true, + noneable = true, + defaultValue = "None", + allowedTypes = { + @ParamType(type = SkylarkRuleContextApi.class), + @ParamType(type = NoneType.class) + }) + }) + CcSkylarkInfoT createCcSkylarkInfo(Object skylarkRuleContextObject) throws EvalException; } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkInfoApi.java new file mode 100644 index 0000000000..dc764a064f --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkInfoApi.java @@ -0,0 +1,26 @@ +// 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.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** Skylark rules need to provide this to be a dependency of native cc_* rules. */ +@SkylarkModule( + name = "cc_skylark_info", + category = SkylarkModuleCategory.PROVIDER, + doc = "Temporary provider to mark C++ Skylark rules") +// TODO(b/77669139): Delete this class. Use {@link CcCompilationInfo} instead. +public interface CcSkylarkInfoApi {} 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 new file mode 100644 index 0000000000..a8421654c7 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LibraryToLinkApi.java @@ -0,0 +1,29 @@ +// 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.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** + * A library the user can link to. This is different from a simple linker input in that it also has + * a library identifier. + */ +@SkylarkModule( + name = "LibraryToLink", + category = SkylarkModuleCategory.BUILTIN, + documented = false, + doc = "A library the user can link to.") +public interface LibraryToLinkApi {} 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 new file mode 100644 index 0000000000..13707d21e6 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/LinkerInputApi.java @@ -0,0 +1,29 @@ +// Copyright 2014 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.actions.Artifact; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; + +/** + * 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. + */ +public interface LinkerInputApi { + /** Returns the artifact that is the input of the linker. */ + @SkylarkCallable(name = "artifact", doc = "Artifact passed to the linker.") + Artifact getArtifact(); +} diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD index a8fc8a287c..defdfe7fe7 100644 --- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD @@ -13,8 +13,10 @@ java_library( name = "cpp", srcs = glob(["*.java"]), deps = [ + "//src/main/java/com/google/devtools/build/lib:build-base", "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib:syntax", + "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp", "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi", diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java index c8f7a06778..6e3ab8377a 100644 --- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java @@ -14,21 +14,30 @@ package com.google.devtools.build.skydoc.fakebuildapi.cpp; +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext; import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkParamsApi; import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcModuleApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcSkylarkInfoApi; import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainProviderApi; import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainVariablesApi; import com.google.devtools.build.lib.skylarkbuildapi.cpp.FeatureConfigurationApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.LibraryToLinkApi; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.SkylarkDict; import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi; -/** - * Fake implementation of {@link CcModuleApi}. - */ -public class FakeCcModule implements CcModuleApi<CcToolchainProviderApi, FeatureConfigurationApi, - CcToolchainVariablesApi> { +/** Fake implementation of {@link CcModuleApi}. */ +public class FakeCcModule + implements CcModuleApi< + CcToolchainProviderApi, + FeatureConfigurationApi, + CcToolchainVariablesApi, + LibraryToLinkApi, + CcLinkParamsApi, + CcSkylarkInfoApi> { @Override public ProviderApi getCcToolchainProvider() { @@ -88,4 +97,33 @@ public class FakeCcModule implements CcModuleApi<CcToolchainProviderApi, Feature public CcToolchainVariablesApi getVariables() { return null; } + + @Override + public LibraryToLinkApi createLibraryLinkerInput( + SkylarkRuleContext skylarkRuleContext, Artifact library, String skylarkArtifactCategory) + throws EvalException { + return null; + } + + @Override + public LibraryToLinkApi createSymlinkLibraryLinkerInput( + SkylarkRuleContext skylarkRuleContext, CcToolchainProviderApi ccToolchain, Artifact library) { + return null; + } + + @Override + public CcLinkParamsApi createCcLinkParams( + SkylarkRuleContext skylarkRuleContext, + Object skylarkLibrariesToLink, + Object skylarkDynamicLibrariesForRuntime, + Object skylarkUserLinkFlags) + throws EvalException { + return null; + } + + @Override + public CcSkylarkInfoApi createCcSkylarkInfo(Object skylarkRuleContextObject) + throws EvalException { + return null; + } } |