summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/build_engine/target_map/target_map.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp
index 7194ba12..d2e73f07 100644
--- a/src/buildtool/build_engine/target_map/target_map.cpp
+++ b/src/buildtool/build_engine/target_map/target_map.cpp
@@ -563,6 +563,27 @@ void withDependencies(
"for default), but found {}",
timeout_scale_exp->ToString())};
}
+ auto execution_properties = eval(
+ expr->Get("execution properties", Expression::kEmptyMapExpr),
+ env);
+ if (execution_properties->IsNone()) {
+ execution_properties = Expression::kEmptyMap;
+ }
+ if (not(execution_properties->IsMap())) {
+ throw Evaluator::EvaluationError{
+ fmt::format("execution properties has to be a map of "
+ "strings (or null for empty), but found {}",
+ execution_properties->ToString())};
+ }
+ for (auto const& [prop_name, prop_value] :
+ execution_properties->Map()) {
+ if (not prop_value->IsString()) {
+ throw Evaluator::EvaluationError{fmt::format(
+ "execution properties has to be a map of "
+ "strings (or null for empty), but found {}",
+ execution_properties->ToString())};
+ }
+ }
auto action = BuildMaps::Target::Utils::createAction(
outputs,
output_dirs,
@@ -572,7 +593,7 @@ void withDependencies(
no_cache,
timeout_scale_exp->IsNumber() ? timeout_scale_exp->Number()
: 1.0,
- Expression::kEmptyMap,
+ execution_properties,
inputs_exp);
auto action_id = action->Id();
actions.emplace_back(std::move(action));