This directory contains Bazel toolchain configurations for RBE grouped by operating system.
It might be necessary to rebuild these configurations when the RBE toolchain container image for a specific operating system is updated, or when a new Bazel version is released.
Directories linux-bazel-<BAZEL VERSION>
contain Bazel toolchain configurations for Linux RBE builds. Multiple such directories may exist to ease migrating from one Bazel version to the next.
The Linux RBE toolchain configuration must be regenerated whenever the Linux RBE toolchain container image changes, or when upgrading to a new Bazel version.
Clone the bazel-toolchains repository, build the rbe_configs_gen
binary, and put it in your $PATH
:
$ git clone https://github.com/bazelbuild/bazel-toolchains $ cd bazel-toolchains # This assumes that $HOME/bin is in your $PATH. $ go build -o $HOME/bin/rbe_configs_gen ./cmd/rbe_configs_gen/rbe_configs_gen.go
Generate a new //bazel/rbe/linux-bazel-<BAZEL VERSION>
directory with the rbe_configs_gen
CLI tool:
# Replace the <PLACEHOLDERS> as needed. $ rbe_configs_gen \ --bazel_version=<BAZEL VERSION> \ --toolchain_container=gcr.io/skia-public/rbe-container-skcms-linux@sha256:<HASH OF MOST RECENT IMAGE> \ --output_src_root=<PATH TO REPOSITORY CHECKOUT> \ --output_config_path=bazel/rbe/linux-bazel-<BAZEL VERSION> \ --generate_java_configs=false \ --exec_os=linux \ --target_os=linux
If rbe_configs_gen
fails, try deleting all files under //bazel/rbe/linux-bazel-<BAZEL VERSION>
(if it exists) and re-run rbe_configs_gen
.
Add an empty //bazel/rbe/linux-bazel-<BAZEL VERSION>/WORKSPACE
file.
Open file //bazel/rbe/linux-bazel-<BAZEL VERSION>/config/BUILD
, look for the toolchain
rule named cc-toolchain
, and change the toolchain
attribute as follows:
# Before. toolchain( name = "cc-toolchain", ... toolchain = "//bazel/rbe/linux-bazel-4.2.1/cc:cc-compiler-k8", ... ) # After. toolchain( name = "cc-toolchain", ... toolchain = "//cc:cc-compiler-k8", ... )
Open file //bazel/rbe/linux-bazel-<BAZEL VERSION>/config/BUILD
, look for the platform
rule named platform
, and make change the exec_properties
attribute as follows:
# Before. platform( name = "platform", ... exec_properties = { ... }, ... ) # After. platform( name = "platform", ... exec_properties = { ... "dockerAddCapabilities": "SYS_PTRACE", }, ... )
This is necessary to run tests on Linux RBE with --config=asan
(details here).
(As an alternative, we could disable memory leak detection by setting the environment variable ASAN_OPTIONS=detect_leaks=1
via the --action_env
Bazel flag.)
Update the paths in //WORKSPACE
as needed.
Directories windows-bazel-<BAZEL VERSION>
contain Bazel toolchain configurations for Windows RBE builds. Multiple such directories may exist to ease migrating from one Bazel version to the next.
The Windows RBE toolchain configuration must be regenerated whenever the Windows RBE toolchain container image changes, or when upgrading to a new Bazel version.
The instructions to regenerate the Windows RBE toolchain are the same as for the Linux RBE toolchain, with the following differences:
Any paths should be changed as needed.
In Step 2, run the following command instead:
# Replace the <PLACEHOLDERS> as needed. $ rbe_configs_gen.exe \ --bazel_version=<BAZEL VERSION> \ --toolchain_container=gcr.io/skia-public/rbe-container-skia-windows@sha256:<HASH OF MOST RECENT IMAGE> \ --output_src_root=<PATH TO REPOSITORY CHECKOUT> \ --output_config_path=bazel/rbe/windows-bazel-<BAZEL VERSION> \ --generate_java_configs=false \ --exec_os=windows \ --target_os=windows
TODO(lovisolo)