From c4ff7d76b2ca73017d2d96923437de7a1d0aa71d Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 6 Dec 2022 12:06:55 +0100 Subject: rules: Implement ldflags for (shared) libraries --- CC/EXPRESSIONS | 17 +++++++++++++++-- CC/RULES | 7 +++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index 2998fa8..504e55a 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -681,6 +681,7 @@ , "private-hdrs" , "cflags" , "private-cflags" + , "ldflags" , "private-ldflags" , "stage" , "extra-provides" @@ -721,6 +722,7 @@ { "type": "++" , "$1": [ {"type": "keys", "$1": {"type": "var", "name": "lib"}} + , {"type": "var", "name": "ldflags", "default": []} , {"type": "var", "name": "private-ldflags", "default": []} , {"type": "CALL_EXPRESSION", "name": "link-args-deps"} ] @@ -936,6 +938,7 @@ , "private-hdrs" , "cflags" , "private-cflags" + , "ldflags" , "private-ldflags" , "soversion" , "extra-provides" @@ -977,7 +980,8 @@ , "$1": { "type": "++" , "$1": - [ {"type": "var", "name": "private-ldflags", "default": []} + [ {"type": "var", "name": "ldflags", "default": []} + , {"type": "var", "name": "private-ldflags", "default": []} , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} ] } @@ -1008,7 +1012,16 @@ } ] , [ "run-libs-args" - , {"type": "keys", "$1": {"type": "var", "name": "lib"}} + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "keys", "$1": {"type": "var", "name": "lib"}} + , {"type": "var", "name": "ldflags", "default": []} + , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} + ] + } + } ] ] , "body": diff --git a/CC/RULES b/CC/RULES index 4d90adc..4bfae16 100644 --- a/CC/RULES +++ b/CC/RULES @@ -132,6 +132,7 @@ , "private-defines" , "cflags" , "private-cflags" + , "ldflags" , "private-ldflags" , "soversion" ] @@ -181,6 +182,11 @@ ["List of compile flags set for this target and its consumers."] , "private-cflags": ["List of compile flags set for source files local to this target."] + , "ldflags": + [ "Additional linker flags for linking external libraries for this" + , "target and its consumers (not built by this tool, typically system" + , "libraries)." + ] , "private-ldflags": [ "Additional linker flags for linking external libraries (not built" , "by this tool, typically system libraries)." @@ -360,6 +366,7 @@ } } ] + , ["ldflags", {"type": "FIELD", "name": "ldflags"}] , ["private-ldflags", {"type": "FIELD", "name": "private-ldflags"}] , ["soversion", {"type": "FIELD", "name": "soversion"}] , [ "deps-transition" -- cgit v1.2.3 From e97ac1a8de806e7bccd6a8be8436e95cf2bbb341 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 6 Dec 2022 16:14:05 +0100 Subject: rules: Implement private-proto for libraries --- CC/RULES | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/CC/RULES b/CC/RULES index 4bfae16..992e4a3 100644 --- a/CC/RULES +++ b/CC/RULES @@ -123,7 +123,14 @@ , "library": { "doc": ["A C++ library"] , "target_fields": - ["srcs", "hdrs", "private-hdrs", "deps", "private-deps", "proto"] + [ "srcs" + , "hdrs" + , "private-hdrs" + , "deps" + , "private-deps" + , "proto" + , "private-proto" + ] , "string_fields": [ "name" , "stage" @@ -203,6 +210,13 @@ , "duplicate work will be carried out, even if the same proto library" , "is used at various places)." ] + , "private-proto": + [ "Any [\"proto\", \"library\"] this target depends upon privately." + , "The creation of C++ bindings for this proto library as well as of" + , "its dependencies will be taken care of (as anonymous targets, so no" + , "duplicate work will be carried out, even if the same proto library" + , "is used at various places)." + ] , "shared": ["If non-empty, produce a shared instead of a static library."] , "soversion": [ "The SOVERSION for shared libraries. Individual version components are" @@ -287,6 +301,14 @@ , "service library": ["./", "proto", "service library"] } } + , "private-proto-deps": + { "target": "private-proto" + , "provider": "proto" + , "rule_map": + { "library": ["./", "proto", "library"] + , "service library": ["./", "proto", "service library"] + } + } } , "imports": { "artifacts": ["./", "..", "field_artifacts"] @@ -298,6 +320,8 @@ { "deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] , "private-deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] , "proto-deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] + , "private-proto-deps": + [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] } , "expression": { "type": "let*" @@ -373,7 +397,9 @@ , {"type": "CALL_EXPRESSION", "name": "fPIC transition"} ] , ["public-fieldnames", ["deps", "proto-deps"]] - , ["private-fieldnames", ["deps", "private-deps", "proto-deps"]] + , [ "private-fieldnames" + , ["deps", "private-deps", "proto-deps", "private-proto-deps"] + ] ] , "body": { "type": "if" -- cgit v1.2.3