1load(
2    "//bazel:build_defs.bzl",
3    "UPB_DEFAULT_COPTS",
4    "upb_amalgamation",  # copybara:strip_for_google3
5)
6load(
7    "//bazel:upb_proto_library.bzl",
8    "upb_fasttable_enabled",
9    "upb_proto_library",
10    "upb_proto_library_copts",
11    "upb_proto_reflection_library",
12)
13
14# copybara:strip_for_google3_begin
15load(
16    "@rules_proto//proto:defs.bzl",
17    "proto_library",
18)
19
20# copybara:strip_end
21
22licenses(["notice"])  # BSD (Google-authored w/ possible external contributions)
23
24exports_files([
25    "LICENSE",
26    "build_defs",
27])
28
29config_setting(
30    name = "windows",
31    constraint_values = ["@bazel_tools//platforms:windows"],
32)
33
34upb_fasttable_enabled(
35    name = "fasttable_enabled",
36    build_setting_default = False,
37    visibility = ["//visibility:public"],
38)
39
40config_setting(
41    name = "fasttable_enabled_setting",
42    flag_values = {"//:fasttable_enabled": "true"},
43)
44
45upb_proto_library_copts(
46    name = "upb_proto_library_copts__for_generated_code_only_do_not_use",
47    copts = UPB_DEFAULT_COPTS,
48    visibility = ["//visibility:public"],
49)
50
51# Public C/C++ libraries #######################################################
52
53cc_library(
54    name = "port",
55    copts = UPB_DEFAULT_COPTS,
56    textual_hdrs = [
57        "upb/port_def.inc",
58        "upb/port_undef.inc",
59    ],
60    visibility = ["//tests:__pkg__"],
61)
62
63cc_library(
64    name = "upb",
65    srcs = [
66        "upb/decode.c",
67        "upb/decode.int.h",
68        "upb/encode.c",
69        "upb/msg.c",
70        "upb/msg.h",
71        "upb/table.c",
72        "upb/table.int.h",
73        "upb/upb.c",
74        "upb/upb.int.h",
75    ],
76    hdrs = [
77        "upb/decode.h",
78        "upb/encode.h",
79        "upb/upb.h",
80        "upb/upb.hpp",
81    ],
82    copts = UPB_DEFAULT_COPTS,
83    visibility = ["//visibility:public"],
84    deps = [
85        ":fastdecode",
86        ":port",
87        "//third_party/wyhash",
88    ],
89)
90
91cc_library(
92    name = "fastdecode",
93    srcs = [
94        "upb/decode.int.h",
95        "upb/decode_fast.c",
96        "upb/decode_fast.h",
97        "upb/msg.h",
98        "upb/upb.int.h",
99    ],
100    copts = UPB_DEFAULT_COPTS,
101    deps = [
102        ":port",
103        ":table",
104    ],
105)
106
107# Common support routines used by generated code.  This library has no
108# implementation, but depends on :upb and exposes a few more hdrs.
109#
110# This is public only because we have no way of visibility-limiting it to
111# upb_proto_library() only.  This interface is not stable and by using it you
112# give up any backward compatibility guarantees.
113cc_library(
114    name = "generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me",
115    hdrs = [
116        "upb/decode_fast.h",
117        "upb/msg.h",
118        "upb/port_def.inc",
119        "upb/port_undef.inc",
120    ],
121    copts = UPB_DEFAULT_COPTS,
122    visibility = ["//visibility:public"],
123    deps = [
124        ":table",
125        ":upb",
126    ],
127)
128
129upb_proto_library(
130    name = "descriptor_upb_proto",
131    visibility = ["//visibility:public"],
132    deps = ["@com_google_protobuf//:descriptor_proto"],
133)
134
135upb_proto_reflection_library(
136    name = "descriptor_upb_proto_reflection",
137    visibility = ["//visibility:public"],
138    deps = ["@com_google_protobuf//:descriptor_proto"],
139)
140
141cc_library(
142    name = "reflection",
143    srcs = [
144        "upb/def.c",
145        "upb/msg.h",
146        "upb/reflection.c",
147    ],
148    hdrs = [
149        "upb/def.h",
150        "upb/def.hpp",
151        "upb/reflection.h",
152    ],
153    copts = UPB_DEFAULT_COPTS,
154    visibility = ["//visibility:public"],
155    deps = [
156        ":descriptor_upb_proto",
157        ":port",
158        ":table",
159        ":upb",
160    ],
161)
162
163cc_library(
164    name = "textformat",
165    srcs = [
166        "upb/text_encode.c",
167    ],
168    hdrs = [
169        "upb/text_encode.h",
170    ],
171    copts = UPB_DEFAULT_COPTS,
172    visibility = ["//visibility:public"],
173    deps = [
174        ":port",
175        ":reflection",
176    ],
177)
178
179cc_library(
180    name = "json",
181    srcs = [
182        "upb/json_decode.c",
183        "upb/json_encode.c",
184    ],
185    hdrs = [
186        "upb/json_decode.h",
187        "upb/json_encode.h",
188    ],
189    copts = UPB_DEFAULT_COPTS,
190    visibility = ["//visibility:public"],
191    deps = [
192        ":port",
193        ":reflection",
194        ":upb",
195    ],
196)
197
198# Internal C/C++ libraries #####################################################
199
200cc_library(
201    name = "table",
202    hdrs = [
203        "upb/table.int.h",
204        "upb/upb.h",
205    ],
206    visibility = ["//tests:__pkg__"],
207    deps = [
208        ":port",
209    ],
210)
211
212# Legacy C/C++ Libraries (not recommended for new code) ########################
213
214cc_library(
215    name = "handlers",
216    srcs = [
217        "upb/handlers.c",
218        "upb/handlers-inl.h",
219        "upb/sink.c",
220    ],
221    hdrs = [
222        "upb/handlers.h",
223        "upb/sink.h",
224    ],
225    copts = UPB_DEFAULT_COPTS,
226    visibility = ["//tests:__pkg__"],
227    deps = [
228        ":port",
229        ":reflection",
230        ":table",
231        ":upb",
232    ],
233)
234
235cc_library(
236    name = "upb_pb",
237    srcs = [
238        "upb/pb/compile_decoder.c",
239        "upb/pb/decoder.c",
240        "upb/pb/decoder.int.h",
241        "upb/pb/encoder.c",
242        "upb/pb/textprinter.c",
243        "upb/pb/varint.c",
244        "upb/pb/varint.int.h",
245    ],
246    hdrs = [
247        "upb/pb/decoder.h",
248        "upb/pb/encoder.h",
249        "upb/pb/textprinter.h",
250    ],
251    copts = UPB_DEFAULT_COPTS,
252    visibility = ["//tests:__pkg__"],
253    deps = [
254        ":descriptor_upb_proto",
255        ":handlers",
256        ":port",
257        ":reflection",
258        ":table",
259        ":upb",
260    ],
261)
262
263# copybara:strip_for_google3_begin
264cc_library(
265    name = "upb_json",
266    srcs = [
267        "upb/json/parser.c",
268        "upb/json/printer.c",
269    ],
270    hdrs = [
271        "upb/json/parser.h",
272        "upb/json/printer.h",
273    ],
274    copts = UPB_DEFAULT_COPTS,
275    visibility = ["//tests:__pkg__"],
276    deps = [
277        ":upb",
278        ":upb_pb",
279    ],
280)
281
282genrule(
283    name = "generate_json_ragel",
284    srcs = ["//:upb/json/parser.rl"],
285    outs = ["upb/json/parser.c"],
286    cmd = "$(location @ragel//:ragelc) -C -o upb/json/parser.c $< && mv upb/json/parser.c $@",
287    tools = ["@ragel//:ragelc"],
288    visibility = ["//cmake:__pkg__"],
289)
290
291# Amalgamation #################################################################
292
293py_binary(
294    name = "amalgamate",
295    srcs = ["tools/amalgamate.py"],
296)
297
298upb_amalgamation(
299    name = "gen_amalgamation",
300    outs = [
301        "upb.c",
302        "upb.h",
303    ],
304    amalgamator = ":amalgamate",
305    libs = [
306        ":upb",
307        ":fastdecode",
308        ":descriptor_upb_proto",
309        ":reflection",
310        ":handlers",
311        ":port",
312        ":upb_pb",
313        ":upb_json",
314    ],
315)
316
317cc_library(
318    name = "amalgamation",
319    srcs = ["upb.c"],
320    hdrs = ["upb.h"],
321    copts = UPB_DEFAULT_COPTS,
322    deps = ["//third_party/wyhash"],
323)
324
325upb_amalgamation(
326    name = "gen_php_amalgamation",
327    outs = [
328        "php-upb.c",
329        "php-upb.h",
330    ],
331    amalgamator = ":amalgamate",
332    libs = [
333        ":upb",
334        ":fastdecode",
335        ":descriptor_upb_proto",
336        ":descriptor_upb_proto_reflection",
337        ":reflection",
338        ":port",
339        ":json",
340    ],
341    prefix = "php-",
342)
343
344cc_library(
345    name = "php_amalgamation",
346    srcs = ["php-upb.c"],
347    hdrs = ["php-upb.h"],
348    copts = UPB_DEFAULT_COPTS,
349    deps = ["//third_party/wyhash"],
350)
351
352upb_amalgamation(
353    name = "gen_ruby_amalgamation",
354    outs = [
355        "ruby-upb.c",
356        "ruby-upb.h",
357    ],
358    amalgamator = ":amalgamate",
359    libs = [
360        ":upb",
361        ":fastdecode",
362        ":descriptor_upb_proto",
363        ":reflection",
364        ":port",
365        ":json",
366    ],
367    prefix = "ruby-",
368)
369
370cc_library(
371    name = "ruby_amalgamation",
372    srcs = ["ruby-upb.c"],
373    hdrs = ["ruby-upb.h"],
374    copts = UPB_DEFAULT_COPTS,
375    deps = ["//third_party/wyhash"],
376)
377
378exports_files(
379    [
380        "upb/json/parser.rl",
381        "BUILD",
382        "WORKSPACE",
383    ],
384    visibility = ["//cmake:__pkg__"],
385)
386
387exports_files(
388    [
389        "third_party/lunit/console.lua",
390        "third_party/lunit/lunit.lua",
391    ],
392    visibility = ["//tests/bindings/lua:__pkg__"],
393)
394
395filegroup(
396    name = "cmake_files",
397    srcs = glob([
398        "upb/json/parser.c",
399        "CMakeLists.txt",
400        "generated_for_cmake/**/*",
401        "google/**/*",
402        "upbc/**/*",
403        "upb/**/*",
404        "tests/**/*",
405        "third_party/**/*",
406    ]),
407    visibility = ["//cmake:__pkg__"],
408)
409
410# copybara:strip_end
411