# Bazel toolchain configurations for RBE 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. ## Linux Directories `linux-bazel-` contain Bazel toolchain configurations for Linux RBE builds. Multiple such directories may exist to ease migrating from one Bazel version to the next. ### Toolchain configuration regeneration instructions The Linux RBE toolchain configuration must be regenerated whenever the Linux RBE toolchain container image changes, or when upgrading to a new Bazel version. #### Step 1 Clone the [bazel-toolchains](https://github.com/bazelbuild/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 ``` #### Step 2 Generate a new `//bazel/rbe/linux-bazel-` directory with the `rbe_configs_gen` CLI tool: ``` # Replace the as needed. $ rbe_configs_gen \ --bazel_version= \ --toolchain_container=gcr.io/skia-public/rbe-container-skcms-linux@sha256: \ --output_src_root= \ --output_config_path=bazel/rbe/linux-bazel- \ --generate_java_configs=false \ --exec_os=linux \ --target_os=linux ``` If `rbe_configs_gen` fails, try deleting all files under `//bazel/rbe/linux-bazel-` (if it exists) and re-run `rbe_configs_gen`. #### Step 3 Add an empty `//bazel/rbe/linux-bazel-/WORKSPACE` file. #### Step 4 Open file `//bazel/rbe/linux-bazel-/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", ... ) ``` #### Step 5 Open file `//bazel/rbe/linux-bazel-/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](https://github.com/google/sanitizers/issues/916)). (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.) #### Step 6 Update the paths in `//WORKSPACE` as needed. ## Windows Directories `windows-bazel-` contain Bazel toolchain configurations for Windows RBE builds. Multiple such directories may exist to ease migrating from one Bazel version to the next. ### Toolchain configuration regeneration instructions 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 as needed. $ rbe_configs_gen.exe \ --bazel_version= \ --toolchain_container=gcr.io/skia-public/rbe-container-skia-windows@sha256: \ --output_src_root= \ --output_config_path=bazel/rbe/windows-bazel- \ --generate_java_configs=false \ --exec_os=windows \ --target_os=windows ``` - Step 5 can be omitted. ## macOS TODO(lovisolo)