diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2023-06-20 16:59:25 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2023-06-22 17:58:50 +0200 |
commit | 9dd7a8cab2757dc0e7d19023442046cacfef7e5f (patch) | |
tree | 1d843d01ed84690a9ed5c2044728b6d310d5af21 /src | |
parent | 1d2e5f3469125f02b51126333388e49f08d56c85 (diff) | |
download | justbuild-9dd7a8cab2757dc0e7d19023442046cacfef7e5f.tar.gz |
genric target: support timeout scaling
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/build_engine/target_map/built_in_rules.cpp | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/src/buildtool/build_engine/target_map/built_in_rules.cpp b/src/buildtool/build_engine/target_map/built_in_rules.cpp index afbb3975..aca7cc6d 100644 --- a/src/buildtool/build_engine/target_map/built_in_rules.cpp +++ b/src/buildtool/build_engine/target_map/built_in_rules.cpp @@ -43,6 +43,7 @@ auto const kGenericRuleFields = "deps", "env", "tainted", + "timeout scaling", "type", "out_dirs", "outs"}; @@ -1034,6 +1035,27 @@ void GenericRuleWithDeps( } } + auto scale_exp = + desc->ReadOptionalExpression("timeout scaling", Expression::kOne); + if (not scale_exp) { + return; + } + auto scale_val = scale_exp.Evaluate( + param_config, string_fields_fcts, [&logger](auto const& msg) { + (*logger)(fmt::format("While evaluating timeout scaling:\n{}", msg), + true); + }); + if (not scale_val) { + return; + } + if (not(scale_val->IsNumber() or scale_val->IsNone())) { + (*logger)(fmt::format("timeout scaling has evaluate to a number (or " + "null for default), but found {}", + scale_val->ToString()), + true); + return; + } + // Construct inputs; in case of conflicts, artifacts take precedence // over runfiles. auto inputs = ExpressionPtr{Expression::map_t{}}; @@ -1045,16 +1067,16 @@ void GenericRuleWithDeps( } // Construct our single action, and its artifacts - auto action = - BuildMaps::Target::Utils::createAction(outs, - out_dirs, - {"sh", "-c", cmd_ss.str()}, - env_val, - std::nullopt, - false, - 1.0, - Expression::kEmptyMap, - inputs); + auto action = BuildMaps::Target::Utils::createAction( + outs, + out_dirs, + {"sh", "-c", cmd_ss.str()}, + env_val, + std::nullopt, + false, + scale_val->IsNumber() ? scale_val->Number() : 1.0, + Expression::kEmptyMap, + inputs); auto action_identifier = action->Id(); Expression::map_t::underlying_map_t artifacts; for (const auto& container : {outs, out_dirs}) { |