blob: 51e1db4a47c94c5dafa363089c184aba5a0c441e [file] [log] [blame]
Googler6c3de122022-03-28 11:40:41 +00001"""Generates Rust bindings from C++ headers."""
2
3load(
4 "//rs_bindings_from_cc/bazel_support:deps_for_bindings.bzl",
5 "deps_for_bindings",
6)
7load(
8 "//rs_bindings_from_cc/bazel_support:with_cc_toolchain_flags.bzl",
9 "with_cc_toolchain_flags",
10)
11load(
12 "//rs_bindings_from_cc/bazel_support:rust_bindings_from_cc_binary.bzl",
13 "rust_bindings_from_cc_binary",
14)
15load(
Marcel Hlopko9a94fc42022-04-06 23:35:36 -070016 "@rules_rust//rust:defs.bzl",
Googler6c3de122022-03-28 11:40:41 +000017 "rust_library",
18 "rust_test",
19)
Googler6c3de122022-03-28 11:40:41 +000020
Googlerb1f1ce12023-02-17 15:37:52 -080021package(default_applicable_licenses = ["//third_party/crubit:license"])
22
Googler6c3de122022-03-28 11:40:41 +000023licenses(["notice"])
24
25with_cc_toolchain_flags(
26 name = "test_wrapper",
27 binary = ":rs_bindings_from_cc",
28 extra_args = [
29 "--rs_out=/tmp/rs_api.rs",
30 "--cc_out=/tmp/rs_api_impl.cc",
31 "--ir_out=/tmp/ir.json",
32 ],
33)
34
35rust_bindings_from_cc_binary(
36 name = "rs_bindings_from_cc",
37 binary = ":rs_bindings_from_cc_impl",
Googler75c7ad02022-05-23 13:27:49 -070038 visibility = ["//:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +000039)
40
41deps_for_bindings(
42 name = "deps_for_bindings",
43 deps_for_generated_cc_file = [
Devin Jeanpierrec19a9a82023-01-17 14:29:32 -080044 "//support/internal:rs_api_impl_support",
Googler6c3de122022-03-28 11:40:41 +000045 ],
46 deps_for_generated_rs_file = [
47 # Required for struct layout assertions added to the generated
48 # Rust code.
Googler75c7ad02022-05-23 13:27:49 -070049 "@crate_index//:memoffset",
Lukasz Anforowicz0704c1d2023-01-17 08:08:39 -080050 "//support:ctor",
51 "//support:forward_declare",
52 "//support:oops",
Googler6c3de122022-03-28 11:40:41 +000053 # Required for `Copy` trait assertions added to the generated Rust
54 # code.
Googler75c7ad02022-05-23 13:27:49 -070055 "@crate_index//:static_assertions",
Googler6c3de122022-03-28 11:40:41 +000056 ],
Googler75c7ad02022-05-23 13:27:49 -070057 visibility = ["//:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +000058)
59
60cc_binary(
61 name = "rs_bindings_from_cc_impl",
62 srcs = ["rs_bindings_from_cc.cc"],
63 visibility = ["//visibility:public"],
64 deps = [
65 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -070066 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +000067 ":cmdline",
Rosica Dejanovskaabe406f2022-09-02 07:06:50 -070068 ":collect_namespaces",
Marcel Hlopko3f771a92022-05-09 06:09:59 -070069 ":generate_bindings_and_metadata",
Marco Poletti6669c692022-04-07 14:42:56 -070070 "//common:file_io",
Googler75c7ad02022-05-23 13:27:49 -070071 "//common:rust_allocator_shims",
Marco Polettic61bcc42022-04-08 12:54:30 -070072 "//common:status_macros",
Googler75c7ad02022-05-23 13:27:49 -070073 "@absl//absl/container:flat_hash_map",
74 "@absl//absl/flags:parse",
75 "@absl//absl/status",
76 "@absl//absl/status:statusor",
77 "@absl//absl/strings",
Marcel Hlopkoc31d95a2022-09-09 05:17:32 -070078 "@llvm-project//clang:format",
Googler75c7ad02022-05-23 13:27:49 -070079 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +000080 ],
81)
82
83cc_library(
Marcel Hlopko3f771a92022-05-09 06:09:59 -070084 name = "generate_bindings_and_metadata",
85 srcs = ["generate_bindings_and_metadata.cc"],
86 hdrs = ["generate_bindings_and_metadata.h"],
87 deps = [
Marcel Hlopko2ee23912022-05-09 06:13:55 -070088 ":cc_collect_instantiations",
Marcel Hlopko3f771a92022-05-09 06:09:59 -070089 ":cc_ir",
90 ":cmdline",
Rosica Dejanovskaabe406f2022-09-02 07:06:50 -070091 ":collect_namespaces",
Marcel Hlopko3f771a92022-05-09 06:09:59 -070092 ":ir_from_cc",
93 ":src_code_gen",
94 "//common:status_macros",
Marcel Hlopko20de6de2022-09-13 05:28:08 -070095 "@absl//absl/container:flat_hash_map",
96 "@absl//absl/container:flat_hash_set",
Lukasz Anforowicz6e8b3a72022-06-02 09:10:01 -070097 "@absl//absl/status:statusor",
Marcel Hlopkoab7a2282022-09-05 08:17:41 -070098 "@absl//absl/strings",
Marcel Hlopko3f771a92022-05-09 06:09:59 -070099 ],
100)
101
102cc_test(
103 name = "generate_bindings_and_metadata_test",
104 srcs = ["generate_bindings_and_metadata_test.cc"],
Lukasz Anforowiczebac8412022-11-07 07:10:52 -0800105 data = [
106 ],
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700107 deps = [
Rosica Dejanovskaaf348cc2022-08-30 05:54:16 -0700108 ":cc_ir",
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700109 ":cmdline",
Rosica Dejanovskaabe406f2022-09-02 07:06:50 -0700110 ":collect_namespaces",
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700111 ":generate_bindings_and_metadata",
Googler75c7ad02022-05-23 13:27:49 -0700112 "//common:rust_allocator_shims",
Marcel Hlopkoc31d95a2022-09-09 05:17:32 -0700113 "//common:status_macros",
Marcel Hlopko2ee23912022-05-09 06:13:55 -0700114 "//common:test_utils",
Marcel Hlopkoc31d95a2022-09-09 05:17:32 -0700115 "@absl//absl/status",
116 "@absl//absl/status:statusor",
Googler75c7ad02022-05-23 13:27:49 -0700117 "@absl//absl/strings",
Marcel Hlopko68cc2b72022-09-20 01:38:29 -0700118 "@com_google_googletest//:gtest_main",
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700119 ],
120)
121
122cc_library(
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700123 name = "ast_util",
124 srcs = ["ast_util.cc"],
125 hdrs = ["ast_util.h"],
Googler75c7ad02022-05-23 13:27:49 -0700126 visibility = ["//:__subpackages__"],
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700127 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700128 "@llvm-project//clang:ast",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700129 ],
130)
131
132cc_library(
Googler6c3de122022-03-28 11:40:41 +0000133 name = "bazel_types",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700134 srcs = ["bazel_types.cc"],
Googler6c3de122022-03-28 11:40:41 +0000135 hdrs = ["bazel_types.h"],
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700136 deps = [
137 "//common:string_type",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700138 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700139 "@absl//absl/strings",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700140 ],
Googler6c3de122022-03-28 11:40:41 +0000141)
142
Lukasz Anforowicz8d1e4322022-06-08 07:56:06 -0700143cc_test(
144 name = "bazel_types_test",
145 srcs = ["bazel_types_test.cc"],
146 deps = [
147 ":bazel_types",
148 "@com_google_googletest//:gtest_main",
149 ],
150)
151
Googler6c3de122022-03-28 11:40:41 +0000152cc_library(
Roberto Bampi60292f42022-11-07 08:07:00 -0800153 name = "known_types_map",
154 srcs = ["known_types_map.cc"],
155 hdrs = ["known_types_map.h"],
156 visibility = ["//:__subpackages__"],
157 deps = [
158 "@absl//absl/container:flat_hash_map",
159 "@absl//absl/strings",
160 ],
161)
162
163cc_library(
Googler6c3de122022-03-28 11:40:41 +0000164 name = "cmdline",
165 srcs = ["cmdline.cc"],
166 hdrs = ["cmdline.h"],
167 deps = [
168 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700169 ":cc_ir",
Marco Polettic61bcc42022-04-08 12:54:30 -0700170 "//common:status_macros",
Googler75c7ad02022-05-23 13:27:49 -0700171 "@absl//absl/container:flat_hash_map",
Devin Jeanpierre6ed0f602023-03-01 17:22:54 -0800172 "@absl//absl/container:flat_hash_set",
Googler75c7ad02022-05-23 13:27:49 -0700173 "@absl//absl/flags:flag",
Devin Jeanpierre7571ece2023-01-13 11:39:26 -0800174 "@absl//absl/log",
Googler75c7ad02022-05-23 13:27:49 -0700175 "@absl//absl/status:statusor",
176 "@absl//absl/strings",
177 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000178 ],
179)
180
181cc_test(
182 name = "cmdline_test",
183 srcs = ["cmdline_test.cc"],
184 deps = [
185 ":bazel_types",
186 ":cmdline",
Luca Versaric21d92f2022-05-25 00:56:30 -0700187 "//common:status_test_matchers",
188 "@com_google_googletest//:gtest_main",
Googler6c3de122022-03-28 11:40:41 +0000189 ],
190)
191
192cc_library(
Michael Forsterb3503e02022-04-25 00:24:14 -0700193 name = "decl_importer",
194 hdrs = ["decl_importer.h"],
Googler75c7ad02022-05-23 13:27:49 -0700195 visibility = ["//:__subpackages__"],
Michael Forsterb3503e02022-04-25 00:24:14 -0700196 deps = [
Googler0611ea72022-05-04 07:03:07 -0700197 "cc_ir",
Michael Forsterb3503e02022-04-25 00:24:14 -0700198 ":bazel_types",
199 "//lifetime_annotations",
Googler75c7ad02022-05-23 13:27:49 -0700200 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700201 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700202 "@absl//absl/status:statusor",
Michael Forsterb3503e02022-04-25 00:24:14 -0700203 ],
204)
205
206cc_library(
Googler6c3de122022-03-28 11:40:41 +0000207 name = "frontend_action",
208 srcs = ["frontend_action.cc"],
209 hdrs = ["frontend_action.h"],
210 deps = [
211 ":ast_consumer",
Michael Forster974bf152022-05-12 00:40:59 -0700212 ":decl_importer",
Googler75c7ad02022-05-23 13:27:49 -0700213 "@llvm-project//clang:ast",
214 "@llvm-project//clang:frontend",
Googler6c3de122022-03-28 11:40:41 +0000215 ],
216)
217
218cc_library(
219 name = "ast_consumer",
220 srcs = ["ast_consumer.cc"],
221 hdrs = ["ast_consumer.h"],
222 deps = [
Michael Forster974bf152022-05-12 00:40:59 -0700223 ":decl_importer",
Googler6c3de122022-03-28 11:40:41 +0000224 ":importer",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700225 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700226 "@llvm-project//clang:ast",
227 "@llvm-project//clang:frontend",
Googler6c3de122022-03-28 11:40:41 +0000228 ],
229)
230
231cc_library(
232 name = "importer",
233 srcs = ["importer.cc"],
234 hdrs = ["importer.h"],
235 deps = [
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700236 ":ast_util",
Googler6c3de122022-03-28 11:40:41 +0000237 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700238 ":cc_ir",
Michael Forsterb3503e02022-04-25 00:24:14 -0700239 ":decl_importer",
Roberto Bampi60292f42022-11-07 08:07:00 -0800240 ":known_types_map",
Marco Polettic61bcc42022-04-08 12:54:30 -0700241 "//common:status_macros",
Googler6c3de122022-03-28 11:40:41 +0000242 "//lifetime_annotations:type_lifetimes",
Michael Forsterb3503e02022-04-25 00:24:14 -0700243 "//rs_bindings_from_cc/importers:class_template",
Michael Forsterc0bc9262022-04-25 00:30:26 -0700244 "//rs_bindings_from_cc/importers:cxx_record",
Michael Forster4fa849d2022-04-25 00:32:59 -0700245 "//rs_bindings_from_cc/importers:enum",
Michael VanBemmel7a4d4c02022-07-27 13:21:47 -0700246 "//rs_bindings_from_cc/importers:friend",
Michael Forster7e4244a2022-04-25 00:39:01 -0700247 "//rs_bindings_from_cc/importers:function",
Michael Forster350d5312022-04-25 00:36:31 -0700248 "//rs_bindings_from_cc/importers:function_template",
Michael Forster284fb5a2022-04-25 00:41:14 -0700249 "//rs_bindings_from_cc/importers:namespace",
Michael Forsterc60df1e2022-04-25 00:55:44 -0700250 "//rs_bindings_from_cc/importers:typedef_name",
Googler75c7ad02022-05-23 13:27:49 -0700251 "@absl//absl/container:flat_hash_map",
252 "@absl//absl/container:flat_hash_set",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700253 "@absl//absl/log",
254 "@absl//absl/log:check",
255 "@absl//absl/log:die_if_null",
Googler75c7ad02022-05-23 13:27:49 -0700256 "@absl//absl/status",
257 "@absl//absl/status:statusor",
258 "@absl//absl/strings",
259 "@absl//absl/strings:cord",
Googler442733c2023-01-23 01:05:35 -0800260 "@absl//absl/strings:str_format",
Googler75c7ad02022-05-23 13:27:49 -0700261 "@llvm-project//clang:ast",
262 "@llvm-project//clang:basic",
263 "@llvm-project//clang:sema",
264 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000265 ],
266)
267
268cc_test(
269 name = "importer_test",
270 srcs = ["importer_test.cc"],
271 deps = [
272 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700273 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000274 ":ir_from_cc",
Luca Versaric21d92f2022-05-25 00:56:30 -0700275 "//common:status_test_matchers",
276 "//common:test_utils",
Googler75c7ad02022-05-23 13:27:49 -0700277 "@absl//absl/status",
278 "@absl//absl/status:statusor",
279 "@absl//absl/strings",
280 "@absl//absl/types:span",
Luca Versaric21d92f2022-05-25 00:56:30 -0700281 "@com_google_googletest//:gtest_main",
Googler6c3de122022-03-28 11:40:41 +0000282 ],
283)
284
285cc_library(
Googler0611ea72022-05-04 07:03:07 -0700286 name = "cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000287 srcs = ["ir.cc"],
288 hdrs = ["ir.h"],
Googler6c3de122022-03-28 11:40:41 +0000289 deps = [
290 ":bazel_types",
Marco Polettic61bcc42022-04-08 12:54:30 -0700291 "//common:strong_int",
Googler75c7ad02022-05-23 13:27:49 -0700292 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700293 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700294 "@absl//absl/status:statusor",
295 "@absl//absl/strings",
296 "@llvm-project//clang:ast",
297 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000298 ],
299)
300
301rust_library(
Googler0611ea72022-05-04 07:03:07 -0700302 name = "ir",
Googler6c3de122022-03-28 11:40:41 +0000303 srcs = ["ir.rs"],
Googler6c3de122022-03-28 11:40:41 +0000304 deps = [
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700305 "//common:arc_anyhow",
Devin Jeanpierre6ed0f602023-03-01 17:22:54 -0800306 "@crate_index//:flagset",
Googler75c7ad02022-05-23 13:27:49 -0700307 "@crate_index//:itertools",
Michael VanBemmelf5cbdf42022-10-14 17:00:11 -0700308 "@crate_index//:once_cell",
Googler75c7ad02022-05-23 13:27:49 -0700309 "@crate_index//:proc-macro2",
310 "@crate_index//:quote",
311 "@crate_index//:serde",
312 "@crate_index//:serde_json",
Googler6c3de122022-03-28 11:40:41 +0000313 ],
314)
315
316rust_test(
317 name = "rs_ir_test",
Googler0611ea72022-05-04 07:03:07 -0700318 crate = ":ir",
Googler6c3de122022-03-28 11:40:41 +0000319)
320
321rust_library(
322 name = "ir_testing",
323 testonly = 1,
324 srcs = ["ir_testing.rs"],
325 deps = [
Googler0611ea72022-05-04 07:03:07 -0700326 ":ir",
Googler6c3de122022-03-28 11:40:41 +0000327 ":json_from_cc",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700328 "//common:arc_anyhow",
Googler0611ea72022-05-04 07:03:07 -0700329 "//common:ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700330 "@crate_index//:itertools",
Googler6c3de122022-03-28 11:40:41 +0000331 ],
332)
333
334cc_library(
335 name = "ir_from_cc",
336 srcs = ["ir_from_cc.cc"],
337 hdrs = ["ir_from_cc.h"],
338 deps = [
339 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700340 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000341 ":frontend_action",
Googler75c7ad02022-05-23 13:27:49 -0700342 "@absl//absl/container:flat_hash_map",
Devin Jeanpierre6ed0f602023-03-01 17:22:54 -0800343 "@absl//absl/container:flat_hash_set",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700344 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700345 "@absl//absl/status",
346 "@absl//absl/status:statusor",
347 "@absl//absl/strings",
348 "@absl//absl/types:span",
Googler75c7ad02022-05-23 13:27:49 -0700349 "@llvm-project//clang:frontend",
350 "@llvm-project//clang:tooling",
Googler6c3de122022-03-28 11:40:41 +0000351 ],
352)
353
354cc_library(
355 name = "json_from_cc",
Lukasz Anforowicz121338a2022-11-01 14:28:32 -0700356 testonly = 1,
Googler6c3de122022-03-28 11:40:41 +0000357 srcs = ["json_from_cc.cc"],
358 deps = [
359 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700360 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000361 ":ir_from_cc",
Googler0611ea72022-05-04 07:03:07 -0700362 "//common:cc_ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700363 "@absl//absl/status:statusor",
364 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000365 ],
366)
367
368rust_test(
369 name = "ir_from_cc_test",
370 srcs = ["ir_from_cc_test.rs"],
371 deps = [
Googler0611ea72022-05-04 07:03:07 -0700372 ":ir",
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700373 ":ir_matchers",
Googler6c3de122022-03-28 11:40:41 +0000374 ":ir_testing",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700375 "//common:arc_anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700376 "//common:rust_allocator_shims",
Googler75c7ad02022-05-23 13:27:49 -0700377 "@crate_index//:itertools",
Marcel Hlopkod4678de2022-05-25 01:38:13 -0700378 "@crate_index//:proc-macro2",
Googler75c7ad02022-05-23 13:27:49 -0700379 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000380 ],
381)
382
383cc_library(
384 name = "src_code_gen",
385 srcs = ["src_code_gen.cc"],
386 hdrs = ["src_code_gen.h"],
387 deps = [
Googler0611ea72022-05-04 07:03:07 -0700388 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000389 ":src_code_gen_impl", # buildcleaner: keep
Googler0611ea72022-05-04 07:03:07 -0700390 "//common:cc_ffi_types",
Lukasz Anforowicz6e8b3a72022-06-02 09:10:01 -0700391 "//common:status_macros",
392 "@absl//absl/status:statusor",
Googler75c7ad02022-05-23 13:27:49 -0700393 "@absl//absl/strings",
Googler75c7ad02022-05-23 13:27:49 -0700394 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000395 ],
396)
397
398rust_library(
399 name = "src_code_gen_impl",
400 srcs = ["src_code_gen.rs"],
401 deps = [
Michael VanBemmelf5cbdf42022-10-14 17:00:11 -0700402 ":error_report",
Googler0611ea72022-05-04 07:03:07 -0700403 ":ir",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700404 "//common:arc_anyhow",
Lukasz Anforowiczccf55cb2022-10-05 06:00:57 -0700405 "//common:code_gen_utils",
Googler0611ea72022-05-04 07:03:07 -0700406 "//common:ffi_types",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700407 "//common:token_stream_printer",
Devin Jeanpierre6ed0f602023-03-01 17:22:54 -0800408 "@crate_index//:flagset",
Googler75c7ad02022-05-23 13:27:49 -0700409 "@crate_index//:itertools",
Michael VanBemmel5014b3e2022-08-03 16:27:34 -0700410 "@crate_index//:once_cell",
Googler75c7ad02022-05-23 13:27:49 -0700411 "@crate_index//:proc-macro2",
412 "@crate_index//:quote",
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700413 "@crate_index//:salsa",
Googler75c7ad02022-05-23 13:27:49 -0700414 "@crate_index//:serde_json",
415 "@crate_index//:syn",
Googler6c3de122022-03-28 11:40:41 +0000416 ],
417)
418
419rust_test(
420 name = "src_code_gen_impl_test",
421 crate = ":src_code_gen_impl",
Googler6c3de122022-03-28 11:40:41 +0000422 deps = [
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700423 ":ir_matchers",
Googler6c3de122022-03-28 11:40:41 +0000424 ":ir_testing",
Googler75c7ad02022-05-23 13:27:49 -0700425 "//common:rust_allocator_shims",
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700426 "//common:token_stream_matchers",
Googler75c7ad02022-05-23 13:27:49 -0700427 "@crate_index//:static_assertions",
Googler6c3de122022-03-28 11:40:41 +0000428 ],
429)
430
Michael VanBemmelf5cbdf42022-10-14 17:00:11 -0700431rust_library(
432 name = "error_report",
433 srcs = ["error_report.rs"],
434 deps = [
435 "//common:arc_anyhow",
436 "@crate_index//:anyhow",
437 "@crate_index//:serde",
438 "@crate_index//:serde_json",
439 ],
440)
441
442rust_test(
443 name = "error_report_test",
444 crate = ":error_report",
445 deps = [
446 "@crate_index//:serde_json",
447 ],
448)
449
Googler6c3de122022-03-28 11:40:41 +0000450cc_library(
Googler6c3de122022-03-28 11:40:41 +0000451 name = "ast_convert",
452 srcs = ["ast_convert.cc"],
453 hdrs = ["ast_convert.h"],
Michael Forsterc0bc9262022-04-25 00:30:26 -0700454 visibility = ["//rs_bindings_from_cc:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000455 deps = [
Googler0611ea72022-05-04 07:03:07 -0700456 ":cc_ir",
Googler75c7ad02022-05-23 13:27:49 -0700457 "@absl//absl/functional:function_ref",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700458 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700459 "@llvm-project//clang:ast",
460 "@llvm-project//clang:basic",
Googler6c3de122022-03-28 11:40:41 +0000461 ],
462)
463
464rust_library(
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700465 name = "ir_matchers",
466 testonly = 1,
467 srcs = ["ir_matchers.rs"],
Devin Jeanpierred6f3e2a2022-07-20 18:45:42 -0700468 visibility = ["//:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000469 deps = [
Googler0611ea72022-05-04 07:03:07 -0700470 ":ir",
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700471 ":ir_testing",
472 "//common:token_stream_matchers",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700473 "//common:token_stream_printer",
Lukasz Anforowiczdd44d982022-09-22 10:09:37 -0700474 "@crate_index//:anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700475 "@crate_index//:itertools",
476 "@crate_index//:proc-macro2",
477 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000478 ],
479)
480
481rust_test(
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700482 name = "ir_matchers_test",
483 crate = ":ir_matchers",
Googler6c3de122022-03-28 11:40:41 +0000484 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700485 "//common:rust_allocator_shims",
Googler6c3de122022-03-28 11:40:41 +0000486 ],
487)
488
Googler6c3de122022-03-28 11:40:41 +0000489filegroup(
490 name = "builtin_headers",
491 srcs = [
Googler75c7ad02022-05-23 13:27:49 -0700492 "@llvm-project//clang:builtin_headers_filegroup",
493 "@llvm-project//compiler-rt:fuzzer_filegroup",
494 "@llvm-project//compiler-rt:sanitizer_filegroup",
Googler6c3de122022-03-28 11:40:41 +0000495 ],
496 visibility = ["//visibility:public"],
497)
498
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700499cc_library(
500 name = "cc_collect_instantiations",
501 srcs = ["collect_instantiations.cc"],
502 hdrs = ["collect_instantiations.h"],
503 deps = [
504 ":collect_instantiations",
505 "//common:cc_ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700506 "@absl//absl/status:statusor",
507 "@absl//absl/types:span",
508 "@llvm-project//llvm:Support",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700509 ],
510)
511
512cc_test(
513 name = "cc_collect_instantiations_test",
514 srcs = ["collect_instantiations_test.cc"],
515 deps = [
516 ":cc_collect_instantiations",
Googler75c7ad02022-05-23 13:27:49 -0700517 "//common:rust_allocator_shims",
Luca Versaric21d92f2022-05-25 00:56:30 -0700518 "//common:status_test_matchers",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700519 "//common:test_utils",
Luca Versaric21d92f2022-05-25 00:56:30 -0700520 "@com_google_googletest//:gtest_main",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700521 ],
522)
523
524rust_library(
525 name = "collect_instantiations",
526 srcs = ["collect_instantiations.rs"],
527 deps = [
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700528 "//common:arc_anyhow",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700529 "//common:ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700530 "@crate_index//:proc-macro2",
531 "@crate_index//:serde_json",
532 "@crate_index//:syn",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700533 ],
534)
535
536rust_test(
537 name = "collect_instantiations_test",
538 args = [
539 # To prevent tests from polluting the environment variables for each other.
540 "--test-threads",
541 "1",
542 ],
543 crate = ":collect_instantiations",
544 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700545 "@crate_index//:quote",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700546 ],
547)
Rosica Dejanovska8575a842022-09-01 02:05:30 -0700548
549cc_library(
550 name = "collect_namespaces",
551 srcs = ["collect_namespaces.cc"],
552 hdrs = ["collect_namespaces.h"],
553 visibility = ["//:__subpackages__"],
554 deps = [
Rosica Dejanovska5b2e8132022-09-20 02:11:51 -0700555 ":bazel_types",
Rosica Dejanovska8575a842022-09-01 02:05:30 -0700556 ":cc_ir",
557 "@absl//absl/container:btree",
558 "@absl//absl/container:flat_hash_map",
559 "@absl//absl/strings",
560 "@llvm-project//llvm:Support",
561 ],
562)
563
564cc_test(
565 name = "collect_namespaces_test",
566 srcs = ["collect_namespaces_test.cc"],
567 deps = [
568 ":cc_ir",
569 ":collect_namespaces",
570 ":ir_from_cc",
571 "@absl//absl/status",
572 "@absl//absl/status:statusor",
573 "@absl//absl/strings",
574 "@absl//absl/types:span",
575 "@com_google_googletest//:gtest_main",
576 ],
577)