Imported Upstream version 1.34.0
[platform/upstream/grpc.git] / src / objective-c / grpc_objc_internal_library.bzl
1 # Copyright 2019 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
15 #
16 # This is for the gRPC build system. This isn't intended to be used outsite of
17 # the BUILD file for gRPC. It contains the mapping for the template system we
18 # use to generate other platform's build system files.
19 #
20 # Please consider that there should be a high bar for additions and changes to
21 # this file.
22 # Each rule listed must be re-written for Google's internal build system, and
23 # each change must be ported from one to the other.
24 #
25
26 load("@rules_proto//proto:defs.bzl", "proto_library")
27 load(
28     "//bazel:generate_objc.bzl",
29     "generate_objc",
30     "generate_objc_hdrs",
31     "generate_objc_non_arc_srcs",
32     "generate_objc_srcs",
33 )
34
35 def proto_library_objc_wrapper(
36         name,
37         srcs,
38         deps = [],
39         use_well_known_protos = False):
40     """proto_library for adding dependencies to google/protobuf protos
41     use_well_known_protos - ignored in open source version
42     """
43     proto_library(
44         name = name,
45         srcs = srcs,
46         deps = deps,
47     )
48
49 def grpc_objc_examples_library(
50         name,
51         srcs = [],
52         hdrs = [],
53         textual_hdrs = [],
54         data = [],
55         deps = [],
56         defines = [],
57         sdk_frameworks = [],
58         includes = []):
59     """objc_library for testing, only works in //src/objective-c/exmaples
60
61     Args:
62         name: name of target
63         hdrs: public headers
64         srcs: all source files (.m)
65         textual_hdrs: private headers
66         data: any other bundle resources
67         defines: preprocessors
68         sdk_frameworks: sdks
69         includes: added to search path, always [the path to objc directory]
70         deps: dependencies
71     """
72     native.objc_library(
73         name = name,
74         srcs = srcs,
75         hdrs = hdrs,
76         textual_hdrs = textual_hdrs,
77         data = data,
78         defines = defines,
79         includes = includes,
80         sdk_frameworks = sdk_frameworks,
81         deps = deps + [":RemoteTest"],
82     )
83
84 def grpc_objc_testing_library(
85         name,
86         srcs = [],
87         hdrs = [],
88         textual_hdrs = [],
89         data = [],
90         deps = [],
91         defines = [],
92         includes = []):
93     """objc_library for testing, only works in //src/objective-c/tests
94
95     Args:
96         name: name of target
97         hdrs: public headers
98         srcs: all source files (.m)
99         textual_hdrs: private headers
100         data: any other bundle resources
101         defines: preprocessors
102         includes: added to search path, always [the path to objc directory]
103         deps: dependencies
104     """
105
106     additional_deps = [
107         ":RemoteTest",
108         "//src/objective-c:grpc_objc_client_internal_testing",
109     ]
110
111     if not name == "TestConfigs":
112         additional_deps += [":TestConfigs"]
113
114     native.objc_library(
115         name = name,
116         hdrs = hdrs,
117         srcs = srcs,
118         textual_hdrs = textual_hdrs,
119         data = data,
120         defines = defines,
121         includes = includes,
122         deps = deps + additional_deps,
123     )
124
125 def local_objc_grpc_library(name, deps, testing = True, srcs = [], use_well_known_protos = False, **kwargs):
126     """!!For local targets within the gRPC repository only!! Will not work outside of the repo
127     """
128     objc_grpc_library_name = "_" + name + "_objc_grpc_library"
129
130     generate_objc(
131         name = objc_grpc_library_name,
132         srcs = srcs,
133         deps = deps,
134         use_well_known_protos = use_well_known_protos,
135         **kwargs
136     )
137
138     generate_objc_hdrs(
139         name = objc_grpc_library_name + "_hdrs",
140         src = ":" + objc_grpc_library_name,
141     )
142
143     generate_objc_non_arc_srcs(
144         name = objc_grpc_library_name + "_non_arc_srcs",
145         src = ":" + objc_grpc_library_name,
146     )
147
148     arc_srcs = None
149     if len(srcs) > 0:
150         generate_objc_srcs(
151             name = objc_grpc_library_name + "_srcs",
152             src = ":" + objc_grpc_library_name,
153         )
154         arc_srcs = [":" + objc_grpc_library_name + "_srcs"]
155
156     library_deps = ["@com_google_protobuf//:protobuf_objc"]
157     if testing:
158         library_deps += ["//src/objective-c:grpc_objc_client_internal_testing"]
159     else:
160         library_deps += ["//src/objective-c:proto_objc_rpc"]
161
162     native.objc_library(
163         name = name,
164         hdrs = [":" + objc_grpc_library_name + "_hdrs"],
165         non_arc_srcs = [":" + objc_grpc_library_name + "_non_arc_srcs"],
166         srcs = arc_srcs,
167         defines = [
168             "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=0",
169             "GPB_GRPC_FORWARD_DECLARE_MESSAGE_PROTO=0",
170         ],
171         includes = ["_generated_protos"],
172         deps = library_deps,
173     )