summaryrefslogtreecommitdiff
path: root/shell/EXPRESSIONS
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-05-13 11:07:43 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-05-15 13:45:18 +0200
commitd246c53e66b22c7a5b2bb273be5478dba2467357 (patch)
tree209344799a8a51549d8ef27095ff657aeee25d9d /shell/EXPRESSIONS
parent07924d28e81fe36ddb8e020552a7392fcf1227a0 (diff)
downloadrules-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/EXPRESSIONS87
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"}
+ }
+ }
+}