diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2023-08-16 15:37:21 +0200 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2023-08-16 15:37:21 +0200 |
commit | ebf3cf04bc80ae7bf083220e63e739bf32151c95 (patch) | |
tree | 55528542ed7c08f588ce6ae5389d3c11ca996e19 /CC | |
parent | 875296f27c7eec053a8b4f348ab6490441ef6454 (diff) | |
parent | 2c5e3a6756fc871bbdde8a34d38cda297519b0f9 (diff) | |
download | rules-cc-ebf3cf04bc80ae7bf083220e63e739bf32151c95.tar.gz |
Merge branch 'rules/oss' into rules/rules-cc-rules
Diffstat (limited to 'CC')
-rw-r--r-- | CC/EXPRESSIONS | 145 | ||||
-rw-r--r-- | CC/RULES | 79 | ||||
-rw-r--r-- | CC/auto/RULES | 31 | ||||
-rw-r--r-- | CC/pkgconfig/EXPRESSIONS | 35 | ||||
-rw-r--r-- | CC/proto/EXPRESSIONS | 66 | ||||
-rw-r--r-- | CC/proto/RULES | 74 |
6 files changed, 310 insertions, 120 deletions
diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index e97ed76..2a5011d 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -6,9 +6,7 @@ , "bindings": [ ["fieldname", "defaults"] , ["provider", "CC"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -21,9 +19,7 @@ , "bindings": [ ["fieldname", "defaults"] , ["provider", "CXX"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -36,9 +32,7 @@ , "bindings": [ ["fieldname", "defaults"] , ["provider", "AR"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -51,9 +45,7 @@ , "bindings": [ ["fieldname", "defaults"] , ["provider", "CFLAGS"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -66,9 +58,7 @@ , "bindings": [ ["fieldname", "defaults"] , ["provider", "CXXFLAGS"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -81,9 +71,7 @@ , "bindings": [ ["fieldname", "defaults"] , ["provider", "LDFLAGS"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -96,14 +84,25 @@ , "bindings": [ ["fieldname", "defaults"] , ["provider", "ENV"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] , ["default", {"type": "empty_map"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} } } +, "default-PATH": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "PATH"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } , "default-TOOLCHAIN": { "vars": ["defaults-transition"] , "imports": {"map_provider": ["./", "..", "field_map_provider"]} @@ -112,9 +111,7 @@ , "bindings": [ ["fieldname", "defaults"] , ["provider", "TOOLCHAIN"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] , ["default", {"type": "empty_map"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} @@ -142,29 +139,39 @@ } } } -, "defaults-base-provides": - { "doc": ["Query list-provider from 'base' targets (last wins)"] +, "defaults-base-provides-list": + { "doc": ["Query list of providers from 'base' targets"] , "vars": ["provider", "default"] , "vars_doc": - { "provider": ["The name of the list-provider in the provides map."] + { "provider": ["The name of the provider in the provides map."] , "default": ["The default if provider is missing (default: [])."] } , "imports": {"provider_list": ["./", "..", "field_provider_list"]} , "expression": { "type": "let*" , "bindings": [["fieldname", "base"]] + , "body": {"type": "CALL_EXPRESSION", "name": "provider_list"} + } + } +, "defaults-base-provides": + { "doc": ["Query provider from 'base' targets (last wins)"] + , "vars": ["provider", "default"] + , "vars_doc": + { "provider": ["The name of the provider in the provides map."] + , "default": ["The default if provider is missing (default: [])."] + } + , "imports": {"base-provides-list": "defaults-base-provides-list"} + , "expression": + { "type": "foldl" + , "var": "next" + , "start": {"type": "var", "name": "default", "default": []} + , "accum_var": "curr" + , "range": {"type": "CALL_EXPRESSION", "name": "base-provides-list"} , "body": - { "type": "foldl" - , "var": "next" - , "start": {"type": "var", "name": "default", "default": []} - , "accum_var": "curr" - , "range": {"type": "CALL_EXPRESSION", "name": "provider_list"} - , "body": - { "type": "if" - , "cond": {"type": "var", "name": "next"} - , "then": {"type": "var", "name": "next"} - , "else": {"type": "var", "name": "curr"} - } + { "type": "if" + , "cond": {"type": "var", "name": "next"} + , "then": {"type": "var", "name": "next"} + , "else": {"type": "var", "name": "curr"} } } } @@ -900,6 +907,7 @@ , "objects": "objects" , "default-AR": "default-AR" , "default-ENV": "default-ENV" + , "default-PATH": "default-PATH" , "default-TOOLCHAIN": "default-TOOLCHAIN" , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" } @@ -957,6 +965,36 @@ ] } ] + , [ "ENV_PATH" + , { "type": "lookup" + , "map": {"type": "var", "name": "ENV"} + , "key": "PATH" + } + ] + , [ "ENV" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "ENV"} + , { "type": "singleton_map" + , "key": "PATH" + , "value": + { "type": "join" + , "separator": ":" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "default-PATH"} + , { "type": "if" + , "cond": {"type": "var", "name": "ENV_PATH"} + , "then": [{"type": "var", "name": "ENV_PATH"}] + } + ] + } + } + } + ] + } + ] , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] , [ "base name" , { "type": "if" @@ -1517,6 +1555,7 @@ , "flags": "flags" , "objects": "objects" , "default-ENV": "default-ENV" + , "default-PATH": "default-PATH" , "default-LDFLAGS": "default-LDFLAGS" , "default-TOOLCHAIN": "default-TOOLCHAIN" , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" @@ -1564,6 +1603,36 @@ ] } ] + , [ "ENV_PATH" + , { "type": "lookup" + , "map": {"type": "var", "name": "ENV"} + , "key": "PATH" + } + ] + , [ "ENV" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "ENV"} + , { "type": "singleton_map" + , "key": "PATH" + , "value": + { "type": "join" + , "separator": ":" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "default-PATH"} + , { "type": "if" + , "cond": {"type": "var", "name": "ENV_PATH"} + , "then": [{"type": "var", "name": "ENV_PATH"}] + } + ] + } + } + } + ] + } + ] , ["hdrs", {"type": "empty_map"}] , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] , [ "link-args" @@ -26,7 +26,10 @@ [ "Optional toolchain directory. A collection of artifacts that provide" , "the tools CC, CXX, and AR (if needed). Note that only artifacts of" , "the specified targets are considered (no runfiles etc.). Specifying" - , "this field overlays artifacts from \"base\"." + , "this field extends artifacts from \"base\". If the toolchain" + , "supports cross-compilation, it should perform a dispatch on the" + , "configuration variable \"BUILD_ARCH\" to determine for which" + , "architecture to generate code for." ] , "deps": [ "Optional CC libraries any CC library and CC binary implicitly depend" @@ -66,13 +69,15 @@ ] , "PATH": [ "Path for looking up the compilers. Individual paths are joined" - , "with \":\"." + , "with \":\". Specifying this field extends values from \"base\"." ] } - , "config_vars": ["ARCH", "HOST_ARCH"] + , "config_vars": ["ARCH", "HOST_ARCH", "TARGET_ARCH"] , "imports": { "base-provides": "defaults-base-provides" - , "artifacts": ["./", "..", "field_artifacts"] + , "base-provides-list": "defaults-base-provides-list" + , "artifacts_list": ["./", "..", "field_artifacts_list"] + , "nub_left": ["", "nub_left"] , "compile-deps": "compile-deps" , "compile-args-deps": "compile-args-deps" , "link-deps": "link-deps" @@ -143,23 +148,26 @@ , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} } ] - , ["provider", "ENV"] - , ["default", {"type": "empty_map"}] - , [ "ENV" - , { "type": "if" - , "cond": {"type": "var", "name": "PATH"} - , "then": - { "type": "singleton_map" - , "key": "PATH" - , "value": - { "type": "join" - , "separator": ":" - , "$1": {"type": "var", "name": "PATH"} + , ["provider", "PATH"] + , [ "PATH" + , { "type": "++" + , "$1": + [ {"type": "var", "name": "PATH"} + , { "type": "++" + , "$1": {"type": "CALL_EXPRESSION", "name": "base-provides-list"} } - } - , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} + ] } ] + , [ "PATH" + , { "type": "let*" + , "bindings": [["list", {"type": "var", "name": "PATH"}]] + , "body": {"type": "CALL_EXPRESSION", "name": "nub_left"} + } + ] + , ["provider", "ENV"] + , ["default", {"type": "empty_map"}] + , ["ENV", {"type": "CALL_EXPRESSION", "name": "base-provides"}] , ["provider", "NON_SYSTEM_TOOLS"] , ["default", {"type": "empty_map"}] , [ "NON_SYSTEM_TOOLS" @@ -226,24 +234,28 @@ , ["provider", "TOOLCHAIN"] , ["default", {"type": "empty_map"}] , [ "TOOLCHAIN" - , { "type": "map_union" + , { "type": "disjoint_map_union" + , "msg": "toolchain artifacts may not overlap" , "$1": - [ {"type": "CALL_EXPRESSION", "name": "base-provides"} - , { "type": "if" - , "cond": {"type": "FIELD", "name": "toolchain"} - , "then": - { "type": "let*" - , "bindings": - [ ["fieldname", "toolchain"] - , [ "transition" - , {"type": "CALL_EXPRESSION", "name": "for host"} + { "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"} + , "body": + {"type": "CALL_EXPRESSION", "name": "artifacts_list"} + } } - , "else": {"type": "empty_map"} - } - ] + ] + } } ] , [ "CFLAGS" @@ -300,6 +312,7 @@ , "CXXFLAGS" , "LDFLAGS" , "AR" + , "PATH" , "ENV" , "TOOLCHAIN" , "NON_SYSTEM_TOOLS" diff --git a/CC/auto/RULES b/CC/auto/RULES index 247ee01..0e156c9 100644 --- a/CC/auto/RULES +++ b/CC/auto/RULES @@ -156,6 +156,7 @@ , "flags-cc": ["./", "..", "flags-cc"] , "flags-cxx": ["./", "..", "flags-cxx"] , "default-ENV": ["./", "..", "default-ENV"] + , "default-PATH": ["./", "..", "default-PATH"] , "default-TOOLCHAIN": ["./", "..", "default-TOOLCHAIN"] , "default-NON_SYSTEM_TOOLS": ["./", "..", "default-NON_SYSTEM_TOOLS"] } @@ -222,6 +223,36 @@ ] } ] + , [ "ENV_PATH" + , { "type": "lookup" + , "map": {"type": "var", "name": "ENV"} + , "key": "PATH" + } + ] + , [ "ENV" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "ENV"} + , { "type": "singleton_map" + , "key": "PATH" + , "value": + { "type": "join" + , "separator": ":" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "default-PATH"} + , { "type": "if" + , "cond": {"type": "var", "name": "ENV_PATH"} + , "then": [{"type": "var", "name": "ENV_PATH"}] + } + ] + } + } + } + ] + } + ] , [ "c.flags" , { "type": "BLOB" , "data": diff --git a/CC/pkgconfig/EXPRESSIONS b/CC/pkgconfig/EXPRESSIONS index 4c174c4..535faf6 100644 --- a/CC/pkgconfig/EXPRESSIONS +++ b/CC/pkgconfig/EXPRESSIONS @@ -1,6 +1,9 @@ { "pkgconfig result": { "vars": ["ENV", "name", "args", "stage"] - , "imports": {"default-ENV": ["./", "..", "default-ENV"]} + , "imports": + { "default-ENV": ["./", "..", "default-ENV"] + , "default-PATH": ["./", "..", "default-PATH"] + } , "expression": { "type": "let*" , "bindings": @@ -12,6 +15,36 @@ ] } ] + , [ "ENV_PATH" + , { "type": "lookup" + , "map": {"type": "var", "name": "ENV"} + , "key": "PATH" + } + ] + , [ "ENV" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "ENV"} + , { "type": "singleton_map" + , "key": "PATH" + , "value": + { "type": "join" + , "separator": ":" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "default-PATH"} + , { "type": "if" + , "cond": {"type": "var", "name": "ENV_PATH"} + , "then": [{"type": "var", "name": "ENV_PATH"}] + } + ] + } + } + } + ] + } + ] , [ "cflags-filename" , {"type": "join", "$1": [{"type": "var", "name": "name"}, ".cflags"]} ] diff --git a/CC/proto/EXPRESSIONS b/CC/proto/EXPRESSIONS index 6be74df..29c205c 100644 --- a/CC/proto/EXPRESSIONS +++ b/CC/proto/EXPRESSIONS @@ -6,9 +6,7 @@ , "bindings": [ ["fieldname", "proto-defaults"] , ["provider", "PROTOC"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -21,9 +19,7 @@ , "bindings": [ ["fieldname", "proto-defaults"] , ["provider", "LDFLAGS"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -36,9 +32,7 @@ , "bindings": [ ["fieldname", "proto-defaults"] , ["provider", "GRPC_PLUGIN"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -51,14 +45,25 @@ , "bindings": [ ["fieldname", "proto-defaults"] , ["provider", "ENV"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] , ["default", {"type": "empty_map"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} } } +, "default-PATH": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "../..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "proto-defaults"] + , ["provider", "PATH"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } , "default-TOOLCHAIN": { "vars": ["defaults-transition"] , "imports": {"map_provider": ["./", "../..", "field_map_provider"]} @@ -67,9 +72,7 @@ , "bindings": [ ["fieldname", "proto-defaults"] , ["provider", "TOOLCHAIN"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + , ["transition", {"type": "var", "name": "defaults-transition"}] , ["default", {"type": "empty_map"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} @@ -128,6 +131,7 @@ , "default-LDFLAGS": "default-LDFLAGS" , "default-GRPC_PLUGIN": "default-GRPC_PLUGIN" , "default-ENV": "default-ENV" + , "default-PATH": "default-PATH" , "default-TOOLCHAIN": "default-TOOLCHAIN" , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" } @@ -182,7 +186,7 @@ } } ] - , [ "protoc-ENV" + , [ "ENV" , { "type": "map_union" , "$1": [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} @@ -190,6 +194,36 @@ ] } ] + , [ "ENV_PATH" + , { "type": "lookup" + , "map": {"type": "var", "name": "ENV"} + , "key": "PATH" + } + ] + , [ "protoc-ENV" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "ENV"} + , { "type": "singleton_map" + , "key": "PATH" + , "value": + { "type": "join" + , "separator": ":" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "default-PATH"} + , { "type": "if" + , "cond": {"type": "var", "name": "ENV_PATH"} + , "then": [{"type": "var", "name": "ENV_PATH"}] + } + ] + } + } + } + ] + } + ] , ["protoc-deps", {"type": "CALL_EXPRESSION", "name": "protoc-deps"}] , [ "proto srcs" , { "type": "disjoint_map_union" diff --git a/CC/proto/RULES b/CC/proto/RULES index ac7a371..8108161 100644 --- a/CC/proto/RULES +++ b/CC/proto/RULES @@ -19,7 +19,7 @@ [ "Optional toolchain directory. A collection of artifacts that provide" , "the protobuf compiler and the GRPC plugin (if needed). Note that only" , "artifacts of the specified targets are considered (no runfiles etc.)." - , "Specifying this field overlays artifacts from \"base\"." + , "Specifying this field extends artifacts from \"base\"." ] , "deps": [ "Optional CC libraries the resulting CC proto libraries implicitly" @@ -51,12 +51,14 @@ ] , "PATH": [ "Path for looking up the proto compiler. Individual paths are joined" - , "with \":\"." + , "with \":\". Specifying this field extends values from \"base\"." ] } , "imports": { "base-provides": ["./", "..", "defaults-base-provides"] - , "artifacts": ["", "field_artifacts"] + , "base-provides-list": ["./", "..", "defaults-base-provides-list"] + , "artifacts_list": ["", "field_artifacts_list"] + , "nub_left": ["", "nub_left"] , "compile-deps": ["CC", "compile-deps"] , "compile-args-deps": ["CC", "compile-args-deps"] , "link-deps": ["CC", "link-deps"] @@ -100,23 +102,26 @@ , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} } ] - , ["provider", "ENV"] - , ["default", {"type": "empty_map"}] - , [ "ENV" - , { "type": "if" - , "cond": {"type": "var", "name": "PATH"} - , "then": - { "type": "singleton_map" - , "key": "PATH" - , "value": - { "type": "join" - , "separator": ":" - , "$1": {"type": "var", "name": "PATH"} + , ["provider", "PATH"] + , [ "PATH" + , { "type": "++" + , "$1": + [ {"type": "var", "name": "PATH"} + , { "type": "++" + , "$1": {"type": "CALL_EXPRESSION", "name": "base-provides-list"} } - } - , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} + ] } ] + , [ "PATH" + , { "type": "let*" + , "bindings": [["list", {"type": "var", "name": "PATH"}]] + , "body": {"type": "CALL_EXPRESSION", "name": "nub_left"} + } + ] + , ["provider", "ENV"] + , ["default", {"type": "empty_map"}] + , ["ENV", {"type": "CALL_EXPRESSION", "name": "base-provides"}] , ["provider", "NON_SYSTEM_TOOLS"] , ["default", {"type": "empty_map"}] , [ "NON_SYSTEM_TOOLS" @@ -160,24 +165,28 @@ , ["provider", "TOOLCHAIN"] , ["default", {"type": "empty_map"}] , [ "TOOLCHAIN" - , { "type": "map_union" + , { "type": "disjoint_map_union" + , "msg": "toolchain artifacts may not overlap" , "$1": - [ {"type": "CALL_EXPRESSION", "name": "base-provides"} - , { "type": "if" - , "cond": {"type": "FIELD", "name": "toolchain"} - , "then": - { "type": "let*" - , "bindings": - [ ["fieldname", "toolchain"] - , [ "transition" - , {"type": "CALL_EXPRESSION", "name": "for host"} + { "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"} + , "body": + {"type": "CALL_EXPRESSION", "name": "artifacts_list"} + } } - , "else": {"type": "empty_map"} - } - ] + ] + } } ] , [ "LDFLAGS" @@ -215,6 +224,7 @@ [ "PROTOC" , "LDFLAGS" , "GRPC_PLUGIN" + , "PATH" , "ENV" , "TOOLCHAIN" , "NON_SYSTEM_TOOLS" |