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) {}
+ }
+}