{ "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-INCLUDE_SCANNER": { "vars": ["defaults-transition"] , "imports": {"map_provider": ["./", "..", "field_map_provider"]} , "expression": { "type": "let*" , "bindings": [ ["fieldname", "defaults"] , ["provider", "INCLUDE_SCANNER"] , ["transition", {"type": "var", "name": "defaults-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} } } , "default-DWP": { "vars": ["defaults-transition"] , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "let*" , "bindings": [ ["fieldname", "defaults"] , ["provider", "DWP"] , ["transition", {"type": "var", "name": "defaults-transition"}] , ["DWP", {"type": "CALL_EXPRESSION", "name": "list_provider"}] , [ "DWP" , { "type": "if" , "cond": {"type": "var", "name": "DWP"} , "then": {"type": "var", "name": "DWP"} , "else": ["dwp"] } ] ] , "body": {"type": "var", "name": "DWP"} } } , "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"} ] } } , "" ] } } } } } , "add-fission-compile-flags": { "doc": ["Add debug fission flags, if enabled, to existing compile flags."] , "vars": ["COMPILE_FLAGS", "DEBUG"] , "expression": { "type": "let*" , "bindings": [ [ "fission-config" , { "type": "if" , "cond": { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } , "then": { "type": "assert_non_empty" , "msg": [ "Debug fission requires non-empty debug map FISSION_CONFIG field" ] , "$1": { "type": "lookup" , "key": "FISSION_CONFIG" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } } , "else": {"type": "empty_map"} } ] , [ "flags" , { "type": "++" , "$1": [ {"type": "var", "name": "COMPILE_FLAGS"} , { "type": "if" , "cond": { "type": "lookup" , "key": "USE_SPLIT_DWARF" , "map": {"type": "var", "name": "fission-config"} } , "then": ["-gsplit-dwarf"] } , { "type": "let*" , "bindings": [ [ "version" , { "type": "lookup" , "key": "DWARF_VERSION" , "map": {"type": "var", "name": "fission-config"} } ] ] , "body": { "type": "if" , "cond": {"type": "var", "name": "version"} , "then": [ { "type": "join" , "$1": ["-gdwarf-", {"type": "var", "name": "version"}] } ] } } , { "type": "if" , "cond": { "type": "lookup" , "key": "USE_DEBUG_TYPES_SECTION" , "map": {"type": "var", "name": "fission-config"} } , "then": ["-fdebug-types-section"] } ] } ] ] , "body": {"type": "var", "name": "flags"} } } , "add-fission-link-flags": { "doc": ["Add debug fission flags, if enabled, to existing link flags."] , "vars": ["LDFLAGS", "DEBUG"] , "expression": { "type": "let*" , "bindings": [ [ "fission-config" , { "type": "if" , "cond": { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } , "then": { "type": "assert_non_empty" , "msg": [ "Debug fission requires non-empty debug map FISSION_CONFIG field" ] , "$1": { "type": "lookup" , "key": "FISSION_CONFIG" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } } , "else": {"type": "empty_map"} } ] , [ "flags" , { "type": "++" , "$1": [ {"type": "var", "name": "LDFLAGS"} , { "type": "if" , "cond": { "type": "lookup" , "key": "USE_GDB_INDEX" , "map": {"type": "var", "name": "fission-config"} } , "then": ["-Wl,--gdb-index"] } ] } ] ] , "body": {"type": "var", "name": "flags"} } } , "dwarf package": { "vars": [ "DWP" , "TOOLCHAIN" , "TOOLCHAIN_DIR" , "NON_SYSTEM_TOOLS" , "ENV" , "name" , "dwarf objects" , "dwarf deps" , "stage" ] , "imports": {"default-DWP": "default-DWP"} , "expression": { "type": "let*" , "bindings": [ [ "DWP" , { "type": "var" , "name": "DWP" , "default": { "type": "join" , "$1": { "type": "++" , "$1": [ { "type": "if" , "cond": { "type": "lookup" , "key": "DWP" , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} } , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] } , {"type": "CALL_EXPRESSION", "name": "default-DWP"} ] } } } ] , [ "pkgname" , {"type": "join", "$1": [{"type": "var", "name": "name"}, ".dwp"]} ] , [ "pkgpath" , { "type": "if" , "cond": {"type": "var", "name": "stage"} , "then": { "type": "join" , "separator": "/" , "$1": [ {"type": "var", "name": "stage"} , {"type": "var", "name": "pkgname"} ] } , "else": {"type": "var", "name": "pkgname"} } ] , [ "objects" , { "type": "var" , "name": "dwarf objects" , "default": {"type": "empty_map"} } ] , [ "objects" , { "type": "disjoint_map_union" , "$1": [ {"type": "var", "name": "objects"} , {"type": "var", "name": "dwarf deps"} ] } ] , [ "dwarf pkg" , { "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 pkgpath" , { "type": "join" , "$1": ["work/", {"type": "var", "name": "pkgpath"}] } ] , [ "staged pkg" , { "type": "ACTION" , "outs": [{"type": "var", "name": "staged pkgpath"}] , "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": "DWP", "default": "dwp"} , "-o" , {"type": "var", "name": "staged pkgpath"} ] , { "type": "keys" , "$1": {"type": "var", "name": "staged objects"} } ] } } ] , [ "pkg artifact" , { "type": "lookup" , "map": {"type": "var", "name": "staged pkg"} , "key": {"type": "var", "name": "staged pkgpath"} } ] ] , "body": { "type": "singleton_map" , "key": {"type": "var", "name": "pkgpath"} , "value": {"type": "var", "name": "pkg artifact"} } } } ] ] , "body": {"type": "var", "name": "dwarf pkg"} } } , "objects": { "vars": [ "COMPILER" , "COMPILE_FLAGS" , "ENV" , "DEBUG" , "TOOLCHAIN" , "srcs" , "hdrs" , "private-hdrs" , "compile-deps" , "cflags-files" , "component-fieldnames" , "defaults-transition" , "deps-transition" , "modified-transitions" ] , "imports": { "field_artifacts": ["./", "..", "field_artifacts"] , "default-INCLUDE_SCANNER": "default-INCLUDE_SCANNER" , "add-fission-compile-flags": "add-fission-compile-flags" } , "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"} ] } } ] } ] , [ "include_scan_tool" , { "type": "disjoint_map_union" , "msg": "Include scanner should be single artifact" , "$1": { "type": "foreach" , "var": "artifact" , "range": { "type": "values" , "$1": {"type": "CALL_EXPRESSION", "name": "default-INCLUDE_SCANNER"} } , "body": { "type": "singleton_map" , "key": "include_scan" , "value": {"type": "var", "name": "artifact"} } } } ] , [ "compile flags" , {"type": "CALL_EXPRESSION", "name": "add-fission-compile-flags"} ] , [ "my output artifacts" , { "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"}] } ] , [ "dwarf out" , { "type": "change_ending" , "$1": {"type": "var", "name": "src_name"} , "ending": ".dwo" } ] , [ "work dwarf out" , { "type": "join" , "separator": "/" , "$1": ["work", {"type": "var", "name": "dwarf out"}] } ] , [ "cmdline" , { "type": "++" , "$1": [ [{"type": "var", "name": "COMPILER"}] , {"type": "var", "name": "compile flags"} , ["-I", "work", "-isystem", "include"] , ["-c", {"type": "var", "name": "work src_name"}] ] } ] , [ "minimal include tree" , { "type": "if" , "cond": {"type": "var", "name": "include_scan_tool"} , "then": { "type": "from_subdir" , "subdir": "out" , "$1": { "type": "ACTION" , "out_dirs": ["out/include"] , "inputs": { "type": "map_union" , "$1": [ {"type": "var", "name": "inputs"} , {"type": "var", "name": "include_scan_tool"} ] } , "env": { "type": "var" , "name": "ENV" , "default": {"type": "empty_map"} } , "cmd": { "type": "++" , "$1": [ ["./include_scan"] , ["out"] , {"type": "var", "name": "cmdline"} , ["-E", "-M"] ] } } } , "else": {"type": "var", "name": "include tree"} } ] , [ "minimal inputs" , { "type": "map_union" , "$1": [ {"type": "var", "name": "inputs"} , {"type": "var", "name": "minimal include tree"} ] } ] , [ "action output" , { "type": "ACTION" , "outs": { "type": "++" , "$1": [ { "type": "if" , "cond": { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } , "then": [{"type": "var", "name": "work dwarf out"}] , "else": [] } , [{"type": "var", "name": "work out"}] ] } , "inputs": {"type": "var", "name": "minimal inputs"} , "env": { "type": "var" , "name": "ENV" , "default": {"type": "empty_map"} } , "cmd": { "type": "++" , "$1": [ {"type": "var", "name": "cmdline"} , ["-o", {"type": "var", "name": "work out"}] ] } } ] , [ "staged output artifacts" , { "type": "++" , "$1": [ [ { "type": "singleton_map" , "key": {"type": "var", "name": "out"} , "value": { "type": "lookup" , "key": {"type": "var", "name": "work out"} , "map": {"type": "var", "name": "action output"} } } ] , { "type": "if" , "cond": { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } , "else": [] , "then": [ { "type": "singleton_map" , "key": {"type": "var", "name": "dwarf out"} , "value": { "type": "lookup" , "key": {"type": "var", "name": "work dwarf out"} , "map": {"type": "var", "name": "action output"} } } ] } ] } ] ] , "body": {"type": "var", "name": "staged output artifacts"} } } ] , [ "my objects" , { "type": "map_union" , "$1": { "type": "foreach" , "range": {"type": "var", "name": "my output artifacts"} , "body": { "type": "[]" , "index": "0" , "list": {"type": "var", "name": "_"} } } } ] , [ "my dwarf objects" , { "type": "if" , "cond": { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } , "else": {"type": "empty_map"} , "then": { "type": "map_union" , "$1": { "type": "foreach" , "range": {"type": "var", "name": "my output artifacts"} , "body": { "type": "[]" , "index": "1" , "list": {"type": "var", "name": "_"} } } } } ] , [ "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": "map_union" , "$1": [ { "type": "singleton_map" , "key": "objects" , "value": { "type": "disjoint_map_union" , "msg": "Staging conflict between own objects and objects of components" , "$1": [ {"type": "var", "name": "my objects"} , {"type": "var", "name": "component artifacts"} ] } } , { "type": "singleton_map" , "key": "dwarf objects" , "value": {"type": "var", "name": "my dwarf objects"} } ] } } } , "lint information": { "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "DEBUG" , "pure C" , "srcs" , "hdrs" , "private-hdrs" , "compile-deps" , "cflags-files" , "lint-deps fieldnames" , "deps-transition" , "deps-fieldnames" , "compile-args" , "defaults-transition" , "modified-transitions" ] , "imports": { "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" , "add-fission-compile-flags": "add-fission-compile-flags" } , "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"} ] } ] , [ "compile flags" , {"type": "CALL_EXPRESSION", "name": "add-fission-compile-flags"} ] , [ "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"} ] ] } ] , ["extra outs", []] ] , "body": { "type": "env" , "vars": ["cmd", "src", "direct deps artifact names", "extra outs"] } } } } } ] , [ "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"}] } ] , [ "dwarf out" , { "type": "change_ending" , "$1": {"type": "var", "name": "src_name"} , "ending": ".dwo" } ] , [ "work dwarf out" , { "type": "join" , "separator": "/" , "$1": ["work", {"type": "var", "name": "dwarf out"}] } ] , [ "extra outs" , { "type": "if" , "cond": { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } , "then": [{"type": "var", "name": "work dwarf out"}] , "else": [] } ] , [ "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" , "extra outs" ] } } } } } } ] , [ "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" , "DEBUG" , "BUILD_POSITION_INDEPENDENT" , "pure C" , "defaults-transition" ] , "imports": {"flags-cc": "flags-cc", "flags-cxx": "flags-cxx"} , "expression": { "type": "let*" , "bindings": [ [ "flags" , { "type": "if" , "cond": {"type": "var", "name": "pure C"} , "then": {"type": "CALL_EXPRESSION", "name": "flags-cc"} , "else": {"type": "CALL_EXPRESSION", "name": "flags-cxx"} } ] ] , "body": { "type": "if" , "cond": {"type": "var", "name": "flags"} , "then": {"type": "var", "name": "flags"} , "else": { "type": "if" , "cond": {"type": "var", "name": "DEBUG"} , "then": ["-g"] } } } } , "lib artifact": { "doc": ["Provides the library artifact."] , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "AR" , "ENV" , "BUILD_POSITION_INDEPENDENT" , "DEBUG" , "name" , "pure C" , "srcs" , "hdrs" , "private-hdrs" , "stage" , "compile-deps" , "compile-args" , "cflags-files" , "defaults-transition" , "component-fieldnames" , "deps-transition" , "modified-transitions" ] , "imports": {"lib action": "lib action"} , "expression": { "type": "lookup" , "key": "library" , "map": {"type": "CALL_EXPRESSION", "name": "lib action"} , "default": {"type": "empty_map"} } } , "lib action": { "doc": [ "Run the action producing the library artifact and pass it together with" , "related information to consumers." ] , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "AR" , "ENV" , "BUILD_POSITION_INDEPENDENT" , "DEBUG" , "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 result", {"type": "CALL_EXPRESSION", "name": "objects"}] , [ "objects" , { "type": "lookup" , "key": "objects" , "map": { "type": "var" , "name": "objects result" , "default": {"type": "empty_map"} } } ] , [ "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": "map_union" , "$1": [ { "type": "singleton_map" , "key": "library" , "value": {"type": "var", "name": "lib"} } , { "type": "singleton_map" , "key": "dwarf objects" , "value": { "type": "lookup" , "key": "dwarf objects" , "map": { "type": "var" , "name": "objects result" , "default": {"type": "empty_map"} } } } , { "type": "env" , "vars": ["TOOLCHAIN", "TOOLCHAIN_DIR", "NON_SYSTEM_TOOLS", "ENV"] } ] } } } , "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 action": "lib action" , "debug-deps": "debug-deps" , "lint": "lint information" , "dwarf package": "dwarf package" } , "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 action result" , {"type": "CALL_EXPRESSION", "name": "lib action"} ] , [ "lib" , { "type": "lookup" , "key": "library" , "map": {"type": "var", "name": "lib action result"} } ] , [ "dwarf objects" , { "type": "lookup" , "key": "dwarf objects" , "map": {"type": "var", "name": "lib action result"} } ] , ["dwarf deps", {"type": "empty_map"}] , [ "dwarf-pkg" , { "type": "if" , "cond": { "type": "and" , "$1": [ {"type": "var", "name": "dwarf objects"} , { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } ] } , "then": { "type": "let*" , "bindings": [ [ "TOOLCHAIN" , { "type": "lookup" , "key": "TOOLCHAIN" , "map": {"type": "var", "name": "lib action result"} } ] , [ "TOOLCHAIN_DIR" , { "type": "lookup" , "key": "TOOLCHAIN_DIR" , "map": {"type": "var", "name": "lib action result"} } ] , [ "NON_SYSTEM_TOOLS" , { "type": "lookup" , "key": "NON_SYSTEM_TOOLS" , "map": {"type": "var", "name": "lib action result"} } ] , [ "ENV" , { "type": "lookup" , "key": "ENV" , "map": {"type": "var", "name": "lib action result"} } ] ] , "body": {"type": "CALL_EXPRESSION", "name": "dwarf package"} } , "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"} } ] , [ "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" , "dwarf-pkg" ] } , { "type": "var" , "name": "extra-provides" , "default": {"type": "empty_map"} } ] } } } } , "shared artifact": { "doc": ["Provides the shared library artifact."] , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "ADD_LDFLAGS" , "ENV" , "DEBUG" , "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": {"shared action": "shared action"} , "expression": { "type": "lookup" , "key": "library" , "map": {"type": "CALL_EXPRESSION", "name": "shared action"} , "default": {"type": "empty_map"} } } , "shared action": { "doc": [ "Run the action producing the shared artifact and pass it together with" , "related information to consumers." ] , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "ADD_LDFLAGS" , "ENV" , "DEBUG" , "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" , "add-fission-compile-flags": "add-fission-compile-flags" , "add-fission-link-flags": "add-fission-link-flags" } , "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 result", {"type": "CALL_EXPRESSION", "name": "objects"}] , [ "objects" , { "type": "lookup" , "key": "objects" , "map": { "type": "var" , "name": "objects result" , "default": {"type": "empty_map"} } } ] , [ "compile flags" , {"type": "CALL_EXPRESSION", "name": "add-fission-compile-flags"} ] , [ "ld flags" , {"type": "CALL_EXPRESSION", "name": "add-fission-link-flags"} ] , [ "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": "ld flags"} ] } } } ] ] , "body": { "type": "map_union" , "$1": [ { "type": "singleton_map" , "key": "library" , "value": {"type": "var", "name": "lib"} } , { "type": "singleton_map" , "key": "dwarf objects" , "value": { "type": "lookup" , "key": "dwarf objects" , "map": { "type": "var" , "name": "objects result" , "default": {"type": "empty_map"} } } } , { "type": "env" , "vars": ["TOOLCHAIN", "TOOLCHAIN_DIR", "NON_SYSTEM_TOOLS", "ENV"] } ] } } } , "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 action": "shared action" , "debug-deps": "debug-deps" , "lint": "lint information" , "dwarf package": "dwarf package" } , "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 action result" , {"type": "CALL_EXPRESSION", "name": "shared action"} ] , [ "lib" , { "type": "lookup" , "key": "library" , "map": {"type": "var", "name": "lib action result"} } ] , [ "dwarf objects" , { "type": "lookup" , "key": "dwarf objects" , "map": {"type": "var", "name": "lib action result"} } ] , ["dwarf deps", {"type": "empty_map"}] , [ "dwarf-pkg" , { "type": "if" , "cond": { "type": "and" , "$1": [ {"type": "var", "name": "dwarf objects"} , { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } ] } , "then": { "type": "let*" , "bindings": [ [ "TOOLCHAIN" , { "type": "lookup" , "key": "TOOLCHAIN" , "map": {"type": "var", "name": "lib action result"} } ] , [ "TOOLCHAIN_DIR" , { "type": "lookup" , "key": "TOOLCHAIN_DIR" , "map": {"type": "var", "name": "lib action result"} } ] , [ "NON_SYSTEM_TOOLS" , { "type": "lookup" , "key": "NON_SYSTEM_TOOLS" , "map": {"type": "var", "name": "lib action result"} } ] , [ "ENV" , { "type": "lookup" , "key": "ENV" , "map": {"type": "var", "name": "lib action result"} } ] ] , "body": {"type": "CALL_EXPRESSION", "name": "dwarf package"} } , "else": {"type": "empty_map"} } ] , [ "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" , "dwarf-pkg" ] } , { "type": "var" , "name": "extra-provides" , "default": {"type": "empty_map"} } ] } } } } , "object artifacts": { "doc": [ "Get the relevant object artifacts and pass them together with related" , "information to consumers." ] , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "AR" , "ENV" , "BUILD_POSITION_INDEPENDENT" , "DEBUG" , "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": "map_union" , "$1": [ {"type": "CALL_EXPRESSION", "name": "objects"} , { "type": "env" , "vars": ["TOOLCHAIN", "TOOLCHAIN_DIR", "NON_SYSTEM_TOOLS", "ENV"] } ] } } } , "object result": { "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "AR" , "DWP" , "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" , "dwarf package": "dwarf package" } , "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"}] , [ "object artifacts with env" , {"type": "CALL_EXPRESSION", "name": "object artifacts"} ] , [ "objects" , { "type": "lookup" , "key": "objects" , "map": {"type": "var", "name": "object artifacts with env"} } ] , [ "dwarf objects" , { "type": "lookup" , "key": "dwarf objects" , "map": {"type": "var", "name": "object artifacts with env"} } ] , ["dwarf deps", {"type": "empty_map"}] , [ "dwarf-pkg" , { "type": "if" , "cond": { "type": "and" , "$1": [ {"type": "var", "name": "dwarf objects"} , { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } ] } , "then": { "type": "let*" , "bindings": [ [ "TOOLCHAIN" , { "type": "lookup" , "key": "TOOLCHAIN" , "map": {"type": "var", "name": "object artifacts with env"} } ] , [ "TOOLCHAIN_DIR" , { "type": "lookup" , "key": "TOOLCHAIN_DIR" , "map": {"type": "var", "name": "object artifacts with env"} } ] , [ "NON_SYSTEM_TOOLS" , { "type": "lookup" , "key": "NON_SYSTEM_TOOLS" , "map": {"type": "var", "name": "object artifacts with env"} } ] , [ "ENV" , { "type": "lookup" , "key": "ENV" , "map": {"type": "var", "name": "object artifacts with env"} } ] ] , "body": {"type": "CALL_EXPRESSION", "name": "dwarf package"} } , "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"} } ] , [ "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" , "dwarf-pkg" ] } , { "type": "var" , "name": "extra-provides" , "default": {"type": "empty_map"} } ] } } } } , "bin artifact": { "doc": ["Provides the linked binary."] , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "ADD_LDFLAGS" , "ENV" , "BUILD_POSITION_INDEPENDENT" , "DEBUG" , "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": {"bin action": "bin action"} , "expression": { "type": "lookup" , "key": "binary" , "map": {"type": "CALL_EXPRESSION", "name": "bin action"} , "default": {"type": "empty_map"} } } , "bin action": { "doc": [ "Run the action producing the binary artifact and pass it together with" , "related information to consumers." ] , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "ADD_LDFLAGS" , "ENV" , "BUILD_POSITION_INDEPENDENT" , "DEBUG" , "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" , "add-fission-compile-flags": "add-fission-compile-flags" , "add-fission-link-flags": "add-fission-link-flags" } , "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 result", {"type": "CALL_EXPRESSION", "name": "objects"}] , [ "objects" , { "type": "lookup" , "key": "objects" , "map": { "type": "var" , "name": "objects result" , "default": {"type": "empty_map"} } } ] , [ "compile flags" , {"type": "CALL_EXPRESSION", "name": "add-fission-compile-flags"} ] , [ "ld flags" , {"type": "CALL_EXPRESSION", "name": "add-fission-link-flags"} ] , [ "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": "ld flags"} ] } ] , [ "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": "map_union" , "$1": [ { "type": "singleton_map" , "key": "binary" , "value": {"type": "var", "name": "binary"} } , { "type": "singleton_map" , "key": "dwarf objects" , "value": { "type": "lookup" , "key": "dwarf objects" , "map": { "type": "var" , "name": "objects result" , "default": {"type": "empty_map"} } } } , { "type": "env" , "vars": ["TOOLCHAIN", "TOOLCHAIN_DIR", "NON_SYSTEM_TOOLS", "ENV"] } ] } } } , "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" , "bin action": "bin action" , "debug-deps": "debug-deps" , "lint": "lint information" , "dwarf package": "dwarf package" } , "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"} } } ] , [ "bin action result" , {"type": "CALL_EXPRESSION", "name": "bin action"} ] , [ "binary" , { "type": "lookup" , "key": "binary" , "map": {"type": "var", "name": "bin action result"} } ] , [ "dwarf objects" , { "type": "lookup" , "key": "dwarf objects" , "map": {"type": "var", "name": "bin action result"} } ] , [ "dwarf deps" , { "type": "if" , "cond": { "type": "and" , "$1": [ {"type": "var", "name": "dwarf objects"} , { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } ] } , "else": {"type": "empty_map"} , "then": { "type": "let*" , "bindings": [["deps-provider", "dwarf-pkg"]] , "body": {"type": "CALL_EXPRESSION", "name": "debug-deps"} } } ] , [ "dwarf-pkg" , { "type": "if" , "cond": { "type": "and" , "$1": [ {"type": "var", "name": "dwarf objects"} , { "type": "lookup" , "key": "USE_DEBUG_FISSION" , "map": { "type": "var" , "name": "DEBUG" , "default": {"type": "empty_map"} } } ] } , "then": { "type": "let*" , "bindings": [ [ "TOOLCHAIN" , { "type": "lookup" , "key": "TOOLCHAIN" , "map": {"type": "var", "name": "bin action result"} } ] , [ "TOOLCHAIN_DIR" , { "type": "lookup" , "key": "TOOLCHAIN_DIR" , "map": {"type": "var", "name": "bin action result"} } ] , [ "NON_SYSTEM_TOOLS" , { "type": "lookup" , "key": "NON_SYSTEM_TOOLS" , "map": {"type": "var", "name": "bin action result"} } ] , [ "ENV" , { "type": "lookup" , "key": "ENV" , "map": {"type": "var", "name": "bin action result"} } ] ] , "body": {"type": "CALL_EXPRESSION", "name": "dwarf package"} } , "else": {"type": "empty_map"} } ] ] , "body": { "type": "RESULT" , "artifacts": {"type": "var", "name": "binary"} , "provides": { "type": "env" , "vars": [ "run-libs" , "package" , "debug-srcs" , "debug-hdrs" , "lint" , "dwarf-pkg" ] } } } } , "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"} } } ] , [ "dwarf-pkg" , { "type": "if" , "cond": {"type": "var", "name": "skip-debug-stage"} , "then": {"type": "empty_map"} , "else": { "type": "DEP_PROVIDES" , "dep": {"type": "var", "name": "target"} , "provider": "dwarf-pkg" , "default": {"type": "empty_map"} } } ] ] , "body": { "type": "if" , "cond": {"type": "var", "name": "hdrs-only"} , "then": {"type": "var", "name": "headers"} , "else": { "type": "let*" , "bindings": [ [ "artifacts" , { "type": "map_union" , "$1": [ { "type": "DEP_ARTIFACTS" , "dep": {"type": "var", "name": "target"} , "default": {"type": "empty_map"} } , {"type": "var", "name": "dwarf-pkg"} ] } ] , [ "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"} } } }