diff options
Diffstat (limited to 'rules/CC/foreign/RULES')
-rw-r--r-- | rules/CC/foreign/RULES | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/rules/CC/foreign/RULES b/rules/CC/foreign/RULES new file mode 100644 index 0000000..e6463f8 --- /dev/null +++ b/rules/CC/foreign/RULES @@ -0,0 +1,162 @@ +{ "defaults": + { "doc": + [ "A rule to provide defaults for foreign rules." + , "All foreign rules take their defaults for MAKE, CMAKE, etc from" + , "the target [\"CC/foreign\", \"defaults\"]." + ] + , "target_fields": ["base", "toolchain"] + , "string_fields": ["MAKE", "CMAKE", "PATH", "SYSTEM_TOOLS"] + , "field_doc": + { "base": ["Other targets (using the same rule) to inherit values from."] + , "toolchain": + [ "Optional toolchain directory. A collection of artifacts that provide" + , "the tools MAKE, CMAKE. Note that only artifacts of" + , "the specified targets are considered (no runfiles etc.). Specifying" + , "this field extends artifacts from \"base\"." + ] + , "MAKE": ["The make binary to use"] + , "CMAKE": ["The cmake binary to use"] + , "SYSTEM_TOOLS": + [ "List of tools (\"MAKE\", \"CMAKE\") that should be taken from" + , "the system instead of from \"toolchain\" (if specified)." + ] + , "PATH": + [ "Path for looking up the tools. Individual paths are joined with" + , "with \":\". Specifying this field extends values from \"base\"." + ] + } + , "config_vars": ["ARCH", "HOST_ARCH"] + , "imports": + { "base-provides": ["./", "..", "defaults-base-provides"] + , "base-provides-++": ["./", "..", "defaults-base-provides-++"] + , "base-provides-list": ["./", "..", "defaults-base-provides-list"] + , "artifacts_list": ["./", "../..", "field_artifacts_list"] + , "for host": ["transitions", "for host"] + } + , "config_transitions": + {"toolchain": [{"type": "CALL_EXPRESSION", "name": "for host"}]} + , "expression": + { "type": "let*" + , "bindings": + [ ["MAKE", {"type": "FIELD", "name": "MAKE"}] + , ["CMAKE", {"type": "FIELD", "name": "CMAKE"}] + , ["PATH", {"type": "FIELD", "name": "PATH"}] + , ["provider", "MAKE"] + , [ "MAKE" + , { "type": "if" + , "cond": {"type": "var", "name": "MAKE"} + , "then": {"type": "var", "name": "MAKE"} + , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} + } + ] + , ["provider", "CMAKE"] + , [ "CMAKE" + , { "type": "if" + , "cond": {"type": "var", "name": "CMAKE"} + , "then": {"type": "var", "name": "CMAKE"} + , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} + } + ] + , ["provider", "PATH"] + , [ "PATH" + , { "type": "nub_left" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "PATH"} + , {"type": "CALL_EXPRESSION", "name": "base-provides-++"} + ] + } + } + ] + , ["provider", "ENV"] + , ["default", {"type": "empty_map"}] + , ["ENV", {"type": "CALL_EXPRESSION", "name": "base-provides"}] + , ["provider", "NON_SYSTEM_TOOLS"] + , ["default", {"type": "empty_map"}] + , [ "NON_SYSTEM_TOOLS" + , { "type": "map_union" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "base-provides-list"} + , { "type": "if" + , "cond": {"type": "FIELD", "name": "MAKE"} + , "then": + [ { "type": "singleton_map" + , "key": "MAKE" + , "value": + { "type": "if" + , "cond": {"type": "FIELD", "name": "toolchain"} + , "then": true + , "else": false + } + } + ] + } + , { "type": "if" + , "cond": {"type": "FIELD", "name": "CMAKE"} + , "then": + [ { "type": "singleton_map" + , "key": "CMAKE" + , "value": + { "type": "if" + , "cond": {"type": "FIELD", "name": "toolchain"} + , "then": true + , "else": false + } + } + ] + } + , { "type": "foreach" + , "range": {"type": "FIELD", "name": "SYSTEM_TOOLS"} + , "var": "tool" + , "body": + { "type": "singleton_map" + , "key": {"type": "var", "name": "tool"} + , "value": false + } + } + ] + } + } + ] + , ["provider", "TOOLCHAIN"] + , ["default", {"type": "empty_map"}] + , [ "TOOLCHAIN" + , { "type": "disjoint_map_union" + , "msg": "toolchain artifacts may not overlap" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "base-provides-list"} + , { "type": "if" + , "cond": {"type": "FIELD", "name": "toolchain"} + , "then": + { "type": "let*" + , "bindings": + [ ["fieldname", "toolchain"] + , [ "transition" + , {"type": "CALL_EXPRESSION", "name": "for host"} + ] + ] + , "body": + {"type": "CALL_EXPRESSION", "name": "artifacts_list"} + } + } + ] + } + } + ] + ] + , "body": + { "type": "RESULT" + , "provides": + { "type": "env" + , "vars": + ["MAKE", "CMAKE", "PATH", "ENV", "TOOLCHAIN", "NON_SYSTEM_TOOLS"] + } + } + } + } +} |