{ "default-CC": { "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "join" , "$1": { "type": "let*" , "bindings": [["fieldname", "defaults"], ["provider", "CC"]] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } } , "default-CXX": { "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "join" , "$1": { "type": "let*" , "bindings": [["fieldname", "defaults"], ["provider", "CXX"]] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } } , "default-CFLAGS": { "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "let*" , "bindings": [["fieldname", "defaults"], ["provider", "CFLAGS"]] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } , "default-CXXFLAGS": { "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "let*" , "bindings": [["fieldname", "defaults"], ["provider", "CXXFLAGS"]] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } , "default-ENV": { "imports": {"provider_list": ["./", "..", "field_provider_list"]} , "expression": { "type": "let*" , "bindings": [ ["fieldname", "defaults"] , ["provider", "ENV"] , ["default", {"type": "empty_map"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "provider_list"} } } , "configure transition": { "expression": { "type": "let*" , "bindings": [ [ "OS" , { "type": "assert_non_empty" , "msg": "Missing field \"os\" for \"configure\"." , "$1": {"type": "join", "$1": {"type": "FIELD", "name": "os"}} } ] , [ "ARCH" , { "type": "assert_non_empty" , "msg": "Missing field \"arch\" for \"configure\"." , "$1": {"type": "join", "$1": {"type": "FIELD", "name": "arch"}} } ] , ["HOST_ARCH", {"type": "var", "name": "ARCH"}] , [ "TARGET_ARCH" , {"type": "join", "$1": {"type": "FIELD", "name": "target_arch"}} ] , [ "TARGET_ARCH" , { "type": "if" , "cond": {"type": "var", "name": "TARGET_ARCH"} , "then": {"type": "var", "name": "TARGET_ARCH"} , "else": {"type": "var", "name": "ARCH"} } ] ] , "body": { "type": "map_union" , "$1": [ { "type": "singleton_map" , "key": "OS" , "value": {"type": "var", "name": "OS"} } , { "type": "singleton_map" , "key": "ARCH" , "value": {"type": "var", "name": "TARGET_ARCH"} } , { "type": "singleton_map" , "key": "HOST_ARCH" , "value": {"type": "var", "name": "HOST_ARCH"} } , { "type": "singleton_map" , "key": "TARGET_ARCH" , "value": {"type": "var", "name": "TARGET_ARCH"} } ] } } } , "compile-deps": { "doc": ["Collect compile dependencies (headers) from given target_fields"] , "vars": ["deps-fieldnames", "transition"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect dependencies from."] , "transition": ["The optional configuration transition for the targets."] } , "imports": { "runfiles_list": ["./", "..", "field_runfiles_list"] , "provider_list": ["./", "..", "field_provider_list"] } , "expression": { "type": "disjoint_map_union" , "$1": { "type": "++" , "$1": { "type": "foreach" , "var": "fieldname" , "range": {"type": "var", "name": "deps-fieldnames"} , "body": { "type": "++" , "$1": { "type": "let*" , "bindings": [ ["provider", "compile-deps"] , ["default", {"type": "empty_map"}] ] , "body": [ {"type": "CALL_EXPRESSION", "name": "provider_list"} , {"type": "CALL_EXPRESSION", "name": "runfiles_list"} ] } } } } } } , "link-deps": { "doc": ["Collect link dependencies (libraries) from given target_fields"] , "vars": ["deps-fieldnames", "transition"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect dependencies from."] , "transition": ["The optional configuration transition for the targets."] } , "imports": { "artifacts_list": ["./", "..", "field_artifacts_list"] , "provider_list": ["./", "..", "field_provider_list"] } , "expression": { "type": "disjoint_map_union" , "$1": { "type": "++" , "$1": { "type": "foreach" , "var": "fieldname" , "range": {"type": "var", "name": "deps-fieldnames"} , "body": { "type": "++" , "$1": { "type": "let*" , "bindings": [["provider", "link-deps"], ["default", {"type": "empty_map"}]] , "body": [ {"type": "CALL_EXPRESSION", "name": "provider_list"} , {"type": "CALL_EXPRESSION", "name": "artifacts_list"} ] } } } } } } , "link-args-deps": { "doc": ["Collect linker arguments from given target_fields"] , "vars": ["deps-fieldnames", "transition"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect arguments from."] , "transition": ["The optional configuration transition for the targets."] } , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "++" , "$1": { "type": "foreach" , "var": "fieldname" , "range": {"type": "var", "name": "deps-fieldnames"} , "body": { "type": "let*" , "bindings": [["provider", "link-args"]] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } } } , "objects": { "vars": ["CXX", "CXXFLAGS", "ENV", "srcs", "compile-deps", "local hdrs"] , "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": "var", "name": "local hdrs"} } ] } ] ] , "body": { "type": "map_union" , "$1": { "type": "foreach_map" , "var_key": "src_name" , "var_val": "src_val" , "range": {"type": "var", "name": "srcs"} , "body": { "type": "let*" , "bindings": [ [ "work src_name" , { "type": "join" , "separator": "/" , "$1": ["work", {"type": "var", "name": "src_name"}] } ] , [ "inputs" , { "type": "map_union" , "$1": [ {"type": "var", "name": "all hdrs"} , { "type": "singleton_map" , "key": {"type": "var", "name": "work src_name"} , "value": {"type": "var", "name": "src_val"} } ] } ] , [ "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": "CXX"}] , {"type": "var", "name": "CXXFLAGS"} , ["-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"} } } } } } , "compiler": { "vars": ["CC", "CXX"] , "imports": {"default-CC": "default-CC", "default-CXX": "default-CXX"} , "expression": { "type": "if" , "cond": {"type": "FIELD", "name": "pure C"} , "then": { "type": "var" , "name": "CC" , "default": {"type": "CALL_EXPRESSION", "name": "default-CC"} } , "else": { "type": "var" , "name": "CXX" , "default": {"type": "CALL_EXPRESSION", "name": "default-CXX"} } } } , "flags": { "vars": ["CFLAGS", "CXXFLAGS"] , "imports": { "default-CFLAGS": "default-CFLAGS" , "default-CXXFLAGS": "default-CXXFLAGS" } , "expression": { "type": "if" , "cond": {"type": "FIELD", "name": "pure C"} , "then": { "type": "var" , "name": "CFLAGS" , "default": {"type": "CALL_EXPRESSION", "name": "default-CFLAGS"} } , "else": { "type": "var" , "name": "CXXFLAGS" , "default": {"type": "CALL_EXPRESSION", "name": "default-CXXFLAGS"} } } } , "lib artifact": { "vars": [ "CXX" , "CXXFLAGS" , "CC" , "CFLAGS" , "ENV" , "AR" , "srcs" , "hdrs" , "private-hdrs" , "local cflags" , "compile-deps" ] , "imports": { "compiler": "compiler" , "flags": "flags" , "objects": "objects" , "default-ENV": "default-ENV" } , "expression": { "type": "let*" , "bindings": [ [ "stage" , { "type": "join" , "separator": "/" , "$1": {"type": "FIELD", "name": "stage"} } ] , ["CXX", {"type": "CALL_EXPRESSION", "name": "compiler"}] , ["CXXFLAGS", {"type": "CALL_EXPRESSION", "name": "flags"}] , [ "CXXFLAGS" , { "type": "++" , "$1": [ {"type": "var", "name": "CXXFLAGS"} , {"type": "var", "name": "local cflags", "default": []} ] } ] , [ "ENV" , { "type": "map_union" , "$1": { "type": "++" , "$1": [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} , [ { "type": "var" , "name": "ENV" , "default": {"type": "empty_map"} } ] ] } } ] , ["deps-fieldnames", ["deps", "proto-deps"]] , [ "local hdrs" , { "type": "disjoint_map_union" , "$1": [ {"type": "var", "name": "hdrs"} , {"type": "var", "name": "private-hdrs"} ] } ] , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] , [ "base name" , { "type": "let*" , "bindings": [ [ "name" , {"type": "join", "$1": {"type": "FIELD", "name": "name"}} ] ] , "body": { "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"] } ] , [ "lib" , { "type": "if" , "cond": {"type": "var", "name": "objects"} , "else": {"type": "empty_map"} , "then": { "type": "ACTION" , "outs": [{"type": "var", "name": "libname"}] , "inputs": {"type": "var", "name": "objects"} , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} , "cmd": { "type": "++" , "$1": [ [ {"type": "var", "name": "AR", "default": "ar"} , "cqs" , {"type": "var", "name": "libname"} ] , {"type": "keys", "$1": {"type": "var", "name": "objects"}} ] } } } ] ] , "body": { "type": "to_subdir" , "subdir": {"type": "var", "name": "stage"} , "$1": {"type": "var", "name": "lib"} } } } , "lib result": { "vars": [ "CXX" , "CXXFLAGS" , "CC" , "CFLAGS" , "ENV" , "AR" , "srcs" , "hdrs" , "private-hdrs" , "local cflags" , "link external" , "extra-provides" ] , "imports": { "compile-deps": "compile-deps" , "link-deps": "link-deps" , "link-args-deps": "link-args-deps" , "lib artifact": "lib artifact" } , "expression": { "type": "let*" , "bindings": [ ["deps-fieldnames", ["deps", "proto-deps"]] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , ["lib", {"type": "CALL_EXPRESSION", "name": "lib artifact"}] , [ "link-args" , { "type": "nub_right" , "$1": { "type": "++" , "$1": [ {"type": "keys", "$1": {"type": "var", "name": "lib"}} , {"type": "var", "name": "link external", "default": []} , {"type": "CALL_EXPRESSION", "name": "link-args-deps"} ] } } ] ] , "body": { "type": "RESULT" , "artifacts": {"type": "var", "name": "lib"} , "runfiles": {"type": "var", "name": "hdrs"} , "provides": { "type": "map_union" , "$1": [ { "type": "singleton_map" , "key": "compile-deps" , "value": {"type": "var", "name": "compile-deps"} } , { "type": "singleton_map" , "key": "link-deps" , "value": {"type": "var", "name": "link-deps"} } , { "type": "singleton_map" , "key": "link-args" , "value": {"type": "var", "name": "link-args"} } , { "type": "var" , "name": "extra-provides" , "default": {"type": "empty_map"} } ] } } } } }