feat(dev-infra): create shared platform for remote execution (#41767)
Introduces a shared Bazel platform for remote execution builds using Google cloud. Previously we used `bazel_toolchains` for providing the platform w/ additional CPP and Java toolchains `bazel_toolchains` no longer provides default toolchains with the latest version, but provides a tool (linux and windows only) for generating toolchain/platforms, which then need to be checked into the repository. This is quite inconvenient and cumbersome (especially with no macOS support), so we just provide our own platform and CPP toolchain within `//dev-infra`. This is more simple than all the effort we'd need to make the toolchain generation tool work (while it would also increase the amount of checked-in sources significantly; with more unused toolchains for CPP or Java) PR Close #41767
This commit is contained in:
parent
a0a373be8d
commit
59bb24148e
|
@ -5,5 +5,6 @@ filegroup(
|
|||
srcs = [
|
||||
"BUILD.bazel",
|
||||
"expand_template.bzl",
|
||||
"//dev-infra/bazel/remote-execution:files",
|
||||
],
|
||||
)
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
platform(
|
||||
name = "platform",
|
||||
constraint_values = [
|
||||
"@bazel_tools//platforms:linux",
|
||||
"@bazel_tools//platforms:x86_64",
|
||||
"@bazel_tools//tools/cpp:clang",
|
||||
],
|
||||
# We use a basic docker image from the Google Cloud container registry that supports
|
||||
# browser tests. Note that we usually do not use any of the local browsers, but the image
|
||||
# guarantees that necessary dependencies for launching browsers are installed. Since we
|
||||
# do not rely on many binaries/tools from the image, the image doesn't need to be updated
|
||||
# frequently. There are rare cases where it needs to be updated. e.g. for a more recent Bash
|
||||
# version, or new system settings that are required for launching browsers. In order to do that,
|
||||
# we need to either see if the `rbe-ubuntu16-04-webtest` image can be updated, or if we need to
|
||||
# build and publish our own image to the Google cloud image registry. Additionally, we set th
|
||||
# `SYS_ADMIN` capability so that browsers can be launched with sandbox mode enabled. Related
|
||||
# information: https://developers.google.com/web/tools/puppeteer/troubleshooting#running_puppeteer_in_docker
|
||||
remote_execution_properties = """
|
||||
properties: {
|
||||
name: "container-image"
|
||||
value:"docker://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04-webtest@sha256:886a12dc4726f5b991b46386292afa8d943b6703a5496c8a1e07cfde778d9044"
|
||||
}
|
||||
properties: {
|
||||
name: "dockerAddCapabilities"
|
||||
value: "SYS_ADMIN"
|
||||
}
|
||||
""",
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "files",
|
||||
srcs = [
|
||||
"BUILD.bazel",
|
||||
"//dev-infra/bazel/remote-execution/cpp:files",
|
||||
],
|
||||
)
|
|
@ -0,0 +1,57 @@
|
|||
load("@bazel_tools//tools/cpp:cc_toolchain_config.bzl", "cc_toolchain_config")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
filegroup(
|
||||
name = "files",
|
||||
srcs = ["BUILD.bazel"],
|
||||
)
|
||||
|
||||
cc_toolchain_suite(
|
||||
name = "cc_toolchain_suite",
|
||||
toolchains = {
|
||||
"k8": ":cc_compiler_k8",
|
||||
},
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "cc_toolchain",
|
||||
exec_compatible_with = [
|
||||
"@bazel_tools//platforms:linux",
|
||||
"@bazel_tools//platforms:x86_64",
|
||||
"@bazel_tools//tools/cpp:clang",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@bazel_tools//platforms:linux",
|
||||
"@bazel_tools//platforms:x86_64",
|
||||
],
|
||||
toolchain = ":cc_compiler_k8",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
||||
|
||||
# Basic CC toolchain for k8 remote containers. Based on the default k8
|
||||
# toolchain provided in Bazel (but unfortunately internal).
|
||||
# https://github.com/bazelbuild/bazel/blob/c951753097b45cfb9be512c02199aa891b9646b8/tools/cpp/BUILD.tools#L298-L311
|
||||
cc_toolchain(
|
||||
name = "cc_compiler_k8",
|
||||
all_files = ":empty",
|
||||
ar_files = ":empty",
|
||||
as_files = ":empty",
|
||||
compiler_files = ":empty",
|
||||
dwp_files = ":empty",
|
||||
linker_files = ":empty",
|
||||
objcopy_files = ":empty",
|
||||
strip_files = ":empty",
|
||||
supports_param_files = 1,
|
||||
toolchain_config = ":k8_toolchain_config",
|
||||
toolchain_identifier = "cc-k8-compiler",
|
||||
)
|
||||
|
||||
cc_toolchain_config(
|
||||
name = "k8_toolchain_config",
|
||||
compiler = "compiler",
|
||||
cpu = "local",
|
||||
)
|
||||
|
||||
# Empty filegroup used for defining the CC toolchain.
|
||||
filegroup(name = "empty")
|
Loading…
Reference in New Issue