diff options
Diffstat (limited to 'rules/CC/proto')
-rw-r--r-- | rules/CC/proto/EXPRESSIONS | 489 | ||||
-rw-r--r-- | rules/CC/proto/RULES | 388 | ||||
-rw-r--r-- | rules/CC/proto/TARGETS | 16 |
3 files changed, 893 insertions, 0 deletions
diff --git a/rules/CC/proto/EXPRESSIONS b/rules/CC/proto/EXPRESSIONS new file mode 100644 index 0000000..0b44506 --- /dev/null +++ b/rules/CC/proto/EXPRESSIONS @@ -0,0 +1,489 @@ +{ "default-PROTOC": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "../..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "proto-defaults"] + , ["provider", "PROTOC"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } +, "default-PROTOCFLAGS": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "../..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "proto-defaults"] + , ["provider", "PROTOCFLAGS"] + , ["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", "proto-defaults"] + , ["provider", "LDFLAGS"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } +, "default-GRPC_PLUGIN": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "../..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "proto-defaults"] + , ["provider", "GRPC_PLUGIN"] + , ["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", "proto-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", "proto-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", "proto-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": "proto-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"} + } + } + } + } +, "protoc-deps": + { "imports": {"map_provider": ["./", "../..", "field_map_provider"]} + , "expression": + { "type": "let*" + , "bindings": [["fieldname", "deps"], ["provider", "protoc-deps"]] + , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} + } + } +, "protoc-compile": + { "vars": + [ "CXX" + , "CXXFLAGS" + , "ADD_CXXFLAGS" + , "AR" + , "ENV" + , "DEBUG" + , "name" + , "stage" + , "service support" + , "public-fieldnames" + , "private-fieldnames" + ] + , "imports": + { "stage": ["", "stage_singleton_field"] + , "result": ["./", "..", "lib result"] + , "runfiles": ["./", "../..", "field_runfiles"] + , "artifacts_list": ["./", "../..", "field_artifacts_list"] + , "protoc-deps": "protoc-deps" + , "default-PROTOC": "default-PROTOC" + , "default-PROTOCFLAGS": "default-PROTOCFLAGS" + , "default-LDFLAGS": "default-LDFLAGS" + , "default-GRPC_PLUGIN": "default-GRPC_PLUGIN" + , "default-ENV": "default-ENV" + , "default-PATH": "default-PATH" + , "default-TOOLCHAIN": "default-TOOLCHAIN" + , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" + } + , "expression": + { "type": "let*" + , "bindings": + [ ["pure C", false] + , ["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"} + ] + , [ "PROTOC" + , { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "PROTOC" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-PROTOC"} + ] + } + } + ] + , [ "GRPC_PLUGIN" + , { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "GRPC_PLUGIN" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-GRPC_PLUGIN"} + ] + } + } + ] + , [ "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" + } + ] + , [ "protoc-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"}] + } + ] + } + } + } + ] + } + ] + , ["protoc-deps", {"type": "CALL_EXPRESSION", "name": "protoc-deps"}] + , [ "proto srcs" + , { "type": "disjoint_map_union" + , "msg": "Sources may not conflict" + , "$1": + { "type": "let*" + , "bindings": [["fieldname", "srcs"]] + , "body": {"type": "CALL_EXPRESSION", "name": "artifacts_list"} + } + } + ] + , [ "all proto srcs" + , { "type": "disjoint_map_union" + , "msg": "Conflict with proto files of dependencies" + , "$1": + [ {"type": "var", "name": "protoc-deps"} + , {"type": "var", "name": "proto srcs"} + ] + } + ] + , [ "staged srcs" + , { "type": "to_subdir" + , "subdir": "work" + , "$1": {"type": "var", "name": "proto srcs"} + } + ] + , [ "staged all proto srcs" + , { "type": "to_subdir" + , "subdir": "work" + , "$1": {"type": "var", "name": "all proto srcs"} + } + ] + , [ "outs" + , { "type": "++" + , "$1": + { "type": "foreach" + , "var": "f" + , "range": + {"type": "keys", "$1": {"type": "var", "name": "staged srcs"}} + , "body": + { "type": "++" + , "$1": + [ [ { "type": "change_ending" + , "$1": {"type": "var", "name": "f"} + , "ending": ".pb.h" + } + , { "type": "change_ending" + , "$1": {"type": "var", "name": "f"} + , "ending": ".pb.cc" + } + ] + , { "type": "if" + , "cond": {"type": "var", "name": "service support"} + , "then": + [ { "type": "change_ending" + , "$1": {"type": "var", "name": "f"} + , "ending": ".grpc.pb.h" + } + , { "type": "change_ending" + , "$1": {"type": "var", "name": "f"} + , "ending": ".grpc.pb.cc" + } + ] + , "else": [] + } + ] + } + } + } + ] + , [ "cmd" + , { "type": "++" + , "$1": + [ [{"type": "var", "name": "PROTOC"}] + , {"type": "CALL_EXPRESSION", "name": "default-PROTOCFLAGS"} + , ["--proto_path=work", "--cpp_out=work"] + , { "type": "if" + , "cond": {"type": "var", "name": "service support"} + , "then": + [ "--grpc_out=work" + , { "type": "join" + , "$1": + [ "--plugin=protoc-gen-grpc=" + , {"type": "var", "name": "GRPC_PLUGIN"} + ] + } + ] + , "else": [] + } + , {"type": "keys", "$1": {"type": "var", "name": "staged srcs"}} + ] + } + ] + , [ "generated" + , { "type": "ACTION" + , "inputs": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "staged all proto srcs"} + , {"type": "var", "name": "TOOLCHAIN"} + ] + } + , "outs": {"type": "var", "name": "outs"} + , "cmd": {"type": "var", "name": "cmd"} + , "env": {"type": "var", "name": "protoc-ENV"} + } + ] + , [ "srcs" + , { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "name" + , "range": + {"type": "keys", "$1": {"type": "var", "name": "proto srcs"}} + , "body": + { "type": "map_union" + , "$1": + [ { "type": "singleton_map" + , "key": + { "type": "change_ending" + , "$1": {"type": "var", "name": "name"} + , "ending": ".pb.cc" + } + , "value": + { "type": "lookup" + , "map": {"type": "var", "name": "generated"} + , "key": + { "type": "join" + , "$1": + [ "work/" + , { "type": "change_ending" + , "$1": {"type": "var", "name": "name"} + , "ending": ".pb.cc" + } + ] + } + } + } + , { "type": "if" + , "cond": {"type": "var", "name": "service support"} + , "then": + { "type": "singleton_map" + , "key": + { "type": "change_ending" + , "$1": {"type": "var", "name": "name"} + , "ending": ".grpc.pb.cc" + } + , "value": + { "type": "lookup" + , "map": {"type": "var", "name": "generated"} + , "key": + { "type": "join" + , "$1": + [ "work/" + , { "type": "change_ending" + , "$1": {"type": "var", "name": "name"} + , "ending": ".grpc.pb.cc" + } + ] + } + } + } + , "else": {"type": "empty_map"} + } + ] + } + } + } + ] + , [ "hdrs" + , { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "name" + , "range": + {"type": "keys", "$1": {"type": "var", "name": "proto srcs"}} + , "body": + { "type": "map_union" + , "$1": + [ { "type": "singleton_map" + , "key": + { "type": "change_ending" + , "$1": {"type": "var", "name": "name"} + , "ending": ".pb.h" + } + , "value": + { "type": "lookup" + , "map": {"type": "var", "name": "generated"} + , "key": + { "type": "join" + , "$1": + [ "work/" + , { "type": "change_ending" + , "$1": {"type": "var", "name": "name"} + , "ending": ".pb.h" + } + ] + } + } + } + , { "type": "if" + , "cond": {"type": "var", "name": "service support"} + , "then": + { "type": "singleton_map" + , "key": + { "type": "change_ending" + , "$1": {"type": "var", "name": "name"} + , "ending": ".grpc.pb.h" + } + , "value": + { "type": "lookup" + , "map": {"type": "var", "name": "generated"} + , "key": + { "type": "join" + , "$1": + [ "work/" + , { "type": "change_ending" + , "$1": {"type": "var", "name": "name"} + , "ending": ".grpc.pb.h" + } + ] + } + } + } + , "else": {"type": "empty_map"} + } + ] + } + } + } + ] + , ["private-hdrs", {"type": "empty_map"}] + , [ "extra-provides" + , { "type": "singleton_map" + , "key": "protoc-deps" + , "value": {"type": "var", "name": "all proto srcs"} + } + ] + , ["cflags", []] + , ["private-cflags", []] + , [ "private-ldflags" + , {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"} + ] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "result"} + } + } +} diff --git a/rules/CC/proto/RULES b/rules/CC/proto/RULES new file mode 100644 index 0000000..910b6a1 --- /dev/null +++ b/rules/CC/proto/RULES @@ -0,0 +1,388 @@ +{ "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": + [ "If logically true (typically, a non-empty map), use debug-related" + , "options, otherwise not." + ] + } + , "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"] + , "run-libs-deps": ["CC", "run-libs-deps"] + , "run-libs-args-deps": ["CC", "run-libs-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"}] + , ["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": "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" + , "run-libs" + , "run-libs-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"}}] + , [ "DEBUG" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": {"type": "var", "name": "DEBUG"} + , "else": {"type": "empty_map"} + } + ] + , [ "stage" + , { "type": "join" + , "separator": "/" + , "$1": {"type": "FIELD", "name": "stage"} + } + ] + , ["public-fieldnames", ["deps", "proto-defaults", "defaults"]] + , ["private-fieldnames", ["deps", "proto-defaults", "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"}}] + , [ "DEBUG" + , { "type": "if" + , "cond": {"type": "var", "name": "DEBUG"} + , "then": {"type": "var", "name": "DEBUG"} + , "else": {"type": "empty_map"} + } + ] + , [ "stage" + , { "type": "join" + , "separator": "/" + , "$1": {"type": "FIELD", "name": "stage"} + } + ] + , ["public-fieldnames", ["deps", "proto-defaults", "defaults"]] + , ["private-fieldnames", ["deps", "proto-defaults", "defaults"]] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "protoc-compile"} + } + } +} diff --git a/rules/CC/proto/TARGETS b/rules/CC/proto/TARGETS new file mode 100644 index 0000000..87bebd0 --- /dev/null +++ b/rules/CC/proto/TARGETS @@ -0,0 +1,16 @@ +{ "defaults": + { "type": ["CC/proto", "defaults"] + , "PROTOC": ["protoc"] + , "PATH": ["/bin", "/usr/bin"] + , "deps": ["libprotobuf"] + } +, "service defaults": + { "type": ["CC/proto", "defaults"] + , "base": ["defaults"] + , "GRPC_PLUGIN": ["/usr/bin/grpc_cpp_plugin"] + , "deps": ["libgrpc++"] + } +, "libprotobuf": + {"type": ["CC/pkgconfig", "system_library"], "name": ["protobuf"]} +, "libgrpc++": {"type": ["CC/pkgconfig", "system_library"], "name": ["grpc++"]} +} |