summaryrefslogtreecommitdiff
path: root/rules/CC/EXPRESSIONS
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2023-01-20 16:20:30 +0100
committerOliver Reiche <oliver.reiche@huawei.com>2023-01-20 16:20:30 +0100
commit89b76f2558da0c41280b9eb389384824babfbef6 (patch)
tree489057736f3fcc4f9e14bcb27e14eb0effbd815a /rules/CC/EXPRESSIONS
parent25981eeccf645ddc6338bed0b159014f210f4326 (diff)
parente75f101e8b988adb458e594ffaaaebc0c01f65df (diff)
downloadrules-cc-89b76f2558da0c41280b9eb389384824babfbef6.tar.gz
Merge commit 'e75f101e8b988adb458e594ffaaaebc0c01f65df' into rules-cc
Diffstat (limited to 'rules/CC/EXPRESSIONS')
-rw-r--r--rules/CC/EXPRESSIONS384
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":