"""Utilities for rules that expose resource_set on ctx.actions.run[_shell] Workaround for https://github.com/bazelbuild/bazel/issues/15187 Note, this workaround only provides some fixed values for either CPU or Memory. Rule authors who are ALSO the BUILD author might know better, and can write custom resource_set functions for use within their own repository. This seems to be the use case that Google engineers imagined. """ resource_set_values = [ "cpu_2", "cpu_4", "default", "mem_512m", "mem_1g", "mem_2g", "mem_4g", "mem_8g", "mem_16g", "mem_32g", ] def _resource_set_cpu_2(_, __): return {"cpu": 2} def _resource_set_cpu_4(_, __): return {"cpu": 4} def _resource_set_mem_512m(_, __): return {"memory": 512} def _resource_set_mem_1g(_, __): return {"memory": 1024} def _resource_set_mem_2g(_, __): return {"memory": 2048} def _resource_set_mem_4g(_, __): return {"memory": 4096} def _resource_set_mem_8g(_, __): return {"memory": 8192} def _resource_set_mem_16g(_, __): return {"memory": 16384} def _resource_set_mem_32g(_, __): return {"memory": 32768} # buildifier: disable=function-docstring def resource_set(attr): if attr.resource_set == "cpu_2": return _resource_set_cpu_2 if attr.resource_set == "cpu_4": return _resource_set_cpu_4 if attr.resource_set == "default": return None if attr.resource_set == "mem_512m": return _resource_set_mem_512m if attr.resource_set == "mem_1g": return _resource_set_mem_1g if attr.resource_set == "mem_2g": return _resource_set_mem_2g if attr.resource_set == "mem_4g": return _resource_set_mem_4g if attr.resource_set == "mem_8g": return _resource_set_mem_8g if attr.resource_set == "mem_16g": return _resource_set_mem_16g if attr.resource_set == "mem_32g": return _resource_set_mem_32g fail("unknown resource set", attr.resource_set) resource_set_attr = { "resource_set": attr.string( doc = """A predefined function used as the resource_set for actions. Used with --experimental_action_resource_set to reserve more RAM/CPU, preventing Bazel overscheduling resource-intensive actions. By default, Bazel allocates 1 CPU and 250M of RAM. https://github.com/bazelbuild/bazel/blob/058f943037e21710837eda9ca2f85b5f8538c8c5/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java#L77 """, default = "default", values = resource_set_values, ), }