1# Copyright 2021 The gRPC Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14""" 15Contains the objc_grpc_library rule. 16""" 17 18load( 19 "//bazel:generate_objc.bzl", 20 "generate_objc", 21 "generate_objc_hdrs", 22 "generate_objc_non_arc_srcs", 23 "generate_objc_srcs", 24) 25 26def objc_grpc_library(name, deps, srcs = [], use_well_known_protos = False, **kwargs): 27 """Generates messages and/or service stubs for given proto_library and all transitively dependent proto files 28 29 Args: 30 name: name of target 31 deps: a list of proto_library targets that needs to be compiled 32 srcs: a list of labels to proto files with service stubs to be generated, 33 labels specified must include service stubs; otherwise Bazel will complain about srcs being empty 34 use_well_known_protos: whether to use the well known protos defined in 35 @com_google_protobuf//src/google/protobuf, default to false 36 **kwargs: other arguments 37 """ 38 objc_grpc_library_name = "_" + name + "_objc_grpc_library" 39 40 generate_objc( 41 name = objc_grpc_library_name, 42 srcs = srcs, 43 deps = deps, 44 use_well_known_protos = use_well_known_protos, 45 **kwargs 46 ) 47 48 generate_objc_hdrs( 49 name = objc_grpc_library_name + "_hdrs", 50 src = ":" + objc_grpc_library_name, 51 ) 52 53 generate_objc_non_arc_srcs( 54 name = objc_grpc_library_name + "_non_arc_srcs", 55 src = ":" + objc_grpc_library_name, 56 ) 57 58 arc_srcs = None 59 if len(srcs) > 0: 60 generate_objc_srcs( 61 name = objc_grpc_library_name + "_srcs", 62 src = ":" + objc_grpc_library_name, 63 ) 64 arc_srcs = [":" + objc_grpc_library_name + "_srcs"] 65 66 native.objc_library( 67 name = name, 68 hdrs = [":" + objc_grpc_library_name + "_hdrs"], 69 non_arc_srcs = [":" + objc_grpc_library_name + "_non_arc_srcs"], 70 srcs = arc_srcs, 71 defines = [ 72 "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=0", 73 "GPB_GRPC_FORWARD_DECLARE_MESSAGE_PROTO=0", 74 ], 75 includes = [ 76 "_generated_protos", 77 "src/objective-c", 78 ], 79 deps = [ 80 "@com_github_grpc_grpc//src/objective-c:proto_objc_rpc", 81 "@com_google_protobuf//:protobuf_objc", 82 ], 83 **kwargs 84 ) 85