diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2023-01-16 19:10:32 +0100 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2023-01-20 16:02:11 +0100 |
commit | 4a8579a2a4ef252644df0c29893e70ad8438ae82 (patch) | |
tree | fa53e5d398c6dba59ed760fb3d802cc059f05821 | |
parent | d567b848e57686f631b0a0c081126bea578838c2 (diff) | |
download | rules-cc-4a8579a2a4ef252644df0c29893e70ad8438ae82.tar.gz |
Support flag-files for existing rules and expressions
-rw-r--r-- | CC/EXPRESSIONS | 129 | ||||
-rw-r--r-- | CC/RULES | 28 | ||||
-rw-r--r-- | CC/test/RULES | 8 |
3 files changed, 157 insertions, 8 deletions
diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index c91c85d..5a425c7 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -440,6 +440,44 @@ } } } +, "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" @@ -447,10 +485,15 @@ , "pkg-version" , "pkg-cflags" , "pkg-ldflags" + , "pkg-flag-files" , "pkg-libs" , "flat-libs" + , "pc-install-dir" ] - , "imports": {"pkg-prefix-lib-paths": "pkg-prefix-lib-paths"} + , "imports": + { "pkg-prefix-lib-paths": "pkg-prefix-lib-paths" + , "pkg-prefix-flag-paths": "pkg-prefix-flag-paths" + } , "expression": { "type": "let*" , "bindings": @@ -458,6 +501,19 @@ , [ "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" @@ -533,6 +589,7 @@ , "hdrs" , "private-hdrs" , "compile-deps" + , "cflags-files" ] , "expression": { "type": "let*" @@ -586,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"} + } ] } ] @@ -754,6 +815,7 @@ , "stage" , "compile-deps" , "compile-args" + , "cflags-files" , "defaults-transition" ] , "imports": @@ -887,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": @@ -906,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" @@ -927,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" @@ -940,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"]} } ] ] @@ -997,6 +1071,8 @@ , "link-args" , "run-libs" , "run-libs-args" + , "cflags-files" + , "ldflags-files" , "defaults-transition" ] , "imports": @@ -1088,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": @@ -1153,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": @@ -1172,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"}] @@ -1187,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"}] @@ -1201,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" @@ -1223,6 +1318,9 @@ } } ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] , [ "package" , { "type": "let*" , "bindings": @@ -1239,7 +1337,10 @@ } ] ] - , "body": {"type": "env", "vars": ["name", "version"]} + , "body": + { "type": "env" + , "vars": ["name", "version", "cflags-files", "ldflags-files"] + } } ] ] @@ -1294,6 +1395,8 @@ , "link-args" , "run-libs" , "run-libs-args" + , "cflags-files" + , "ldflags-files" , "defaults-transition" ] , "imports": @@ -1378,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": @@ -1431,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": @@ -1462,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": @@ -624,7 +624,8 @@ , "expression": { "type": "let*" , "bindings": - [ [ "install-stage" + [ ["pc-install-dir", "share/pkgconfig"] + , [ "install-stage" , { "type": "disjoint_map_union" , "msg": "install stages may not overlap" , "$1": @@ -770,11 +771,32 @@ ] } ] + , [ "pkg-flag-files" + , { "type": "map_union" + , "$1": + [ { "type": "lookup" + , "key": "cflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + , { "type": "lookup" + , "key": "ldflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + ] + } + ] , ["pkg-libs", {"type": "var", "name": "libraries"}] , ["flat-libs", {"type": "FIELD", "name": "flat-libs"}] ] , "body": - {"type": "CALL_EXPRESSION", "name": "pkg-config"} + { "type": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "pkg-config"} + , {"type": "var", "name": "pkg-flag-files"} + ] + } } , "else": {"type": "empty_map"} } @@ -800,7 +822,7 @@ , "$1": {"type": "var", "name": "libraries"} } , { "type": "to_subdir" - , "subdir": "share/pkgconfig" + , "subdir": {"type": "var", "name": "pc-install-dir"} , "$1": {"type": "var", "name": "pkg-config"} } ] diff --git a/CC/test/RULES b/CC/test/RULES index 60f33ab..b46d6b0 100644 --- a/CC/test/RULES +++ b/CC/test/RULES @@ -115,6 +115,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"] , "host transition": ["transitions", "for host"] } @@ -163,6 +165,9 @@ , ["defaults-transition", {"type": "var", "name": "host-trans"}] , ["deps-transition", {"type": "var", "name": "host-trans"}] , ["deps-fieldnames", ["private-deps"]] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" , { "type": "++" @@ -178,6 +183,9 @@ ] } ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , [ "link-args" , { "type": "++" |