From 0f9be45d86a5dee60f937ad6a764d8b759f68e1d Mon Sep 17 00:00:00 2001 From: cparsons Date: Tue, 11 Jun 2019 15:41:24 -0700 Subject: [PATCH] Introduce cc-related Google-only interface methods to the Starlark build API The new interface methods have no Bazel implementation, and are completely unrecognized when --experimental_google_legacy_api is false (the current default). They are introduced as stub methods in Bazel to make different build-API-aware binaries interface-consistent. RELNOTES: None. PiperOrigin-RevId: 252714070 --- .../devtools/build/docgen/SymbolFamilies.java | 16 +- .../java/com/google/devtools/build/lib/BUILD | 1 + .../build/lib/bazel/rules/CcRules.java | 13 +- .../google/devtools/build/lib/rules/cpp/BUILD | 1 + .../lib/rules/cpp/CcToolchainConfigInfo.java | 17 +- .../build/lib/rules/cpp/CppHelper.java | 20 +- .../lib/rules/cpp/GoogleLegacyStubs.java | 271 ++++++++++++++++++ .../rules/python/PyCcLinkParamsProvider.java | 27 +- .../devtools/build/lib/skylarkbuildapi/BUILD | 1 + .../build/lib/skylarkbuildapi/cpp/BUILD | 1 + .../lib/skylarkbuildapi/cpp/CcBootstrap.java | 57 +++- .../cpp/CcToolchainConfigInfoApi.java | 5 + .../cpp/GoCcLinkParamsInfoApi.java | 58 ++++ .../cpp/GoWrapCcHelperApi.java | 222 ++++++++++++++ .../skylarkbuildapi/cpp/GoWrapCcInfoApi.java | 44 +++ .../cpp/PyCcLinkParamsProviderApi.java | 36 +++ .../cpp/PyWrapCcHelperApi.java | 110 +++++++ .../skylarkbuildapi/cpp/PyWrapCcInfoApi.java | 44 +++ .../skylarkbuildapi/cpp/WrapCcHelperApi.java | 212 ++++++++++++++ .../cpp/WrapCcIncludeProviderApi.java | 27 ++ .../build/lib/skylarkbuildapi/go/BUILD | 26 ++ .../go/GoConfigurationApi.java | 25 ++ .../skylarkbuildapi/go/GoContextInfoApi.java | 33 +++ .../skylarkbuildapi/go/GoPackageInfoApi.java | 33 +++ .../devtools/build/skydoc/SkydocMain.java | 18 +- .../build/skydoc/fakebuildapi/cpp/BUILD | 2 + .../skydoc/fakebuildapi/cpp/FakeCcInfo.java | 67 +++++ .../cpp/FakeCcToolchainConfigInfo.java | 49 ++++ .../fakebuildapi/cpp/FakeGoWrapCcHelper.java | 174 +++++++++++ .../cpp/FakePyCcLinkParamsProvider.java | 50 ++++ .../fakebuildapi/cpp/FakePyWrapCcHelper.java | 119 ++++++++ .../fakebuildapi/cpp/FakePyWrapCcInfo.java | 51 ++++ 32 files changed, 1787 insertions(+), 43 deletions(-) create mode 100644 src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoCcLinkParamsInfoApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcInfoApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyCcLinkParamsProviderApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcInfoApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcIncludeProviderApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/BUILD create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoConfigurationApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoContextInfoApi.java create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoPackageInfoApi.java create mode 100644 src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java create mode 100644 src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java create mode 100644 src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java create mode 100644 src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java create mode 100644 src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java create mode 100644 src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java diff --git a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java index f90f5660ccf0cd..f40b276f64b7d1 100644 --- a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java +++ b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java @@ -51,7 +51,13 @@ import com.google.devtools.build.skydoc.fakebuildapi.apple.FakeAppleCommon; import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigGlobalLibrary; import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigSkylarkCommon; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcInfo; import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcModule; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcToolchainConfigInfo; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeGoWrapCcHelper; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakePyCcLinkParamsProvider; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakePyWrapCcHelper; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakePyWrapCcInfo; import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaCcLinkParamsProvider; import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaCommon; import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaInfo.FakeJavaInfoProvider; @@ -187,7 +193,15 @@ private Map collectBzlGlobals() { ConfigBootstrap configBootstrap = new ConfigBootstrap(new FakeConfigSkylarkCommon(), new FakeConfigApi(), new FakeConfigGlobalLibrary()); - CcBootstrap ccBootstrap = new CcBootstrap(new FakeCcModule()); + CcBootstrap ccBootstrap = + new CcBootstrap( + new FakeCcModule(), + new FakeCcInfo.Provider(), + new FakeCcToolchainConfigInfo.Provider(), + new FakePyWrapCcHelper(), + new FakeGoWrapCcHelper(), + new FakePyWrapCcInfo.Provider(), + new FakePyCcLinkParamsProvider.Provider()); JavaBootstrap javaBootstrap = new JavaBootstrap( new FakeJavaCommon(), diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 8eba51a986a025..45c39c655a423f 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -1158,6 +1158,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", + "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python", "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", "//src/main/java/com/google/devtools/common/options", 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 5c6bba29108cb5..b047f1d7c793ce 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 @@ -38,6 +38,7 @@ import com.google.devtools.build.lib.rules.cpp.CpuTransformer; import com.google.devtools.build.lib.rules.cpp.FdoPrefetchHintsRule; import com.google.devtools.build.lib.rules.cpp.FdoProfileRule; +import com.google.devtools.build.lib.rules.cpp.GoogleLegacyStubs; import com.google.devtools.build.lib.rules.platform.PlatformRules; import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcBootstrap; import com.google.devtools.build.lib.util.ResourceFileLoader; @@ -77,10 +78,16 @@ public void init(ConfiguredRuleClassProvider.Builder builder) { builder.addRuleDefinition(new CcIncludeScanningRule()); builder.addRuleDefinition(new FdoProfileRule()); builder.addRuleDefinition(new FdoPrefetchHintsRule()); + builder.addSkylarkBootstrap( + new CcBootstrap( + new BazelCcModule(), + CcInfo.PROVIDER, + CcToolchainConfigInfo.PROVIDER, + new GoogleLegacyStubs.PyWrapCcHelper(), + new GoogleLegacyStubs.GoWrapCcHelper(), + new GoogleLegacyStubs.PyWrapCcInfoProvider(), + new GoogleLegacyStubs.PyCcLinkParamsProvider())); - builder.addSkylarkBootstrap(new CcBootstrap(new BazelCcModule())); - builder.addSkylarkAccessibleTopLevels("CcInfo", CcInfo.PROVIDER); - builder.addSkylarkAccessibleTopLevels("CcToolchainConfigInfo", CcToolchainConfigInfo.PROVIDER); try { builder.addWorkspaceFileSuffix( ResourceFileLoader.loadResource(JavaRules.class, "coverage.WORKSPACE")); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD index ae802339c7bcca..604e16fdc3b325 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD @@ -46,6 +46,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//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/lib/skylarkbuildapi/go", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe", "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java index bc24d1b67ee16e..4e8f3c0c1ce390 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java @@ -18,8 +18,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.BuiltinProvider; import com.google.devtools.build.lib.packages.NativeInfo; -import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.ActionConfig; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.ArtifactNamePattern; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.EnvEntry; @@ -41,9 +41,9 @@ /** Information describing C++ toolchain derived from CROSSTOOL file. */ @Immutable public class CcToolchainConfigInfo extends NativeInfo implements CcToolchainConfigInfoApi { - public static final NativeProvider PROVIDER = - new NativeProvider( - CcToolchainConfigInfo.class, "CcToolchainConfigInfo") {}; + + /** Singleton provider instance for {@link CcToolchainConfigInfo}. */ + public static final Provider PROVIDER = new Provider(); private final ImmutableList actionConfigs; private final ImmutableList features; @@ -357,4 +357,13 @@ static CToolchain.ActionConfig actionConfigToProto(ActionConfig actionConfig) { .addAllImplies(actionConfig.getImplies()) .build(); } + + /** Provider class for {@link CcToolchainConfigInfo} objects. */ + public static class Provider extends BuiltinProvider + implements CcToolchainConfigInfoApi.Provider { + + private Provider() { + super("CcToolchainConfigInfo", CcToolchainConfigInfo.class); + } + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java index c076a5b4fd9ffc..5d44369a24d5fd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java @@ -242,6 +242,19 @@ public static CcToolchainProvider getToolchainUsingDefaultCcToolchainAttribute( */ public static NestedSet getDefaultCcToolchainDynamicRuntimeInputs( RuleContext ruleContext) throws RuleErrorException { + try { + return getDefaultCcToolchainDynamicRuntimeInputsFromStarlark(ruleContext); + } catch (EvalException e) { + throw ruleContext.throwWithRuleError(e.getMessage()); + } + } + + /** + * Convenience function for finding the dynamic runtime inputs for the current toolchain. Useful + * for Starlark-defined rules that link against the C++ runtime. + */ + public static NestedSet getDefaultCcToolchainDynamicRuntimeInputsFromStarlark( + RuleContext ruleContext) throws EvalException { CcToolchainProvider defaultToolchain = getToolchainUsingDefaultCcToolchainAttribute(ruleContext); if (defaultToolchain == null) { @@ -249,11 +262,8 @@ public static NestedSet getDefaultCcToolchainDynamicRuntimeInputs( } FeatureConfiguration featureConfiguration = CcCommon.configureFeaturesOrReportRuleError(ruleContext, defaultToolchain); - try { - return defaultToolchain.getDynamicRuntimeLinkInputs(featureConfiguration); - } catch (EvalException e) { - throw ruleContext.throwWithRuleError(e.getMessage()); - } + + return defaultToolchain.getDynamicRuntimeLinkInputs(featureConfiguration); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java new file mode 100644 index 00000000000000..c64b3d603113a2 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java @@ -0,0 +1,271 @@ +// Copyright 2019 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.rules.cpp; + +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.RunfilesApi; +import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.TransitiveInfoCollectionApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcCompilationContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkingContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CompilationInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.FeatureConfigurationApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.GoCcLinkParamsInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.GoWrapCcHelperApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.GoWrapCcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyCcLinkParamsProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcHelperApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.WrapCcHelperApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.WrapCcIncludeProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.go.GoConfigurationApi; +import com.google.devtools.build.lib.skylarkbuildapi.go.GoContextInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.go.GoPackageInfoApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; +import com.google.devtools.build.lib.syntax.EvalException; +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; + +/** + * Fake stub implementations for C++-related Starlark API which are unsupported without use of + * --experimental_google_legacy_api. + */ +public final class GoogleLegacyStubs { + + private GoogleLegacyStubs() {} + + private static class WrapCcHelper + implements WrapCcHelperApi< + FeatureConfigurationApi, + SkylarkRuleContextApi, + CcToolchainProviderApi, + CompilationInfoApi, + FileApi, + CcCompilationContextApi, + WrapCcIncludeProviderApi> { + + @Override + public FeatureConfigurationApi skylarkGetFeatureConfiguration( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchain) + throws EvalException, InterruptedException { + return null; + } + + @Override + public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes( + SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public CompilationInfoApi skylarkCreateCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + FeatureConfigurationApi featureConfiguration, + CcToolchainProviderApi ccToolchain, + FileApi ccFile, + FileApi headerFile, + SkylarkList depCcCompilationContexts, + SkylarkList targetCopts) + throws EvalException, InterruptedException { + return null; + } + + @Override + public String skylarkGetMangledTargetName(SkylarkRuleContextApi skylarkRuleContext) + throws EvalException, InterruptedException { + return null; + } + + @Override + public WrapCcIncludeProviderApi getWrapCcIncludeProvider( + SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet swigIncludes) + throws EvalException, InterruptedException { + return null; + } + + @Override + public void registerSwigAction( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchain, + FeatureConfigurationApi featureConfiguration, + CcCompilationContextApi wrapperCcCompilationContext, + SkylarkNestedSet swigIncludes, + FileApi swigSource, + SkylarkList subParameters, + FileApi ccFile, + FileApi headerFile, + SkylarkList outputFiles, + Object outDir, + Object javaDir, + SkylarkNestedSet auxiliaryInputs, + String swigAttributeName, + Object zipTool) + throws EvalException, InterruptedException {} + } + + /** + * Fake no-op implementation of {@link PyWrapCcHelperApi}. This implementation should be + * unreachable without (discouraged) use of --experimental_google_legacy_api. + */ + public static class PyWrapCcHelper extends WrapCcHelper + implements PyWrapCcHelperApi< + FileApi, + SkylarkRuleContextApi, + CcInfoApi, + FeatureConfigurationApi, + CcToolchainProviderApi, + CompilationInfoApi, + CcCompilationContextApi, + WrapCcIncludeProviderApi> { + + @Override + public SkylarkList getPyExtensionLinkopts(SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public SkylarkNestedSet getTransitivePythonSources( + SkylarkRuleContextApi skylarkRuleContext, FileApi pyFile) { + return null; + } + + @Override + public RunfilesApi getPythonRunfiles( + SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet filesToBuild) { + return null; + } + + @Override + public PyWrapCcInfoApi getPyWrapCcInfo( + SkylarkRuleContextApi skylarkRuleContext, CcInfoApi ccInfo) { + return null; + } + } + + /** + * Fake no-op implementation of {@link GoWrapCcHelperApi}. This implementation should be + * unreachable without (discouraged) use of --experimental_google_legacy_api. + */ + public static class GoWrapCcHelper extends WrapCcHelper + implements GoWrapCcHelperApi< + FileApi, + SkylarkRuleContextApi, + CcInfoApi, + FeatureConfigurationApi, + CcToolchainProviderApi, + CcLinkingContextApi, + GoConfigurationApi, + GoContextInfoApi, + TransitiveInfoCollectionApi, + CompilationInfoApi, + CcCompilationContextApi, + WrapCcIncludeProviderApi> { + + @Override + public RunfilesApi skylarkGetGoRunfiles(SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public int getArchIntSize(GoConfigurationApi goConfig) { + return 0; + } + + @Override + public GoContextInfoApi skylarkCollectTransitiveGoContextGopkg( + SkylarkRuleContextApi skylarkRuleContext, + FileApi export, + FileApi pkg, + FileApi gopkg, + Object skylarkWrapContext, + CcInfoApi ccInfo) { + return null; + } + + @Override + public GoWrapCcInfoApi getGoWrapCcInfo( + SkylarkRuleContextApi skylarkRuleContext, CcInfoApi ccInfo) { + return null; + } + + @Override + public GoCcLinkParamsInfoApi getGoCcLinkParamsProvider( + SkylarkRuleContextApi ruleContext, CcLinkingContextApi ccLinkingContext) { + return null; + } + + @Override + public Tuple createGoCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchainProvider, + SkylarkList srcs, + SkylarkList deps) { + return null; + } + + @Override + public Tuple createGoCompileActionsGopkg( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchainProvider, + SkylarkList srcs, + SkylarkList deps) { + return null; + } + + @Override + public GoPackageInfoApi createTransitiveGopackageInfo( + SkylarkRuleContextApi skylarkRuleContext, + FileApi skylarkGopkg, + FileApi export, + FileApi swigOutGo) { + return null; + } + + @Override + public NestedSet getGopackageFiles( + SkylarkRuleContextApi skylarkRuleContext, FileApi skylarkGopkg) { + return null; + } + } + + /** + * Fake no-op implementation of {@link PyWrapCcInfoApi.Provider}. This implementation should be + * unreachable without (discouraged) use of --experimental_google_legacy_api. + */ + public static class PyWrapCcInfoProvider implements PyWrapCcInfoApi.Provider { + + @Override + public void repr(SkylarkPrinter printer) { + printer.append(""); + } + } + + /** + * Fake no-op implementation of {@link PyCcLinkParamsProviderApi.Provider}. This implementation + * should be unreachable without (discouraged) use of --experimental_google_legacy_api. + */ + public static class PyCcLinkParamsProvider implements PyCcLinkParamsProviderApi.Provider { + + @Override + public void repr(SkylarkPrinter printer) { + printer.append(""); + } + } +} diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java index 6b382b46cd8d70..7badc9b9297d5b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java @@ -14,26 +14,17 @@ package com.google.devtools.build.lib.rules.python; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.BuiltinProvider; import com.google.devtools.build.lib.packages.NativeInfo; -import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.rules.cpp.CcInfo; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; -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.skylarkbuildapi.cpp.PyCcLinkParamsProviderApi; /** A target that provides C++ libraries to be linked into Python targets. */ @Immutable @AutoCodec -@SkylarkModule( - name = "PyCcLinkParamsProvider", - documented = false, - category = SkylarkModuleCategory.PROVIDER, - doc = "Wrapper for every C++ linking provider") -public final class PyCcLinkParamsProvider extends NativeInfo { - public static final NativeProvider PROVIDER = - new NativeProvider( - PyCcLinkParamsProvider.class, "PyCcLinkParamsProvider") {}; +public final class PyCcLinkParamsProvider extends NativeInfo implements PyCcLinkParamsProviderApi { + public static final Provider PROVIDER = new Provider(); private final CcInfo ccInfo; @@ -42,8 +33,16 @@ public PyCcLinkParamsProvider(CcInfo ccInfo) { this.ccInfo = CcInfo.builder().setCcLinkingContext(ccInfo.getCcLinkingContext()).build(); } - @SkylarkCallable(name = "cc_info", doc = "", structField = true, documented = false) + @Override public CcInfo getCcInfo() { return ccInfo; } + + /** Provider class for {@link PyCcLinkParamsProvider} objects. */ + public static class Provider extends BuiltinProvider + implements PyCcLinkParamsProviderApi.Provider { + private Provider() { + super("PyCcLinkParamsProvider", PyCcLinkParamsProvider.class); + } + } } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD index ff2735566c43ef..982ca13aa523a7 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD @@ -18,6 +18,7 @@ filegroup( "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config:srcs", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp:srcs", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java:srcs", + "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go:srcs", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform:srcs", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python:srcs", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository:srcs", diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BUILD index 6f8133b14c86e6..723bf91fda3bc3 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BUILD @@ -25,6 +25,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:syntax", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi", + "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform", "//third_party:guava", ], 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 18ebafc47df0db..5d1cb65bd0ccad 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 @@ -19,46 +19,77 @@ import com.google.devtools.build.lib.skylarkbuildapi.FileApi; import com.google.devtools.build.lib.skylarkbuildapi.SkylarkActionFactoryApi; import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi; +import com.google.devtools.build.lib.syntax.FlagGuardedValue; +import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier; /** * {@link Bootstrap} for skylark objects related to cpp rules. */ public class CcBootstrap implements Bootstrap { - private final BazelCcModuleApi< + private final CcModuleApi< ? extends SkylarkActionFactoryApi, ? extends FileApi, - ? extends SkylarkRuleContextApi, ? extends CcToolchainProviderApi, ? extends FeatureConfigurationApi, ? extends CcCompilationContextApi, - ? extends CcCompilationOutputsApi, - ? extends CcLinkingOutputsApi, - ? extends LibraryToLinkApi, ? extends CcLinkingContextApi, + ? extends LibraryToLinkApi, ? extends CcToolchainVariablesApi, - ? extends CcToolchainConfigInfoApi> + ? extends SkylarkRuleContextApi, + ? extends CcToolchainConfigInfoApi, + ? extends CcCompilationOutputsApi> ccModule; + private final CcInfoApi.Provider ccInfoProvider; + private final CcToolchainConfigInfoApi.Provider ccToolchainConfigInfoProvider; + private final PyWrapCcHelperApi pyWrapCcHelper; + private final GoWrapCcHelperApi goWrapCcHelper; + private final PyWrapCcInfoApi.Provider pyWrapCcInfoProvider; + private final PyCcLinkParamsProviderApi.Provider pyCcLinkInfoParamsInfoProvider; + public CcBootstrap( - BazelCcModuleApi< + CcModuleApi< ? extends SkylarkActionFactoryApi, ? extends FileApi, - ? extends SkylarkRuleContextApi, ? extends CcToolchainProviderApi, ? extends FeatureConfigurationApi, ? extends CcCompilationContextApi, - ? extends CcCompilationOutputsApi, - ? extends CcLinkingOutputsApi, - ? extends LibraryToLinkApi, ? extends CcLinkingContextApi, + ? extends LibraryToLinkApi, ? extends CcToolchainVariablesApi, - ? extends CcToolchainConfigInfoApi> - ccModule) { + ? extends SkylarkRuleContextApi, + ? extends CcToolchainConfigInfoApi, + ? extends CcCompilationOutputsApi> + ccModule, + CcInfoApi.Provider ccInfoProvider, + CcToolchainConfigInfoApi.Provider ccToolchainConfigInfoProvider, + PyWrapCcHelperApi pyWrapCcHelper, + GoWrapCcHelperApi goWrapCcHelper, + PyWrapCcInfoApi.Provider pyWrapCcInfoProvider, + PyCcLinkParamsProviderApi.Provider pyCcLinkInfoParamsInfoProvider) { this.ccModule = ccModule; + this.ccInfoProvider = ccInfoProvider; + this.ccToolchainConfigInfoProvider = ccToolchainConfigInfoProvider; + this.pyWrapCcHelper = pyWrapCcHelper; + this.goWrapCcHelper = goWrapCcHelper; + this.pyWrapCcInfoProvider = pyWrapCcInfoProvider; + this.pyCcLinkInfoParamsInfoProvider = pyCcLinkInfoParamsInfoProvider; } @Override public void addBindingsToBuilder(ImmutableMap.Builder builder) { builder.put("cc_common", ccModule); + builder.put("CcInfo", ccInfoProvider); + builder.put("CcToolchainConfigInfo", ccToolchainConfigInfoProvider); + builder.put( + "py_wrap_cc_helper_do_not_use", + FlagGuardedValue.onlyWhenExperimentalFlagIsTrue( + FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API, pyWrapCcHelper)); + builder.put( + "go_wrap_cc_helper_do_not_use", + FlagGuardedValue.onlyWhenExperimentalFlagIsTrue( + FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API, goWrapCcHelper)); + builder.put("PyWrapCcInfo", pyWrapCcInfoProvider); + builder.put("PyCcLinkParamsProvider", pyCcLinkInfoParamsInfoProvider); } } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainConfigInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainConfigInfoApi.java index f6a794f5e1a080..d5cd2b3e19ca0d 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainConfigInfoApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainConfigInfoApi.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.skylarkbuildapi.cpp; +import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi; import com.google.devtools.build.lib.skylarkbuildapi.StructApi; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; @@ -35,4 +36,8 @@ public interface CcToolchainConfigInfoApi extends StructApi { doc = "Returns CToolchain text proto from the CcToolchainConfigInfo data.", structField = true) String getProto(); + + /** Provider class for {@link CcToolchainConfigInfoApi} objects. */ + @SkylarkModule(name = "Provider", documented = false, doc = "") + public interface Provider extends ProviderApi {} } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoCcLinkParamsInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoCcLinkParamsInfoApi.java new file mode 100644 index 00000000000000..b31634b4c741d2 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoCcLinkParamsInfoApi.java @@ -0,0 +1,58 @@ +// Copyright 2019 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.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.Param; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.syntax.EvalException; + +/** A target that provides C++ libraries to be linked into Go targets. */ +@SkylarkModule( + name = "GoCcLinkParamsInfo", + doc = "", + documented = false, + category = SkylarkModuleCategory.PROVIDER) +public interface GoCcLinkParamsInfoApi extends StructApi { + + /** Provider for GoContextInfo objects. */ + @SkylarkModule(name = "Provider", doc = "", documented = false) + public interface Provider< + FileT extends FileApi, CcLinkingContextT extends CcLinkingContextApi> + extends ProviderApi { + @SkylarkCallable( + name = "GoCcLinkParamsInfo", + doc = "The GoCcLinkParamsInfo constructor.", + parameters = { + @Param( + name = "linking_context", + doc = "The CC linking context.", + positional = false, + named = true, + type = CcLinkingContextApi.class), + }, + selfCall = true) + @SkylarkConstructor( + objectType = GoCcLinkParamsInfoApi.class, + receiverNameForDoc = "GoCcLinkParamsInfo") + public GoCcLinkParamsInfoApi createInfo(CcLinkingContextT ccLinkingContext) + throws EvalException; + } +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java new file mode 100644 index 00000000000000..67c8da4bf0aef2 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java @@ -0,0 +1,222 @@ +// Copyright 2019 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.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.RunfilesApi; +import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.TransitiveInfoCollectionApi; +import com.google.devtools.build.lib.skylarkbuildapi.go.GoConfigurationApi; +import com.google.devtools.build.lib.skylarkbuildapi.go.GoContextInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.go.GoPackageInfoApi; +import com.google.devtools.build.lib.skylarkinterface.Param; +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.SkylarkModuleCategory; +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; +import com.google.devtools.build.lib.syntax.SkylarkList.Tuple; + +/** + * Helper class for the C++ functionality needed from Skylark specifically to implement go_wrap_cc. + * TODO(b/113797843): Remove class once all the bits and pieces specific to Go can be implemented in + * Skylark. + */ +@SkylarkModule( + name = "go_wrap_cc_helper_do_not_use", + documented = false, + doc = "", + category = SkylarkModuleCategory.TOP_LEVEL_TYPE) +public interface GoWrapCcHelperApi< + FileT extends FileApi, + SkylarkRuleContextT extends SkylarkRuleContextApi, + CcInfoT extends CcInfoApi, + FeatureConfigurationT extends FeatureConfigurationApi, + CcToolchainProviderT extends CcToolchainProviderApi, + CcLinkingContextT extends CcLinkingContextApi, + GoConfigurationT extends GoConfigurationApi, + GoContextInfoT extends GoContextInfoApi, + TransitiveInfoCollectionT extends TransitiveInfoCollectionApi, + CompilationInfoT extends CompilationInfoApi, + CcCompilationContextT extends CcCompilationContextApi, + WrapCcIncludeProviderT extends WrapCcIncludeProviderApi> + extends WrapCcHelperApi< + FeatureConfigurationT, + SkylarkRuleContextT, + CcToolchainProviderT, + CompilationInfoT, + FileT, + CcCompilationContextT, + WrapCcIncludeProviderT> { + + @SkylarkCallable( + name = "get_go_runfiles", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + }) + // TODO(b/113797843): Not written in Skylark because of GoRunfilesProvider. + public RunfilesApi skylarkGetGoRunfiles(SkylarkRuleContextT skylarkRuleContext) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "get_arch_int_size", + doc = "", + documented = false, + parameters = { + @Param(name = "go", positional = false, named = true, type = GoConfigurationApi.class), + }) + // TODO(b/113797843): Not written in Skylark because of GoCompilationHelper. + public int getArchIntSize(GoConfigurationT goConfig); + + @SkylarkCallable( + name = "collect_transitive_go_context_gopkg", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param(name = "export", positional = false, named = true, type = FileApi.class), + @Param(name = "pkg", positional = false, named = true, type = FileApi.class), + @Param(name = "gopkg", positional = false, named = true, type = FileApi.class), + @Param( + name = "wrap_context", + positional = false, + named = true, + defaultValue = "None", + noneable = true, + allowedTypes = { + @ParamType(type = NoneType.class), + @ParamType(type = GoContextInfoApi.class) + }), + @Param(name = "cc_info", positional = false, named = true, type = CcInfoApi.class), + }) + public GoContextInfoT skylarkCollectTransitiveGoContextGopkg( + SkylarkRuleContextT skylarkRuleContext, + FileT export, + FileT pkg, + FileT gopkg, + Object skylarkWrapContext, + CcInfoT ccInfo); + + @SkylarkCallable( + name = "go_wrap_cc_info", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param(name = "cc_info", positional = false, named = true, type = CcInfoApi.class), + }) + // TODO(b/113797843): GoWrapCcInfo is not written in Skylark because several native rules use it. + public GoWrapCcInfoApi getGoWrapCcInfo(SkylarkRuleContextT skylarkRuleContext, CcInfoT ccInfo) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "go_cc_link_params_provider", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "linking_context", + positional = false, + named = true, + type = CcLinkingContextApi.class), + }) + public GoCcLinkParamsInfoApi getGoCcLinkParamsProvider( + SkylarkRuleContextT ruleContext, CcLinkingContextT ccLinkingContext) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "create_go_compile_actions", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "cc_toolchain", + positional = false, + named = true, + type = CcToolchainProviderApi.class), + @Param(name = "srcs", positional = false, named = true, type = SkylarkList.class), + @Param(name = "deps", positional = false, named = true, type = SkylarkList.class), + }) + public Tuple createGoCompileActions( + SkylarkRuleContextT skylarkRuleContext, + CcToolchainProviderT ccToolchainProvider, + SkylarkList srcs, + SkylarkList deps) + throws EvalException; + + @SkylarkCallable( + name = "create_go_compile_actions_gopkg", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "cc_toolchain", + positional = false, + named = true, + type = CcToolchainProviderApi.class), + @Param(name = "srcs", positional = false, named = true, type = SkylarkList.class), + @Param(name = "deps", positional = false, named = true, type = SkylarkList.class), + }) + public Tuple createGoCompileActionsGopkg( + SkylarkRuleContextT skylarkRuleContext, + CcToolchainProviderT ccToolchainProvider, + SkylarkList srcs, + SkylarkList deps) + throws EvalException; + + @SkylarkCallable( + name = "create_transitive_gopackage_info", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "gopkg", + positional = false, + named = true, + defaultValue = "None", + noneable = true, + allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = FileApi.class)}), + @Param(name = "export", positional = false, named = true, type = FileApi.class), + @Param(name = "swig_out_go", positional = false, named = true, type = FileApi.class), + }) + public GoPackageInfoApi createTransitiveGopackageInfo( + SkylarkRuleContextT skylarkRuleContext, FileT skylarkGopkg, FileT export, FileT swigOutGo); + + @SkylarkCallable( + name = "get_gopackage_files", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "gopkg", + positional = false, + named = true, + defaultValue = "None", + noneable = true, + allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = FileApi.class)}), + }) + public NestedSet getGopackageFiles( + SkylarkRuleContextT skylarkRuleContext, FileT skylarkGopkg); +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcInfoApi.java new file mode 100644 index 00000000000000..8ccf522ce0f74f --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcInfoApi.java @@ -0,0 +1,44 @@ +// Copyright 2019 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.skylarkbuildapi.ProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** + * Provider returned by go_wrap_cc rules that encapsulates C++ information. + * + *

The provider wrapped is CcInfo. Go SWIG have C++ dependencies that will have to be linked + * later, however, we don't want C++ targets to be able to depend on Go SWIG, only Python targets + * should be able to do so. Therefore, we wrap the C++ providers in a different provider which C++ + * rules do not recognize. + */ +@SkylarkModule( + name = "GoWrapCcInfo", + documented = false, + category = SkylarkModuleCategory.PROVIDER, + doc = "") +public interface GoWrapCcInfoApi extends StructApi { + + @SkylarkCallable(name = "cc_info", structField = true, documented = false, doc = "") + CcInfoApi getCcInfo(); + + /** Provider for GoWrapCcInfo objects. */ + @SkylarkModule(name = "Provider", doc = "", documented = false) + public interface Provider extends ProviderApi {} +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyCcLinkParamsProviderApi.java new file mode 100644 index 00000000000000..ec40aceb131df4 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyCcLinkParamsProviderApi.java @@ -0,0 +1,36 @@ +// Copyright 2019 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.skylarkbuildapi.ProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** A target that provides C++ libraries to be linked into Python targets. */ +@SkylarkModule( + name = "PyCcLinkParamsProvider", + documented = false, + category = SkylarkModuleCategory.PROVIDER, + doc = "Wrapper for every C++ linking provider") +public interface PyCcLinkParamsProviderApi extends StructApi { + @SkylarkCallable(name = "cc_info", doc = "", structField = true, documented = false) + CcInfoApi getCcInfo(); + + /** Provider for PyCcLinkParamsProvider objects. */ + @SkylarkModule(name = "Provider", doc = "", documented = false) + public interface Provider extends ProviderApi {} +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java new file mode 100644 index 00000000000000..841ae42549abc1 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java @@ -0,0 +1,110 @@ +// Copyright 2019 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.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.RunfilesApi; +import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi; +import com.google.devtools.build.lib.skylarkinterface.Param; +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.EvalException; +import com.google.devtools.build.lib.syntax.SkylarkList; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; + +/** + * Helper class for the C++ aspects of {py,java,go}_wrap_cc. Provides methods to create the swig and + * C++ actions. The swig action translates the swig declaration of an interface into Python or Java + * wrapper code that can then be used to access the wrapped native APIs. The swig action also + * creates C++ wrapper code that gets compiled and linked into a library that is interfacing between + * the Java and Python wrappers and the actual wrapped APIs. + */ +@SkylarkModule( + name = "py_wrap_cc_helper_do_not_use", + documented = false, + doc = "", + category = SkylarkModuleCategory.TOP_LEVEL_TYPE) +public interface PyWrapCcHelperApi< + FileT extends FileApi, + SkylarkRuleContextT extends SkylarkRuleContextApi, + CcInfoT extends CcInfoApi, + FeatureConfigurationT extends FeatureConfigurationApi, + CcToolchainProviderT extends CcToolchainProviderApi, + CompilationInfoT extends CompilationInfoApi, + CcCompilationContextT extends CcCompilationContextApi, + WrapCcIncludeProviderT extends WrapCcIncludeProviderApi> + extends WrapCcHelperApi< + FeatureConfigurationT, + SkylarkRuleContextT, + CcToolchainProviderT, + CompilationInfoT, + FileT, + CcCompilationContextT, + WrapCcIncludeProviderT> { + + @SkylarkCallable( + name = "py_extension_linkopts", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + }) + // TODO(plf): PyExtension is not in Skylark. + public SkylarkList getPyExtensionLinkopts(SkylarkRuleContextT skylarkRuleContext) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "get_transitive_python_sources", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param(name = "py_file", positional = false, named = true, type = FileApi.class), + }) + // TODO(plf): Not written in Skylark because of PyCommon. + public SkylarkNestedSet getTransitivePythonSources( + SkylarkRuleContextT skylarkRuleContext, FileT pyFile) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "get_python_runfiles", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "files_to_build", + positional = false, + named = true, + type = SkylarkNestedSet.class), + }) + // TODO(plf): Not written in Skylark because of PythonRunfilesProvider. + public RunfilesApi getPythonRunfiles( + SkylarkRuleContextT skylarkRuleContext, SkylarkNestedSet filesToBuild) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "py_wrap_cc_info", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param(name = "cc_info", positional = false, named = true, type = CcInfoApi.class), + }) + // TODO(plf): PyWrapCcInfo is not written in Skylark because several native rules use it. + public PyWrapCcInfoApi getPyWrapCcInfo(SkylarkRuleContextT skylarkRuleContext, CcInfoT ccInfo) + throws EvalException, InterruptedException; +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcInfoApi.java new file mode 100644 index 00000000000000..0883d5e776cfaf --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcInfoApi.java @@ -0,0 +1,44 @@ +// Copyright 2019 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.skylarkbuildapi.ProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** + * Provider returned by py_wrap_cc rules that encapsulates C++ information. + * + *

The provider wrapped is CcInfo. Python SWIG have C++ dependencies that will have to be linked + * later, however, we don't want C++ targets to be able to depend on Python SWIG, only Python + * targets should be able to do so. Therefore, we wrap the C++ providers in a different provider + * which C++ rules do not recognize. + */ +@SkylarkModule( + name = "PyWrapCcInfo", + documented = false, + category = SkylarkModuleCategory.PROVIDER, + doc = "") +public interface PyWrapCcInfoApi extends StructApi { + + @SkylarkCallable(name = "cc_info", documented = false, structField = true, doc = "") + CcInfoApi getCcInfo(); + + /** Provider for PyWrapCcInfo objects. */ + @SkylarkModule(name = "Provider", doc = "", documented = false) + public interface Provider extends ProviderApi {} +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java new file mode 100644 index 00000000000000..b879b4ed23a421 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java @@ -0,0 +1,212 @@ +// Copyright 2019 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.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.FilesToRunProviderApi; +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; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +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; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; + +/** + * Helper class for the C++ aspects of {py,java,go}_wrap_cc. Provides methods to create the swig and + * C++ actions. The swig action translates the swig declaration of an interface into Python or Java + * wrapper code that can then be used to access the wrapped native APIs. The swig action also + * creates C++ wrapper code that gets compiled and linked into a library that is interfacing between + * the Java and Python wrappers and the actual wrapped APIs. + */ +@SkylarkModule(name = "WrapCcHelperDoNotUse", doc = "", documented = false) +public interface WrapCcHelperApi< + FeatureConfigurationT extends FeatureConfigurationApi, + SkylarkRuleContextT extends SkylarkRuleContextApi, + CcToolchainProviderT extends CcToolchainProviderApi, + CompilationInfoT extends CompilationInfoApi, + FileT extends FileApi, + CcCompilationContextT extends CcCompilationContextApi, + WrapCcIncludeProviderT extends WrapCcIncludeProviderApi> { + + @SkylarkCallable( + name = "feature_configuration", + documented = false, + doc = "", + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "cc_toolchain", + positional = false, + named = true, + type = CcToolchainProviderApi.class), + }) + public FeatureConfigurationT skylarkGetFeatureConfiguration( + SkylarkRuleContextT skylarkRuleContext, CcToolchainProviderT ccToolchain) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "collect_transitive_swig_includes", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + }) + public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes( + SkylarkRuleContextT skylarkRuleContext); + + @SkylarkCallable( + name = "create_compile_actions", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "feature_configuration", + positional = false, + named = true, + type = FeatureConfigurationApi.class), + @Param( + name = "cc_toolchain", + positional = false, + named = true, + type = CcToolchainProviderApi.class), + @Param(name = "cc_file", positional = false, named = true, type = FileApi.class), + @Param(name = "header_file", positional = false, named = true, type = FileApi.class), + @Param( + name = "dep_compilation_contexts", + positional = false, + named = true, + type = SkylarkList.class), + @Param(name = "target_copts", positional = false, named = true, type = SkylarkList.class), + }) + public CompilationInfoT skylarkCreateCompileActions( + SkylarkRuleContextT skylarkRuleContext, + FeatureConfigurationT featureConfiguration, + CcToolchainProviderT ccToolchain, + FileT ccFile, + FileT headerFile, + SkylarkList depCcCompilationContexts, + SkylarkList targetCopts) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "mangled_target_name", + documented = false, + doc = "", + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + }) + public String skylarkGetMangledTargetName(SkylarkRuleContextT skylarkRuleContext) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "wrap_cc_include_provider", + doc = "", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "swig_includes", + positional = false, + named = true, + type = SkylarkNestedSet.class), + }) + // TODO(plf): Not written in Skylark because of PythonRunfilesProvider. + public WrapCcIncludeProviderT getWrapCcIncludeProvider( + SkylarkRuleContextT skylarkRuleContext, SkylarkNestedSet swigIncludes) + throws EvalException, InterruptedException; + + @SkylarkCallable( + name = "register_swig_action", + documented = false, + parameters = { + @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class), + @Param( + name = "cc_toolchain", + positional = false, + named = true, + type = CcToolchainProviderApi.class), + @Param( + name = "feature_configuration", + positional = false, + named = true, + noneable = false, + type = FeatureConfigurationApi.class), + @Param( + name = "wrapper_compilation_context", + positional = false, + named = true, + type = CcCompilationContextApi.class), + @Param( + name = "swig_includes", + positional = false, + named = true, + type = SkylarkNestedSet.class), + @Param(name = "swig_source", positional = false, named = true, type = FileApi.class), + @Param(name = "sub_parameters", positional = false, named = true, type = SkylarkList.class), + @Param(name = "cc_file", positional = false, named = true, type = FileApi.class), + @Param(name = "header_file", positional = false, named = true, type = FileApi.class), + @Param(name = "output_files", positional = false, named = true, type = SkylarkList.class), + @Param( + name = "out_dir", + positional = false, + named = true, + noneable = true, + defaultValue = "None", + allowedTypes = {@ParamType(type = String.class), @ParamType(type = NoneType.class)}), + @Param( + name = "java_dir", + positional = false, + named = true, + noneable = true, + defaultValue = "None", + allowedTypes = {@ParamType(type = String.class), @ParamType(type = NoneType.class)}), + @Param( + name = "auxiliary_inputs", + positional = false, + named = true, + type = SkylarkNestedSet.class), + @Param(name = "swig_attribute_name", positional = false, named = true, type = String.class), + @Param( + name = "zip_tool", + positional = false, + named = true, + noneable = true, + defaultValue = "None", + allowedTypes = { + @ParamType(type = FilesToRunProviderApi.class), + @ParamType(type = NoneType.class) + }) + }) + // TODO(plf): Write in Skylark when all 3 SWIG rules are in Skylark. + public void registerSwigAction( + SkylarkRuleContextT skylarkRuleContext, + CcToolchainProviderT ccToolchain, + FeatureConfigurationT featureConfiguration, + CcCompilationContextT wrapperCcCompilationContext, + SkylarkNestedSet swigIncludes, + FileT swigSource, + SkylarkList subParameters, + FileT ccFile, + FileT headerFile, + SkylarkList outputFiles, + Object outDir, + Object javaDir, + SkylarkNestedSet auxiliaryInputs, + String swigAttributeName, + Object zipTool) + throws EvalException, InterruptedException; +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcIncludeProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcIncludeProviderApi.java new file mode 100644 index 00000000000000..bd5f6bf96c0e2a --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcIncludeProviderApi.java @@ -0,0 +1,27 @@ +// Copyright 2019 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.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** An info object that provides the included files of a _wrap_cc rule. */ +@SkylarkModule( + name = "WrapCcIncludeProvider", + documented = false, + category = SkylarkModuleCategory.PROVIDER, + doc = "") +public interface WrapCcIncludeProviderApi extends StructApi {} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/BUILD new file mode 100644 index 00000000000000..df961f47efa42f --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/BUILD @@ -0,0 +1,26 @@ +# Description: +# This package contains interfaces representing the skylark "build API" +# (but not the implementation of that API). Ultimately, this package +# may be broken out of the Bazel package hierarchy to be standalone. +# Thus, this package should not depend on Bazel-specific packages (only +# those which contain pure-Skylark concepts, such as the interpreter or +# annotation interfaces). + +package(default_visibility = ["//src:__subpackages__"]) + +licenses(["notice"]) # Apache 2.0 + +filegroup( + name = "srcs", + srcs = glob(["**"]), +) + +java_library( + name = "go", + srcs = glob(["*.java"]), + deps = [ + "//src/main/java/com/google/devtools/build/lib:skylarkinterface", + "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi", + "//third_party:guava", + ], +) diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoConfigurationApi.java new file mode 100644 index 00000000000000..3a72cd37052603 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoConfigurationApi.java @@ -0,0 +1,25 @@ +// Copyright 2019 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.go; + +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** A configuration fragment for Go. */ +@SkylarkModule( + name = "go", + doc = "A configuration fragment for Go.", + category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT) +public interface GoConfigurationApi {} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoContextInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoContextInfoApi.java new file mode 100644 index 00000000000000..30df893d9c06d2 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoContextInfoApi.java @@ -0,0 +1,33 @@ +// Copyright 2019 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.go; + +import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** Information about the transitive closure of a target that is relevant to Go compilation. */ +@SkylarkModule( + name = "GoContextInfo", + doc = "", + documented = false, + category = SkylarkModuleCategory.PROVIDER) +public interface GoContextInfoApi extends StructApi { + + /** Provider for GoContextInfo objects. */ + @SkylarkModule(name = "Provider", doc = "", documented = false) + public interface Provider extends ProviderApi {} +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoPackageInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoPackageInfoApi.java new file mode 100644 index 00000000000000..32fc9738ec24b4 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go/GoPackageInfoApi.java @@ -0,0 +1,33 @@ +// Copyright 2019 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.go; + +import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** Contains the metadata for a Go package. Used to generate .gopackage files. */ +@SkylarkModule( + name = "GoPackageInfo", + doc = "", + documented = false, + category = SkylarkModuleCategory.PROVIDER) +public interface GoPackageInfoApi extends StructApi { + + /** Provider for GoPackageInfo objects. */ + @SkylarkModule(name = "Provider", doc = "", documented = false) + public interface Provider extends ProviderApi {} +} diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java index ae0d6f0f4c847c..325716d4cf4fde 100644 --- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java +++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java @@ -46,7 +46,6 @@ import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleBootstrap; import com.google.devtools.build.lib.skylarkbuildapi.config.ConfigBootstrap; import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcBootstrap; -import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi; import com.google.devtools.build.lib.skylarkbuildapi.java.GeneratedExtensionRegistryProviderApi; import com.google.devtools.build.lib.skylarkbuildapi.java.JavaBootstrap; import com.google.devtools.build.lib.skylarkbuildapi.platform.PlatformBootstrap; @@ -87,7 +86,13 @@ import com.google.devtools.build.skydoc.fakebuildapi.apple.FakeAppleCommon; import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigGlobalLibrary; import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigSkylarkCommon; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcInfo; import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcModule; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcToolchainConfigInfo; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeGoWrapCcHelper; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakePyCcLinkParamsProvider; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakePyWrapCcHelper; +import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakePyWrapCcInfo; import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaCcLinkParamsProvider; import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaCommon; import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaInfo.FakeJavaInfoProvider; @@ -527,7 +532,15 @@ private static GlobalFrame globalFrame( ConfigBootstrap configBootstrap = new ConfigBootstrap( new FakeConfigSkylarkCommon(), new FakeConfigApi(), new FakeConfigGlobalLibrary()); - CcBootstrap ccBootstrap = new CcBootstrap(new FakeCcModule()); + CcBootstrap ccBootstrap = + new CcBootstrap( + new FakeCcModule(), + new FakeCcInfo.Provider(), + new FakeCcToolchainConfigInfo.Provider(), + new FakePyWrapCcHelper(), + new FakeGoWrapCcHelper(), + new FakePyWrapCcInfo.Provider(), + new FakePyCcLinkParamsProvider.Provider()); JavaBootstrap javaBootstrap = new JavaBootstrap( new FakeJavaCommon(), @@ -589,7 +602,6 @@ private static GlobalFrame globalFrame( AndroidBinaryDataInfoApi.NAME, "ProtoRegistryAspect", "JspbInfo", - CcInfoApi.NAME, }; /** 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 8c0e01bb36c895..aea062cb25f320 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 @@ -16,8 +16,10 @@ java_library( "//src/main/java/com/google/devtools/build/lib:events", "//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/collect/nestedset", "//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/lib/skylarkbuildapi/go", "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi", "//third_party:guava", ], diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java new file mode 100644 index 00000000000000..acc9742bc4f694 --- /dev/null +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java @@ -0,0 +1,67 @@ +// Copyright 2019 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.skydoc.fakebuildapi.cpp; + +import com.google.devtools.build.lib.events.Location; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcCompilationContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkingContextApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; +import com.google.devtools.build.lib.syntax.Environment; +import com.google.devtools.build.lib.syntax.EvalException; + +/** Fake implementation of {@link CcInfoApi}. */ +public class FakeCcInfo implements CcInfoApi { + + @Override + public CcCompilationContextApi getCcCompilationContext() { + return null; + } + + @Override + public CcLinkingContextApi getCcLinkingContext() { + return null; + } + + @Override + public String toProto(Location loc) throws EvalException { + return null; + } + + @Override + public String toJson(Location loc) throws EvalException { + return null; + } + + @Override + public void repr(SkylarkPrinter printer) {} + + /** Fake implementation of {@link CcInfoApi.Provider}. */ + public static class Provider implements CcInfoApi.Provider { + + @Override + public CcInfoApi createInfo( + Object ccCompilationContext, + Object ccLinkingInfo, + Location location, + Environment environment) + throws EvalException { + return new FakeCcInfo(); + } + + @Override + public void repr(SkylarkPrinter printer) {} + } +} diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java new file mode 100644 index 00000000000000..6f9207e47b4c9c --- /dev/null +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java @@ -0,0 +1,49 @@ +// Copyright 2019 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.skydoc.fakebuildapi.cpp; + +import com.google.devtools.build.lib.events.Location; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainConfigInfoApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; +import com.google.devtools.build.lib.syntax.EvalException; + +/** Fake implementation of {@link CcToolchainConfigInfoApi}. */ +public class FakeCcToolchainConfigInfo implements CcToolchainConfigInfoApi { + + @Override + public String getProto() { + return null; + } + + @Override + public String toProto(Location loc) throws EvalException { + return null; + } + + @Override + public String toJson(Location loc) throws EvalException { + return null; + } + + @Override + public void repr(SkylarkPrinter printer) {} + + /** Fake implementation of {@link CcToolchainConfigInfoApi.Provider}. */ + public static class Provider implements CcToolchainConfigInfoApi.Provider { + + @Override + public void repr(SkylarkPrinter printer) {} + } +} diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java new file mode 100644 index 00000000000000..84ad6c36add7fe --- /dev/null +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java @@ -0,0 +1,174 @@ +// Copyright 2019 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.skydoc.fakebuildapi.cpp; + +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.RunfilesApi; +import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.TransitiveInfoCollectionApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcCompilationContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkingContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CompilationInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.FeatureConfigurationApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.GoCcLinkParamsInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.GoWrapCcHelperApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.GoWrapCcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.WrapCcIncludeProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.go.GoConfigurationApi; +import com.google.devtools.build.lib.skylarkbuildapi.go.GoContextInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.go.GoPackageInfoApi; +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; + +/** Fake implementation of {@link GoWrapCcHelperApi}. */ +public class FakeGoWrapCcHelper + implements GoWrapCcHelperApi< + FileApi, + SkylarkRuleContextApi, + CcInfoApi, + FeatureConfigurationApi, + CcToolchainProviderApi, + CcLinkingContextApi, + GoConfigurationApi, + GoContextInfoApi, + TransitiveInfoCollectionApi, + CompilationInfoApi, + CcCompilationContextApi, + WrapCcIncludeProviderApi> { + + @Override + public RunfilesApi skylarkGetGoRunfiles(SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public int getArchIntSize(GoConfigurationApi goConfig) { + return 0; + } + + @Override + public GoContextInfoApi skylarkCollectTransitiveGoContextGopkg( + SkylarkRuleContextApi skylarkRuleContext, + FileApi export, + FileApi pkg, + FileApi gopkg, + Object skylarkWrapContext, + CcInfoApi ccInfo) { + return null; + } + + @Override + public GoWrapCcInfoApi getGoWrapCcInfo( + SkylarkRuleContextApi skylarkRuleContext, CcInfoApi ccInfo) { + return null; + } + + @Override + public GoCcLinkParamsInfoApi getGoCcLinkParamsProvider( + SkylarkRuleContextApi ruleContext, CcLinkingContextApi ccLinkingContext) { + return null; + } + + @Override + public Tuple createGoCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchainProvider, + SkylarkList srcs, + SkylarkList deps) { + return null; + } + + @Override + public Tuple createGoCompileActionsGopkg( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchainProvider, + SkylarkList srcs, + SkylarkList deps) { + return null; + } + + @Override + public GoPackageInfoApi createTransitiveGopackageInfo( + SkylarkRuleContextApi skylarkRuleContext, + FileApi skylarkGopkg, + FileApi export, + FileApi swigOutGo) { + return null; + } + + @Override + public NestedSet getGopackageFiles( + SkylarkRuleContextApi skylarkRuleContext, FileApi skylarkGopkg) { + return null; + } + + @Override + public FeatureConfigurationApi skylarkGetFeatureConfiguration( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchain) { + return null; + } + + @Override + public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes( + SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public CompilationInfoApi skylarkCreateCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + FeatureConfigurationApi featureConfiguration, + CcToolchainProviderApi ccToolchain, + FileApi ccFile, + FileApi headerFile, + SkylarkList depCcCompilationContexts, + SkylarkList targetCopts) { + return null; + } + + @Override + public String skylarkGetMangledTargetName(SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public WrapCcIncludeProviderApi getWrapCcIncludeProvider( + SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet swigIncludes) { + return null; + } + + @Override + public void registerSwigAction( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchain, + FeatureConfigurationApi featureConfiguration, + CcCompilationContextApi wrapperCcCompilationContext, + SkylarkNestedSet swigIncludes, + FileApi swigSource, + SkylarkList subParameters, + FileApi ccFile, + FileApi headerFile, + SkylarkList outputFiles, + Object outDir, + Object javaDir, + SkylarkNestedSet auxiliaryInputs, + String swigAttributeName, + Object zipTool) {} +} diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java new file mode 100644 index 00000000000000..d8e84a54ee9f0c --- /dev/null +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java @@ -0,0 +1,50 @@ +// Copyright 2019 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.skydoc.fakebuildapi.cpp; + +import com.google.devtools.build.lib.events.Location; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyCcLinkParamsProviderApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; +import com.google.devtools.build.lib.syntax.EvalException; + +/** Fake implementation of {@link PyCcLinkParamsProviderApi}. */ +public class FakePyCcLinkParamsProvider implements PyCcLinkParamsProviderApi { + + @Override + public CcInfoApi getCcInfo() { + return null; + } + + @Override + public String toProto(Location loc) throws EvalException { + return null; + } + + @Override + public String toJson(Location loc) throws EvalException { + return null; + } + + @Override + public void repr(SkylarkPrinter printer) {} + + /** Fake implementation of {@link PyCcLinkParamsProviderApi.Provider}. */ + public static class Provider implements PyCcLinkParamsProviderApi.Provider { + + @Override + public void repr(SkylarkPrinter printer) {} + } +} diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java new file mode 100644 index 00000000000000..7010a7f4188a16 --- /dev/null +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java @@ -0,0 +1,119 @@ +// Copyright 2019 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.skydoc.fakebuildapi.cpp; + +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.RunfilesApi; +import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcCompilationContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CompilationInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.FeatureConfigurationApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcHelperApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.WrapCcIncludeProviderApi; +import com.google.devtools.build.lib.syntax.SkylarkList; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; + +/** Fake implementation of {@link PyWrapCcHelperApi}. */ +public class FakePyWrapCcHelper + implements PyWrapCcHelperApi< + FileApi, + SkylarkRuleContextApi, + CcInfoApi, + FeatureConfigurationApi, + CcToolchainProviderApi, + CompilationInfoApi, + CcCompilationContextApi, + WrapCcIncludeProviderApi> { + + @Override + public SkylarkList getPyExtensionLinkopts(SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public SkylarkNestedSet getTransitivePythonSources( + SkylarkRuleContextApi skylarkRuleContext, FileApi pyFile) { + return null; + } + + @Override + public RunfilesApi getPythonRunfiles( + SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet filesToBuild) { + return null; + } + + @Override + public PyWrapCcInfoApi getPyWrapCcInfo( + SkylarkRuleContextApi skylarkRuleContext, CcInfoApi ccInfo) { + return null; + } + + @Override + public FeatureConfigurationApi skylarkGetFeatureConfiguration( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchain) { + return null; + } + + @Override + public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes( + SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public String skylarkGetMangledTargetName(SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public WrapCcIncludeProviderApi getWrapCcIncludeProvider( + SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet swigIncludes) { + return null; + } + + @Override + public void registerSwigAction( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi ccToolchain, + FeatureConfigurationApi featureConfiguration, + CcCompilationContextApi wrapperCcCompilationContext, + SkylarkNestedSet swigIncludes, + FileApi swigSource, + SkylarkList subParameters, + FileApi ccFile, + FileApi headerFile, + SkylarkList outputFiles, + Object outDir, + Object javaDir, + SkylarkNestedSet auxiliaryInputs, + String swigAttributeName, + Object zipTool) {} + + @Override + public CompilationInfoApi skylarkCreateCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + FeatureConfigurationApi featureConfiguration, + CcToolchainProviderApi ccToolchain, + FileApi ccFile, + FileApi headerFile, + SkylarkList depCcCompilationContexts, + SkylarkList targetCopts) { + return null; + } +} diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java new file mode 100644 index 00000000000000..8f2071f1694522 --- /dev/null +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java @@ -0,0 +1,51 @@ +// Copyright 2019 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.skydoc.fakebuildapi.cpp; + +import com.google.devtools.build.lib.events.Location; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcHelperApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcInfoApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; +import com.google.devtools.build.lib.syntax.EvalException; + +/** Fake implementation of {@link PyWrapCcHelperApi}. */ +public class FakePyWrapCcInfo implements PyWrapCcInfoApi { + + @Override + public CcInfoApi getCcInfo() { + return null; + } + + @Override + public void repr(SkylarkPrinter printer) {} + + @Override + public String toProto(Location loc) throws EvalException { + return null; + } + + @Override + public String toJson(Location loc) throws EvalException { + return null; + } + + /** Fake implementation of {@link PyWrapCcInfoApi.Provider}. */ + public static class Provider implements PyWrapCcInfoApi.Provider { + + @Override + public void repr(SkylarkPrinter printer) {} + } +}