diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2024-05-03 10:29:51 +0200 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2024-05-03 10:29:51 +0200 |
commit | 3c89cd4023af84847f449ee4ad731a4b35c97972 (patch) | |
tree | 5b2391b1e42c2b57ea083039a98da436229eb966 /rules | |
parent | 660966298286958a5cbee18be89872a8202956a8 (diff) | |
parent | 5b23ba149a136c2669eda62be24deb0da5d31120 (diff) | |
download | rules-cc-3c89cd4023af84847f449ee4ad731a4b35c97972.tar.gz |
Merge commit '5b23ba149a136c2669eda62be24deb0da5d31120' into rules/rules-cc
Diffstat (limited to 'rules')
-rw-r--r-- | rules/CC/EXPRESSIONS | 229 | ||||
-rw-r--r-- | rules/CC/RULES | 37 |
2 files changed, 260 insertions, 6 deletions
diff --git a/rules/CC/EXPRESSIONS b/rules/CC/EXPRESSIONS index 837b9d4..0ad3195 100644 --- a/rules/CC/EXPRESSIONS +++ b/rules/CC/EXPRESSIONS @@ -1592,6 +1592,235 @@ } } } +, "object artifacts": + { "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "AR" + , "ENV" + , "BUILD_POSITION_INDEPENDENT" + , "name" + , "pure C" + , "srcs" + , "hdrs" + , "private-hdrs" + , "stage" + , "compile-deps" + , "compile-args" + , "cflags-files" + , "defaults-transition" + ] + , "imports": + { "compiler": "compiler" + , "flags": "flags" + , "objects": "objects" + , "default-AR": "default-AR" + , "default-ENV": "default-ENV" + , "default-PATH": "default-PATH" + , "default-TOOLCHAIN": "default-TOOLCHAIN" + , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" + } + , "expression": + { "type": "let*" + , "bindings": + [ ["TOOLCHAIN_DIR", "toolchain"] + , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] + , [ "TOOLCHAIN" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} + } + ] + , [ "NON_SYSTEM_TOOLS" + , {"type": "CALL_EXPRESSION", "name": "default-NON_SYSTEM_TOOLS"} + ] + , ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] + , [ "COMPILE_FLAGS" + , { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "flags"} + , {"type": "var", "name": "compile-args"} + ] + } + ] + , [ "ENV" + , { "type": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] + } + ] + , [ "ENV_PATH" + , { "type": "lookup" + , "map": {"type": "var", "name": "ENV"} + , "key": "PATH" + } + ] + , [ "ENV" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "ENV"} + , { "type": "singleton_map" + , "key": "PATH" + , "value": + { "type": "join" + , "separator": ":" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "default-PATH"} + , { "type": "if" + , "cond": {"type": "var", "name": "ENV_PATH"} + , "then": [{"type": "var", "name": "ENV_PATH"}] + } + ] + } + } + } + ] + } + ] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "objects"} + } + } +, "object result": + { "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "AR" + , "ENV" + , "BUILD_POSITION_INDEPENDENT" + , "name" + , "pure C" + , "srcs" + , "hdrs" + , "private-hdrs" + , "cflags" + , "private-cflags" + , "ldflags" + , "private-ldflags" + , "stage" + , "pkg-name" + , "extra-provides" + , "public-fieldnames" + , "private-fieldnames" + ] + , "imports": + { "compile-deps": "compile-deps" + , "compile-args-deps": "compile-args-deps" + , "link-deps": "link-deps" + , "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" + , "object artifacts": "object artifacts" + } + , "expression": + { "type": "let*" + , "bindings": + [ ["deps-fieldnames", {"type": "var", "name": "private-fieldnames"}] + , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] + , [ "compile-args" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "cflags"} + , {"type": "var", "name": "private-cflags"} + , {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} + ] + } + } + ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] + , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] + , ["objects", {"type": "CALL_EXPRESSION", "name": "object artifacts"}] + , [ "link-args" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "keys", "$1": {"type": "var", "name": "objects"}} + , {"type": "var", "name": "ldflags", "default": []} + , {"type": "var", "name": "private-ldflags", "default": []} + , {"type": "CALL_EXPRESSION", "name": "link-args-deps"} + ] + } + } + ] + , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}] + , [ "run-libs-args" + , { "type": "nub_right" + , "$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" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "cflags"} + , {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} + ] + } + } + ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] + , [ "package" + , { "type": "let*" + , "bindings": [["name", {"type": "var", "name": "pkg-name"}]] + , "body": + {"type": "env", "vars": ["name", "cflags-files", "ldflags-files"]} + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "objects"} + , "runfiles": {"type": "var", "name": "hdrs"} + , "provides": + { "type": "map_union" + , "$1": + [ { "type": "env" + , "vars": + [ "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "run-libs" + , "run-libs-args" + , "package" + ] + } + , { "type": "var" + , "name": "extra-provides" + , "default": {"type": "empty_map"} + } + ] + } + } + } + } , "bin artifact": { "doc": ["Produces the binary artifact."] , "vars": diff --git a/rules/CC/RULES b/rules/CC/RULES index 55e639a..2ba9db8 100644 --- a/rules/CC/RULES +++ b/rules/CC/RULES @@ -358,7 +358,7 @@ , "soversion" , "pkg-name" ] - , "config_fields": ["shared"] + , "config_fields": ["shared", "object_only"] , "config_vars": [ "CC" , "CXX" @@ -432,7 +432,15 @@ , "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."] + , "shared": + [ "If non-empty, produce a shared instead of a static library. Setting" + , "this option is mutually exclusive to the \"object_only\" option." + ] + , "object_only": + [ "If non-empty, produce an object library, resulting in object files" + , "added to the linker line of all depending targets. Setting this option" + , "is mutually exclusive to the \"shared\" option." + ] , "soversion": [ "The SOVERSION for shared libraries. Individual version components are" , "joined with \".\"." @@ -534,6 +542,7 @@ { "artifacts": ["./", "..", "field_artifacts"] , "static result": "lib result" , "shared result": "shared result" + , "object result": "object result" , "fPIC transition": ["transitions", "with fPIC"] } , "config_transitions": @@ -639,10 +648,26 @@ ] ] , "body": - { "type": "if" - , "cond": {"type": "FIELD", "name": "shared"} - , "then": {"type": "CALL_EXPRESSION", "name": "shared result"} - , "else": {"type": "CALL_EXPRESSION", "name": "static result"} + { "type": "cond" + , "cond": + [ [ { "type": "and" + , "$1": + [ {"type": "FIELD", "name": "shared"} + , {"type": "FIELD", "name": "object_only"} + ] + } + , { "type": "fail" + , "msg": "Fields \"shared\" and \"object_only\" are mutually exclusive." + } + ] + , [ {"type": "FIELD", "name": "shared"} + , {"type": "CALL_EXPRESSION", "name": "shared result"} + ] + , [ {"type": "FIELD", "name": "object_only"} + , {"type": "CALL_EXPRESSION", "name": "object result"} + ] + ] + , "default": {"type": "CALL_EXPRESSION", "name": "static result"} } } } |