diff options
-rw-r--r-- | rules/CC/EXPRESSIONS | 111 | ||||
-rw-r--r-- | rules/CC/RULES | 9 |
2 files changed, 119 insertions, 1 deletions
diff --git a/rules/CC/EXPRESSIONS b/rules/CC/EXPRESSIONS index 0ad3195..62293a8 100644 --- a/rules/CC/EXPRESSIONS +++ b/rules/CC/EXPRESSIONS @@ -188,6 +188,40 @@ } } } +, "debug-srcs": + { "doc": ["Collect debug dependencies (sources) from given target_fields"] + , "vars": ["deps-fieldnames", "deps-transition"] + , "vars_doc": + { "deps-fieldnames": + ["List of target_field names to collect dependencies from."] + , "deps-transition": + ["The optional configuration transition for the targets."] + } + , "imports": {"provider_list": ["./", "..", "field_provider_list"]} + , "expression": + { "type": "map_union" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "++" + , "$1": + { "type": "let*" + , "bindings": + [ ["provider", "debug-srcs"] + , ["transition", {"type": "var", "name": "deps-transition"}] + , ["default", {"type": "empty_map"}] + ] + , "body": [{"type": "CALL_EXPRESSION", "name": "provider_list"}] + } + } + } + } + } + } , "compile-deps": { "doc": ["Collect compile dependencies (headers) from given target_fields"] , "vars": ["deps-fieldnames", "deps-transition"] @@ -1109,6 +1143,7 @@ , "AR" , "ENV" , "BUILD_POSITION_INDEPENDENT" + , "DEBUG" , "name" , "pure C" , "srcs" @@ -1134,6 +1169,7 @@ , "cflags-files-deps": "cflags-files-deps" , "ldflags-files-deps": "ldflags-files-deps" , "lib artifact": "lib artifact" + , "debug-srcs": "debug-srcs" } , "expression": { "type": "let*" @@ -1179,6 +1215,19 @@ , [ "ldflags-files" , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} ] + , [ "debug-srcs" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": + { "type": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "debug-srcs"} + , {"type": "var", "name": "srcs"} + ] + } + , "else": {"type": "empty_map"} + } + ] , ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" @@ -1219,6 +1268,7 @@ , "run-libs" , "run-libs-args" , "package" + , "debug-srcs" ] } , { "type": "var" @@ -1434,6 +1484,7 @@ , "ADD_CFLAGS" , "ADD_LDFLAGS" , "ENV" + , "DEBUG" , "name" , "pure C" , "srcs" @@ -1461,6 +1512,7 @@ , "cflags-files-deps": "cflags-files-deps" , "ldflags-files-deps": "ldflags-files-deps" , "shared artifact": "shared artifact" + , "debug-srcs": "debug-srcs" } , "expression": { "type": "let*" @@ -1501,6 +1553,19 @@ , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} ] , ["lib", {"type": "CALL_EXPRESSION", "name": "shared artifact"}] + , [ "debug-srcs" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": + { "type": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "debug-srcs"} + , {"type": "var", "name": "srcs"} + ] + } + , "else": {"type": "empty_map"} + } + ] , ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" @@ -1581,6 +1646,7 @@ , "run-libs" , "run-libs-args" , "package" + , "debug-srcs" ] } , { "type": "var" @@ -1700,6 +1766,7 @@ , "AR" , "ENV" , "BUILD_POSITION_INDEPENDENT" + , "DEBUG" , "name" , "pure C" , "srcs" @@ -1725,6 +1792,7 @@ , "cflags-files-deps": "cflags-files-deps" , "ldflags-files-deps": "ldflags-files-deps" , "object artifacts": "object artifacts" + , "debug-srcs": "debug-srcs" } , "expression": { "type": "let*" @@ -1770,6 +1838,19 @@ , [ "ldflags-files" , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} ] + , [ "debug-srcs" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": + { "type": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "debug-srcs"} + , {"type": "var", "name": "srcs"} + ] + } + , "else": {"type": "empty_map"} + } + ] , ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" @@ -1810,6 +1891,7 @@ , "run-libs" , "run-libs-args" , "package" + , "debug-srcs" ] } , { "type": "var" @@ -2014,6 +2096,7 @@ , "ADD_LDFLAGS" , "ENV" , "BUILD_POSITION_INDEPENDENT" + , "DEBUG" , "name" , "pure C" , "srcs" @@ -2033,6 +2116,7 @@ , "cflags-files-deps": "cflags-files-deps" , "ldflags-files-deps": "ldflags-files-deps" , "binary": "bin artifact" + , "debug-srcs": "debug-srcs" } , "expression": { "type": "let*" @@ -2070,11 +2154,25 @@ , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} ] , ["package", {"type": "singleton_map", "key": "to_bin", "value": true}] + , [ "debug-srcs" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": + { "type": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "debug-srcs"} + , {"type": "var", "name": "srcs"} + ] + } + , "else": {"type": "empty_map"} + } + ] ] , "body": { "type": "RESULT" , "artifacts": {"type": "CALL_EXPRESSION", "name": "binary"} - , "provides": {"type": "env", "vars": ["run-libs", "package"]} + , "provides": + {"type": "env", "vars": ["run-libs", "package", "debug-srcs"]} } } } @@ -2124,6 +2222,13 @@ ] } ] + , [ "debug-srcs" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "debug-srcs" + , "default": {"type": "empty_map"} + } + ] ] , "body": { "type": "if" @@ -2291,6 +2396,10 @@ , "subdir": {"type": "var", "name": "pc-install-dir"} , "$1": {"type": "var", "name": "pkg-config"} } + , { "type": "to_subdir" + , "subdir": "debug-src" + , "$1": {"type": "var", "name": "debug-srcs"} + } ] } } diff --git a/rules/CC/RULES b/rules/CC/RULES index 2ba9db8..2c381a6 100644 --- a/rules/CC/RULES +++ b/rules/CC/RULES @@ -371,6 +371,7 @@ , "AR" , "ENV" , "BUILD_POSITION_INDEPENDENT" + , "DEBUG" ] , "implicit": {"defaults": ["defaults"]} , "field_doc": @@ -502,6 +503,7 @@ ] , "ENV": ["The environment for any action generated."] , "BUILD_POSITION_INDEPENDENT": ["Build with -fPIC."] + , "DEBUG": ["Compute the debug-stage, needed for local debugging."] } , "artifacts_doc": ["The actual library (libname.a) staged in the specified directory"] @@ -519,6 +521,7 @@ [ "List of strings that have to be added to the command line for linking actions" , "in targets depending on this library" ] + , "debug-srcs": ["Map of all dependencies' sources needed for debugging."] } , "anonymous": { "proto-deps": @@ -693,6 +696,7 @@ , "ADD_LDFLAGS" , "ENV" , "BUILD_POSITION_INDEPENDENT" + , "DEBUG" ] , "implicit": {"defaults": ["defaults"]} , "field_doc": @@ -759,9 +763,12 @@ ] , "ENV": ["The environment for any action generated."] , "BUILD_POSITION_INDEPENDENT": ["Build with -fPIC."] + , "DEBUG": ["Compute the debug-stage, needed for local debugging."] } , "artifacts_doc": ["The final binary, staged to the given directory"] , "runfiles_doc": ["None"] + , "provides_doc": + {"debug-srcs": ["Map of all dependencies' sources needed for debugging."]} , "anonymous": { "private-proto-deps": { "target": "private-proto" @@ -837,6 +844,8 @@ , "the target, artifacts and dependencies will be installed to" , "subdirectories \"bin\", \"include\", and \"lib\". For library targets," , "a pkg-config file is generated and provided in \"lib/pkgconfig\"." + , "In debug mode, sources needed for local debugging will be installed to" + , "subdirectory \"debug-src\"." ] , "config_vars": ["PREFIX"] , "target_fields": ["targets"] |