• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1load(
2    "//bazel:generate_objc.bzl",
3    "generate_objc",
4    "generate_objc_hdrs",
5    "generate_objc_non_arc_srcs",
6    "generate_objc_srcs",
7)
8load("//bazel:protobuf.bzl", "well_known_proto_libs")
9
10def objc_grpc_library(name, deps, srcs = [], use_well_known_protos = False, **kwargs):
11    """Generates messages and/or service stubs for given proto_library and all transitively dependent proto files
12
13    Args:
14        name: name of target
15        deps: a list of proto_library targets that needs to be compiled
16        srcs: a list of labels to proto files with service stubs to be generated,
17            labels specified must include service stubs; otherwise Bazel will complain about srcs being empty
18        use_well_known_protos: whether to use the well known protos defined in
19            @com_google_protobuf//src/google/protobuf, default to false
20        **kwargs: other arguments
21    """
22    objc_grpc_library_name = "_" + name + "_objc_grpc_library"
23
24    generate_objc(
25        name = objc_grpc_library_name,
26        srcs = srcs,
27        deps = deps,
28        use_well_known_protos = use_well_known_protos,
29        **kwargs
30    )
31
32    generate_objc_hdrs(
33        name = objc_grpc_library_name + "_hdrs",
34        src = ":" + objc_grpc_library_name,
35    )
36
37    generate_objc_non_arc_srcs(
38        name = objc_grpc_library_name + "_non_arc_srcs",
39        src = ":" + objc_grpc_library_name,
40    )
41
42    arc_srcs = None
43    if len(srcs) > 0:
44        generate_objc_srcs(
45            name = objc_grpc_library_name + "_srcs",
46            src = ":" + objc_grpc_library_name,
47        )
48        arc_srcs = [":" + objc_grpc_library_name + "_srcs"]
49
50    native.objc_library(
51        name = name,
52        hdrs = [":" + objc_grpc_library_name + "_hdrs"],
53        non_arc_srcs = [":" + objc_grpc_library_name + "_non_arc_srcs"],
54        srcs = arc_srcs,
55        defines = [
56            "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=0",
57            "GPB_GRPC_FORWARD_DECLARE_MESSAGE_PROTO=0",
58        ],
59        includes = [
60            "_generated_protos",
61            "src/objective-c",
62        ],
63        deps = [
64            "@com_github_grpc_grpc//src/objective-c:proto_objc_rpc",
65            "@com_google_protobuf//:protobuf_objc",
66        ],
67        **kwargs
68    )
69