Jorge Canizales | 4bc4905 | 2015-07-01 14:18:04 -0700 | [diff] [blame^] | 1 | |
| 2 | def _lower_underscore_to_upper_camel(str): |
| 3 | humps = [] |
| 4 | for hump in str.split('_'): |
| 5 | humps += [hump[0].upper() + hump[1:]] |
| 6 | return "".join(humps) |
| 7 | |
| 8 | def objc_grpc_library(name, srcs, visibility=None): |
| 9 | basename = srcs[0].split('/')[-1] |
| 10 | filename = basename[:-6] # remove .proto suffix |
| 11 | filename = _lower_underscore_to_upper_camel(filename) |
| 12 | |
| 13 | protoc_command = "protoc -I . " |
| 14 | srcs_params = "" |
| 15 | for src in srcs: |
| 16 | srcs_params += " $(location %s)" % (src) |
| 17 | |
| 18 | # Messages |
| 19 | protoc_messages_flags = "--objc_out=$(GENDIR)" |
| 20 | native.genrule( |
| 21 | name = name + "_mesages_codegen", |
| 22 | srcs = srcs, |
| 23 | outs = [ |
| 24 | filename + ".pbobjc.h", |
| 25 | filename + ".pbobjc.m", |
| 26 | ], |
| 27 | cmd = protoc_command + protoc_messages_flags + srcs_params, |
| 28 | ) |
| 29 | native.objc_library( |
| 30 | name = name + "_messages", |
| 31 | hdrs = [ |
| 32 | ":" + filename + ".pbobjc.h", |
| 33 | ], |
| 34 | includes = ["."], |
| 35 | non_arc_srcs = [ |
| 36 | ":" + filename + ".pbobjc.m", |
| 37 | ], |
| 38 | deps = [ |
| 39 | "//external:protobuf_objc", |
| 40 | ], |
| 41 | ) |
| 42 | |
| 43 | # Services |
| 44 | protoc_services_flags = "--grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(location //external:grpc_protoc_plugin_objc)" |
| 45 | native.genrule( |
| 46 | name = name + "_codegen", |
| 47 | srcs = srcs + ["//external:grpc_protoc_plugin_objc"], |
| 48 | outs = [ |
| 49 | filename + ".pbrpc.h", |
| 50 | filename + ".pbrpc.m", |
| 51 | ], |
| 52 | cmd = protoc_command + protoc_services_flags + srcs_params, |
| 53 | ) |
| 54 | native.objc_library( |
| 55 | name = name, |
| 56 | hdrs = [ |
| 57 | ":" + filename + ".pbrpc.h", |
| 58 | ], |
| 59 | includes = ["."], |
| 60 | srcs = [ |
| 61 | ":" + filename + ".pbrpc.m", |
| 62 | ], |
| 63 | deps = [ |
| 64 | ":" + name + "_messages", |
| 65 | "//external:proto_objc_rpc", |
| 66 | ], |
| 67 | visibility = visibility, |
| 68 | ) |