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
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 f90f566..f40b276 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 @@ 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 8eba51a..45c39c6 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 @@ "//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 5c6bba2..b047f1d 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 @@ 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 ae80233..604e16f 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 @@ "//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 bc24d1b..4e8f3c0 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<CcToolchainConfigInfo> PROVIDER = - new NativeProvider<CcToolchainConfigInfo>( - CcToolchainConfigInfo.class, "CcToolchainConfigInfo") {}; + + /** Singleton provider instance for {@link CcToolchainConfigInfo}. */ + public static final Provider PROVIDER = new Provider(); private final ImmutableList<ActionConfig> actionConfigs; private final ImmutableList<Feature> features; @@ -357,4 +357,13 @@ .addAllImplies(actionConfig.getImplies()) .build(); } + + /** Provider class for {@link CcToolchainConfigInfo} objects. */ + public static class Provider extends BuiltinProvider<CcToolchainConfigInfo> + 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 c076a5b..5d44369 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 NestedSet<Artifact> 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<Artifact> getDefaultCcToolchainDynamicRuntimeInputsFromStarlark( + RuleContext ruleContext) throws EvalException { CcToolchainProvider defaultToolchain = getToolchainUsingDefaultCcToolchainAttribute(ruleContext); if (defaultToolchain == null) { @@ -249,11 +262,8 @@ } 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 0000000..c64b3d6 --- /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<FeatureConfigurationApi>, + CompilationInfoApi, + FileApi, + CcCompilationContextApi, + WrapCcIncludeProviderApi> { + + @Override + public FeatureConfigurationApi skylarkGetFeatureConfiguration( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain) + throws EvalException, InterruptedException { + return null; + } + + @Override + public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes( + SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public CompilationInfoApi skylarkCreateCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + FeatureConfigurationApi featureConfiguration, + CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain, + FileApi ccFile, + FileApi headerFile, + SkylarkList<CcCompilationContextApi> depCcCompilationContexts, + SkylarkList<String> 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<FeatureConfigurationApi> ccToolchain, + FeatureConfigurationApi featureConfiguration, + CcCompilationContextApi wrapperCcCompilationContext, + SkylarkNestedSet swigIncludes, + FileApi swigSource, + SkylarkList<String> subParameters, + FileApi ccFile, + FileApi headerFile, + SkylarkList<FileApi> 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<FeatureConfigurationApi>, + CompilationInfoApi, + CcCompilationContextApi, + WrapCcIncludeProviderApi> { + + @Override + public SkylarkList<String> 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<FeatureConfigurationApi>, + CcLinkingContextApi<FileApi>, + 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<FileApi> ccLinkingContext) { + return null; + } + + @Override + public Tuple<FileApi> createGoCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi<FeatureConfigurationApi> ccToolchainProvider, + SkylarkList<FileApi> srcs, + SkylarkList<TransitiveInfoCollectionApi> deps) { + return null; + } + + @Override + public Tuple<FileApi> createGoCompileActionsGopkg( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi<FeatureConfigurationApi> ccToolchainProvider, + SkylarkList<FileApi> srcs, + SkylarkList<TransitiveInfoCollectionApi> deps) { + return null; + } + + @Override + public GoPackageInfoApi createTransitiveGopackageInfo( + SkylarkRuleContextApi skylarkRuleContext, + FileApi skylarkGopkg, + FileApi export, + FileApi swigOutGo) { + return null; + } + + @Override + public NestedSet<FileApi> 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("<unknown object>"); + } + } + + /** + * 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("<unknown object>"); + } + } +}
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 6b382b4..7badc9b 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<PyCcLinkParamsProvider> PROVIDER = - new NativeProvider<PyCcLinkParamsProvider>( - 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 @@ 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<PyCcLinkParamsProvider> + 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 ff27355..982ca13 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 @@ "//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 6f8133b..723bf91 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 @@ "//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 18ebafc..5d1cb65 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 FeatureConfigurationApi, ? extends CcCompilationContextApi, - ? extends CcCompilationOutputsApi<? extends FileApi>, - ? extends CcLinkingOutputsApi<? extends FileApi>, - ? extends LibraryToLinkApi<? extends FileApi>, ? extends CcLinkingContextApi<? extends FileApi>, + ? extends LibraryToLinkApi<? extends FileApi>, ? extends CcToolchainVariablesApi, - ? extends CcToolchainConfigInfoApi> + ? extends SkylarkRuleContextApi, + ? extends CcToolchainConfigInfoApi, + ? extends CcCompilationOutputsApi<? extends FileApi>> 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 FeatureConfigurationApi, ? extends CcCompilationContextApi, - ? extends CcCompilationOutputsApi<? extends FileApi>, - ? extends CcLinkingOutputsApi<? extends FileApi>, - ? extends LibraryToLinkApi<? extends FileApi>, ? extends CcLinkingContextApi<? extends FileApi>, + ? extends LibraryToLinkApi<? extends FileApi>, ? extends CcToolchainVariablesApi, - ? extends CcToolchainConfigInfoApi> - ccModule) { + ? extends SkylarkRuleContextApi, + ? extends CcToolchainConfigInfoApi, + ? extends CcCompilationOutputsApi<? extends FileApi>> + 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<String, Object> 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 f6a794f..d5cd2b3 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 @@ 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 0000000..b31634b --- /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<FileT>> + extends ProviderApi { + @SkylarkCallable( + name = "GoCcLinkParamsInfo", + doc = "The <code>GoCcLinkParamsInfo</code> 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 0000000..67c8da4 --- /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<FeatureConfigurationT>, + CcLinkingContextT extends CcLinkingContextApi<FileT>, + 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<FileT> createGoCompileActions( + SkylarkRuleContextT skylarkRuleContext, + CcToolchainProviderT ccToolchainProvider, + SkylarkList<FileT> srcs, + SkylarkList<TransitiveInfoCollectionT> 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<FileT> createGoCompileActionsGopkg( + SkylarkRuleContextT skylarkRuleContext, + CcToolchainProviderT ccToolchainProvider, + SkylarkList<FileT> srcs, + SkylarkList<TransitiveInfoCollectionT> 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<FileT> 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 0000000..8ccf522 --- /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. + * + * <p>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 0000000..ec40ace --- /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 0000000..841ae42 --- /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<FeatureConfigurationT>, + 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<String> 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 0000000..0883d5e --- /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. + * + * <p>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 0000000..b879b4e --- /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<FeatureConfigurationT>, + 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<CcCompilationContextT> depCcCompilationContexts, + SkylarkList<String> 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<String> subParameters, + FileT ccFile, + FileT headerFile, + SkylarkList<FileT> 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 0000000..bd5f6bf --- /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 0000000..df961f4 --- /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 0000000..3a72cd3 --- /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 0000000..30df893 --- /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 0000000..32fc973 --- /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 ae0d6f0..325716d 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 @@ 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 @@ 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 8c0e01b..aea062c 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 @@ "//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 0000000..acc9742 --- /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 0000000..6f9207e --- /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 0000000..84ad6c3 --- /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<FeatureConfigurationApi>, + CcLinkingContextApi<FileApi>, + 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<FileApi> ccLinkingContext) { + return null; + } + + @Override + public Tuple<FileApi> createGoCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi<FeatureConfigurationApi> ccToolchainProvider, + SkylarkList<FileApi> srcs, + SkylarkList<TransitiveInfoCollectionApi> deps) { + return null; + } + + @Override + public Tuple<FileApi> createGoCompileActionsGopkg( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi<FeatureConfigurationApi> ccToolchainProvider, + SkylarkList<FileApi> srcs, + SkylarkList<TransitiveInfoCollectionApi> deps) { + return null; + } + + @Override + public GoPackageInfoApi createTransitiveGopackageInfo( + SkylarkRuleContextApi skylarkRuleContext, + FileApi skylarkGopkg, + FileApi export, + FileApi swigOutGo) { + return null; + } + + @Override + public NestedSet<FileApi> getGopackageFiles( + SkylarkRuleContextApi skylarkRuleContext, FileApi skylarkGopkg) { + return null; + } + + @Override + public FeatureConfigurationApi skylarkGetFeatureConfiguration( + SkylarkRuleContextApi skylarkRuleContext, + CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain) { + return null; + } + + @Override + public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes( + SkylarkRuleContextApi skylarkRuleContext) { + return null; + } + + @Override + public CompilationInfoApi skylarkCreateCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + FeatureConfigurationApi featureConfiguration, + CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain, + FileApi ccFile, + FileApi headerFile, + SkylarkList<CcCompilationContextApi> depCcCompilationContexts, + SkylarkList<String> 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<FeatureConfigurationApi> ccToolchain, + FeatureConfigurationApi featureConfiguration, + CcCompilationContextApi wrapperCcCompilationContext, + SkylarkNestedSet swigIncludes, + FileApi swigSource, + SkylarkList<String> subParameters, + FileApi ccFile, + FileApi headerFile, + SkylarkList<FileApi> 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 0000000..d8e84a5 --- /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 0000000..7010a7f --- /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<FeatureConfigurationApi>, + CompilationInfoApi, + CcCompilationContextApi, + WrapCcIncludeProviderApi> { + + @Override + public SkylarkList<String> 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<FeatureConfigurationApi> 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<FeatureConfigurationApi> ccToolchain, + FeatureConfigurationApi featureConfiguration, + CcCompilationContextApi wrapperCcCompilationContext, + SkylarkNestedSet swigIncludes, + FileApi swigSource, + SkylarkList<String> subParameters, + FileApi ccFile, + FileApi headerFile, + SkylarkList<FileApi> outputFiles, + Object outDir, + Object javaDir, + SkylarkNestedSet auxiliaryInputs, + String swigAttributeName, + Object zipTool) {} + + @Override + public CompilationInfoApi skylarkCreateCompileActions( + SkylarkRuleContextApi skylarkRuleContext, + FeatureConfigurationApi featureConfiguration, + CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain, + FileApi ccFile, + FileApi headerFile, + SkylarkList<CcCompilationContextApi> depCcCompilationContexts, + SkylarkList<String> 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 0000000..8f2071f --- /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) {} + } +}