| """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, |
| ), |
| } |