diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-07-24 11:46:28 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-07-25 15:52:37 +0200 |
commit | f8d12beb459041c15781f18a6b5a0928affb4e7c (patch) | |
tree | 802c51e13c5eddb2d923162c8b00ee535b903be0 | |
parent | a5a98b35fc9a710e723673946ea5c769274b9ddb (diff) | |
download | rules-cc-f8d12beb459041c15781f18a6b5a0928affb4e7c.tar.gz |
["CC", "library"] Add concept of components
... i.e., dependencies that are to be included into the library
itself. In this way, a large library (convenient for a user to have
single library to care about) can be defined as a collection of
smaller libraries.
Technically, components are like public dependencies on libraries
transitioned to object libraries with the following differences
- the header files (i.e., runfiles) of the components become header
files of the resulting libary, and
- the objects (i.e., artifacts) of the components become objects
of the library rather than link dependencies.
To achive the transfer of the object to the requesting library,
an object library can be instructed to drop the objects from the
link arguments; in order to continue to support tranditional object
libraries in the style of, e.g., cmake, this is done by a different
configuration variable that is transitioned as well. In particular,
the object-library test case (using a configure target) can be
left unchanged.
-rw-r--r-- | CC/EXPRESSIONS | 430 | ||||
-rw-r--r-- | CC/RULES | 46 | ||||
-rw-r--r-- | transitions/EXPRESSIONS | 21 |
3 files changed, 379 insertions, 118 deletions
diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index 081fb31..a4bdbd9 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -215,13 +215,20 @@ , "debug-deps": { "doc": ["Collect debug dependencies (sources/headers) from given target_fields"] - , "vars": ["deps-provider", "deps-fieldnames", "deps-transition"] + , "vars": + [ "deps-provider" + , "deps-fieldnames" + , "deps-transition" + , "modified-transitions" + ] , "vars_doc": { "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."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": {"provider_list": ["./", "..", "field_provider_list"]} , "expression": @@ -238,7 +245,17 @@ { "type": "let*" , "bindings": [ ["provider", {"type": "var", "name": "deps-provider"}] - , ["transition", {"type": "var", "name": "deps-transition"}] + , [ "transition" + , { "type": "lookup" + , "map": + { "type": "var" + , "name": "modified-transitions" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "fieldname"} + , "default": {"type": "var", "name": "deps-transition"} + } + ] , ["default", {"type": "empty_map"}] ] , "body": [{"type": "CALL_EXPRESSION", "name": "provider_list"}] @@ -250,12 +267,14 @@ } , "compile-deps": { "doc": ["Collect compile dependencies (headers) from given target_fields"] - , "vars": ["deps-fieldnames", "deps-transition"] + , "vars": ["deps-fieldnames", "deps-transition", "modified-transitions"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect dependencies from."] , "deps-transition": ["The optional configuration transition for the targets."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": { "runfiles_list": ["./", "..", "field_runfiles_list"] @@ -275,7 +294,17 @@ { "type": "let*" , "bindings": [ ["provider", "compile-deps"] - , ["transition", {"type": "var", "name": "deps-transition"}] + , [ "transition" + , { "type": "lookup" + , "map": + { "type": "var" + , "name": "modified-transitions" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "fieldname"} + , "default": {"type": "var", "name": "deps-transition"} + } + ] , ["default", {"type": "empty_map"}] ] , "body": @@ -290,12 +319,14 @@ } , "compile-args-deps": { "doc": ["Collect compile arguments from given target_fields"] - , "vars": ["deps-fieldnames", "deps-transition"] + , "vars": ["deps-fieldnames", "deps-transition", "modified-transitions"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect arguments from."] , "deps-transition": ["The optional configuration transition for the targets."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": @@ -308,7 +339,17 @@ { "type": "let*" , "bindings": [ ["provider", "compile-args"] - , ["transition", {"type": "var", "name": "deps-transition"}] + , [ "transition" + , { "type": "lookup" + , "map": + { "type": "var" + , "name": "modified-transitions" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "fieldname"} + , "default": {"type": "var", "name": "deps-transition"} + } + ] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -317,38 +358,75 @@ } , "link-deps": { "doc": ["Collect link dependencies (libraries) from given target_fields"] - , "vars": ["deps-fieldnames", "deps-transition"] + , "vars": + [ "deps-fieldnames" + , "deps-transition" + , "modified-transitions" + , "component-fieldnames" + ] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect dependencies from."] , "deps-transition": ["The optional configuration transition for the targets."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": { "artifacts_list": ["./", "..", "field_artifacts_list"] , "provider_list": ["./", "..", "field_provider_list"] } , "expression": - { "type": "disjoint_map_union" - , "$1": - { "type": "++" - , "$1": - { "type": "foreach" - , "var": "fieldname" - , "range": {"type": "var", "name": "deps-fieldnames"} - , "body": - { "type": "++" + { "type": "let*" + , "bindings": + [ [ "drop_artifacts" + , { "type": "set" , "$1": - { "type": "let*" - , "bindings": - [ ["provider", "link-deps"] - , ["default", {"type": "empty_map"}] - , ["transition", {"type": "var", "name": "deps-transition"}] - ] - , "body": - [ {"type": "CALL_EXPRESSION", "name": "provider_list"} - , {"type": "CALL_EXPRESSION", "name": "artifacts_list"} - ] + {"type": "var", "name": "component-fieldnames", "default": []} + } + ] + ] + , "body": + { "type": "disjoint_map_union" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "++" + , "$1": + { "type": "let*" + , "bindings": + [ ["provider", "link-deps"] + , ["default", {"type": "empty_map"}] + , [ "transition" + , { "type": "lookup" + , "map": + { "type": "var" + , "name": "modified-transitions" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "fieldname"} + , "default": {"type": "var", "name": "deps-transition"} + } + ] + ] + , "body": + [ {"type": "CALL_EXPRESSION", "name": "provider_list"} + , { "type": "if" + , "cond": + { "type": "lookup" + , "map": {"type": "var", "name": "drop_artifacts"} + , "key": {"type": "var", "name": "fieldname"} + } + , "then": [] + , "else": + {"type": "CALL_EXPRESSION", "name": "artifacts_list"} + } + ] + } } } } @@ -357,12 +435,14 @@ } , "link-args-deps": { "doc": ["Collect linker arguments from given target_fields"] - , "vars": ["deps-fieldnames", "deps-transition"] + , "vars": ["deps-fieldnames", "deps-transition", "modified-transitions"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect arguments from."] , "deps-transition": ["The optional configuration transition for the targets."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": @@ -375,7 +455,17 @@ { "type": "let*" , "bindings": [ ["provider", "link-args"] - , ["transition", {"type": "var", "name": "deps-transition"}] + , [ "transition" + , { "type": "lookup" + , "map": + { "type": "var" + , "name": "modified-transitions" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "fieldname"} + , "default": {"type": "var", "name": "deps-transition"} + } + ] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -384,12 +474,14 @@ } , "run-libs-deps": { "doc": ["Collect runtime libraries from given target_fields"] - , "vars": ["deps-fieldnames", "deps-transition"] + , "vars": ["deps-fieldnames", "deps-transition", "modified-transitions"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect dependencies from."] , "deps-transition": ["The optional configuration transition for the targets."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": {"provider_list": ["./", "..", "field_provider_list"]} , "expression": @@ -408,7 +500,17 @@ , "bindings": [ ["provider", "run-libs"] , ["default", {"type": "empty_map"}] - , ["transition", {"type": "var", "name": "deps-transition"}] + , [ "transition" + , { "type": "lookup" + , "map": + { "type": "var" + , "name": "modified-transitions" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "fieldname"} + , "default": {"type": "var", "name": "deps-transition"} + } + ] ] , "body": {"type": "CALL_EXPRESSION", "name": "provider_list"} } @@ -420,12 +522,14 @@ , "run-libs-args-deps": { "doc": ["Collect runtime libraries link arguments from given target_fields"] - , "vars": ["deps-fieldnames", "deps-transition"] + , "vars": ["deps-fieldnames", "deps-transition", "modified-transitions"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect arguments from."] , "deps-transition": ["The optional configuration transition for the targets."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": @@ -438,7 +542,17 @@ { "type": "let*" , "bindings": [ ["provider", "run-libs-args"] - , ["transition", {"type": "var", "name": "deps-transition"}] + , [ "transition" + , { "type": "lookup" + , "map": + { "type": "var" + , "name": "modified-transitions" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "fieldname"} + , "default": {"type": "var", "name": "deps-transition"} + } + ] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } @@ -447,12 +561,15 @@ } , "pkg-map-provider-deps": { "doc": ["Collect maps from provider \"package\" for given target_fields"] - , "vars": ["pkg-key", "deps-fieldnames", "deps-transition"] + , "vars": + ["pkg-key", "deps-fieldnames", "deps-transition", "modified-transitions"] , "vars_doc": { "pkg-key": ["Key to lookup in provider \"package\"."] , "deps-fieldnames": ["List of target_field names to collect maps from."] , "deps-transition": ["The optional configuration transition for the targets."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": {"provider_list": ["./", "..", "field_provider_list"]} , "expression": @@ -468,7 +585,17 @@ , "bindings": [ ["provider", "package"] , ["default", {"type": "empty_map"}] - , ["transition", {"type": "var", "name": "deps-transition"}] + , [ "transition" + , { "type": "lookup" + , "map": + { "type": "var" + , "name": "modified-transitions" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "fieldname"} + , "default": {"type": "var", "name": "deps-transition"} + } + ] ] , "body": { "type": "foreach" @@ -488,11 +615,13 @@ } , "cflags-files-deps": { "doc": ["Collect cflags files from target_fields"] - , "vars": ["deps-fieldnames", "deps-transition"] + , "vars": ["deps-fieldnames", "deps-transition", "modified-transitions"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect files from."] , "deps-transition": ["The optional configuration transition for the targets."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": {"pkg-provider": "pkg-map-provider-deps"} , "expression": @@ -503,11 +632,13 @@ } , "ldflags-files-deps": { "doc": ["Collect cflags files from target_fields"] - , "vars": ["deps-fieldnames", "deps-transition"] + , "vars": ["deps-fieldnames", "deps-transition", "modified-transitions"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect files from."] , "deps-transition": ["The optional configuration transition for the targets."] + , "modified-transitions": + ["Map telling fields that need to be transitioned differently"] } , "imports": {"pkg-provider": "pkg-map-provider-deps"} , "expression": @@ -729,7 +860,11 @@ , "private-hdrs" , "compile-deps" , "cflags-files" + , "component-fieldnames" + , "deps-transition" + , "modified-transitions" ] + , "imports": {"field_artifacts": ["./", "..", "field_artifacts"]} , "expression": { "type": "let*" , "bindings": @@ -757,93 +892,129 @@ ] } ] - ] - , "body": - { "type": "map_union" - , "$1": - { "type": "foreach_map" - , "var_key": "src_name" - , "var_val": "src_val" - , "range": {"type": "var", "name": "srcs"} - , "body": - { "type": "let*" - , "bindings": - [ [ "work src_name" - , { "type": "join" - , "separator": "/" - , "$1": ["work", {"type": "var", "name": "src_name"}] - } - ] - , [ "inputs" - , { "type": "map_union" - , "$1": - [ {"type": "var", "name": "all hdrs"} - , { "type": "singleton_map" - , "key": {"type": "var", "name": "work src_name"} - , "value": {"type": "var", "name": "src_val"} + , [ "my objects" + , { "type": "map_union" + , "$1": + { "type": "foreach_map" + , "var_key": "src_name" + , "var_val": "src_val" + , "range": {"type": "var", "name": "srcs"} + , "body": + { "type": "let*" + , "bindings": + [ [ "work src_name" + , { "type": "join" + , "separator": "/" + , "$1": ["work", {"type": "var", "name": "src_name"}] } - , { "type": "var" - , "name": "cflags-files" - , "default": {"type": "empty_map"} + ] + , [ "inputs" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "all hdrs"} + , { "type": "singleton_map" + , "key": {"type": "var", "name": "work src_name"} + , "value": {"type": "var", "name": "src_val"} + } + , { "type": "var" + , "name": "cflags-files" + , "default": {"type": "empty_map"} + } + , { "type": "var" + , "name": "TOOLCHAIN" + , "default": {"type": "empty_map"} + } + ] } - , { "type": "var" - , "name": "TOOLCHAIN" - , "default": {"type": "empty_map"} + ] + , [ "out" + , { "type": "change_ending" + , "$1": {"type": "var", "name": "src_name"} + , "ending": ".o" } ] - } - ] - , [ "out" - , { "type": "change_ending" - , "$1": {"type": "var", "name": "src_name"} - , "ending": ".o" - } - ] - , [ "work out" - , { "type": "join" - , "separator": "/" - , "$1": ["work", {"type": "var", "name": "out"}] - } - ] - , [ "action output" - , { "type": "ACTION" - , "outs": [{"type": "var", "name": "work out"}] - , "inputs": {"type": "var", "name": "inputs"} - , "env": - { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - , "cmd": - { "type": "++" - , "$1": - [ [{"type": "var", "name": "COMPILER"}] - , {"type": "var", "name": "COMPILE_FLAGS"} - , ["-I", "work", "-isystem", "include"] - , ["-c", {"type": "var", "name": "work src_name"}] - , ["-o", {"type": "var", "name": "work out"}] - ] - } - } - ] - , [ "staged output artifact" - , { "type": "map_union" - , "$1": - { "type": "foreach_map" - , "range": {"type": "var", "name": "action output"} - , "var_val": "object" - , "body": - { "type": "singleton_map" - , "key": {"type": "var", "name": "out"} - , "value": {"type": "var", "name": "object"} + , [ "work out" + , { "type": "join" + , "separator": "/" + , "$1": ["work", {"type": "var", "name": "out"}] } - } - } - ] - ] - , "body": {"type": "var", "name": "staged output artifact"} + ] + , [ "action output" + , { "type": "ACTION" + , "outs": [{"type": "var", "name": "work out"}] + , "inputs": {"type": "var", "name": "inputs"} + , "env": + { "type": "var" + , "name": "ENV" + , "default": {"type": "empty_map"} + } + , "cmd": + { "type": "++" + , "$1": + [ [{"type": "var", "name": "COMPILER"}] + , {"type": "var", "name": "COMPILE_FLAGS"} + , ["-I", "work", "-isystem", "include"] + , ["-c", {"type": "var", "name": "work src_name"}] + , ["-o", {"type": "var", "name": "work out"}] + ] + } + } + ] + , [ "staged output artifact" + , { "type": "map_union" + , "$1": + { "type": "foreach_map" + , "range": {"type": "var", "name": "action output"} + , "var_val": "object" + , "body": + { "type": "singleton_map" + , "key": {"type": "var", "name": "out"} + , "value": {"type": "var", "name": "object"} + } + } + } + ] + ] + , "body": {"type": "var", "name": "staged output artifact"} + } + } } - } + ] + , [ "component artifacts" + , { "type": "disjoint_map_union" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": + {"type": "var", "name": "component-fieldnames", "default": []} + , "body": + { "type": "let*" + , "bindings": + [ [ "transition" + , { "type": "lookup" + , "map": + { "type": "var" + , "name": "modified-transitions" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "fieldname"} + , "default": {"type": "var", "name": "deps-transition"} + } + ] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "field_artifacts"} + } + } + } + ] + ] + , "body": + { "type": "disjoint_map_union" + , "msg": "Stating conflict between own objects and objects of components" + , "$1": + [ {"type": "var", "name": "my objects"} + , {"type": "var", "name": "component artifacts"} + ] } } } @@ -999,6 +1170,9 @@ , "compile-args" , "cflags-files" , "defaults-transition" + , "component-fieldnames" + , "deps-transition" + , "modified-transitions" ] , "imports": { "compiler": "compiler" @@ -1184,7 +1358,9 @@ , "extra-provides" , "public-fieldnames" , "private-fieldnames" + , "component-fieldnames" , "deps-transition" + , "modified-transitions" , "defaults-transition" ] , "imports": @@ -1356,6 +1532,9 @@ , "cflags-files" , "ldflags-files" , "defaults-transition" + , "component-fieldnames" + , "deps-transition" + , "modified-transitions" ] , "imports": { "compiler": "compiler" @@ -1561,8 +1740,10 @@ , "extra-provides" , "defaults-transition" , "deps-transition" + , "modified-transitions" , "public-fieldnames" , "private-fieldnames" + , "component-fieldnames" ] , "imports": { "compile-deps": "compile-deps" @@ -1763,6 +1944,7 @@ , "compile-args" , "cflags-files" , "defaults-transition" + , "component-fieldnames" ] , "imports": { "compiler": "compiler" @@ -1850,6 +2032,7 @@ , "AR" , "ENV" , "BUILD_POSITION_INDEPENDENT" + , "BUILD_OBJECT_ONLY_DROP_OBJECT_LINKING" , "DEBUG" , "name" , "pure C" @@ -1865,7 +2048,9 @@ , "extra-provides" , "public-fieldnames" , "private-fieldnames" + , "component-fieldnames" , "deps-transition" + , "modified-transitions" , "defaults-transition" ] , "imports": @@ -1907,7 +2092,15 @@ , "$1": { "type": "++" , "$1": - [ {"type": "keys", "$1": {"type": "var", "name": "objects"}} + [ { "type": "if" + , "cond": + { "type": "var" + , "name": "BUILD_OBJECT_ONLY_DROP_OBJECT_LINKING" + } + , "then": [] + , "else": + {"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"} @@ -2213,6 +2406,7 @@ , "private-ldflags" , "stage" , "private-fieldnames" + , "component-fieldnames" ] , "imports": { "compile-deps": "compile-deps" @@ -384,6 +384,7 @@ , "private-deps" , "proto" , "private-proto" + , "components" ] , "string_fields": [ "name" @@ -412,6 +413,7 @@ , "ENV" , "BUILD_POSITION_INDEPENDENT" , "BUILD_OBJECT_ONLY" + , "BUILD_OBJECT_ONLY_DROP_OBJECT_LINKING" , "DEBUG" ] , "implicit": {"defaults": ["defaults"]} @@ -424,6 +426,11 @@ [ "Any header files that only need to be present when compiling the" , "source files, but are not needed for any consumer of the library." ] + , "components": + [ "Any other libraries that are considered part of this library;" + , "all object files of those are included unconditionally into this" + , "library." + ] , "stage": [ "The logical location of all header and source files, as well as the" , "resulting library file. Individual directory components are joined" @@ -543,6 +550,12 @@ , "configuration is set, the \"shared\" option is ignored. This" , "variable is cleared for all dependencies." ] + , "BUILD_OBJECT_ONLY_DROP_OBJECT_LINKING": + [ "If true, do not include the objects in the provided \"link-args\"." + , "This allows consuming libraries that pick on the objects themselves" + , "to still forward the \"link-args\" of that library, and thus getting" + , "correct linking instructions for the resulting library." + ] } , "artifacts_doc": ["The actual library (libname.a) staged in the specified directory"] @@ -583,10 +596,12 @@ } , "imports": { "artifacts": ["./", "..", "field_artifacts"] + , "runfiles": ["./", "..", "field_runfiles"] , "static result": "lib result" , "shared result": "shared result" , "object result": "object result" , "fPIC transition": ["transitions", "with fPIC, not object-only"] + , "component transition": ["transitions", "with fPIC, object-only"] } , "config_transitions": { "deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] @@ -595,6 +610,8 @@ , "private-proto-deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] , "defaults": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] + , "components": + [{"type": "CALL_EXPRESSION", "name": "component transition"}] } , "expression": { "type": "let*" @@ -653,6 +670,27 @@ } } ] + , [ "component transition" + , {"type": "CALL_EXPRESSION", "name": "component transition"} + ] + , [ "component hdrs" + , { "type": "let*" + , "bindings": + [ ["fieldname", "components"] + , ["transition", {"type": "var", "name": "component transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "runfiles"} + } + ] + , [ "hdrs" + , { "type": "disjoint_map_union" + , "msg": "Staging conflict between component and own header files" + , "$1": + [ {"type": "var", "name": "hdrs"} + , {"type": "var", "name": "component hdrs"} + ] + } + ] , [ "private-hdrs" , { "type": "to_subdir" , "subdir": {"type": "var", "name": "stage"} @@ -687,8 +725,16 @@ , "proto-deps" , "private-proto-deps" , "defaults" + , "components" ] ] + , ["component-fieldnames", ["components"]] + , [ "modified-transitions" + , { "type": "singleton_map" + , "key": "components" + , "value": {"type": "var", "name": "component transition"} + } + ] , [ "shared" , { "type": "and" , "$1": diff --git a/transitions/EXPRESSIONS b/transitions/EXPRESSIONS index 18c5dbc..d1ecefa 100644 --- a/transitions/EXPRESSIONS +++ b/transitions/EXPRESSIONS @@ -51,6 +51,27 @@ , "$1": [ {"type": "CALL_EXPRESSION", "name": "with fPIC"} , {"type": "singleton_map", "key": "BUILD_OBJECT_ONLY", "value": null} + , { "type": "singleton_map" + , "key": "BUILD_OBJECT_ONLY_DROP_OBJECT_LINKING" + , "value": null + } + ] + } + } +, "with fPIC, object-only": + { "doc": + ["Like \"with fPIC\", but also unconditionally setting BUILD_OBJECT_ONLY"] + , "var": ["BUILD_OBJECT_ONLY"] + , "imports": {"with fPIC": "with fPIC"} + , "expression": + { "type": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "with fPIC"} + , {"type": "singleton_map", "key": "BUILD_OBJECT_ONLY", "value": true} + , { "type": "singleton_map" + , "key": "BUILD_OBJECT_ONLY_DROP_OBJECT_LINKING" + , "value": true + } ] } } |