diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2023-01-20 16:20:30 +0100 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2023-01-20 16:20:30 +0100 |
commit | 89b76f2558da0c41280b9eb389384824babfbef6 (patch) | |
tree | 489057736f3fcc4f9e14bcb27e14eb0effbd815a /rules/CC/EXPRESSIONS | |
parent | 25981eeccf645ddc6338bed0b159014f210f4326 (diff) | |
parent | e75f101e8b988adb458e594ffaaaebc0c01f65df (diff) | |
download | rules-cc-89b76f2558da0c41280b9eb389384824babfbef6.tar.gz |
Merge commit 'e75f101e8b988adb458e594ffaaaebc0c01f65df' into rules-cc
Diffstat (limited to 'rules/CC/EXPRESSIONS')
-rw-r--r-- | rules/CC/EXPRESSIONS | 384 |
1 files changed, 293 insertions, 91 deletions
diff --git a/rules/CC/EXPRESSIONS b/rules/CC/EXPRESSIONS index cfbce42..5a425c7 100644 --- a/rules/CC/EXPRESSIONS +++ b/rules/CC/EXPRESSIONS @@ -333,6 +333,151 @@ } } } +, "pkg-map-provider-deps": + { "doc": ["Collect maps from provider \"package\" for given target_fields"] + , "vars": ["pkg-key", "deps-fieldnames", "deps-transition"] + , "vars_doc": + { "pkg-key": ["Key to lookup in provider \"package\"."] + , "deps-fieldnames": ["List of target_field names to collect maps from."] + , "deps-transition": + ["The optional configuration transition for the targets."] + } + , "imports": {"provider_list": ["./", "..", "field_provider_list"]} + , "expression": + { "type": "disjoint_map_union" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "package"] + , ["default", {"type": "empty_map"}] + , ["transition", {"type": "var", "name": "deps-transition"}] + ] + , "body": + { "type": "foreach" + , "range": {"type": "CALL_EXPRESSION", "name": "provider_list"} + , "var": "map" + , "body": + { "type": "lookup" + , "key": {"type": "var", "name": "pkg-key"} + , "map": {"type": "var", "name": "map"} + , "default": {"type": "empty_map"} + } + } + } + } + } + } + } +, "cflags-files-deps": + { "doc": ["Collect cflags files from target_fields"] + , "vars": ["deps-fieldnames", "deps-transition"] + , "vars_doc": + { "deps-fieldnames": ["List of target_field names to collect files from."] + , "deps-transition": + ["The optional configuration transition for the targets."] + } + , "imports": {"pkg-provider": "pkg-map-provider-deps"} + , "expression": + { "type": "let*" + , "bindings": [["pkg-key", "cflags-files"]] + , "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"} + } + } +, "ldflags-files-deps": + { "doc": ["Collect cflags files from target_fields"] + , "vars": ["deps-fieldnames", "deps-transition"] + , "vars_doc": + { "deps-fieldnames": ["List of target_field names to collect files from."] + , "deps-transition": + ["The optional configuration transition for the targets."] + } + , "imports": {"pkg-provider": "pkg-map-provider-deps"} + , "expression": + { "type": "let*" + , "bindings": [["pkg-key", "ldflags-files"]] + , "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"} + } + } +, "pkg-prefix-lib-paths": + { "doc": ["Detect ldflags referring to local libs and prefix them."] + , "vars": ["pkg-ldflags", "pkg-libs", "flat-libs", "lib-prefix"] + , "imports": {"contains": ["", "contains"]} + , "expression": + { "type": "let*" + , "bindings": + [["list", {"type": "keys", "$1": {"type": "var", "name": "pkg-libs"}}]] + , "body": + { "type": "foreach" + , "var": "item" + , "range": {"type": "var", "name": "pkg-ldflags"} + , "body": + { "type": "if" + , "cond": {"type": "CALL_EXPRESSION", "name": "contains"} + , "then": + { "type": "join" + , "$1": + { "type": "if" + , "cond": {"type": "var", "name": "flat-libs"} + , "then": + [ "-l:" + , {"type": "basename", "$1": {"type": "var", "name": "item"}} + ] + , "else": + [ {"type": "var", "name": "lib-prefix"} + , "/" + , {"type": "var", "name": "item"} + ] + } + } + , "else": {"type": "var", "name": "item"} + } + } + } + } +, "pkg-prefix-flag-paths": + { "doc": ["Detect flags referring to local flag files and prefix them."] + , "vars": ["flags", "pkg-flag-files", "flag-prefix"] + , "imports": {"contains": ["", "contains"]} + , "expression": + { "type": "let*" + , "bindings": + [ [ "list" + , {"type": "keys", "$1": {"type": "var", "name": "pkg-flag-files"}} + ] + , ["list_prefix", "@"] + ] + , "body": + { "type": "foreach" + , "var": "item" + , "range": {"type": "var", "name": "flags"} + , "body": + { "type": "let*" + , "bindings": + [["flag-file", {"type": "CALL_EXPRESSION", "name": "contains"}]] + , "body": + { "type": "if" + , "cond": {"type": "var", "name": "flag-file"} + , "then": + { "type": "join" + , "$1": + [ "@" + , {"type": "var", "name": "flag-prefix"} + , "/" + , {"type": "var", "name": "flag-file"} + ] + } + , "else": {"type": "var", "name": "item"} + } + } + } + } + } , "pkg-config": { "vars": [ "pkg-name" @@ -340,103 +485,97 @@ , "pkg-version" , "pkg-cflags" , "pkg-ldflags" + , "pkg-flag-files" , "pkg-libs" , "flat-libs" + , "pc-install-dir" ] - , "imports": {"contains": ["", "contains"]} + , "imports": + { "pkg-prefix-lib-paths": "pkg-prefix-lib-paths" + , "pkg-prefix-flag-paths": "pkg-prefix-flag-paths" + } , "expression": - { "type": "singleton_map" - , "key": - {"type": "join", "$1": [{"type": "var", "name": "pkg-name"}, ".pc"]} - , "value": - { "type": "BLOB" - , "data": - { "type": "join" - , "separator": "\n" - , "$1": - [ { "type": "join" - , "$1": - [ "prefix=" - , {"type": "var", "name": "pkg-prefix", "default": "/"} - ] - } - , "libdir=${prefix}/lib" - , "includedir=${prefix}/include" - , { "type": "join" - , "$1": ["Name: ", {"type": "var", "name": "pkg-name"}] - } - , { "type": "join" - , "$1": - [ "Version: " - , {"type": "var", "name": "pkg-version", "default": "unknown"} - ] - } - , { "type": "join" - , "$1": - [ "Description: Pkg-config for " - , {"type": "var", "name": "pkg-name"} - , ", generated by JustBuild" - ] - } - , "URL: unknown" - , { "type": "join" - , "separator": " " - , "$1": - { "type": "++" + { "type": "let*" + , "bindings": + [ ["lib-prefix", "${libdir}"] + , [ "pkg-ldflags" + , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-lib-paths"} + ] + , [ "flag-prefix" + , { "type": "join" + , "$1": ["${prefix}/", {"type": "var", "name": "pc-install-dir"}] + } + ] + , ["flags", {"type": "var", "name": "pkg-cflags"}] + , [ "pkg-cflags" + , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"} + ] + , ["flags", {"type": "var", "name": "pkg-ldflags"}] + , [ "pkg-ldflags" + , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"} + ] + ] + , "body": + { "type": "singleton_map" + , "key": + {"type": "join", "$1": [{"type": "var", "name": "pkg-name"}, ".pc"]} + , "value": + { "type": "BLOB" + , "data": + { "type": "join" + , "separator": "\n" + , "$1": + [ { "type": "join" , "$1": - [ ["Cflags:", "-I${includedir}"] - , {"type": "var", "name": "pkg-cflags"} + [ "prefix=" + , {"type": "var", "name": "pkg-prefix", "default": "/"} ] } - } - , { "type": "join" - , "separator": " " - , "$1": - { "type": "++" + , "libdir=${prefix}/lib" + , "includedir=${prefix}/include" + , { "type": "join" + , "$1": ["Name: ", {"type": "var", "name": "pkg-name"}] + } + , { "type": "join" , "$1": - [ ["Libs:"] - , { "type": "if" - , "cond": {"type": "var", "name": "flat-libs"} - , "then": ["-L${libdir}"] - } - , { "type": "let*" - , "bindings": - [ [ "list" - , { "type": "keys" - , "$1": {"type": "var", "name": "pkg-libs"} - } - ] - ] - , "body": - { "type": "foreach" - , "var": "item" - , "range": {"type": "var", "name": "pkg-ldflags"} - , "body": - { "type": "if" - , "cond": {"type": "CALL_EXPRESSION", "name": "contains"} - , "then": - { "type": "join" - , "$1": - { "type": "if" - , "cond": {"type": "var", "name": "flat-libs"} - , "then": - [ "-l:" - , { "type": "basename" - , "$1": {"type": "var", "name": "item"} - } - ] - , "else": - ["${libdir}/", {"type": "var", "name": "item"}] - } - } - , "else": {"type": "var", "name": "item"} - } - } - } + [ "Version: " + , {"type": "var", "name": "pkg-version", "default": "unknown"} ] } - } - ] + , { "type": "join" + , "$1": + [ "Description: Pkg-config for " + , {"type": "var", "name": "pkg-name"} + , ", generated by JustBuild" + ] + } + , "URL: unknown" + , { "type": "join" + , "separator": " " + , "$1": + { "type": "++" + , "$1": + [ ["Cflags:", "-I${includedir}"] + , {"type": "var", "name": "pkg-cflags"} + ] + } + } + , { "type": "join" + , "separator": " " + , "$1": + { "type": "++" + , "$1": + [ ["Libs:"] + , { "type": "if" + , "cond": {"type": "var", "name": "flat-libs"} + , "then": ["-L${libdir}"] + } + , {"type": "var", "name": "pkg-ldflags"} + ] + } + } + ] + } } } } @@ -450,6 +589,7 @@ , "hdrs" , "private-hdrs" , "compile-deps" + , "cflags-files" ] , "expression": { "type": "let*" @@ -503,6 +643,10 @@ , "key": {"type": "var", "name": "work src_name"} , "value": {"type": "var", "name": "src_val"} } + , { "type": "var" + , "name": "cflags-files" + , "default": {"type": "empty_map"} + } ] } ] @@ -671,6 +815,7 @@ , "stage" , "compile-deps" , "compile-args" + , "cflags-files" , "defaults-transition" ] , "imports": @@ -804,6 +949,8 @@ , "link-args-deps": "link-args-deps" , "run-libs-deps": "run-libs-deps" , "run-libs-args-deps": "run-libs-args-deps" + , "cflags-files-deps": "cflags-files-deps" + , "ldflags-files-deps": "ldflags-files-deps" , "lib artifact": "lib artifact" } , "expression": @@ -823,6 +970,9 @@ } } ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , ["lib", {"type": "CALL_EXPRESSION", "name": "lib artifact"}] , [ "link-args" @@ -844,6 +994,9 @@ , "$1": {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} } ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] , ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" @@ -857,10 +1010,14 @@ } } ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] , [ "package" - , { "type": "singleton_map" - , "key": "name" - , "value": {"type": "var", "name": "pkg-name"} + , { "type": "let*" + , "bindings": [["name", {"type": "var", "name": "pkg-name"}]] + , "body": + {"type": "env", "vars": ["name", "cflags-files", "ldflags-files"]} } ] ] @@ -914,6 +1071,8 @@ , "link-args" , "run-libs" , "run-libs-args" + , "cflags-files" + , "ldflags-files" , "defaults-transition" ] , "imports": @@ -1005,6 +1164,14 @@ [ {"type": "var", "name": "objects"} , {"type": "var", "name": "link-deps"} , {"type": "var", "name": "run-libs"} + , { "type": "var" + , "name": "cflags-files" + , "default": {"type": "empty_map"} + } + , { "type": "var" + , "name": "ldflags-files" + , "default": {"type": "empty_map"} + } ] } , "env": @@ -1070,6 +1237,8 @@ , "link-args-deps": "link-args-deps" , "run-libs-deps": "run-libs-deps" , "run-libs-args-deps": "run-libs-args-deps" + , "cflags-files-deps": "cflags-files-deps" + , "ldflags-files-deps": "ldflags-files-deps" , "shared artifact": "shared artifact" } , "expression": @@ -1089,6 +1258,9 @@ } } ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , ["link-args", {"type": "CALL_EXPRESSION", "name": "link-args-deps"}] , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}] @@ -1104,6 +1276,9 @@ } } ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] , ["lib", {"type": "CALL_EXPRESSION", "name": "shared artifact"}] , ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] @@ -1118,6 +1293,9 @@ } } ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , ["link-args", {"type": "CALL_EXPRESSION", "name": "link-args-deps"}] , [ "run-libs" @@ -1140,6 +1318,9 @@ } } ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] , [ "package" , { "type": "let*" , "bindings": @@ -1156,7 +1337,10 @@ } ] ] - , "body": {"type": "env", "vars": ["name", "version"]} + , "body": + { "type": "env" + , "vars": ["name", "version", "cflags-files", "ldflags-files"] + } } ] ] @@ -1211,6 +1395,8 @@ , "link-args" , "run-libs" , "run-libs-args" + , "cflags-files" + , "ldflags-files" , "defaults-transition" ] , "imports": @@ -1295,6 +1481,14 @@ [ {"type": "var", "name": "objects"} , {"type": "var", "name": "link-deps"} , {"type": "var", "name": "run-libs"} + , { "type": "var" + , "name": "cflags-files" + , "default": {"type": "empty_map"} + } + , { "type": "var" + , "name": "ldflags-files" + , "default": {"type": "empty_map"} + } ] } , "cmd": @@ -1348,6 +1542,8 @@ , "link-args-deps": "link-args-deps" , "run-libs-deps": "run-libs-deps" , "run-libs-args-deps": "run-libs-args-deps" + , "cflags-files-deps": "cflags-files-deps" + , "ldflags-files-deps": "ldflags-files-deps" , "binary": "bin artifact" } , "expression": @@ -1379,6 +1575,12 @@ , [ "run-libs-args" , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] , ["package", {"type": "singleton_map", "key": "to_bin", "value": true}] ] , "body": |