aboutsummaryrefslogtreecommitdiffhomepage
path: root/grpc.bzl
diff options
context:
space:
mode:
authorGravatar Jorge Canizales <jcanizales@google.com>2015-07-01 14:18:04 -0700
committerGravatar Jorge Canizales <jcanizales@google.com>2015-07-01 14:18:04 -0700
commit4bc49051ba823cfc9ddb342e08b1ab7638fa6396 (patch)
treea0d067905ebd1f4eb1aeff854063bd0246774242 /grpc.bzl
parent23ca82ab54e0f5386c1a6b9233e6864121415280 (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.bzl68
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,
+ )