Add implementation to removed methods to address https://github.com/bazelbuild/bazel/issues/8226
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 119de1b..c9114de 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -748,6 +748,7 @@ ":python-rules", ":testing-support-rules", ":util", + "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/buildeventstream", "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java index 5201065..9d8b779 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
@@ -14,23 +14,54 @@ package com.google.devtools.build.lib.bazel.rules.cpp; +import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.analysis.actions.ActionConstructionContext; +import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; +import com.google.devtools.build.lib.analysis.skylark.BazelStarlarkContext; import com.google.devtools.build.lib.analysis.skylark.SkylarkActionFactory; import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext; +import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.cmdline.LabelSyntaxException; +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.events.Location; +import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; +import com.google.devtools.build.lib.rules.cpp.CcCommon; import com.google.devtools.build.lib.rules.cpp.CcCompilationContext; +import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper; +import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.CompilationInfo; import com.google.devtools.build.lib.rules.cpp.CcCompilationOutputs; +import com.google.devtools.build.lib.rules.cpp.CcLinkingHelper; +import com.google.devtools.build.lib.rules.cpp.CcLinkingHelper.LinkingInfo; import com.google.devtools.build.lib.rules.cpp.CcLinkingOutputs; import com.google.devtools.build.lib.rules.cpp.CcModule; import com.google.devtools.build.lib.rules.cpp.CcToolchainConfigInfo; +import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables; +import com.google.devtools.build.lib.rules.cpp.CppConfiguration; +import com.google.devtools.build.lib.rules.cpp.CppFileTypes; +import com.google.devtools.build.lib.rules.cpp.FdoContext; import com.google.devtools.build.lib.rules.cpp.FeatureConfigurationForStarlark; import com.google.devtools.build.lib.rules.cpp.LibraryToLink; import com.google.devtools.build.lib.rules.cpp.LibraryToLink.CcLinkingContext; import com.google.devtools.build.lib.skylarkbuildapi.cpp.BazelCcModuleApi; +import com.google.devtools.build.lib.skylarkinterface.StarlarkContext; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; +import com.google.devtools.build.lib.syntax.Runtime; import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.lib.syntax.SkylarkList.Tuple; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; +import com.google.devtools.build.lib.util.FileTypeSet; +import com.google.devtools.build.lib.util.Pair; +import com.google.devtools.build.lib.vfs.PathFragment; +import java.util.ArrayList; +import java.util.List; /** * A module that contains Skylark utilities for C++ support. @@ -40,70 +71,220 @@ */ public class BazelCcModule extends CcModule implements BazelCcModuleApi< - SkylarkActionFactory, - Artifact, - SkylarkRuleContext, - CcToolchainProvider, - FeatureConfigurationForStarlark, - CcCompilationContext, - CcCompilationOutputs, - CcLinkingOutputs, - CcLinkingContext, - LibraryToLink, - CcToolchainVariables, - CcToolchainConfigInfo> { + Artifact, + SkylarkRuleContext, + SkylarkActionFactory, + CcToolchainProvider, + FeatureConfigurationForStarlark, + CcCompilationContext, + CcCompilationOutputs, + CcLinkingContext, + LibraryToLink, + CcToolchainVariables, + CcToolchainConfigInfo> { + public static final FileTypeSet ALL_C_CLASS_SOURCE = + FileTypeSet.of( + CppFileTypes.CPP_SOURCE, + CppFileTypes.C_SOURCE, + CppFileTypes.OBJCPP_SOURCE, + CppFileTypes.OBJC_SOURCE); @Override public Tuple<Object> compile( - SkylarkActionFactory skylarkActionFactoryApi, + SkylarkActionFactory actions, FeatureConfigurationForStarlark skylarkFeatureConfiguration, CcToolchainProvider skylarkCcToolchainProvider, SkylarkList<Artifact> sources, SkylarkList<Artifact> publicHeaders, SkylarkList<Artifact> privateHeaders, - SkylarkList<String> includes, - SkylarkList<String> quoteIncludes, - SkylarkList<String> systemIncludes, - SkylarkList<String> userCompileFlags, + SkylarkList<String> skylarkIncludes, + SkylarkList<String> skylarkUserCompileFlags, SkylarkList<CcCompilationContext> ccCompilationContexts, String name, - boolean disallowPicOutputs, - boolean disallowNopicOutputs) + Location location) throws EvalException, InterruptedException { - return null; + CcToolchainProvider ccToolchainProvider = convertFromNoneable(skylarkCcToolchainProvider, null); + FeatureConfigurationForStarlark featureConfiguration = + convertFromNoneable(skylarkFeatureConfiguration, null); + Pair<List<Artifact>, List<Artifact>> separatedHeadersAndSources = + separateSourcesFromHeaders(sources); + FdoContext fdoContext = ccToolchainProvider.getFdoContext(); + // TODO(plf): Need to flatten the nested set to convert the Strings to PathFragment. This could + // be avoided if path fragments are ever added to Skylark or in the C++ code we take Strings + // instead of PathFragments. + List<String> includeDirs = convertSkylarkListOrNestedSetToList(skylarkIncludes, String.class); + + validateExtensions( + location, + "srcs", + sources, + ALL_C_CLASS_SOURCE, + FileTypeSet.of(CppFileTypes.CPP_SOURCE, CppFileTypes.C_SOURCE)); + validateExtensions( + location, + "public_hdrs", + publicHeaders, + FileTypeSet.of(CppFileTypes.CPP_HEADER), + FileTypeSet.of(CppFileTypes.CPP_HEADER)); + validateExtensions( + location, + "private_hdrs", + privateHeaders, + FileTypeSet.of(CppFileTypes.CPP_HEADER), + FileTypeSet.of(CppFileTypes.CPP_HEADER)); + + Label label = getCallerLabel(location, actions, name); + CcCompilationHelper helper = + new CcCompilationHelper( + actions.asActionRegistry(location, actions), + actions.getActionConstructionContext(), + label, + /* grepIncludes= */ null, + BazelCppSemantics.INSTANCE, + featureConfiguration.getFeatureConfiguration(), + ccToolchainProvider, + fdoContext) + .addPublicHeaders(publicHeaders) + .addIncludeDirs( + includeDirs.stream() + .map(PathFragment::create) + .collect(ImmutableList.toImmutableList())) + .addPrivateHeaders(separatedHeadersAndSources.first) + .addSources(separatedHeadersAndSources.second) + .addCcCompilationContexts(ccCompilationContexts) + .setCopts(skylarkUserCompileFlags); + + try { + CompilationInfo compilationInfo = helper.compile(); + return Tuple.of( + compilationInfo.getCcCompilationContext(), compilationInfo.getCcCompilationOutputs()); + } catch (RuleErrorException e) { + throw new EvalException(location, e); + } } @Override - public CcLinkingContext createLinkingContextFromCompilationOutputs( - SkylarkActionFactory skylarkActionFactoryApi, + public Tuple<Object> createLinkingContextFromCompilationOutputs( + SkylarkActionFactory actions, FeatureConfigurationForStarlark skylarkFeatureConfiguration, CcToolchainProvider skylarkCcToolchainProvider, CcCompilationOutputs compilationOutputs, - SkylarkList userLinkFlags, + SkylarkList<String> skylarkUserLinkFlags, + SkylarkList<CcLinkingContext> linkingContexts, String name, - String language, - boolean alwayslink, - SkylarkList nonCodeInputs, - boolean disallowStaticLibraries, - boolean disallowDynamicLibraries) + Location location, + StarlarkContext starlarkContext) throws InterruptedException, EvalException { - return null; + CcToolchainProvider ccToolchainProvider = convertFromNoneable(skylarkCcToolchainProvider, null); + FeatureConfigurationForStarlark featureConfiguration = + convertFromNoneable(skylarkFeatureConfiguration, null); + Label label = getCallerLabel(location, actions, name); + FdoContext fdoContext = ccToolchainProvider.getFdoContext(); + CcLinkingHelper helper = + new CcLinkingHelper( + actions.getActionConstructionContext().getRuleErrorConsumer(), + label, + actions.asActionRegistry(location, actions), + actions.getActionConstructionContext(), + BazelCppSemantics.INSTANCE, + featureConfiguration.getFeatureConfiguration(), + ccToolchainProvider, + fdoContext, + actions.getActionConstructionContext().getConfiguration(), + actions + .getActionConstructionContext() + .getConfiguration() + .getFragment(CppConfiguration.class), + ((BazelStarlarkContext) starlarkContext).getSymbolGenerator()) + .addLinkopts(skylarkUserLinkFlags) + .addCcLinkingContexts(linkingContexts); + try { + CcLinkingOutputs ccLinkingOutputs = CcLinkingOutputs.EMPTY; + ImmutableList<LibraryToLink> libraryToLink = ImmutableList.of(); + if (!compilationOutputs.isEmpty()) { + ccLinkingOutputs = helper.link(compilationOutputs); + if (!ccLinkingOutputs.isEmpty()) { + libraryToLink = + ImmutableList.of(ccLinkingOutputs.getLibraryToLink()); + } + } + CcLinkingContext linkingContext = + helper.buildCcLinkingContextFromLibrariesToLink( + libraryToLink, CcCompilationContext.EMPTY); + return Tuple.of( + CcLinkingContext.merge( + ImmutableList.<CcLinkingContext>builder() + .add(linkingContext) + .addAll(linkingContexts) + .build()), + ccLinkingOutputs); + } catch (RuleErrorException e) { + throw new EvalException(location, e); + } } - @Override - public CcLinkingOutputs link( - SkylarkActionFactory skylarkActionFactoryApi, - FeatureConfigurationForStarlark skylarkFeatureConfiguration, - CcToolchainProvider skylarkCcToolchainProvider, - Object compilationOutputs, - SkylarkList userLinkFlags, - SkylarkList linkingContexts, - String name, - String language, - String outputType, - boolean linkDepsStatically, - SkylarkList nonCodeInputs) - throws InterruptedException, EvalException { - return null; + @SuppressWarnings("unchecked") + protected static <T> List<T> convertSkylarkListOrNestedSetToList(Object o, Class<T> type) { + return o instanceof SkylarkNestedSet + ? ((SkylarkNestedSet) o).getSet(type).toList() + : ((SkylarkList) o).getImmutableList(); + } + + private static Pair<List<Artifact>, List<Artifact>> separateSourcesFromHeaders( + Iterable<Artifact> artifacts) { + List<Artifact> headers = new ArrayList<>(); + List<Artifact> sources = new ArrayList<>(); + for (Artifact artifact : artifacts) { + if (CppFileTypes.CPP_HEADER.matches(artifact.getExecPath())) { + headers.add(artifact); + } else { + sources.add(artifact); + } + } + return Pair.of(headers, sources); + } + + + @SuppressWarnings("unchecked") + protected static <T> NestedSet<T> convertSkylarkListOrNestedSetToNestedSet( + Object o, Class<T> type) { + return o instanceof SkylarkNestedSet + ? ((SkylarkNestedSet) o).getSet(type) + : NestedSetBuilder.wrap(Order.COMPILE_ORDER, (SkylarkList<T>) o); + } + + private void validateExtensions( + Location location, + String paramName, + List<Artifact> files, + FileTypeSet validFileTypeSet, + FileTypeSet fileTypeForErrorMessage) + throws EvalException { + for (Artifact file : files) { + if (!validFileTypeSet.matches(file.getFilename())) { + throw new EvalException( + location, + String.format( + "'%s' has wrong extension. The list of possible extensions for '" + + paramName + + "' are: %s", + file.getExecPathString(), + Joiner.on(",").join(fileTypeForErrorMessage.getExtensions()))); + } + } + } + + protected Label getCallerLabel(Location location, SkylarkActionFactory actions, String name) + throws EvalException { + Label label; + try { + label = + Label.create( + actions.getActionConstructionContext().getActionOwner().getLabel().getPackageName(), + name); + } catch (LabelSyntaxException e) { + throw new EvalException(location, e); + } + return label; } }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java index b01da22..bda6b3e 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
@@ -14,6 +14,7 @@ package com.google.devtools.build.lib.skylarkbuildapi.cpp; +import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.skylarkbuildapi.FileApi; import com.google.devtools.build.lib.skylarkbuildapi.SkylarkActionFactoryApi; import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi; @@ -21,6 +22,8 @@ import com.google.devtools.build.lib.skylarkinterface.ParamType; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.StarlarkContext; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.Runtime.NoneType; import com.google.devtools.build.lib.syntax.SkylarkList; @@ -31,365 +34,187 @@ @SkylarkModule( name = "cc_common", doc = "Utilities for C++ compilation, linking, and command line generation.") +// TODO(b/111365281): Add experimental field once it's available. public interface BazelCcModuleApi< - SkylarkActionFactoryT extends SkylarkActionFactoryApi, - FileT extends FileApi, - SkylarkRuleContextT extends SkylarkRuleContextApi, - CcToolchainProviderT extends CcToolchainProviderApi<FeatureConfigurationT>, - FeatureConfigurationT extends FeatureConfigurationApi, - CompilationContextT extends CcCompilationContextApi, - CompilationOutputsT extends CcCompilationOutputsApi<FileT>, - LinkingOutputsT extends CcLinkingOutputsApi<FileT>, - LinkingContextT extends CcLinkingContextApi, - LibraryToLinkT extends LibraryToLinkApi, - CcToolchainVariablesT extends CcToolchainVariablesApi, - CcToolchainConfigInfoT extends CcToolchainConfigInfoApi> + FileT extends FileApi, + SkylarkRuleContextT extends SkylarkRuleContextApi, + SkylarkActionFactoryT extends SkylarkActionFactoryApi, + CcToolchainProviderT extends CcToolchainProviderApi, + FeatureConfigurationT extends FeatureConfigurationApi, + CcCompilationContextT extends CcCompilationContextApi, + CcCompilationOutputsT extends CcCompilationOutputsApi, + LinkingContextT extends CcLinkingContextApi, + LibraryToLinkT extends LibraryToLinkApi, + CcToolchainVariablesT extends CcToolchainVariablesApi, + CcToolchainConfigInfoT extends CcToolchainConfigInfoApi> extends CcModuleApi< - FileT, - CcToolchainProviderT, - FeatureConfigurationT, - CompilationContextT, - LinkingContextT, - LibraryToLinkT, - CcToolchainVariablesT, - SkylarkRuleContextT, - CcToolchainConfigInfoT> { + FileT, + CcToolchainProviderT, + FeatureConfigurationT, + CcCompilationContextT, + LinkingContextT, + LibraryToLinkT, + CcToolchainVariablesT, + SkylarkRuleContextT, + CcToolchainConfigInfoT> { @SkylarkCallable( name = "compile", documented = false, + useLocation = true, parameters = { - @Param( - name = "actions", - type = SkylarkActionFactoryApi.class, - positional = false, - named = true, - doc = "<code>actions</code> object."), - @Param( - name = "feature_configuration", - doc = "<code>feature_configuration</code> to be queried.", - positional = false, - named = true, - type = FeatureConfigurationApi.class), - @Param( - name = "cc_toolchain", - doc = "<code>CcToolchainInfo</code> provider to be used.", - positional = false, - named = true, - type = CcToolchainProviderApi.class), - @Param( - name = "srcs", - doc = "The list of source files to be compiled.", - positional = false, - named = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "public_hdrs", - doc = - "List of headers needed for compilation of srcs and may be included by dependent " - + "rules transitively.", - positional = false, - named = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "private_hdrs", - doc = - "List of headers needed for compilation of srcs and NOT to be included by" - + " dependent rules.", - positional = false, - named = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "includes", - doc = - "Search paths for header files referenced both by angle bracket and quotes. " - + "Usually passed with -I. Propagated to dependents transitively.", - positional = false, - named = true, - noneable = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "quote_includes", - doc = - "Search paths for header files referenced by quotes, " - + "e.g. #include \"foo/bar/header.h\". They can be either relative to the exec " - + "root or absolute. Usually passed with -iquote. Propagated to dependents " - + "transitively.", - positional = false, - named = true, - noneable = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "system_includes", - doc = - "Search paths for header files referenced by angle brackets, e.g. #include" - + " <foo/bar/header.h>. They can be either relative to the exec root or" - + " absolute. Usually passed with -isystem. Propagated to dependents " - + "transitively.", - positional = false, - named = true, - noneable = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "user_compile_flags", - doc = "Additional list of compilation options.", - positional = false, - named = true, - noneable = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "compilation_contexts", - doc = "Headers from dependencies used for compilation.", - positional = false, - named = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "name", - doc = - "This is used for naming the output artifacts of actions created by this " - + "method.", - positional = false, - named = true, - type = String.class), - @Param( - name = "disallow_pic_outputs", - doc = "Whether PIC outputs should be created.", - positional = false, - named = true, - defaultValue = "False", - type = Boolean.class), - @Param( - name = "disallow_nopic_outputs", - doc = "Whether NOPIC outputs should be created.", - positional = false, - named = true, - defaultValue = "False", - type = Boolean.class) + @Param( + name = "actions", + type = SkylarkActionFactoryApi.class, + positional = false, + named = true, + doc = "<code>actions</code> object."), + @Param( + name = "feature_configuration", + doc = "Feature configuration to be queried.", + positional = false, + named = true, + type = FeatureConfigurationApi.class), + @Param( + name = "cc_toolchain", + doc = "C++ toolchain provider to be used.", + positional = false, + named = true, + type = CcToolchainProviderApi.class), + @Param( + name = "srcs", + doc = "The list of source files to be compiled, see cc_library.srcs", + positional = false, + named = true, + defaultValue = "[]", + type = SkylarkList.class), + @Param( + name = "public_hdrs", + doc = "The list of public headers to be provided to dependents, see cc_library.hdrs", + positional = false, + named = true, + defaultValue = "[]", + type = SkylarkList.class), + @Param( + name = "private_hdrs", + doc = + "List of headers needed for compilation of srcs and NOT to be included by" + + " dependent rules.", + positional = false, + named = true, + defaultValue = "[]", + type = SkylarkList.class), + @Param( + name = "includes", + doc = + "Search paths for header files referenced both by angle bracket and quotes. " + + "Usually passed with -I. Propagated to dependents transitively.", + positional = false, + named = true, + noneable = true, + defaultValue = "[]", + type = SkylarkList.class), + @Param( + name = "user_compile_flags", + doc = "Additional list of compiler options.", + positional = false, + named = true, + defaultValue = "[]", + type = SkylarkList.class), + @Param( + name = "compilation_contexts", + doc = "compilation_context instances affecting compilation, e.g. from dependencies", + positional = false, + named = true, + defaultValue = "[]", + type = SkylarkList.class), + @Param( + name = "name", + doc = + "This is used for naming the output artifacts of actions created by this " + + "method.", + positional = false, + named = true, + type = String.class), }) Tuple<Object> compile( - SkylarkActionFactoryT skylarkActionFactoryApi, + SkylarkActionFactoryT skylarkActionFactory, FeatureConfigurationT skylarkFeatureConfiguration, CcToolchainProviderT skylarkCcToolchainProvider, SkylarkList<FileT> sources, SkylarkList<FileT> publicHeaders, SkylarkList<FileT> privateHeaders, - SkylarkList<String> includes, - SkylarkList<String> quoteIncludes, - SkylarkList<String> systemIncludes, - SkylarkList<String> userCompileFlags, - SkylarkList<CompilationContextT> ccCompilationContexts, + SkylarkList<String> skylarkIncludes, + SkylarkList<String> skylarkUserCompileFlags, + SkylarkList<CcCompilationContextT> ccCompilationContexts, String name, - boolean disallowPicOutputs, - boolean disallowNopicOutputs) + Location location) throws EvalException, InterruptedException; @SkylarkCallable( - name = "link", - documented = false, - parameters = { - @Param( - name = "actions", - type = SkylarkActionFactoryApi.class, - positional = false, - named = true, - doc = "<code>actions</code> object."), - @Param( - name = "feature_configuration", - doc = "<code>feature_configuration</code> to be queried.", - positional = false, - named = true, - type = FeatureConfigurationApi.class), - @Param( - name = "cc_toolchain", - doc = "<code>CcToolchainInfo</code> provider to be used.", - positional = false, - named = true, - type = CcToolchainProviderApi.class), - @Param( - name = "compilation_outputs", - doc = "Compilation outputs containing object files to link.", - positional = false, - named = true, - defaultValue = "None", - noneable = true, - allowedTypes = { - @ParamType(type = NoneType.class), - @ParamType(type = SkylarkList.class), - @ParamType(type = SkylarkNestedSet.class) - }), - @Param( - name = "user_link_flags", - doc = "Additional list of linker options.", - positional = false, - named = true, - defaultValue = "[]", - noneable = true, - type = SkylarkList.class), - @Param( - name = "linking_contexts", - doc = - "Libraries from dependencies. These libraries will be linked into the output " - + "artifact of the link() call, be it a binary or a library.", - positional = false, - named = true, - noneable = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "name", - doc = - "This is used for naming the output artifacts of actions created by this " - + "method.", - positional = false, - named = true, - type = String.class), - @Param( - name = "language", - doc = "Can be one of C++, objc or objc++.", - positional = false, - named = true, - noneable = true, - defaultValue = "'C++'", - type = String.class), - @Param( - name = "output_type", - doc = "Can be either 'executable' or 'shared_library'.", - positional = false, - named = true, - noneable = true, - defaultValue = "'executable'", - type = String.class), - @Param( - name = "link_deps_statically", - doc = " True to link dependencies statically, False dynamically.", - positional = false, - named = true, - noneable = true, - defaultValue = "True", - type = Boolean.class), - @Param( - name = "non_code_inputs", - doc = "For additional inputs to the linking action, e.g.: linking scripts.", - positional = false, - named = true, - defaultValue = "[]", - type = SkylarkList.class), - }) - LinkingOutputsT link( - SkylarkActionFactoryT skylarkActionFactoryApi, - FeatureConfigurationT skylarkFeatureConfiguration, - CcToolchainProviderT skylarkCcToolchainProvider, - Object compilationOutputs, - SkylarkList<String> userLinkFlags, - SkylarkList<LinkingContextT> linkingContexts, - String name, - String language, - String outputType, - boolean linkDepsStatically, - SkylarkList<FileT> nonCodeInputs) - throws InterruptedException, EvalException; - - @SkylarkCallable( name = "create_linking_context_from_compilation_outputs", documented = false, + useLocation = true, + useContext = true, parameters = { - @Param( - name = "actions", - type = SkylarkActionFactoryApi.class, - positional = false, - named = true, - doc = "<code>actions</code> object."), - @Param( - name = "feature_configuration", - doc = "<code>feature_configuration</code> to be queried.", - positional = false, - named = true, - type = FeatureConfigurationApi.class), - @Param( - name = "cc_toolchain", - doc = "<code>CcToolchainInfo</code> provider to be used.", - positional = false, - named = true, - type = CcToolchainProviderApi.class), - @Param( - name = "compilation_outputs", - doc = "Compilation outputs containing object files to link.", - positional = false, - named = true, - type = CcCompilationOutputsApi.class), - @Param( - name = "user_link_flags", - doc = "Additional list of linking options.", - positional = false, - named = true, - defaultValue = "[]", - noneable = true, - type = SkylarkList.class), - @Param( - name = "name", - doc = - "This is used for naming the output artifacts of actions created by this " - + "method.", - positional = false, - named = true, - type = String.class), - @Param( - name = "language", - doc = "Can be one of C++, objc or objc++.", - positional = false, - named = true, - noneable = true, - defaultValue = "'C++'", - type = String.class), - @Param( - name = "alwayslink", - doc = "Whether this library should always be linked.", - positional = false, - named = true, - noneable = true, - defaultValue = "False", - type = Boolean.class), - @Param( - name = "non_code_inputs", - doc = "For additional inputs to the linking action, e.g.: linking scripts.", - positional = false, - named = true, - defaultValue = "[]", - type = SkylarkList.class), - @Param( - name = "disallow_static_libraries", - doc = "Whether static libraries should be created.", - positional = false, - named = true, - defaultValue = "False", - type = Boolean.class), - @Param( - name = "disallow_dynamic_libraries", - doc = "Whether dynamic libraries should be created.", - positional = false, - named = true, - defaultValue = "False", - type = Boolean.class) + @Param( + name = "actions", + type = SkylarkActionFactoryApi.class, + positional = false, + named = true, + doc = "<code>actions</code> object."), + @Param( + name = "feature_configuration", + doc = "Feature configuration to be queried.", + positional = false, + named = true, + type = FeatureConfigurationApi.class), + @Param( + name = "cc_toolchain", + doc = "C++ toolchain provider to be used.", + positional = false, + named = true, + type = CcToolchainProviderApi.class), + @Param( + name = "compilation_outputs", + doc = "Compilation outputs containing object files to link.", + positional = false, + named = true, + type = CcCompilationOutputsApi.class), + @Param( + name = "user_link_flags", + doc = "Additional list of linking options.", + positional = false, + named = true, + defaultValue = "[]", + noneable = true, + type = SkylarkList.class), + @Param( + name = "linking_contexts", + doc = "linking_context instances affecting linking, e.g. from dependencies", + positional = false, + named = true, + noneable = true, + defaultValue = "[]", + type = SkylarkList.class), + @Param( + name = "name", + doc = + "This is used for naming the output artifacts of actions created by this " + + "method.", + positional = false, + named = true, + type = String.class), }) - LinkingContextT createLinkingContextFromCompilationOutputs( - SkylarkActionFactoryT skylarkActionFactoryApi, + Tuple<Object> createLinkingContextFromCompilationOutputs( + SkylarkActionFactoryT skylarkActionFactory, FeatureConfigurationT skylarkFeatureConfiguration, CcToolchainProviderT skylarkCcToolchainProvider, - CompilationOutputsT compilationOutputs, + CcCompilationOutputsT ccCompilationOutputs, SkylarkList<String> userLinkFlags, + SkylarkList<LinkingContextT> skylarkCcLinkingContexts, String name, - String language, - boolean alwayslink, - SkylarkList<FileT> nonCodeInputs, - boolean disallowStaticLibraries, - boolean disallowDynamicLibraries) + Location location, + StarlarkContext starlarkContext) throws InterruptedException, EvalException; }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcBootstrap.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcBootstrap.java index 88c36c9..96c18ca 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcBootstrap.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcBootstrap.java
@@ -25,34 +25,32 @@ */ public class CcBootstrap implements Bootstrap { private final BazelCcModuleApi< - ? extends SkylarkActionFactoryApi, - ? extends FileApi, - ? extends SkylarkRuleContextApi, - ? extends CcToolchainProviderApi<? extends FeatureConfigurationApi>, - ? extends FeatureConfigurationApi, - ? extends CcCompilationContextApi, - ? extends CcCompilationOutputsApi<? extends FileApi>, - ? extends CcLinkingOutputsApi<? extends FileApi>, - ? extends CcLinkingContextApi, - ? extends LibraryToLinkApi, - ? extends CcToolchainVariablesApi, - ? extends CcToolchainConfigInfoApi> + ? extends FileApi, + ? extends SkylarkRuleContextApi, + ? extends SkylarkActionFactoryApi, + ? extends CcToolchainProviderApi<? extends FeatureConfigurationApi>, + ? extends FeatureConfigurationApi, + ? extends CcCompilationContextApi, + ? extends CcCompilationOutputsApi, + ? extends CcLinkingContextApi, + ? extends LibraryToLinkApi, + ? extends CcToolchainVariablesApi, + ? extends CcToolchainConfigInfoApi> ccModule; public CcBootstrap( BazelCcModuleApi< - ? extends SkylarkActionFactoryApi, - ? extends FileApi, - ? extends SkylarkRuleContextApi, - ? extends CcToolchainProviderApi<? extends FeatureConfigurationApi>, - ? extends FeatureConfigurationApi, - ? extends CcCompilationContextApi, - ? extends CcCompilationOutputsApi<? extends FileApi>, - ? extends CcLinkingOutputsApi<? extends FileApi>, - ? extends CcLinkingContextApi, - ? extends LibraryToLinkApi, - ? extends CcToolchainVariablesApi, - ? extends CcToolchainConfigInfoApi> + ? extends FileApi, + ? extends SkylarkRuleContextApi, + ? extends SkylarkActionFactoryApi, + ? extends CcToolchainProviderApi<? extends FeatureConfigurationApi>, + ? extends FeatureConfigurationApi, + ? extends CcCompilationContextApi, + ? extends CcCompilationOutputsApi, + ? extends CcLinkingContextApi, + ? extends LibraryToLinkApi, + ? extends CcToolchainVariablesApi, + ? extends CcToolchainConfigInfoApi> ccModule) { this.ccModule = ccModule; }
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 4e67320..b4110ab 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
@@ -42,14 +42,13 @@ /** Fake implementation of {@link CcModuleApi}. */ public class FakeCcModule implements BazelCcModuleApi< - SkylarkActionFactoryApi, FileApi, SkylarkRuleContextApi, + SkylarkActionFactoryApi, CcToolchainProviderApi<FeatureConfigurationApi>, FeatureConfigurationApi, CcCompilationContextApi, CcCompilationOutputsApi<FileApi>, - CcLinkingOutputsApi<FileApi>, CcLinkingContextApi, LibraryToLinkApi, CcToolchainVariablesApi, @@ -178,47 +177,25 @@ SkylarkList<FileApi> publicHeaders, SkylarkList<FileApi> privateHeaders, SkylarkList<String> includes, - SkylarkList<String> quoteIncludes, - SkylarkList<String> systemIncludes, SkylarkList<String> userCompileFlags, SkylarkList<CcCompilationContextApi> ccCompilationContexts, String name, - boolean disallowPicOutputs, - boolean disallowNopicOutputs) + Location location) throws EvalException, InterruptedException { return null; } @Override - public CcLinkingContextApi createLinkingContextFromCompilationOutputs( + public Tuple<Object> createLinkingContextFromCompilationOutputs( SkylarkActionFactoryApi skylarkActionFactoryApi, FeatureConfigurationApi skylarkFeatureConfiguration, CcToolchainProviderApi<FeatureConfigurationApi> skylarkCcToolchainProvider, CcCompilationOutputsApi<FileApi> compilationOutputs, SkylarkList<String> userLinkFlags, + SkylarkList<CcLinkingContextApi> ccCompilationContexts, String name, - String language, - boolean alwayslink, - SkylarkList<FileApi> nonCodeInputs, - boolean disallowStaticLibraries, - boolean disallowDynamicLibraries) - throws InterruptedException, EvalException { - return null; - } - - @Override - public CcLinkingOutputsApi<FileApi> link( - SkylarkActionFactoryApi skylarkActionFactoryApi, - FeatureConfigurationApi skylarkFeatureConfiguration, - CcToolchainProviderApi<FeatureConfigurationApi> skylarkCcToolchainProvider, - Object compilationOutputs, - SkylarkList<String> userLinkFlags, - SkylarkList<CcLinkingContextApi> linkingContexts, - String name, - String language, - String outputType, - boolean linkDepsStatically, - SkylarkList<FileApi> nonCodeInputs) + Location location, + StarlarkContext starlarkContext) throws InterruptedException, EvalException { return null; }