diff options
Diffstat (limited to 'rules/CC/EXPRESSIONS')
-rw-r--r-- | rules/CC/EXPRESSIONS | 3263 |
1 files changed, 3263 insertions, 0 deletions
diff --git a/rules/CC/EXPRESSIONS b/rules/CC/EXPRESSIONS new file mode 100644 index 0000000..c616dfa --- /dev/null +++ b/rules/CC/EXPRESSIONS @@ -0,0 +1,3263 @@ +{ "default-CC": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "CC"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + , ["CC", {"type": "CALL_EXPRESSION", "name": "list_provider"}] + , [ "CC" + , { "type": "if" + , "cond": {"type": "var", "name": "CC"} + , "then": {"type": "var", "name": "CC"} + , "else": ["cc"] + } + ] + ] + , "body": {"type": "var", "name": "CC"} + } + } +, "default-CXX": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "CXX"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + , ["CXX", {"type": "CALL_EXPRESSION", "name": "list_provider"}] + , [ "CXX" + , { "type": "if" + , "cond": {"type": "var", "name": "CXX"} + , "then": {"type": "var", "name": "CXX"} + , "else": ["c++"] + } + ] + ] + , "body": {"type": "var", "name": "CXX"} + } + } +, "default-AR": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "AR"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + , ["AR", {"type": "CALL_EXPRESSION", "name": "list_provider"}] + , [ "AR" + , { "type": "if" + , "cond": {"type": "var", "name": "AR"} + , "then": {"type": "var", "name": "AR"} + , "else": ["ar"] + } + ] + ] + , "body": {"type": "var", "name": "AR"} + } + } +, "default-ARFLAGS": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "ARFLAGS"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + , ["ARFLAGS", {"type": "CALL_EXPRESSION", "name": "list_provider"}] + , [ "ARFLAGS" + , { "type": "if" + , "cond": {"type": "var", "name": "ARFLAGS"} + , "then": {"type": "var", "name": "ARFLAGS"} + , "else": ["cqs"] + } + ] + ] + , "body": {"type": "var", "name": "ARFLAGS"} + } + } +, "default-CFLAGS": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "CFLAGS"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } +, "default-CXXFLAGS": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "CXXFLAGS"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } +, "default-LDFLAGS": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "LDFLAGS"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } +, "default-ENV": + { "vars": ["defaults-transition"] + , "imports": {"map_provider": ["./", "..", "field_map_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "ENV"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + , ["default", {"type": "empty_map"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} + } + } +, "default-PATH": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "PATH"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } +, "default-TOOLCHAIN": + { "vars": ["defaults-transition"] + , "imports": {"map_provider": ["./", "..", "field_map_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "TOOLCHAIN"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + , ["default", {"type": "empty_map"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} + } + } +, "default-NON_SYSTEM_TOOLS": + { "vars": ["defaults-transition"] + , "expression": + { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "x" + , "range": {"type": "FIELD", "name": "defaults"} + , "body": + { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "x"} + , "provider": "NON_SYSTEM_TOOLS" + , "transition": + { "type": "var" + , "name": "defaults-transition" + , "default": {"type": "empty_map"} + } + , "default": {"type": "empty_map"} + } + } + } + } +, "defaults-base-provides-list": + { "doc": ["Query list of providers from 'base' targets"] + , "vars": ["provider", "default"] + , "vars_doc": + { "provider": ["The name of the provider in the provides map."] + , "default": ["The default if provider is missing (default: [])."] + } + , "imports": {"provider_list": ["./", "..", "field_provider_list"]} + , "expression": + { "type": "let*" + , "bindings": [["fieldname", "base"]] + , "body": {"type": "CALL_EXPRESSION", "name": "provider_list"} + } + } +, "defaults-base-provides-++": + { "doc": ["Query flattend list of providers from 'base' targets"] + , "vars": ["provider", "default"] + , "vars_doc": + { "provider": ["The name of the provider in the provides map."] + , "default": ["The default if provider is missing (default: [])."] + } + , "imports": {"base-provides-list": "defaults-base-provides-list"} + , "expression": + { "type": "++" + , "$1": {"type": "CALL_EXPRESSION", "name": "base-provides-list"} + } + } +, "defaults-base-provides": + { "doc": ["Query provider from 'base' targets (last wins)"] + , "vars": ["provider", "default"] + , "vars_doc": + { "provider": ["The name of the provider in the provides map."] + , "default": ["The default if provider is missing (default: [])."] + } + , "imports": {"base-provides-list": "defaults-base-provides-list"} + , "expression": + { "type": "foldl" + , "var": "next" + , "start": {"type": "var", "name": "default", "default": []} + , "accum_var": "curr" + , "range": {"type": "CALL_EXPRESSION", "name": "base-provides-list"} + , "body": + { "type": "if" + , "cond": {"type": "var", "name": "next"} + , "then": {"type": "var", "name": "next"} + , "else": {"type": "var", "name": "curr"} + } + } + } +, "debug-deps": + { "doc": + ["Collect debug dependencies (sources/headers) from given target_fields"] + , "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": + { "type": "map_union" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "++" + , "$1": + { "type": "let*" + , "bindings": + [ ["provider", {"type": "var", "name": "deps-provider"}] + , [ "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"}] + } + } + } + } + } + } +, "compile-deps": + { "doc": ["Collect compile dependencies (headers) from given target_fields"] + , "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": + { "runfiles_list": ["./", "..", "field_runfiles_list"] + , "provider_list": ["./", "..", "field_provider_list"] + } + , "expression": + { "type": "disjoint_map_union" + , "$1": + { "type": "++" + , "$1": + [ { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": + { "type": "++" + , "$1": + [ {"type": "var", "name": "deps-fieldnames"} + , { "type": "var" + , "name": "component-fieldnames" + , "default": [] + } + ] + } + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "compile-deps"] + , [ "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"} + } + } + } + , { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "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"} + } + ] + , ["default", {"type": "empty_map"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "runfiles_list"} + } + } + } + ] + } + } + } +, "compile-args-deps": + { "doc": ["Collect compile arguments from given target_fields"] + , "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": + { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "compile-args"] + , [ "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"} + } + } + } + } + } +, "link-deps": + { "doc": ["Collect link dependencies (libraries) from given target_fields"] + , "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": "let*" + , "bindings": + [ [ "drop_artifacts" + , { "type": "set" + , "$1": + {"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"} + } + ] + } + } + } + } + } + } + } +, "link-args-deps": + { "doc": ["Collect linker arguments from given target_fields"] + , "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": + { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "link-args"] + , [ "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"} + } + } + } + } + } +, "run-libs-deps": + { "doc": ["Collect runtime libraries from given target_fields"] + , "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": + { "type": "to_subdir" + , "flat": true + , "$1": + { "type": "disjoint_map_union" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "run-libs"] + , ["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"} + } + } + } + } + } + } +, "run-libs-args-deps": + { "doc": + ["Collect runtime libraries link arguments from given target_fields"] + , "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": + { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "run-libs-args"] + , [ "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"} + } + } + } + } + } +, "pkg-map-provider-deps": + { "doc": ["Collect maps from provider \"package\" for given target_fields"] + , "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": + { "type": "disjoint_map_union" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "package"] + , ["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": "foreach" + , "range": {"type": "CALL_EXPRESSION", "name": "provider_list"} + , "var": "map" + , "body": + { "type": "lookup" + , "key": {"type": "var", "name": "pkg-key"} + , "map": {"type": "var", "name": "map"} + , "default": {"type": "empty_map"} + } + } + } + } + } + } + } +, "cflags-files-deps": + { "doc": ["Collect cflags files from target_fields"] + , "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": + { "type": "let*" + , "bindings": [["pkg-key", "cflags-files"]] + , "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"} + } + } +, "ldflags-files-deps": + { "doc": ["Collect cflags files from target_fields"] + , "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": + { "type": "let*" + , "bindings": [["pkg-key", "ldflags-files"]] + , "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"} + } + } +, "pkg-prefix-lib-paths": + { "doc": ["Detect ldflags referring to local libs and prefix them."] + , "vars": ["pkg-ldflags", "pkg-libs", "flat-libs", "lib-prefix"] + , "expression": + { "type": "let*" + , "bindings": + [ [ "libs set" + , { "type": "set" + , "$1": {"type": "keys", "$1": {"type": "var", "name": "pkg-libs"}} + } + ] + ] + , "body": + { "type": "foreach" + , "var": "item" + , "range": {"type": "var", "name": "pkg-ldflags"} + , "body": + { "type": "if" + , "cond": + { "type": "lookup" + , "key": {"type": "var", "name": "item"} + , "map": {"type": "var", "name": "libs set"} + } + , "then": + { "type": "join" + , "$1": + { "type": "if" + , "cond": {"type": "var", "name": "flat-libs"} + , "then": + [ "-l:" + , {"type": "basename", "$1": {"type": "var", "name": "item"}} + ] + , "else": + [ {"type": "var", "name": "lib-prefix"} + , "/" + , {"type": "var", "name": "item"} + ] + } + } + , "else": {"type": "var", "name": "item"} + } + } + } + } +, "pkg-prefix-flag-paths": + { "doc": ["Detect flags referring to local flag files and prefix them."] + , "vars": ["flags", "pkg-flag-files", "flag-prefix"] + , "expression": + { "type": "let*" + , "bindings": + [ [ "pkg-flag-files unprefix map" + , { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "name" + , "range": + {"type": "keys", "$1": {"type": "var", "name": "pkg-flag-files"}} + , "body": + { "type": "singleton_map" + , "key": + {"type": "join", "$1": ["@", {"type": "var", "name": "name"}]} + , "value": {"type": "var", "name": "name"} + } + } + } + ] + ] + , "body": + { "type": "foreach" + , "var": "item" + , "range": {"type": "var", "name": "flags"} + , "body": + { "type": "let*" + , "bindings": + [ [ "flag-file" + , { "type": "lookup" + , "map": {"type": "var", "name": "pkg-flag-files unprefix map"} + , "key": {"type": "var", "name": "item"} + } + ] + ] + , "body": + { "type": "if" + , "cond": {"type": "var", "name": "flag-file"} + , "then": + { "type": "join" + , "$1": + [ "@" + , {"type": "var", "name": "flag-prefix"} + , "/" + , {"type": "var", "name": "flag-file"} + ] + } + , "else": {"type": "var", "name": "item"} + } + } + } + } + } +, "pkg-config": + { "vars": + [ "pkg-name" + , "pkg-prefix" + , "pkg-version" + , "pkg-cflags" + , "pkg-ldflags" + , "pkg-flag-files" + , "pkg-libs" + , "flat-libs" + , "pc-install-dir" + ] + , "imports": + { "pkg-prefix-lib-paths": "pkg-prefix-lib-paths" + , "pkg-prefix-flag-paths": "pkg-prefix-flag-paths" + } + , "expression": + { "type": "let*" + , "bindings": + [ ["lib-prefix", "${libdir}"] + , [ "pkg-ldflags" + , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-lib-paths"} + ] + , [ "flag-prefix" + , { "type": "join" + , "$1": ["${prefix}/", {"type": "var", "name": "pc-install-dir"}] + } + ] + , ["flags", {"type": "var", "name": "pkg-cflags"}] + , [ "pkg-cflags" + , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"} + ] + , ["flags", {"type": "var", "name": "pkg-ldflags"}] + , [ "pkg-ldflags" + , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"} + ] + ] + , "body": + { "type": "singleton_map" + , "key": + {"type": "join", "$1": [{"type": "var", "name": "pkg-name"}, ".pc"]} + , "value": + { "type": "BLOB" + , "data": + { "type": "join" + , "separator": "\n" + , "$1": + [ { "type": "join" + , "$1": + [ "prefix=" + , {"type": "var", "name": "pkg-prefix", "default": "/"} + ] + } + , "libdir=${prefix}/lib" + , "includedir=${prefix}/include" + , { "type": "join" + , "$1": ["Name: ", {"type": "var", "name": "pkg-name"}] + } + , { "type": "join" + , "$1": + [ "Version: " + , {"type": "var", "name": "pkg-version", "default": "unknown"} + ] + } + , { "type": "join" + , "$1": + [ "Description: Pkg-config for " + , {"type": "var", "name": "pkg-name"} + , ", generated by JustBuild" + ] + } + , "URL: unknown" + , { "type": "join" + , "separator": " " + , "$1": + { "type": "++" + , "$1": + [ ["Cflags:", "-I${includedir}"] + , {"type": "var", "name": "pkg-cflags"} + ] + } + } + , { "type": "join" + , "separator": " " + , "$1": + { "type": "++" + , "$1": + [ ["Libs:"] + , { "type": "if" + , "cond": {"type": "var", "name": "flat-libs"} + , "then": ["-L${libdir}"] + } + , {"type": "var", "name": "pkg-ldflags"} + ] + } + } + , "" + ] + } + } + } + } + } +, "objects": + { "vars": + [ "COMPILER" + , "COMPILE_FLAGS" + , "ENV" + , "TOOLCHAIN" + , "srcs" + , "hdrs" + , "private-hdrs" + , "compile-deps" + , "cflags-files" + , "component-fieldnames" + , "deps-transition" + , "modified-transitions" + ] + , "imports": {"field_artifacts": ["./", "..", "field_artifacts"]} + , "expression": + { "type": "let*" + , "bindings": + [ [ "include tree" + , { "type": "singleton_map" + , "key": "include" + , "value": + {"type": "TREE", "$1": {"type": "var", "name": "compile-deps"}} + } + ] + , [ "all hdrs" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "include tree"} + , { "type": "to_subdir" + , "subdir": "work" + , "$1": + { "type": "disjoint_map_union" + , "$1": + [ {"type": "var", "name": "hdrs"} + , {"type": "var", "name": "private-hdrs"} + ] + } + } + ] + } + ] + , [ "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"}] + } + ] + , [ "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"} + } + ] + } + ] + , [ "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"} + } + } + } + ] + ] + , "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"} + ] + } + } + } +, "lint information": + { "vars": + [ "srcs" + , "hdrs" + , "private-hdrs" + , "compile-deps" + , "cflags-files" + , "lint-deps fieldnames" + , "deps-transition" + , "deps-fieldnames" + , "compile-args" + , "defaults-transition" + , "modified-transitions" + ] + , "imports": + { "objects": "objects" + , "list_provider": ["./", "..", "field_list_provider"] + , "runfiles_list": ["./", "..", "field_runfiles_list"] + , "default-TOOLCHAIN": "default-TOOLCHAIN" + , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" + , "compiler": "compiler" + , "flags": "flags" + } + , "expression": + { "type": "let*" + , "bindings": + [ [ "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"} + ] + } + ] + , [ "include tree" + , { "type": "singleton_map" + , "key": "include" + , "value": + {"type": "TREE", "$1": {"type": "var", "name": "compile-deps"}} + } + ] + , [ "all hdrs" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "include tree"} + , { "type": "to_subdir" + , "subdir": "work" + , "$1": + { "type": "disjoint_map_union" + , "$1": + [ {"type": "var", "name": "hdrs"} + , {"type": "var", "name": "private-hdrs"} + ] + } + } + ] + } + ] + , [ "direct-deps hdrs" + , { "type": "to_subdir" + , "subdir": "include" + , "$1": + { "type": "map_union" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "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": "runfiles_list"} + } + } + } + } + } + ] + , [ "own headers" + , { "type": "to_subdir" + , "subdir": "work" + , "$1": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "hdrs"} + , {"type": "var", "name": "private-hdrs"} + ] + } + } + ] + , [ "direct hdrs" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "own headers"} + , {"type": "var", "name": "direct-deps hdrs"} + ] + } + ] + , [ "direct deps artifact names" + , {"type": "keys", "$1": {"type": "var", "name": "direct hdrs"}} + ] + , [ "hdr lint" + , { "type": "foreach" + , "range": + { "type": "++" + , "$1": + [ {"type": "keys", "$1": {"type": "var", "name": "private-hdrs"}} + , {"type": "keys", "$1": {"type": "var", "name": "hdrs"}} + ] + } + , "body": + { "type": "VALUE_NODE" + , "$1": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "all hdrs"} + , "provides": + { "type": "let*" + , "bindings": + [ [ "src" + , { "type": "join" + , "$1": ["work/", {"type": "var", "name": "_"}] + } + ] + , [ "cmd" + , { "type": "++" + , "$1": + [ [{"type": "var", "name": "COMPILER"}] + , {"type": "var", "name": "COMPILE_FLAGS"} + , [ "-I" + , "work" + , "-isystem" + , "include" + , "-E" + , {"type": "var", "name": "src"} + ] + ] + } + ] + ] + , "body": + { "type": "env" + , "vars": ["cmd", "src", "direct deps artifact names"] + } + } + } + } + } + ] + , [ "src lint" + , { "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"} + } + , { "type": "var" + , "name": "cflags-files" + , "default": {"type": "empty_map"} + } + , { "type": "var" + , "name": "TOOLCHAIN" + , "default": {"type": "empty_map"} + } + ] + } + ] + , [ "out" + , { "type": "change_ending" + , "$1": {"type": "var", "name": "src_name"} + , "ending": ".o" + } + ] + , [ "work out" + , { "type": "join" + , "separator": "/" + , "$1": ["work", {"type": "var", "name": "out"}] + } + ] + , [ "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"}] + ] + } + ] + ] + , "body": + { "type": "VALUE_NODE" + , "$1": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "inputs"} + , "provides": + { "type": "let*" + , "bindings": + [["src", {"type": "var", "name": "work src_name"}]] + , "body": + { "type": "env" + , "vars": ["cmd", "src", "direct deps artifact names"] + } + } + } + } + } + } + ] + , [ "dep lint nodes" + , { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "lint-deps fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "lint"] + , [ "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"} + } + } + } + ] + , [ "lint nodes" + , { "type": "++" + , "$1": + [ {"type": "var", "name": "hdr lint"} + , {"type": "var", "name": "src lint"} + , {"type": "var", "name": "dep lint nodes"} + ] + } + ] + , [ "lint nodes" + , {"type": "nub_right", "$1": {"type": "var", "name": "lint nodes"}} + ] + ] + , "body": {"type": "var", "name": "lint nodes"} + } + } +, "compiler-cc": + { "vars": ["CC", "TOOLCHAIN_DIR", "NON_SYSTEM_TOOLS", "defaults-transition"] + , "imports": {"default-CC": "default-CC"} + , "expression": + { "type": "var" + , "name": "CC" + , "default": + { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "CC" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-CC"} + ] + } + } + } + } +, "compiler-cxx": + { "vars": ["CXX", "TOOLCHAIN_DIR", "NON_SYSTEM_TOOLS", "defaults-transition"] + , "imports": {"default-CXX": "default-CXX"} + , "expression": + { "type": "var" + , "name": "CXX" + , "default": + { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "CXX" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-CXX"} + ] + } + } + } + } +, "compiler": + { "vars": + [ "CC" + , "CXX" + , "pure C" + , "TOOLCHAIN_DIR" + , "NON_SYSTEM_TOOLS" + , "defaults-transition" + ] + , "imports": {"compiler-cc": "compiler-cc", "compiler-cxx": "compiler-cxx"} + , "expression": + { "type": "if" + , "cond": {"type": "var", "name": "pure C"} + , "then": {"type": "CALL_EXPRESSION", "name": "compiler-cc"} + , "else": {"type": "CALL_EXPRESSION", "name": "compiler-cxx"} + } + } +, "flags-cc": + { "vars": + [ "CFLAGS" + , "ADD_CFLAGS" + , "BUILD_POSITION_INDEPENDENT" + , "defaults-transition" + ] + , "imports": {"default-CFLAGS": "default-CFLAGS"} + , "expression": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": {"type": "var", "name": "BUILD_POSITION_INDEPENDENT"} + , "then": ["-fPIC"] + } + , { "type": "var" + , "name": "CFLAGS" + , "default": {"type": "CALL_EXPRESSION", "name": "default-CFLAGS"} + } + , {"type": "var", "name": "ADD_CFLAGS", "default": []} + ] + } + } +, "flags-cxx": + { "vars": + [ "CXXFLAGS" + , "ADD_CXXFLAGS" + , "BUILD_POSITION_INDEPENDENT" + , "defaults-transition" + ] + , "imports": {"default-CXXFLAGS": "default-CXXFLAGS"} + , "expression": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": {"type": "var", "name": "BUILD_POSITION_INDEPENDENT"} + , "then": ["-fPIC"] + } + , { "type": "var" + , "name": "CXXFLAGS" + , "default": {"type": "CALL_EXPRESSION", "name": "default-CXXFLAGS"} + } + , {"type": "var", "name": "ADD_CXXFLAGS", "default": []} + ] + } + } +, "flags": + { "vars": + [ "CFLAGS" + , "CXXFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "BUILD_POSITION_INDEPENDENT" + , "pure C" + , "defaults-transition" + ] + , "imports": {"flags-cc": "flags-cc", "flags-cxx": "flags-cxx"} + , "expression": + { "type": "if" + , "cond": {"type": "var", "name": "pure C"} + , "then": {"type": "CALL_EXPRESSION", "name": "flags-cc"} + , "else": {"type": "CALL_EXPRESSION", "name": "flags-cxx"} + } + } +, "lib artifact": + { "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" + , "component-fieldnames" + , "deps-transition" + , "modified-transitions" + ] + , "imports": + { "compiler": "compiler" + , "flags": "flags" + , "objects": "objects" + , "default-AR": "default-AR" + , "default-ARFLAGS": "default-ARFLAGS" + , "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"} + ] + } + ] + , [ "AR" + , { "type": "var" + , "name": "AR" + , "default": + { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "AR" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": + ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-AR"} + ] + } + } + } + ] + , ["ARFLAGS", {"type": "CALL_EXPRESSION", "name": "default-ARFLAGS"}] + , [ "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"}] + } + ] + } + } + } + ] + } + ] + , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] + , [ "base name" + , { "type": "if" + , "cond": {"type": "var", "name": "objects"} + , "then": + { "type": "assert_non_empty" + , "msg": "A name has to be provided for non-header-only libraries" + , "$1": {"type": "var", "name": "name"} + } + , "else": {"type": "var", "name": "name"} + } + ] + , [ "libname" + , { "type": "join" + , "$1": ["lib", {"type": "var", "name": "base name"}, ".a"] + } + ] + , [ "libpath" + , { "type": "if" + , "cond": {"type": "var", "name": "stage"} + , "then": + { "type": "join" + , "separator": "/" + , "$1": + [ {"type": "var", "name": "stage"} + , {"type": "var", "name": "libname"} + ] + } + , "else": {"type": "var", "name": "libname"} + } + ] + , [ "lib" + , { "type": "if" + , "cond": {"type": "var", "name": "objects"} + , "else": {"type": "empty_map"} + , "then": + { "type": "let*" + , "bindings": + [ [ "staged objects" + , { "type": "to_subdir" + , "subdir": "work" + , "$1": {"type": "var", "name": "objects"} + } + ] + , [ "staged libpath" + , { "type": "join" + , "$1": ["work/", {"type": "var", "name": "libpath"}] + } + ] + , [ "staged lib" + , { "type": "ACTION" + , "outs": [{"type": "var", "name": "staged libpath"}] + , "inputs": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "var", "name": "staged objects"} + ] + } + , "env": + { "type": "var" + , "name": "ENV" + , "default": {"type": "empty_map"} + } + , "cmd": + { "type": "++" + , "$1": + [ [{"type": "var", "name": "AR", "default": "ar"}] + , {"type": "var", "name": "ARFLAGS"} + , [{"type": "var", "name": "staged libpath"}] + , { "type": "keys" + , "$1": {"type": "var", "name": "staged objects"} + } + ] + } + } + ] + , [ "lib artifact" + , { "type": "lookup" + , "map": {"type": "var", "name": "staged lib"} + , "key": {"type": "var", "name": "staged libpath"} + } + ] + ] + , "body": + { "type": "singleton_map" + , "key": {"type": "var", "name": "libpath"} + , "value": {"type": "var", "name": "lib artifact"} + } + } + } + ] + ] + , "body": {"type": "var", "name": "lib"} + } + } +, "lib result": + { "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "AR" + , "ENV" + , "BUILD_POSITION_INDEPENDENT" + , "DEBUG" + , "LINT" + , "name" + , "pure C" + , "srcs" + , "hdrs" + , "private-hdrs" + , "cflags" + , "private-cflags" + , "ldflags" + , "private-ldflags" + , "stage" + , "pkg-name" + , "extra-provides" + , "public-fieldnames" + , "private-fieldnames" + , "component-fieldnames" + , "deps-transition" + , "modified-transitions" + , "defaults-transition" + ] + , "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" + , "lib artifact": "lib artifact" + , "debug-deps": "debug-deps" + , "lint": "lint information" + } + , "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"}] + , ["lib", {"type": "CALL_EXPRESSION", "name": "lib artifact"}] + , ["lint-deps fieldnames", ["deps", "private-deps", "components"]] + , [ "lint" + , { "type": "if" + , "cond": {"type": "var", "name": "LINT"} + , "then": {"type": "CALL_EXPRESSION", "name": "lint"} + } + ] + , [ "link-args" + , { "type": "nub_right" + , "$1": + { "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"} + ] + } + } + ] + , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}] + , [ "run-libs-args" + , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} + ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] + , [ "debug-srcs" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": + { "type": "map_union" + , "$1": + [ { "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"} + } + ] + , ["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": "lib"} + , "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" + , "debug-srcs" + , "debug-hdrs" + , "lint" + ] + } + , { "type": "var" + , "name": "extra-provides" + , "default": {"type": "empty_map"} + } + ] + } + } + } + } +, "shared artifact": + { "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "LDFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" + , "ENV" + , "name" + , "pure C" + , "srcs" + , "hdrs" + , "private-hdrs" + , "soversion" + , "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "run-libs" + , "run-libs-args" + , "cflags-files" + , "ldflags-files" + , "defaults-transition" + , "component-fieldnames" + , "deps-transition" + , "modified-transitions" + ] + , "imports": + { "compiler": "compiler" + , "flags": "flags" + , "objects": "objects" + , "default-ENV": "default-ENV" + , "default-PATH": "default-PATH" + , "default-LDFLAGS": "default-LDFLAGS" + , "default-TOOLCHAIN": "default-TOOLCHAIN" + , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" + } + , "expression": + { "type": "let*" + , "bindings": + [ ["BUILD_POSITION_INDEPENDENT", true] + , ["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"} + ] + } + ] + , [ "LDFLAGS" + , { "type": "++" + , "$1": + [ { "type": "var" + , "name": "LDFLAGS" + , "default": + {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"} + } + , {"type": "var", "name": "ADD_LDFLAGS", "default": []} + ] + } + ] + , [ "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"}] + } + ] + } + } + } + ] + } + ] + , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] + , [ "base name" + , { "type": "if" + , "cond": + { "type": "or" + , "$1": + [ {"type": "var", "name": "objects"} + , {"type": "var", "name": "link-deps"} + ] + } + , "then": + { "type": "assert_non_empty" + , "msg": "A name has to be provided for non-header-only libraries" + , "$1": {"type": "var", "name": "name"} + } + , "else": {"type": "var", "name": "name"} + } + ] + , [ "libname" + , { "type": "join" + , "$1": ["lib", {"type": "var", "name": "base name"}, ".so"] + } + ] + , [ "libname" + , { "type": "join" + , "separator": "." + , "$1": + { "type": "++" + , "$1": + [ [{"type": "var", "name": "libname"}] + , {"type": "var", "name": "soversion"} + ] + } + } + ] + , [ "lib" + , { "type": "if" + , "cond": + { "type": "or" + , "$1": + [ {"type": "var", "name": "objects"} + , {"type": "var", "name": "link-deps"} + ] + } + , "else": {"type": "empty_map"} + , "then": + { "type": "ACTION" + , "outs": [{"type": "var", "name": "libname"}] + , "inputs": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "var", "name": "objects"} + , {"type": "var", "name": "link-deps"} + , {"type": "var", "name": "run-libs"} + , { "type": "var" + , "name": "cflags-files" + , "default": {"type": "empty_map"} + } + , { "type": "var" + , "name": "ldflags-files" + , "default": {"type": "empty_map"} + } + ] + } + , "env": + {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + , "cmd": + { "type": "++" + , "$1": + [ [ {"type": "var", "name": "COMPILER"} + , "-shared" + , "-Wl,-rpath,$ORIGIN" + , "-Wl,-rpath,$ORIGIN/../lib" + , { "type": "join" + , "$1": + ["-Wl,-soname,", {"type": "var", "name": "libname"}] + } + ] + , {"type": "var", "name": "COMPILE_FLAGS"} + , ["-o", {"type": "var", "name": "libname"}] + , {"type": "keys", "$1": {"type": "var", "name": "objects"}} + , {"type": "var", "name": "link-args"} + , {"type": "var", "name": "run-libs-args"} + , {"type": "var", "name": "LDFLAGS"} + ] + } + } + } + ] + ] + , "body": {"type": "var", "name": "lib"} + } + } +, "shared result": + { "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "LDFLAGS" + , "ADD_CXXFLAGS" + , "ADD_CFLAGS" + , "ADD_LDFLAGS" + , "ENV" + , "DEBUG" + , "LINT" + , "name" + , "pure C" + , "srcs" + , "hdrs" + , "private-hdrs" + , "cflags" + , "private-cflags" + , "ldflags" + , "private-ldflags" + , "soversion" + , "pkg-name" + , "extra-provides" + , "defaults-transition" + , "deps-transition" + , "modified-transitions" + , "public-fieldnames" + , "private-fieldnames" + , "component-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" + , "shared artifact": "shared artifact" + , "debug-deps": "debug-deps" + , "lint": "lint information" + } + , "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"}] + , ["link-args", {"type": "CALL_EXPRESSION", "name": "link-args-deps"}] + , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}] + , [ "run-libs-args" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "ldflags", "default": []} + , {"type": "var", "name": "private-ldflags", "default": []} + , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} + ] + } + } + ] + , [ "ldflags-files" + , {"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": "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"} + } + ] + , ["lint-deps fieldnames", ["deps", "private-deps", "components"]] + , [ "lint" + , { "type": "if" + , "cond": {"type": "var", "name": "LINT"} + , "then": {"type": "CALL_EXPRESSION", "name": "lint"} + } + ] + , [ "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"} + } + ] + , ["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"} + ] + , ["link-deps", {"type": "empty_map"}] + , ["link-args", []] + , [ "run-libs" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "lib"} + , {"type": "var", "name": "run-libs"} + ] + } + ] + , [ "run-libs-args" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "keys", "$1": {"type": "var", "name": "lib"}} + , {"type": "var", "name": "ldflags", "default": []} + ] + } + } + ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] + , [ "package" + , { "type": "let*" + , "bindings": + [ ["name", {"type": "var", "name": "pkg-name"}] + , [ "version" + , { "type": "if" + , "cond": {"type": "var", "name": "soversion"} + , "then": + { "type": "join" + , "separator": "." + , "$1": {"type": "var", "name": "soversion"} + } + , "else": null + } + ] + ] + , "body": + { "type": "env" + , "vars": ["name", "version", "cflags-files", "ldflags-files"] + } + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "lib"} + , "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" + , "debug-srcs" + , "debug-hdrs" + , "lint" + ] + } + , { "type": "var" + , "name": "extra-provides" + , "default": {"type": "empty_map"} + } + ] + } + } + } + } +, "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" + , "modified-transitions" + , "component-fieldnames" + ] + , "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" + , "BUILD_OBJECT_ONLY_DROP_OBJECT_LINKING" + , "DEBUG" + , "LINT" + , "name" + , "pure C" + , "srcs" + , "hdrs" + , "private-hdrs" + , "cflags" + , "private-cflags" + , "ldflags" + , "private-ldflags" + , "stage" + , "pkg-name" + , "extra-provides" + , "public-fieldnames" + , "private-fieldnames" + , "component-fieldnames" + , "deps-transition" + , "modified-transitions" + , "defaults-transition" + ] + , "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" + , "debug-deps": "debug-deps" + , "lint": "lint information" + } + , "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"}] + , ["lint-deps fieldnames", ["deps", "private-deps", "components"]] + , [ "lint" + , { "type": "if" + , "cond": {"type": "var", "name": "LINT"} + , "then": {"type": "CALL_EXPRESSION", "name": "lint"} + } + ] + , [ "link-args" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ { "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"} + ] + } + } + ] + , ["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"} + ] + , [ "debug-srcs" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": + { "type": "map_union" + , "$1": + [ { "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"} + } + ] + , ["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" + , "debug-srcs" + , "debug-hdrs" + , "lint" + ] + } + , { "type": "var" + , "name": "extra-provides" + , "default": {"type": "empty_map"} + } + ] + } + } + } + } +, "bin artifact": + { "doc": ["Produces the binary artifact."] + , "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "LDFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" + , "ENV" + , "BUILD_POSITION_INDEPENDENT" + , "name" + , "pure C" + , "srcs" + , "private-hdrs" + , "stage" + , "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "run-libs" + , "run-libs-args" + , "cflags-files" + , "ldflags-files" + , "defaults-transition" + ] + , "imports": + { "compiler": "compiler" + , "flags": "flags" + , "objects": "objects" + , "default-ENV": "default-ENV" + , "default-PATH": "default-PATH" + , "default-LDFLAGS": "default-LDFLAGS" + , "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"} + ] + } + ] + , [ "LDFLAGS" + , { "type": "++" + , "$1": + [ { "type": "var" + , "name": "LDFLAGS" + , "default": + {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"} + } + , {"type": "var", "name": "ADD_LDFLAGS", "default": []} + ] + } + ] + , [ "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"}] + } + ] + } + } + } + ] + } + ] + , ["hdrs", {"type": "empty_map"}] + , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] + , [ "link-args" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "keys", "$1": {"type": "var", "name": "objects"}} + , {"type": "var", "name": "link-args"} + ] + } + } + ] + , [ "binpath" + , { "type": "if" + , "cond": {"type": "var", "name": "stage"} + , "then": + { "type": "join" + , "separator": "/" + , "$1": + [ {"type": "var", "name": "stage"} + , {"type": "var", "name": "name"} + ] + } + , "else": {"type": "var", "name": "name"} + } + ] + , [ "binpath (in work)" + , {"type": "join", "$1": ["work/", {"type": "var", "name": "binpath"}]} + ] + , ["TOOLCHAIN_DIR", "../toolchain"] + , ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] + , [ "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"}] + } + ] + } + } + } + ] + } + ] + , [ "cmd" + , { "type": "++" + , "$1": + [ [ {"type": "var", "name": "COMPILER"} + , "-Wl,-rpath,$ORIGIN" + , "-Wl,-rpath,$ORIGIN/../lib" + , "-o" + , {"type": "var", "name": "binpath"} + ] + , {"type": "var", "name": "COMPILE_FLAGS"} + , {"type": "var", "name": "link-args"} + , {"type": "var", "name": "run-libs-args"} + , {"type": "var", "name": "LDFLAGS"} + ] + } + ] + , [ "binary (in work)" + , { "type": "ACTION" + , "outs": [{"type": "var", "name": "binpath (in work)"}] + , "inputs": + { "type": "disjoint_map_union" + , "$1": + [ {"type": "var", "name": "TOOLCHAIN"} + , { "type": "to_subdir" + , "subdir": "work" + , "$1": + { "type": "disjoint_map_union" + , "$1": + [ {"type": "var", "name": "objects"} + , {"type": "var", "name": "link-deps"} + , {"type": "var", "name": "run-libs"} + , { "type": "var" + , "name": "cflags-files" + , "default": {"type": "empty_map"} + } + , { "type": "var" + , "name": "ldflags-files" + , "default": {"type": "empty_map"} + } + ] + } + } + ] + } + , "cmd": {"type": "var", "name": "cmd"} + , "cwd": "work" + , "env": {"type": "var", "name": "ENV"} + } + ] + , [ "binary" + , { "type": "singleton_map" + , "key": {"type": "var", "name": "binpath"} + , "value": + { "type": "lookup" + , "map": {"type": "var", "name": "binary (in work)"} + , "key": {"type": "var", "name": "binpath (in work)"} + } + } + ] + ] + , "body": {"type": "var", "name": "binary"} + } + } +, "bin result": + { "doc": ["Produces the binary target result."] + , "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "LDFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" + , "ENV" + , "BUILD_POSITION_INDEPENDENT" + , "DEBUG" + , "LINT" + , "name" + , "pure C" + , "srcs" + , "private-hdrs" + , "private-cflags" + , "private-ldflags" + , "stage" + , "private-fieldnames" + , "component-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" + , "binary": "bin artifact" + , "debug-deps": "debug-deps" + , "lint": "lint information" + } + , "expression": + { "type": "let*" + , "bindings": + [ ["deps-fieldnames", {"type": "var", "name": "private-fieldnames"}] + , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] + , [ "compile-args" + , { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} + , {"type": "var", "name": "private-cflags"} + ] + } + ] + , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] + , [ "link-args" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "private-ldflags"} + , {"type": "CALL_EXPRESSION", "name": "link-args-deps"} + ] + } + } + ] + , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}] + , [ "run-libs-args" + , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} + ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] + , [ "ldflags-files" + , {"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": "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": "map_union" + , "$1": + [ { "type": "let*" + , "bindings": [["deps-provider", "debug-hdrs"]] + , "body": {"type": "CALL_EXPRESSION", "name": "debug-deps"} + } + , {"type": "var", "name": "compile-deps"} + ] + } + , "else": {"type": "empty_map"} + } + ] + , [ "lint" + , { "type": "if" + , "cond": {"type": "var", "name": "LINT"} + , "then": + { "type": "let*" + , "bindings": + [ ["hdrs", {"type": "empty_map"}] + , ["lint-deps fieldnames", ["private-deps"]] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "lint"} + } + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "CALL_EXPRESSION", "name": "binary"} + , "provides": + { "type": "env" + , "vars": ["run-libs", "package", "debug-srcs", "debug-hdrs", "lint"] + } + } + } + } +, "install-with-deps stage": + { "vars": + [ "pc-install-dir" + , "targets" + , "prefix" + , "flat-libs" + , "hdrs-only" + , "skip-debug-stage" + ] + , "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" + , "pkg-config": "pkg-config" + } + , "expression": + { "type": "let*" + , "bindings": + [ [ "install-stage" + , { "type": "disjoint_map_union" + , "msg": "install stages may not overlap" + , "$1": + { "type": "foreach" + , "var": "target" + , "range": {"type": "var", "name": "targets"} + , "body": + { "type": "let*" + , "bindings": + [ [ "runfiles" + , { "type": "DEP_RUNFILES" + , "dep": {"type": "var", "name": "target"} + , "default": {"type": "empty_map"} + } + ] + , [ "compile-deps" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "compile-deps" + , "default": {"type": "empty_map"} + } + ] + , [ "headers" + , { "type": "disjoint_map_union" + , "msg": "headers may not overlap" + , "$1": + [ {"type": "var", "name": "runfiles"} + , {"type": "var", "name": "compile-deps"} + ] + } + ] + , [ "debug-srcs" + , { "type": "if" + , "cond": {"type": "var", "name": "skip-debug-stage"} + , "then": {"type": "empty_map"} + , "else": + { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "debug-srcs" + , "default": {"type": "empty_map"} + } + } + ] + , [ "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" + , "cond": {"type": "var", "name": "hdrs-only"} + , "then": {"type": "var", "name": "headers"} + , "else": + { "type": "let*" + , "bindings": + [ [ "artifacts" + , { "type": "DEP_ARTIFACTS" + , "dep": {"type": "var", "name": "target"} + , "default": {"type": "empty_map"} + } + ] + , [ "link-deps" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "link-deps" + , "default": {"type": "empty_map"} + } + ] + , [ "run-libs" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "run-libs" + , "default": {"type": "empty_map"} + } + ] + , [ "package" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "package" + , "default": {"type": "empty_map"} + } + ] + , [ "to_bin" + , { "type": "lookup" + , "key": "to_bin" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "binaries" + , { "type": "if" + , "cond": {"type": "var", "name": "to_bin"} + , "then": {"type": "var", "name": "artifacts"} + , "else": {"type": "empty_map"} + } + ] + , [ "libraries" + , { "type": "disjoint_map_union" + , "msg": "libraries may not overlap" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": {"type": "var", "name": "to_bin"} + , "then": [] + , "else": [{"type": "var", "name": "artifacts"}] + } + , [{"type": "var", "name": "link-deps"}] + , [{"type": "var", "name": "run-libs"}] + ] + } + } + ] + , [ "pkg-name" + , { "type": "lookup" + , "key": "name" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "pkg-config" + , { "type": "if" + , "cond": {"type": "var", "name": "pkg-name"} + , "then": + { "type": "let*" + , "bindings": + [ ["pkg-prefix", {"type": "var", "name": "prefix"}] + , [ "pkg-version" + , { "type": "lookup" + , "key": "version" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "pkg-cflags" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "compile-args" + , "default": [] + } + ] + , [ "pkg-ldflags" + , { "type": "++" + , "$1": + [ { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "link-args" + , "default": [] + } + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "run-libs-args" + , "default": [] + } + ] + } + ] + , [ "pkg-flag-files" + , { "type": "map_union" + , "$1": + [ { "type": "lookup" + , "key": "cflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + , { "type": "lookup" + , "key": "ldflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + ] + } + ] + , [ "pkg-libs" + , {"type": "var", "name": "libraries"} + ] + , [ "flat-libs" + , {"type": "var", "name": "flat-libs"} + ] + ] + , "body": + { "type": "map_union" + , "$1": + [ { "type": "CALL_EXPRESSION" + , "name": "pkg-config" + } + , {"type": "var", "name": "pkg-flag-files"} + ] + } + } + , "else": {"type": "empty_map"} + } + ] + ] + , "body": + { "type": "map_union" + , "$1": + [ { "type": "to_subdir" + , "subdir": "bin" + , "flat": true + , "msg": "install binaries may not overlap" + , "$1": {"type": "var", "name": "binaries"} + } + , { "type": "to_subdir" + , "subdir": "include" + , "$1": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "headers"} + , {"type": "var", "name": "debug-hdrs"} + ] + } + } + , { "type": "to_subdir" + , "subdir": "lib" + , "flat": {"type": "var", "name": "flat-libs"} + , "msg": "install libraries may not overlap" + , "$1": {"type": "var", "name": "libraries"} + } + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "pc-install-dir"} + , "$1": {"type": "var", "name": "pkg-config"} + } + , { "type": "to_subdir" + , "subdir": "work" + , "$1": {"type": "var", "name": "debug-srcs"} + } + ] + } + } + } + } + } + } + ] + ] + , "body": {"type": "var", "name": "install-stage"} + } + } +, "install-with-deps result": + { "vars": + [ "pc-install-dir" + , "targets" + , "prefix" + , "flat-libs" + , "hdrs-only" + , "skip-debug-stage" + ] + , "imports": {"install stage": "install-with-deps stage"} + , "expression": + { "type": "RESULT" + , "artifacts": {"type": "CALL_EXPRESSION", "name": "install stage"} + } + } +} |