Bazel Build API 2021 Roadmap

Last verified: 2021-02-12 (update history)

Point of contact: comius

Discuss: Build API roadmap: discussion

Scope

Build API team is covering native rule implementations and the native API exposed to Starlark.

Goal

Have all rules implemented in Starlark and handed over to teams specialised in the particular language. Remove language specific logic from Bazel’s core.

Java rules

The Java rules will first be rewritten to Starlark and tested internally on a large code-base. After that they will be released to Bazel.

Q1 2021

  • Improve the Java sandwich, making it possible to rewrite existing Java rules. IN PROGRESS
  • Improve Starlark support for native libraries in Java. IN PROGRESS

Mid 2021

  • java_library, java_binary and java_test rules are Starlarkified.
  • java_import and java_plugin rules are Starlarkified.

Fall 2021

  • Starlarkification of java_*_proto_library
  • Remaining java rules are Starlarkified: java_package_configuration, java_runtime, java_toolchain.

2022

  • Starlarkification of java_common module.

C++ rules

Before C++ rules can be rewritten in Starlark some internal cleanups are needed. After that the C++ rules will be rewritten to Starlark piece by piece using builtins functionality. The API for C++ rules will not be made accessible from .bzl files until cc_module is rewritten in Starlark as well.

Q1 2021

  • Clang modules support, IN PROGRESS
  • and Include scanning support, expected performance improvements from both

Mid 2021

  • Internal Go rules are Starlarkified IN PROGRESS
  • Objective-C rules objc_library, j2objc_library, and objc_import are Starlarkified
  • Optionally (if needed): platformization of apple_binary and Android rules

Fall 2021 and beginning 2022

  • cc_binary, cc_test and cc_library are Starlarkified

2022

  • Starlarkification of other C++ rules (fdo_profile, cc_import, cc_toolchain, cc_toolchain_suite, fdo_prefetch_hints, cc_toolchain_alias, cc_libc_top_alias, cc_host_toolchain_alias, +2)
  • Starlarkification of cc_common module