75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
|
|
# https://github.com/bazelbuild/bazel-toolchains/blob/master/rules/exec_properties/exec_properties.bzl
|
||
|
|
load("@bazel_toolchains//rules/exec_properties:exec_properties.bzl", "create_rbe_exec_properties_dict")
|
||
|
|
|
||
|
|
# https://bazel.build/concepts/platforms-intro
|
||
|
|
# https://bazel.build/docs/platforms
|
||
|
|
platform(
|
||
|
|
name = "linux_x64_hermetic",
|
||
|
|
constraint_values = [
|
||
|
|
"@platforms//os:linux", # https://github.com/bazelbuild/platforms/blob/main/os/BUILD
|
||
|
|
"@platforms//cpu:x86_64", # https://github.com/bazelbuild/platforms/blob/main/cpu/BUILD
|
||
|
|
":use_hermetic_toolchain",
|
||
|
|
],
|
||
|
|
# We specify exec_properties because we have an RBE instance that matches this platform.
|
||
|
|
# exec_properties specify some information that is passed along the Remote Execution API
|
||
|
|
# (REAPI) to the dispatcher which will use it to direct the request to the appropriate
|
||
|
|
# machine/worker, using the Remote Worker API (RWAPI).
|
||
|
|
# http://go/skolo-rbe
|
||
|
|
# These properties will be ignored when running locally, but we must specify them if we want
|
||
|
|
# the action cache to treat things built on a local Linux machine to be the same as built on
|
||
|
|
# a Linux RBE worker (which they should, assuming our hermetic toolchain *is* hermetic).
|
||
|
|
# See https://github.com/bazelbuild/bazel/blob/f28209df2b0ebeff1de0b8b7f6b9e215d890e753/src/main/java/com/google/devtools/build/lib/actions/ActionKeyCacher.java#L67-L73
|
||
|
|
# for how the exec_properties and execution platform impact the action cache.
|
||
|
|
exec_properties = create_rbe_exec_properties_dict(
|
||
|
|
container_image = "docker://gcr.io/skia-public/rbe_linux@sha256:654139e5cecb163f80a7d18e2b2da6c758ebe6325d2d9c41d9facf58e1b3f799",
|
||
|
|
os_family = "Linux",
|
||
|
|
pool = "gce_linux",
|
||
|
|
),
|
||
|
|
)
|
||
|
|
|
||
|
|
platform(
|
||
|
|
name = "mac_x64_hermetic",
|
||
|
|
constraint_values = [
|
||
|
|
"@platforms//os:macos",
|
||
|
|
"@platforms//cpu:x86_64",
|
||
|
|
":use_hermetic_toolchain",
|
||
|
|
],
|
||
|
|
)
|
||
|
|
|
||
|
|
platform(
|
||
|
|
name = "mac_arm64_hermetic",
|
||
|
|
constraint_values = [
|
||
|
|
"@platforms//os:macos",
|
||
|
|
"@platforms//cpu:arm64",
|
||
|
|
":use_hermetic_toolchain",
|
||
|
|
],
|
||
|
|
)
|
||
|
|
|
||
|
|
platform(
|
||
|
|
name = "host_with_hermetic_toolchain",
|
||
|
|
constraint_values = [
|
||
|
|
":use_hermetic_toolchain",
|
||
|
|
],
|
||
|
|
parents = ["@local_config_platform//:host"],
|
||
|
|
)
|
||
|
|
|
||
|
|
platform(
|
||
|
|
name = "android_arm32",
|
||
|
|
constraint_values = [
|
||
|
|
"@platforms//os:android",
|
||
|
|
"@platforms//cpu:arm",
|
||
|
|
],
|
||
|
|
)
|
||
|
|
|
||
|
|
# This constraint allows us to force Bazel to resolve our hermetic toolchain to build
|
||
|
|
# the target and not a default one (e.g. on the Linux RBE instance). We do this by
|
||
|
|
# adding the constraint to our platforms that describe the target we want Bazel to build for.
|
||
|
|
# https://bazel.build/reference/be/platform#constraint_setting
|
||
|
|
constraint_setting(name = "skia_hermetic_toolchain")
|
||
|
|
|
||
|
|
constraint_value(
|
||
|
|
name = "use_hermetic_toolchain",
|
||
|
|
constraint_setting = ":skia_hermetic_toolchain",
|
||
|
|
visibility = ["//visibility:public"],
|
||
|
|
)
|