diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-05-13 11:07:43 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-05-15 13:45:18 +0200 |
commit | d246c53e66b22c7a5b2bb273be5478dba2467357 (patch) | |
tree | 209344799a8a51549d8ef27095ff657aeee25d9d /shell/EXPRESSIONS | |
parent | 07924d28e81fe36ddb8e020552a7392fcf1227a0 (diff) | |
download | rules-cc-d246c53e66b22c7a5b2bb273be5478dba2467357.tar.gz |
Add shell defaults
So far, our rules, where depending on the shell, implicitly use
"normal" defaults, hard-coded in the rules. Support configuring
those in a default target, in the same way we do so for other tools,
like the C compiler. In this, it is also possible to bring your
own shell, built as a (compiled) target.
Diffstat (limited to 'shell/EXPRESSIONS')
-rw-r--r-- | shell/EXPRESSIONS | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/shell/EXPRESSIONS b/shell/EXPRESSIONS new file mode 100644 index 0000000..6ab6c7c --- /dev/null +++ b/shell/EXPRESSIONS @@ -0,0 +1,87 @@ +{ "default-sh": + { "vars": ["defaults-transition", "fieldname"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ [ "fieldname" + , {"type": "var", "name": "fieldname", "default": "defaults"} + ] + , ["provider", "sh"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + , [ "provided sh" + , { "type": "join" + , "$1": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + ] + , [ "sh" + , { "type": "if" + , "cond": {"type": "var", "name": "provided sh"} + , "then": {"type": "var", "name": "provided sh"} + , "else": "sh" + } + ] + ] + , "body": {"type": "var", "name": "sh"} + } + } +, "NON_SYSTEM": + { "vars": ["defaults-transition", "fieldname"] + , "expression": + { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "x" + , "range": + { "type": "FIELD" + , "name": {"type": "var", "name": "fieldname", "default": "defaults"} + } + , "body": + { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "x"} + , "provider": "NON_SYSTEM_TOOLS" + , "transition": + { "type": "var" + , "name": "defaults-transition" + , "default": {"type": "empty_map"} + } + , "default": {"type": "empty_map"} + } + } + } + } +, "sh": + { "vars": ["defaults-transition", "TOOLCHAIN_DIR", "fieldname"] + , "imports": {"default-sh": "default-sh", "NON_SYSTEM": "NON_SYSTEM"} + , "expression": + { "type": "let*" + , "bindings": + [ ["sh", {"type": "CALL_EXPRESSION", "name": "default-sh"}] + , ["NON_SYSTEM", {"type": "CALL_EXPRESSION", "name": "NON_SYSTEM"}] + , [ "sh" + , { "type": "if" + , "cond": + { "type": "lookup" + , "key": "sh" + , "map": {"type": "var", "name": "NON_SYSTEM"} + } + , "then": + { "type": "join" + , "separator": "/" + , "$1": + [ "." + , { "type": "var" + , "name": "TOOLCHAIN_DIR" + , "default": "toolchain" + } + , {"type": "var", "name": "sh"} + ] + } + , "else": {"type": "var", "name": "sh"} + } + ] + ] + , "body": {"type": "var", "name": "sh"} + } + } +} |