{ "defaults": { "doc": [ "A rule to provide protoc/GRPC defaults." , "Used to implement [\"CC/proto\", \"defaults\"] for CC proto libraries" , "and [\"CC/proto\", \"service defaults\"] for CC proto service libraries" , "(GRPC)." ] , "target_fields": ["base", "toolchain", "deps"] , "string_fields": [ "PROTOC" , "PROTOCFLAGS" , "ADD_PROTOCFLAGS" , "LDFLAGS" , "ADD_LDFLAGS" , "GRPC_PLUGIN" , "PATH" ] , "config_vars": ["ARCH", "HOST_ARCH", "DEBUG"] , "field_doc": { "base": [ "Other targets (using the same rule) to inherit values from. If" , "multiple targets are specified, for values that are overwritten (see" , "documentation of other fields) the last specified value wins." ] , "toolchain": [ "Optional toolchain directory. A collection of artifacts that provide" , "the protobuf compiler and the GRPC plugin (if needed). Note that only" , "artifacts of the specified targets are considered (no runfiles etc.)." , "Specifying this field extends artifacts from \"base\"." ] , "deps": [ "Optional CC libraries the resulting CC proto libraries implicitly" , "depend on. Those are typically \"libprotobuf\" for CC proto libraries" , "and \"libgrpc++\" for CC proto service libraries. Specifying this" , "field extends dependencies from \"base\"." ] , "PROTOC": [ "The proto compiler. If \"toolchain\" is empty, this field's value is" , "considered the proto compiler name that is looked up in \"PATH\". If" , "\"toolchain\" is non-empty, this field's value is assumed to be the" , "relative path to the proto compiler in \"toolchain\". Specifying this" , "field overwrites values from \"base\"." ] , "GRPC_PLUGIN": [ "The GRPC plugin for the proto compiler. If \"toolchain\" is empty," , "this field's value is considered to be the absolute system path to the" , "plugin. If \"toolchain\" is non-empty, this field's value is assumed" , "to be the relative path to the plugin in \"toolchain\". Specifying" , "this field overwrites values from \"base\"." ] , "PROTOCFLAGS": [ "Protobuf compiler flags. Specifying this field overwrites values from" , "\"base\"." ] , "ADD_PROTOCFLAGS": [ "Additional protobuf compiler flags. Specifying this field extends" , "values from \"base\"." ] , "LDFLAGS": [ "Linker flags for linking the final CC library. Specifying this field" , "overwrites values from \"base\"." ] , "ADD_LDFLAGS": [ "Additional linker flags for linking the final CC library. Specifying" , "this field extends values from \"base\"." ] , "PATH": [ "Path for looking up the proto compiler. Individual paths are joined" , "with \":\". Specifying this field extends values from \"base\"." ] } , "config_doc": { "ARCH": [ "The unqualified architecture. Is taken as a default for \"HOST_ARCH\"" , "and \"TARGET_ARCH\" if not set." ] , "HOST_ARCH": ["The architecture on which the build actions are carried out."] , "DEBUG": [ "Map configuring the debug-stage, needed for local debugging." , "If non-empty, debug mode is enabled." , "" , "The key \"USE_DEBUG_FISSION\" expects a flag which enables debug" , "fission, but does not add any flags. Explicitly setting it to a false" , "value is needed to enable regular debug mode." , "The key \"FISSION_CONFIG\" expects a map configuring debug fission." , " - subkey \"USE_SPLIT_DWARF\" expects a flag that, if true, adds the" , "-gsplit-dwarf compile flag." , " - subkey \"DWARF_VERSION\" expects a string that adds the" , "-gdwarf- compile flag." , " - subkey \"USE_GDB_INDEX\" expects a flag that, if true, adds the" , "-Wl,--gdb-index linker flag." , " - subkey \"USE_DEBUG_TYPES_SECTION\" expects a flag that, if true," , "adds the -fdebug-types-section compile flag." ] } , "imports": { "base-provides": ["./", "..", "defaults-base-provides"] , "base-provides-++": ["./", "..", "defaults-base-provides-++"] , "base-provides-list": ["./", "..", "defaults-base-provides-list"] , "artifacts_list": ["", "field_artifacts_list"] , "compile-deps": ["CC", "compile-deps"] , "compile-args-deps": ["CC", "compile-args-deps"] , "link-deps": ["CC", "link-deps"] , "link-args-deps": ["CC", "link-args-deps"] , "cflags-files-deps": ["CC", "cflags-files-deps"] , "ldflags-files-deps": ["CC", "ldflags-files-deps"] , "for host": ["transitions", "for host"] , "debug-deps": ["CC", "debug-deps"] } , "config_transitions": {"toolchain": [{"type": "CALL_EXPRESSION", "name": "for host"}]} , "expression": { "type": "let*" , "bindings": [ ["PROTOC", {"type": "FIELD", "name": "PROTOC"}] , ["PROTOCFLAGS", {"type": "FIELD", "name": "PROTOCFLAGS"}] , ["LDFLAGS", {"type": "FIELD", "name": "LDFLAGS"}] , ["GRPC_PLUGIN", {"type": "FIELD", "name": "GRPC_PLUGIN"}] , ["PATH", {"type": "FIELD", "name": "PATH"}] , ["provider", "PROTOC"] , [ "PROTOC" , { "type": "if" , "cond": {"type": "var", "name": "PROTOC"} , "then": {"type": "var", "name": "PROTOC"} , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} } ] , ["provider", "PROTOCFLAGS"] , [ "PROTOCFLAGS" , { "type": "if" , "cond": {"type": "var", "name": "PROTOCFLAGS"} , "then": {"type": "var", "name": "PROTOCFLAGS"} , "else": {"type": "CALL_EXPRESSION", "name": "base-provides-++"} } ] , ["provider", "LDFLAGS"] , [ "LDFLAGS" , { "type": "if" , "cond": {"type": "var", "name": "LDFLAGS"} , "then": {"type": "var", "name": "LDFLAGS"} , "else": {"type": "CALL_EXPRESSION", "name": "base-provides-++"} } ] , ["provider", "GRPC_PLUGIN"] , [ "GRPC_PLUGIN" , { "type": "if" , "cond": {"type": "var", "name": "GRPC_PLUGIN"} , "then": {"type": "var", "name": "GRPC_PLUGIN"} , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} } ] , ["provider", "PATH"] , [ "PATH" , { "type": "nub_left" , "$1": { "type": "++" , "$1": [ {"type": "var", "name": "PATH"} , {"type": "CALL_EXPRESSION", "name": "base-provides-++"} ] } } ] , ["provider", "ENV"] , ["default", {"type": "empty_map"}] , ["ENV", {"type": "CALL_EXPRESSION", "name": "base-provides"}] , ["provider", "NON_SYSTEM_TOOLS"] , ["default", {"type": "empty_map"}] , [ "NON_SYSTEM_TOOLS" , { "type": "map_union" , "$1": { "type": "++" , "$1": [ [{"type": "CALL_EXPRESSION", "name": "base-provides"}] , { "type": "if" , "cond": {"type": "FIELD", "name": "PROTOC"} , "then": [ { "type": "singleton_map" , "key": "PROTOC" , "value": { "type": "if" , "cond": {"type": "FIELD", "name": "toolchain"} , "then": true , "else": false } } ] } , { "type": "if" , "cond": {"type": "FIELD", "name": "GRPC_PLUGIN"} , "then": [ { "type": "singleton_map" , "key": "GRPC_PLUGIN" , "value": { "type": "if" , "cond": {"type": "FIELD", "name": "toolchain"} , "then": true , "else": false } } ] } ] } } ] , ["provider", "TOOLCHAIN"] , ["default", {"type": "empty_map"}] , [ "TOOLCHAIN" , { "type": "disjoint_map_union" , "msg": "toolchain artifacts may not overlap" , "$1": { "type": "++" , "$1": [ {"type": "CALL_EXPRESSION", "name": "base-provides-list"} , { "type": "if" , "cond": {"type": "FIELD", "name": "toolchain"} , "then": { "type": "let*" , "bindings": [ ["fieldname", "toolchain"] , [ "transition" , {"type": "CALL_EXPRESSION", "name": "for host"} ] ] , "body": {"type": "CALL_EXPRESSION", "name": "artifacts_list"} } } ] } } ] , [ "PROTOCFLAGS" , { "type": "++" , "$1": [ {"type": "var", "name": "PROTOCFLAGS"} , {"type": "FIELD", "name": "ADD_PROTOCFLAGS"} ] } ] , [ "LDFLAGS" , { "type": "++" , "$1": [ {"type": "var", "name": "LDFLAGS"} , {"type": "FIELD", "name": "ADD_LDFLAGS"} ] } ] , ["deps-fieldnames", ["base", "deps"]] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" , {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} ] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , ["link-args", {"type": "CALL_EXPRESSION", "name": "link-args-deps"}] , [ "cflags-files" , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} ] , [ "ldflags-files" , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} ] , ["package", {"type": "env", "vars": ["cflags-files", "ldflags-files"]}] , [ "debug-srcs" , { "type": "if" , "cond": {"type": "var", "name": "DEBUG"} , "then": { "type": "let*" , "bindings": [["deps-provider", "debug-srcs"]] , "body": {"type": "CALL_EXPRESSION", "name": "debug-deps"} } , "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"} } ] ] , "body": { "type": "RESULT" , "provides": { "type": "env" , "vars": [ "PROTOC" , "PROTOCFLAGS" , "LDFLAGS" , "GRPC_PLUGIN" , "PATH" , "ENV" , "TOOLCHAIN" , "NON_SYSTEM_TOOLS" , "compile-deps" , "compile-args" , "link-deps" , "link-args" , "package" , "debug-srcs" , "debug-hdrs" ] } } } } , "library": { "doc": [ "A C++ library, generated from proto files." , "" , "This rule usually is used to bind anonymous targets generated from" , "proto libraries." ] , "string_fields": ["name", "stage"] , "target_fields": ["srcs", "deps"] , "config_vars": ["CXX", "CXXFLAGS", "ADD_CXXFLAGS", "AR", "ENV", "DEBUG"] , "implicit": {"defaults": [["./", "..", "defaults"]], "proto-defaults": ["defaults"]} , "imports": {"protoc-compile": "protoc-compile"} , "expression": { "type": "let*" , "bindings": [ ["name", {"type": "join", "$1": {"type": "FIELD", "name": "name"}}] , [ "stage" , { "type": "join" , "separator": "/" , "$1": {"type": "FIELD", "name": "stage"} } ] , ["public-fieldnames", ["deps", "proto-defaults"]] , ["private-fieldnames", ["deps", "proto-defaults"]] ] , "body": {"type": "CALL_EXPRESSION", "name": "protoc-compile"} } } , "service library": { "doc": [ "A service C++ library, generated from proto files." , "" , "Calls protoc with gRPC plugin to additionally generate gRPC services" , "from proto libraries." ] , "string_fields": ["name", "stage"] , "target_fields": ["srcs", "deps"] , "config_vars": ["CXX", "CXXFLAGS", "ADD_CXXFLAGS", "AR", "ENV", "DEBUG"] , "implicit": { "defaults": [["./", "..", "defaults"]] , "proto-defaults": ["service defaults"] } , "imports": {"protoc-compile": "protoc-compile"} , "expression": { "type": "let*" , "bindings": [ ["service support", true] , ["name", {"type": "join", "$1": {"type": "FIELD", "name": "name"}}] , [ "stage" , { "type": "join" , "separator": "/" , "$1": {"type": "FIELD", "name": "stage"} } ] , ["public-fieldnames", ["deps", "proto-defaults"]] , ["private-fieldnames", ["deps", "proto-defaults"]] ] , "body": {"type": "CALL_EXPRESSION", "name": "protoc-compile"} } } }