summaryrefslogtreecommitdiff
path: root/rules
diff options
context:
space:
mode:
Diffstat (limited to 'rules')
-rw-r--r--rules/CC/EXPRESSIONS111
-rw-r--r--rules/CC/RULES9
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"]