Skip to content

Commit affcfdb

Browse files
authored
Merge branch 'master' into respect_rules_java
2 parents 33ad113 + 517d4f1 commit affcfdb

File tree

54 files changed

+1509
-648
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1509
-648
lines changed

.github/labeler.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ team-Rules-Java:
3737
team-Android:
3838
- src/tools/android/java/com/google/devtools/build/android/**/*
3939
- src/test/java/com/google/devtools/build/android/**/*
40+
- src/test/shell/bazel/android/**/*
4041

4142
team-Configurability:
4243
- src/main/java/com/google/devtools/build/lib/analysis/**/*

CODEOWNERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ android/ @ahumesky @ted-xie
2727

2828
/src/test/java/com/google/devtools/build/android/dexer/ @ahumesky @ted-xie @kevin1e100
2929

30+
/src/test/shell/bazel/android/ @ahumesky @ted-xie
31+
3032
# Apple
3133

3234
/src/main/java/com/google/devtools/build/lib/rules/apple @bazelbuild/rules_apple-team

WORKSPACE

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -425,11 +425,11 @@ maven_install(
425425
"com.google.code.findbugs:jsr305:3.0.2",
426426
"com.google.code.gson:gson:2.9.0",
427427
"com.google.code.java-allocation-instrumenter:java-allocation-instrumenter:3.3.0",
428-
"com.google.errorprone:error_prone_annotation:2.18.0",
429-
"com.google.errorprone:error_prone_annotations:2.18.0",
430-
"com.google.errorprone:error_prone_check_api:2.18.0",
431-
"com.google.errorprone:error_prone_core:2.18.0",
432-
"com.google.errorprone:error_prone_type_annotations:2.18.0",
428+
"com.google.errorprone:error_prone_annotation:2.19.0",
429+
"com.google.errorprone:error_prone_annotations:2.19.0",
430+
"com.google.errorprone:error_prone_check_api:2.19.0",
431+
"com.google.errorprone:error_prone_core:2.19.0",
432+
"com.google.errorprone:error_prone_type_annotations:2.19.0",
433433
"com.google.flogger:flogger-system-backend:0.5.1",
434434
"com.google.flogger:flogger:0.5.1",
435435
"com.google.flogger:google-extensions:0.5.1",

maven_install.json

Lines changed: 144 additions & 65 deletions
Large diffs are not rendered by default.

site/en/_book.yaml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,12 @@ upper_tabs:
272272
path: /extending/repo
273273
- title: Configuring
274274
path: /extending/config
275-
- title: Platforms and toolchains
275+
- title: Platforms
276276
path: /extending/platforms
277+
- title: Toolchains
278+
path: /extending/toolchains
279+
- title: Execution groups
280+
path: /extending/exec-groups
277281
- name: Writing rules
278282
contents:
279283
- title: Creating a rule
@@ -309,12 +313,6 @@ upper_tabs:
309313
- title: Document rules with Stardoc
310314
path: https://github.com/bazelbuild/stardoc
311315
status: external
312-
- name: Design docs
313-
contents:
314-
- title: Execution groups
315-
path: /extending/exec-groups
316-
- title: Toolchains
317-
path: /extending/toolchains
318316
- name: APIs
319317
contents:
320318
- title: Build file API

src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
import com.google.devtools.build.lib.graph.Node;
5050
import com.google.devtools.build.lib.packages.BazelStarlarkEnvironment;
5151
import com.google.devtools.build.lib.packages.NativeAspectClass;
52+
import com.google.devtools.build.lib.packages.PackageArgument;
5253
import com.google.devtools.build.lib.packages.PackageCallable;
53-
import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
5454
import com.google.devtools.build.lib.packages.RuleClass;
5555
import com.google.devtools.build.lib.packages.RuleClassProvider;
5656
import com.google.devtools.build.lib.packages.RuleFactory;
@@ -96,7 +96,7 @@
9696
* A coherent set of options, fragments, aspects and rules; each of these may declare a dependency
9797
* on other such sets.
9898
*/
99-
// TODO(b/280446865): Consider merging Bootstrap and EnvironmentExtension into this interface.
99+
// TODO(b/280446865): Consider merging Bootstrap into this interface.
100100
public interface RuleSet {
101101
/** Add stuff to the configured rule class provider builder. */
102102
void init(ConfiguredRuleClassProvider.Builder builder);
@@ -157,7 +157,7 @@ public static final class Builder implements RuleDefinitionEnvironment {
157157
private final Map<String, RuleClass> ruleClassMap = new HashMap<>();
158158
private final Map<String, RuleDefinition> ruleDefinitionMap = new HashMap<>();
159159
private final Map<String, NativeAspectClass> nativeAspectClassMap = new HashMap<>();
160-
private final List<EnvironmentExtension> environmentExtensions = new ArrayList<>();
160+
private final List<PackageArgument<?>> packageArgs = new ArrayList<>();
161161
private final Map<Class<? extends RuleDefinition>, RuleClass> ruleMap = new HashMap<>();
162162
private final Digraph<Class<? extends RuleDefinition>> dependencyGraph = new Digraph<>();
163163
private final List<Class<? extends Fragment>> universalFragments = new ArrayList<>();
@@ -166,6 +166,7 @@ public static final class Builder implements RuleDefinitionEnvironment {
166166
private OptionsDiffPredicate shouldInvalidateCacheForOptionDiff =
167167
OptionsDiffPredicate.ALWAYS_INVALIDATE;
168168
private PrerequisiteValidator prerequisiteValidator;
169+
private final ImmutableMap.Builder<String, Object> buildFileToplevels = ImmutableMap.builder();
169170
private final ImmutableList.Builder<Bootstrap> starlarkBootstraps = ImmutableList.builder();
170171
private final ImmutableMap.Builder<String, Object> starlarkAccessibleTopLevels =
171172
ImmutableMap.builder();
@@ -306,8 +307,8 @@ public Builder addNativeAspectClass(NativeAspectClass aspectFactoryClass) {
306307
}
307308

308309
@CanIgnoreReturnValue
309-
public Builder addEnvironmentExtension(EnvironmentExtension environmentExtension) {
310-
environmentExtensions.add(environmentExtension);
310+
public Builder addPackageArg(PackageArgument<?> arg) {
311+
packageArgs.add(arg);
311312
return this;
312313
}
313314

@@ -342,18 +343,39 @@ public Builder addUniversalConfigurationFragment(Class<? extends Fragment> fragm
342343
return this;
343344
}
344345

346+
/**
347+
* Registers a new top-level symbol for BUILD files.
348+
*
349+
* <p>The symbol will also be available in BUILD-loaded .bzl files under the {@code native}
350+
* module.
351+
*/
352+
@CanIgnoreReturnValue
353+
public Builder addBuildFileToplevel(String name, Object object) {
354+
this.buildFileToplevels.put(name, object);
355+
return this;
356+
}
357+
358+
/**
359+
* Registers all symbols contained in the {@code Bootstrap} as top-level symbols for .bzl files.
360+
*/
345361
@CanIgnoreReturnValue
346362
public Builder addStarlarkBootstrap(Bootstrap bootstrap) {
347363
this.starlarkBootstraps.add(bootstrap);
348364
return this;
349365
}
350366

367+
/** Registers a new top-level symbol for .bzl files. */
368+
// TODO(b/280446865): rename to something like addBzlToplevel()
351369
@CanIgnoreReturnValue
352370
public Builder addStarlarkAccessibleTopLevels(String name, Object object) {
353371
this.starlarkAccessibleTopLevels.put(name, object);
354372
return this;
355373
}
356374

375+
/**
376+
* Registers a new symbol for {@code @_builtins} .bzl files, to be made available under the
377+
* {@code _builtins.internal} object.
378+
*/
357379
@CanIgnoreReturnValue
358380
public Builder addStarlarkBuiltinsInternal(String name, Object object) {
359381
this.starlarkBuiltinsInternals.put(name, object);
@@ -586,7 +608,7 @@ public ConfiguredRuleClassProvider build() {
586608
ImmutableMap.copyOf(ruleClassMap),
587609
ImmutableMap.copyOf(ruleDefinitionMap),
588610
ImmutableMap.copyOf(nativeAspectClassMap),
589-
ImmutableList.copyOf(environmentExtensions),
611+
ImmutableList.copyOf(packageArgs),
590612
FragmentRegistry.create(
591613
configurationFragmentClasses, universalFragments, configurationOptions),
592614
defaultWorkspaceFilePrefix.toString(),
@@ -596,6 +618,7 @@ public ConfiguredRuleClassProvider build() {
596618
toolchainTaggedTrimmingTransition,
597619
shouldInvalidateCacheForOptionDiff,
598620
prerequisiteValidator,
621+
buildFileToplevels.buildOrThrow(),
599622
starlarkAccessibleTopLevels.buildOrThrow(),
600623
starlarkBuiltinsInternals.buildOrThrow(),
601624
starlarkBootstraps.build(),
@@ -705,7 +728,7 @@ private ConfiguredRuleClassProvider(
705728
ImmutableMap<String, RuleClass> ruleClassMap,
706729
ImmutableMap<String, RuleDefinition> ruleDefinitionMap,
707730
ImmutableMap<String, NativeAspectClass> nativeAspectClassMap,
708-
ImmutableList<EnvironmentExtension> environmentExtensions,
731+
ImmutableList<PackageArgument<?>> packageArgs,
709732
FragmentRegistry fragmentRegistry,
710733
String defaultWorkspaceFilePrefix,
711734
String defaultWorkspaceFileSuffix,
@@ -714,6 +737,7 @@ private ConfiguredRuleClassProvider(
714737
PatchTransition toolchainTaggedTrimmingTransition,
715738
OptionsDiffPredicate shouldInvalidateCacheForOptionDiff,
716739
PrerequisiteValidator prerequisiteValidator,
740+
ImmutableMap<String, Object> buildFileToplevels,
717741
ImmutableMap<String, Object> starlarkAccessibleTopLevels,
718742
ImmutableMap<String, Object> starlarkBuiltinsInternals,
719743
ImmutableList<Bootstrap> starlarkBootstraps,
@@ -756,11 +780,11 @@ private ConfiguredRuleClassProvider(
756780
this.bazelStarlarkEnvironment =
757781
new BazelStarlarkEnvironment(
758782
/* ruleFunctions= */ RuleFactory.buildRuleFunctions(ruleClassMap),
759-
/* environmentExtensions= */ environmentExtensions,
760783
// TODO(b/280446865): Instead of exposing the {@code package()} symbol separately, just
761784
// keep it part of the BUILD/native environments. Requires migrating {@code package()}
762785
// to be a @StarlarkMethod that gets registered as a BUILD toplevel.
763-
/* packageCallable= */ PackageCallable.newPackageCallable(environmentExtensions),
786+
/* packageCallable= */ PackageCallable.newPackageCallable(packageArgs),
787+
buildFileToplevels,
764788
/* bzlToplevels= */ environment,
765789
/* nativeRuleSpecificBindings= */ nativeRuleSpecificBindings,
766790
/* workspaceBzlNativeBindings= */ WorkspaceFactory.createNativeModuleBindings(

src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
import com.google.devtools.build.lib.server.FailureDetails.Execution;
8989
import com.google.devtools.build.lib.server.FailureDetails.Execution.Code;
9090
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
91+
import com.google.devtools.build.lib.skyframe.ActionExecutionInactivityWatchdog;
9192
import com.google.devtools.build.lib.skyframe.AspectKeyCreator.AspectKey;
9293
import com.google.devtools.build.lib.skyframe.BuildResultListener;
9394
import com.google.devtools.build.lib.skyframe.Builder;
@@ -339,8 +340,9 @@ public void prepareForExecution(Stopwatch executionTimer)
339340
}
340341

341342
env.getEventBus()
342-
.register(new ExecutionProgressReceiverSetup(skyframeExecutor, env, executionTimer));
343-
// TODO(leba): Add watchdog support.
343+
.register(
344+
new ExecutionProgressReceiverSetup(
345+
skyframeExecutor, env, executionTimer, buildRequestOptions.progressReportInterval));
344346
for (ExecutorLifecycleListener executorLifecycleListener : executorLifecycleListeners) {
345347
try (SilentCloseable c =
346348
Profiler.instance().profile(executorLifecycleListener + ".executionPhaseStarting")) {
@@ -1023,13 +1025,17 @@ private static class ExecutionProgressReceiverSetup {
10231025
private final Stopwatch executionUnstartedTimer;
10241026
private final AtomicBoolean activated = new AtomicBoolean(false);
10251027

1028+
private final int progressReportInterval;
1029+
10261030
ExecutionProgressReceiverSetup(
10271031
SkyframeExecutor skyframeExecutor,
10281032
CommandEnvironment env,
1029-
Stopwatch executionUnstartedTimer) {
1033+
Stopwatch executionUnstartedTimer,
1034+
int progressReportInterval) {
10301035
this.skyframeExecutor = skyframeExecutor;
10311036
this.env = env;
10321037
this.executionUnstartedTimer = executionUnstartedTimer;
1038+
this.progressReportInterval = progressReportInterval;
10331039
}
10341040

10351041
@Subscribe
@@ -1053,6 +1059,13 @@ public void setupExecutionProgressReceiver(SomeExecutionStartedEvent unused) {
10531059
skyframeExecutor.setExecutionProgressReceiver(executionProgressReceiver);
10541060
executionUnstartedTimer.start();
10551061

1062+
skyframeExecutor.setAndStartWatchdog(
1063+
new ActionExecutionInactivityWatchdog(
1064+
executionProgressReceiver.createInactivityMonitor(statusReporter),
1065+
executionProgressReceiver.createInactivityReporter(
1066+
statusReporter, skyframeExecutor.getIsBuildingExclusiveArtifacts()),
1067+
progressReportInterval));
1068+
10561069
env.getEventBus().unregister(this);
10571070
}
10581071
}

src/main/java/com/google/devtools/build/lib/packages/BazelStarlarkEnvironment.java

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515
package com.google.devtools.build.lib.packages;
1616

1717
import com.google.common.base.Preconditions;
18-
import com.google.common.collect.ImmutableList;
1918
import com.google.common.collect.ImmutableMap;
2019
import com.google.common.collect.Sets;
21-
import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
2220
import java.util.HashMap;
2321
import java.util.List;
2422
import java.util.Map;
@@ -83,10 +81,11 @@ public final class BazelStarlarkEnvironment {
8381
*
8482
* @param ruleFunctions a map from a rule class name (e.g. "java_library") to the (uninjected)
8583
* Starlark callable that instantiates it
86-
* @param environmentExtensions a list of {@link EnvironmentExtensions} to apply
8784
* @param packageCallable the symbol implementing the {@code package()} function in BUILD files
88-
* @param bzlToplevels the map of top-level symbols available to .bzl files (excluding {@link
89-
* Starlark#UNIVERSE} symbols), prior to builtins injection
85+
* @param buildFileToplevels the map of non-{@link Starlark#UNIVERSE} top-level symbols available
86+
* to BUILD files, prior to builtins injection
87+
* @param bzlToplevels the map of non-universe top-level symbols available to .bzl files, prior to
88+
* builtins injection, excluding the {@code native} object
9089
* @param nativeRuleSpecificBindings a subset of {@code bzlToplevels} that excludes core symbols
9190
* like {@code rule()} and {@code struct()}. This is intended to identify symbols that are
9291
* eligible for builtins injection.
@@ -98,10 +97,8 @@ public final class BazelStarlarkEnvironment {
9897
*/
9998
public BazelStarlarkEnvironment(
10099
ImmutableMap<String, ?> ruleFunctions,
101-
// TODO(b/280446865): Eliminate the EnvironmentExtensions concept, replace with underlying
102-
// PackageArguments.
103-
ImmutableList<EnvironmentExtension> environmentExtensions,
104100
Object packageCallable,
101+
ImmutableMap<String, Object> buildFileToplevels,
105102
ImmutableMap<String, Object> bzlToplevels,
106103
ImmutableMap<String, Object> nativeRuleSpecificBindings,
107104
ImmutableMap<String, Object> workspaceBzlNativeBindings,
@@ -113,8 +110,7 @@ public BazelStarlarkEnvironment(
113110
this.workspaceBzlNativeBindings = workspaceBzlNativeBindings;
114111

115112
this.uninjectedBuildBzlNativeBindings =
116-
createUninjectedBuildBzlNativeBindings(
117-
ruleFunctions, environmentExtensions, packageCallable);
113+
createUninjectedBuildBzlNativeBindings(ruleFunctions, packageCallable, buildFileToplevels);
118114
this.uninjectedBuildBzlEnv =
119115
createUninjectedBuildBzlEnv(bzlToplevels, uninjectedBuildBzlNativeBindings);
120116
this.uninjectedWorkspaceBzlEnv =
@@ -131,7 +127,7 @@ public BazelStarlarkEnvironment(
131127
uninjectedBuildBzlNativeBindings,
132128
uninjectedBuildBzlEnv);
133129
this.uninjectedBuildEnv =
134-
createUninjectedBuildEnv(ruleFunctions, environmentExtensions, packageCallable);
130+
createUninjectedBuildEnv(ruleFunctions, packageCallable, buildFileToplevels);
135131
}
136132

137133
/**
@@ -191,18 +187,13 @@ public ImmutableMap<String, Object> getBzlmodBzlEnv() {
191187
*/
192188
private static ImmutableMap<String, Object> createUninjectedBuildBzlNativeBindings(
193189
Map<String, ?> ruleFunctions,
194-
List<PackageFactory.EnvironmentExtension> environmentExtensions,
195-
Object packageCallable) {
190+
Object packageCallable,
191+
Map<String, Object> buildFileToplevels) {
196192
ImmutableMap.Builder<String, Object> env = new ImmutableMap.Builder<>();
197193
env.putAll(StarlarkNativeModule.BINDINGS_FOR_BUILD_FILES);
198194
env.putAll(ruleFunctions);
199195
env.put("package", packageCallable);
200-
// TODO(b/280446865): Remove ability to register BUILD toplevels in this way. They should
201-
// instead go directly on the ConfiguredRuleClassProvider.Builder, e.g. an addBuildToplevel()
202-
// method.
203-
for (PackageFactory.EnvironmentExtension ext : environmentExtensions) {
204-
ext.update(env);
205-
}
196+
env.putAll(buildFileToplevels);
206197
return env.buildOrThrow();
207198
}
208199

@@ -227,16 +218,14 @@ private static ImmutableMap<String, Object> createUninjectedBuildBzlEnv(
227218

228219
private static ImmutableMap<String, Object> createUninjectedBuildEnv(
229220
Map<String, ?> ruleFunctions,
230-
List<PackageFactory.EnvironmentExtension> environmentExtensions,
231-
Object packageCallable) {
221+
Object packageCallable,
222+
Map<String, Object> buildFileToplevels) {
232223
ImmutableMap.Builder<String, Object> env = ImmutableMap.builder();
233224
env.putAll(StarlarkLibrary.BUILD); // e.g. select, depset
234225
env.putAll(StarlarkNativeModule.BINDINGS_FOR_BUILD_FILES);
235226
env.put("package", packageCallable);
236227
env.putAll(ruleFunctions);
237-
for (PackageFactory.EnvironmentExtension ext : environmentExtensions) {
238-
ext.update(env);
239-
}
228+
env.putAll(buildFileToplevels);
240229
return env.buildOrThrow();
241230
}
242231

0 commit comments

Comments
 (0)