diff options
author | Jorge Canizales <jcanizales@google.com> | 2015-07-01 14:18:04 -0700 |
---|---|---|
committer | Jorge Canizales <jcanizales@google.com> | 2015-07-01 14:18:04 -0700 |
commit | 4bc49051ba823cfc9ddb342e08b1ab7638fa6396 (patch) | |
tree | a0d067905ebd1f4eb1aeff854063bd0246774242 /grpc.bzl | |
parent | 23ca82ab54e0f5386c1a6b9233e6864121415280 (diff) |
Skylark macro to generate an objc_library from protos
Still needed:
- Use compiled protoc.
- Work with multiple proto sources.
- Work with proto sources in nested dirs.
Diffstat (limited to 'grpc.bzl')
-rw-r--r-- | grpc.bzl | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/grpc.bzl b/grpc.bzl new file mode 100644 index 0000000000..9865bc734d --- /dev/null +++ b/grpc.bzl @@ -0,0 +1,68 @@ + +def _lower_underscore_to_upper_camel(str): + humps = [] + for hump in str.split('_'): + humps += [hump[0].upper() + hump[1:]] + return "".join(humps) + +def objc_grpc_library(name, srcs, visibility=None): + basename = srcs[0].split('/')[-1] + filename = basename[:-6] # remove .proto suffix + filename = _lower_underscore_to_upper_camel(filename) + + protoc_command = "protoc -I . " + srcs_params = "" + for src in srcs: + srcs_params += " $(location %s)" % (src) + + # Messages + protoc_messages_flags = "--objc_out=$(GENDIR)" + native.genrule( + name = name + "_mesages_codegen", + srcs = srcs, + outs = [ + filename + ".pbobjc.h", + filename + ".pbobjc.m", + ], + cmd = protoc_command + protoc_messages_flags + srcs_params, + ) + native.objc_library( + name = name + "_messages", + hdrs = [ + ":" + filename + ".pbobjc.h", + ], + includes = ["."], + non_arc_srcs = [ + ":" + filename + ".pbobjc.m", + ], + deps = [ + "//external:protobuf_objc", + ], + ) + + # Services + protoc_services_flags = "--grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(location //external:grpc_protoc_plugin_objc)" + native.genrule( + name = name + "_codegen", + srcs = srcs + ["//external:grpc_protoc_plugin_objc"], + outs = [ + filename + ".pbrpc.h", + filename + ".pbrpc.m", + ], + cmd = protoc_command + protoc_services_flags + srcs_params, + ) + native.objc_library( + name = name, + hdrs = [ + ":" + filename + ".pbrpc.h", + ], + includes = ["."], + srcs = [ + ":" + filename + ".pbrpc.m", + ], + deps = [ + ":" + name + "_messages", + "//external:proto_objc_rpc", + ], + visibility = visibility, + ) |