From 378ab0b30a90969e70d905a977bd53bb7828f052 Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Tue, 28 May 2024 12:49:56 +0200 Subject: debug rule: Fix staging of headers For libraries the headers of private dependencies were wrongly skipped from staging. For binaries, no headers were passed at all in the provides map. To fix these issues, an additional field is added in the provides map to ensure we collect, and then properly stage, all needed headers for both libraries and binaries. --- CC/EXPRESSIONS | 82 +++++++++++++++++++++++++++++++++++++++++++++++++--------- CC/RULES | 7 +++-- 2 files changed, 75 insertions(+), 14 deletions(-) (limited to 'CC') diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index 437758e..f3188c0 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -212,11 +212,13 @@ } } } -, "debug-srcs": - { "doc": ["Collect debug dependencies (sources) from given target_fields"] - , "vars": ["deps-fieldnames", "deps-transition"] +, "debug-deps": + { "doc": + ["Collect debug dependencies (sources/headers) from given target_fields"] + , "vars": ["deps-provider", "deps-fieldnames", "deps-transition"] , "vars_doc": - { "deps-fieldnames": + { "deps-provider": ["Name of provider to use (debug-srcs/debug-hdrs)."] + , "deps-fieldnames": ["List of target_field names to collect dependencies from."] , "deps-transition": ["The optional configuration transition for the targets."] @@ -235,7 +237,7 @@ , "$1": { "type": "let*" , "bindings": - [ ["provider", "debug-srcs"] + [ ["provider", {"type": "var", "name": "deps-provider"}] , ["transition", {"type": "var", "name": "deps-transition"}] , ["default", {"type": "empty_map"}] ] @@ -1106,7 +1108,7 @@ , "cflags-files-deps": "cflags-files-deps" , "ldflags-files-deps": "ldflags-files-deps" , "lib artifact": "lib artifact" - , "debug-srcs": "debug-srcs" + , "debug-deps": "debug-deps" } , "expression": { "type": "let*" @@ -1151,8 +1153,29 @@ , "then": { "type": "map_union" , "$1": - [ {"type": "CALL_EXPRESSION", "name": "debug-srcs"} + [ { "type": "let*" + , "bindings": [["deps-provider", "debug-srcs"]] + , "body": {"type": "CALL_EXPRESSION", "name": "debug-deps"} + } , {"type": "var", "name": "srcs"} + , {"type": "var", "name": "private-hdrs"} + , {"type": "var", "name": "hdrs"} + ] + } + , "else": {"type": "empty_map"} + } + ] + , [ "debug-hdrs" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": + { "type": "map_union" + , "$1": + [ { "type": "let*" + , "bindings": [["deps-provider", "debug-hdrs"]] + , "body": {"type": "CALL_EXPRESSION", "name": "debug-deps"} + } + , {"type": "var", "name": "hdrs"} ] } , "else": {"type": "empty_map"} @@ -1197,6 +1220,7 @@ , "link-args" , "package" , "debug-srcs" + , "debug-hdrs" ] } , { "type": "var" @@ -1396,7 +1420,7 @@ , "cflags-files-deps": "cflags-files-deps" , "ldflags-files-deps": "ldflags-files-deps" , "binary": "bin artifact" - , "debug-srcs": "debug-srcs" + , "debug-deps": "debug-deps" } , "expression": { "type": "let*" @@ -1436,18 +1460,34 @@ , "then": { "type": "map_union" , "$1": - [ {"type": "CALL_EXPRESSION", "name": "debug-srcs"} + [ { "type": "let*" + , "bindings": [["deps-provider", "debug-srcs"]] + , "body": {"type": "CALL_EXPRESSION", "name": "debug-deps"} + } , {"type": "var", "name": "srcs"} + , {"type": "var", "name": "private-hdrs"} ] } , "else": {"type": "empty_map"} } ] + , [ "debug-hdrs" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": + { "type": "let*" + , "bindings": [["deps-provider", "debug-hdrs"]] + , "body": {"type": "CALL_EXPRESSION", "name": "debug-deps"} + } + , "else": {"type": "empty_map"} + } + ] ] , "body": { "type": "RESULT" , "artifacts": {"type": "CALL_EXPRESSION", "name": "binary"} - , "provides": {"type": "env", "vars": ["package", "debug-srcs"]} + , "provides": + {"type": "env", "vars": ["package", "debug-srcs", "debug-hdrs"]} } } } @@ -1508,6 +1548,18 @@ } } ] + , [ "debug-hdrs" + , { "type": "if" + , "cond": {"type": "var", "name": "skip-debug-stage"} + , "then": {"type": "empty_map"} + , "else": + { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "debug-hdrs" + , "default": {"type": "empty_map"} + } + } + ] ] , "body": { "type": "if" @@ -1650,7 +1702,13 @@ } , { "type": "to_subdir" , "subdir": "include" - , "$1": {"type": "var", "name": "headers"} + , "$1": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "headers"} + , {"type": "var", "name": "debug-hdrs"} + ] + } } , { "type": "to_subdir" , "subdir": "lib" @@ -1663,7 +1721,7 @@ , "$1": {"type": "var", "name": "pkg-config"} } , { "type": "to_subdir" - , "subdir": "debug-src" + , "subdir": "work" , "$1": {"type": "var", "name": "debug-srcs"} } ] diff --git a/CC/RULES b/CC/RULES index 4d906ff..05653fa 100644 --- a/CC/RULES +++ b/CC/RULES @@ -462,7 +462,8 @@ [ "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."] + , "debug-srcs": ["Map of all sources needed for debugging."] + , "debug-hdrs": ["Map of all additional headers needed for debugging."] } , "anonymous": { "proto-deps": @@ -642,7 +643,9 @@ , "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."]} + { "debug-srcs": ["Map of all sources needed for debugging."] + , "debug-hdrs": ["Map of all additional headers needed for debugging."] + } , "anonymous": { "private-proto-deps": { "target": "private-proto" -- cgit v1.2.3