Skip to content

Commit

Permalink
Introduce cc-related Google-only interface methods to the Starlark bu…
Browse files Browse the repository at this point in the history
…ild 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
  • Loading branch information
c-parsons authored and copybara-github committed Jun 11, 2019
1 parent 32836c3 commit 0f9be45
Show file tree
Hide file tree
Showing 32 changed files with 1,787 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -187,7 +193,15 @@ private Map<String, Object> collectBzlGlobals() {
ConfigBootstrap configBootstrap =
new ConfigBootstrap(new FakeConfigSkylarkCommon(), new FakeConfigApi(),
new FakeConfigGlobalLibrary());
CcBootstrap ccBootstrap = new CcBootstrap(new FakeCcModule());
CcBootstrap ccBootstrap =
new CcBootstrap(
new FakeCcModule(),
new FakeCcInfo.Provider(),
new FakeCcToolchainConfigInfo.Provider(),
new FakePyWrapCcHelper(),
new FakeGoWrapCcHelper(),
new FakePyWrapCcInfo.Provider(),
new FakePyCcLinkParamsProvider.Provider());
JavaBootstrap javaBootstrap =
new JavaBootstrap(
new FakeJavaCommon(),
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/google/devtools/build/lib/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -1158,6 +1158,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/common/options",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -77,10 +78,16 @@ public void init(ConfiguredRuleClassProvider.Builder builder) {
builder.addRuleDefinition(new CcIncludeScanningRule());
builder.addRuleDefinition(new FdoProfileRule());
builder.addRuleDefinition(new FdoPrefetchHintsRule());
builder.addSkylarkBootstrap(
new CcBootstrap(
new BazelCcModule(),
CcInfo.PROVIDER,
CcToolchainConfigInfo.PROVIDER,
new GoogleLegacyStubs.PyWrapCcHelper(),
new GoogleLegacyStubs.GoWrapCcHelper(),
new GoogleLegacyStubs.PyWrapCcInfoProvider(),
new GoogleLegacyStubs.PyCcLinkParamsProvider()));

builder.addSkylarkBootstrap(new CcBootstrap(new BazelCcModule()));
builder.addSkylarkAccessibleTopLevels("CcInfo", CcInfo.PROVIDER);
builder.addSkylarkAccessibleTopLevels("CcToolchainConfigInfo", CcToolchainConfigInfo.PROVIDER);
try {
builder.addWorkspaceFileSuffix(
ResourceFileLoader.loadResource(JavaRules.class, "coverage.WORKSPACE"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/go",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -357,4 +357,13 @@ static CToolchain.ActionConfig actionConfigToProto(ActionConfig actionConfig) {
.addAllImplies(actionConfig.getImplies())
.build();
}

/** Provider class for {@link CcToolchainConfigInfo} objects. */
public static class Provider extends BuiltinProvider<CcToolchainConfigInfo>
implements CcToolchainConfigInfoApi.Provider {

private Provider() {
super("CcToolchainConfigInfo", CcToolchainConfigInfo.class);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -242,18 +242,28 @@ public static CcToolchainProvider getToolchainUsingDefaultCcToolchainAttribute(
*/
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) {
return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
}
FeatureConfiguration featureConfiguration =
CcCommon.configureFeaturesOrReportRuleError(ruleContext, defaultToolchain);
try {
return defaultToolchain.getDynamicRuntimeLinkInputs(featureConfiguration);
} catch (EvalException e) {
throw ruleContext.throwWithRuleError(e.getMessage());
}

return defaultToolchain.getDynamicRuntimeLinkInputs(featureConfiguration);
}

/**
Expand Down
Loading

0 comments on commit 0f9be45

Please sign in to comment.