From b16d9ddb33ac6f1197c496c8aaf4c98f5c8665d3 Mon Sep 17 00:00:00 2001 From: Greg Estren Date: Thu, 25 Apr 2019 18:03:35 -0400 Subject: [PATCH] Refresh configurabilty roadmap --- roadmaps/configuration.md | 97 +++++++++++++++++++++------------------ 1 file changed, 52 insertions(+), 45 deletions(-) diff --git a/roadmaps/configuration.md b/roadmaps/configuration.md index 26d989494f6..d36b24ff75c 100644 --- a/roadmaps/configuration.md +++ b/roadmaps/configuration.md @@ -32,7 +32,7 @@ title: Bazel Configurability Roadmap # Bazel Configurability 2019 Roadmap -*Last verified: 2019-01-28* ([update history](https://github.com/bazelbuild/bazel-website/commits/master/roadmaps/configuration.md)) +*Last verified: 2019-04-25* ([update history](https://github.com/bazelbuild/bazel-website/commits/master/roadmaps/configuration.md)) *Point of contact:* [gregestren](https://github.com/gregestren) @@ -57,8 +57,12 @@ title: Bazel Configurability Roadmap ## Roadmap Dates are approximate based on our best understanding of problem complexity -and developer availability. ETAs will change, but we'll keep them refreshed and -current. +and developer availability. Dates represent expected availability in released +Bazel. If a feature requires an [incompatible +flag](https://docs.bazel.build/versions/master/backward-compatibility.html#incompatible-changes-and-migration-recipes), +dates represent the first time the feature can be used, even if it requires +setting the flag before it's on by default. ETAs will change, but we'll keep +them refreshed and current. ### Platforms Also see the [Platforms Roadmap](platforms.html) for detailed priorities. @@ -73,7 +77,7 @@ Also see the [Platforms Roadmap](platforms.html) for detailed priorities. platforms](https://docs.bazel.build/versions/master/be/general.html#config_setting.constraint_values), and configuration via [-\-platforms](https://docs.bazel.build/versions/master/platforms.html#specifying-a-platform-for-a-build) -* These set best practice templates for adding platform and toolchain support to other rules +* Sets best practices for adding platform and toolchain support to other rules
@@ -82,9 +86,6 @@ and configuration via [toolchains](https://docs.bazel.build/versions/master/toolchains.html)** IN PROGRESS ([#6521](https://github.com/bazelbuild/bazel/issues/6521)) -* A second major rule set adopts this API - -
Jun 2019**There's _one_ standard way to select platforms at the command line** @@ -96,11 +97,18 @@ at the command line**
Jun 2019**Legacy flags like `--cpu` automatically set `--platform` while the former are removed** -NOT STARTED ([#6426](https://github.com/bazelbuild/bazel/issues/6426)) +IN PROGRESS ([#6426](https://github.com/bazelbuild/bazel/issues/6426)) * This prevents `.bazelrc`s, `select()`s on `--cpu`, and legacy command lines from breaking as rules adopt platforms -* Rules can leverage the benefits of platforms without having to wait on migration +* Rules can get platforms' benefits without having to wait on migration + +
+Aug 2019**All supported Bazel rules support +[platforms](https://docs.bazel.build/versions/master/platforms.html) and +[toolchains](https://docs.bazel.build/versions/master/toolchains.html)** +IN PROGRESS +* Python: [#7375](https://github.com/bazelbuild/bazel/issues/7375)
late 2019**Flagless multiplatform builds @@ -114,37 +122,29 @@ at the command line** $ bazel build //a:all # No command line flags! ``` -* *Unoptimized* means [memory and performance](#memory-and-performance) issues may not be resolved - - -
-late 2019**All supported Bazel rules fully support -[platforms](https://docs.bazel.build/versions/master/platforms.html) and -[toolchains](https://docs.bazel.build/versions/master/toolchains.html)** -NOT STARTED - +* *Unoptimized* means [memory and performance](#efficiency) issues may not be resolved ### User-Defined Build Settings See [Starlark Build Configuration](https://docs.google.com/document/d/1vc8v-kXjvgZOdQdnxPTaV0rrLxtP2XwnD2tAZlYJOqw/edit?usp=sharing) for in-depth motivation and design.
Mar 2019**Starlark supports custom configuration transitions** -IN PROGRESS ([#5574](http://github.com/bazelbuild/bazel/issues/5574)) +DONE ([#5574](http://github.com/bazelbuild/bazel/issues/5574#issuecomment-458349702)) * Rule designers can have rules change their flags or their dependencies' flags -* This may have [memory and performance](#memory-and-performance) consequences +* This may have [memory and performance](#efficiency) consequences
-Apr 2019**Starlark supports [fancy](https://docs.google.com/document/d/1VIRx06cZB4wLU-ASq1XKFHmx67yfHtNOCbCempaPeaA/edit) transitions** +Jul 2019**Starlark supports [fancy](https://docs.google.com/document/d/1VIRx06cZB4wLU-ASq1XKFHmx67yfHtNOCbCempaPeaA/edit) transitions** IN PROGRESS ([#5574](http://github.com/bazelbuild/bazel/issues/5574)) -* Transitions can read a rule's attributes to determine what to change +* Transitions can read a rule's attributes to determine what to change DONE * Transitions on a rule can read attributes with `select()`
-Apr 2019**Starlark supports user-defined build settings** +Jul 2019**Starlark supports user-defined build settings** IN PROGRESS ([#5577](http://github.com/bazelbuild/bazel/issues/5577)) * A standard API defines how to declare custom settings. This consolidates [command @@ -155,39 +155,37 @@ See [Starlark Build Configuration](https://docs.google.com/document/d/1vc8v-kXjv [--define](https://github.com/bazelbuild/bazel/blob/b3cf83cd20f30d77e6768de651a3e652f86d6f78/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java#L423), [--features](https://source.bazel.build/bazel/+/master:src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java;l=835?q=file:BuildConfiguration.java), and [feature - flags](https://github.com/bazelbuild/bazel/blob/d6a98282e229b311dd56e65b72003197120f299a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java#L3107)). + flags](https://github.com/bazelbuild/bazel/blob/d6a98282e229b311dd56e65b72003197120f299a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java#L3107)). DONE * All hard-coded Bazel flags can be migrated to this API. Actual migration may - not have begun. + not have begun. IN PROGRESS * End users (i.e. non-rule designers) can't customize settings. For end users, we want to start by seeing how far we can get with [`--platforms`](https://docs.bazel.build/versions/master/platforms.html#specifying-a-platform-for-a-build) and [feature flags](https://github.com/bazelbuild/bazel/blob/d6a98282e229b311dd56e65b72003197120f299a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java#L3107).
-Apr 2019**All native Bazel rules can be implemented +Jul 2019**All native Bazel rules can be implemented in Starlark** IN PROGRESS ([#5578](http://github.com/bazelbuild/bazel/issues/5578)) * This automatically comes out of user-defined build settings and custom transitions -### Memory and Performance +### Efficiency
-Mar 2019**Documentation explains how to use -[configuration transitions](#user-defined-build-settings) efficiently** -NOT STARTED ([#6525](https://github.com/bazelbuild/bazel/issues/6525)) - -* Explains why builds may use more memory and take more time -* Explains how to minimize these risks and make informed use of these features -* Points to tools for profiling your build -* Explains ongoing work to automatically improve efficiency +May 2019**An experimental Bazel mode automatically +shrinks build graphs** +DONE ([#6524](https://github.com/bazelbuild/bazel/issues/6524)) +* No rule builds twice when unrelated flags change +* Building the *Mac* and *Linux* versions of a binary at the same time doesn't double the build graph
-May 2019**An experimental Bazel mode automatically -shrinks build graphs** +Jul 2019**This mode automatically optimizes [test +trimming](https://github.com/bazelbuild/bazel/issues/5579) and [feature flags](https://github.com/bazelbuild/bazel/blob/d6a98282e229b311dd56e65b72003197120f299a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java#L3107)** IN PROGRESS ([#6524](https://github.com/bazelbuild/bazel/issues/6524)) * No rule builds twice when unrelated flags change @@ -196,7 +194,7 @@ shrinks build graphs**
Jul 2019**An experimental Bazel mode makes identical actions unique** -NOT STARTED ([#6526](https://github.com/bazelbuild/bazel/issues/6526)) +IN PROGRESS ([#6526](https://github.com/bazelbuild/bazel/issues/6526)) * Stops different actions from writing to the same path and overwriting each other's output * Improves multiplatform build time and remoe execution caching @@ -204,17 +202,26 @@ shrinks build graphs**
-late 2019**Bazel automatically shrinks graphs with -mixed build settings** -NOT STARTED ([#6524](https://github.com/bazelbuild/bazel/issues/6524)) +Jul 2019**Projects can selectively opt into automatic shareable actions** +NOT STARTED ([#6526](https://github.com/bazelbuild/bazel/issues/6526)) -* Productionizes experimental build graph shrinking +* Exposes the benefits of experimental unique actions while recognizing complete migration may take time
-late 2019**Projects can selectively opt into automatic shareable actions** -NOT STARTED ([#6526](https://github.com/bazelbuild/bazel/issues/6526)) +Jul 2019**Documentation explains how to use +[configuration transitions](#user-defined-build-settings) efficiently** +NOT STARTED ([#6525](https://github.com/bazelbuild/bazel/issues/6525)) + +* Explains why builds may use more memory and be slower +* Explains how to minimize this and make informed use of these features +* Points to tools for profiling your build +* Explains ongoing work to automatically improve efficiency -* Exposes the benefits of experimental unique actions while recognizing complete migration may take time +
+late 2019**Bazel automatically shrinks graphs with +mixed build settings** +NOT STARTED ([#6524](https://github.com/bazelbuild/bazel/issues/6524)) +* Productionizes experimental build graph shrinking