blob: 8432679bca99b9fad1bb94d720b7d4fdfb617de4 [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
Lukasz Anforowiczaaa2a0f2023-04-11 09:01:14 -070021package(default_applicable_licenses = ["//:license"])
Googlerb1f1ce12023-02-17 15:37:52 -080022
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 = [
Lukasz Anforowicza3b7db02023-03-09 17:34:05 -080044 "//support/internal:bindings_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"],
Devin Jeanpierre3f0d0682023-04-13 14:47:28 -0700136 visibility = [
137 ":__subpackages__",
138 ],
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700139 deps = [
140 "//common:string_type",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700141 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700142 "@absl//absl/strings",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700143 ],
Googler6c3de122022-03-28 11:40:41 +0000144)
145
Lukasz Anforowicz8d1e4322022-06-08 07:56:06 -0700146cc_test(
147 name = "bazel_types_test",
148 srcs = ["bazel_types_test.cc"],
149 deps = [
150 ":bazel_types",
151 "@com_google_googletest//:gtest_main",
152 ],
153)
154
Googler6c3de122022-03-28 11:40:41 +0000155cc_library(
Roberto Bampi60292f42022-11-07 08:07:00 -0800156 name = "known_types_map",
157 srcs = ["known_types_map.cc"],
158 hdrs = ["known_types_map.h"],
159 visibility = ["//:__subpackages__"],
160 deps = [
161 "@absl//absl/container:flat_hash_map",
162 "@absl//absl/strings",
163 ],
164)
165
166cc_library(
Googler6c3de122022-03-28 11:40:41 +0000167 name = "cmdline",
168 srcs = ["cmdline.cc"],
169 hdrs = ["cmdline.h"],
170 deps = [
171 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700172 ":cc_ir",
Googler69e09632023-03-03 12:18:35 -0800173 "//common:cc_ffi_types",
174 "//common:rust_allocator_shims",
Marco Polettic61bcc42022-04-08 12:54:30 -0700175 "//common:status_macros",
Googler75c7ad02022-05-23 13:27:49 -0700176 "@absl//absl/container:flat_hash_map",
Devin Jeanpierre6ed0f602023-03-01 17:22:54 -0800177 "@absl//absl/container:flat_hash_set",
Googler75c7ad02022-05-23 13:27:49 -0700178 "@absl//absl/flags:flag",
Devin Jeanpierre7571ece2023-01-13 11:39:26 -0800179 "@absl//absl/log",
Googler75c7ad02022-05-23 13:27:49 -0700180 "@absl//absl/status:statusor",
181 "@absl//absl/strings",
182 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000183 ],
184)
185
186cc_test(
187 name = "cmdline_test",
188 srcs = ["cmdline_test.cc"],
189 deps = [
190 ":bazel_types",
191 ":cmdline",
Luca Versaric21d92f2022-05-25 00:56:30 -0700192 "//common:status_test_matchers",
193 "@com_google_googletest//:gtest_main",
Googler6c3de122022-03-28 11:40:41 +0000194 ],
195)
196
197cc_library(
Michael Forsterb3503e02022-04-25 00:24:14 -0700198 name = "decl_importer",
199 hdrs = ["decl_importer.h"],
Googler75c7ad02022-05-23 13:27:49 -0700200 visibility = ["//:__subpackages__"],
Michael Forsterb3503e02022-04-25 00:24:14 -0700201 deps = [
Googler0611ea72022-05-04 07:03:07 -0700202 "cc_ir",
Michael Forsterb3503e02022-04-25 00:24:14 -0700203 ":bazel_types",
204 "//lifetime_annotations",
Googler75c7ad02022-05-23 13:27:49 -0700205 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700206 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700207 "@absl//absl/status:statusor",
Googler1bff6372023-03-24 10:06:29 -0700208 "@llvm-project//clang:ast",
Michael Forsterb3503e02022-04-25 00:24:14 -0700209 ],
210)
211
212cc_library(
Googler6c3de122022-03-28 11:40:41 +0000213 name = "frontend_action",
214 srcs = ["frontend_action.cc"],
215 hdrs = ["frontend_action.h"],
216 deps = [
217 ":ast_consumer",
Michael Forster974bf152022-05-12 00:40:59 -0700218 ":decl_importer",
Googler75c7ad02022-05-23 13:27:49 -0700219 "@llvm-project//clang:ast",
220 "@llvm-project//clang:frontend",
Googler6c3de122022-03-28 11:40:41 +0000221 ],
222)
223
224cc_library(
225 name = "ast_consumer",
226 srcs = ["ast_consumer.cc"],
227 hdrs = ["ast_consumer.h"],
228 deps = [
Michael Forster974bf152022-05-12 00:40:59 -0700229 ":decl_importer",
Googler6c3de122022-03-28 11:40:41 +0000230 ":importer",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700231 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700232 "@llvm-project//clang:ast",
233 "@llvm-project//clang:frontend",
Googler6c3de122022-03-28 11:40:41 +0000234 ],
235)
236
237cc_library(
238 name = "importer",
239 srcs = ["importer.cc"],
240 hdrs = ["importer.h"],
241 deps = [
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700242 ":ast_util",
Googler6c3de122022-03-28 11:40:41 +0000243 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700244 ":cc_ir",
Michael Forsterb3503e02022-04-25 00:24:14 -0700245 ":decl_importer",
Roberto Bampi60292f42022-11-07 08:07:00 -0800246 ":known_types_map",
Marco Polettic61bcc42022-04-08 12:54:30 -0700247 "//common:status_macros",
Googler6c3de122022-03-28 11:40:41 +0000248 "//lifetime_annotations:type_lifetimes",
Michael Forsterb3503e02022-04-25 00:24:14 -0700249 "//rs_bindings_from_cc/importers:class_template",
Michael Forsterc0bc9262022-04-25 00:30:26 -0700250 "//rs_bindings_from_cc/importers:cxx_record",
Michael Forster4fa849d2022-04-25 00:32:59 -0700251 "//rs_bindings_from_cc/importers:enum",
Michael VanBemmel7a4d4c02022-07-27 13:21:47 -0700252 "//rs_bindings_from_cc/importers:friend",
Michael Forster7e4244a2022-04-25 00:39:01 -0700253 "//rs_bindings_from_cc/importers:function",
Michael Forster350d5312022-04-25 00:36:31 -0700254 "//rs_bindings_from_cc/importers:function_template",
Michael Forster284fb5a2022-04-25 00:41:14 -0700255 "//rs_bindings_from_cc/importers:namespace",
Michael Forsterc60df1e2022-04-25 00:55:44 -0700256 "//rs_bindings_from_cc/importers:typedef_name",
Googler75c7ad02022-05-23 13:27:49 -0700257 "@absl//absl/container:flat_hash_map",
258 "@absl//absl/container:flat_hash_set",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700259 "@absl//absl/log",
260 "@absl//absl/log:check",
261 "@absl//absl/log:die_if_null",
Googler75c7ad02022-05-23 13:27:49 -0700262 "@absl//absl/status",
263 "@absl//absl/status:statusor",
264 "@absl//absl/strings",
265 "@absl//absl/strings:cord",
Googler442733c2023-01-23 01:05:35 -0800266 "@absl//absl/strings:str_format",
Googler75c7ad02022-05-23 13:27:49 -0700267 "@llvm-project//clang:ast",
268 "@llvm-project//clang:basic",
269 "@llvm-project//clang:sema",
270 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000271 ],
272)
273
274cc_test(
275 name = "importer_test",
276 srcs = ["importer_test.cc"],
277 deps = [
278 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700279 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000280 ":ir_from_cc",
Luca Versaric21d92f2022-05-25 00:56:30 -0700281 "//common:status_test_matchers",
282 "//common:test_utils",
Googler75c7ad02022-05-23 13:27:49 -0700283 "@absl//absl/status",
284 "@absl//absl/status:statusor",
285 "@absl//absl/strings",
286 "@absl//absl/types:span",
Luca Versaric21d92f2022-05-25 00:56:30 -0700287 "@com_google_googletest//:gtest_main",
Googler6c3de122022-03-28 11:40:41 +0000288 ],
289)
290
291cc_library(
Googler0611ea72022-05-04 07:03:07 -0700292 name = "cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000293 srcs = ["ir.cc"],
294 hdrs = ["ir.h"],
Googler6c3de122022-03-28 11:40:41 +0000295 deps = [
296 ":bazel_types",
Marco Polettic61bcc42022-04-08 12:54:30 -0700297 "//common:strong_int",
Googler75c7ad02022-05-23 13:27:49 -0700298 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700299 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700300 "@absl//absl/status:statusor",
301 "@absl//absl/strings",
302 "@llvm-project//clang:ast",
303 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000304 ],
305)
306
307rust_library(
Googler0611ea72022-05-04 07:03:07 -0700308 name = "ir",
Googler6c3de122022-03-28 11:40:41 +0000309 srcs = ["ir.rs"],
Googler6c3de122022-03-28 11:40:41 +0000310 deps = [
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700311 "//common:arc_anyhow",
Devin Jeanpierre6ed0f602023-03-01 17:22:54 -0800312 "@crate_index//:flagset",
Googler75c7ad02022-05-23 13:27:49 -0700313 "@crate_index//:itertools",
Michael VanBemmelf5cbdf42022-10-14 17:00:11 -0700314 "@crate_index//:once_cell",
Googler75c7ad02022-05-23 13:27:49 -0700315 "@crate_index//:proc-macro2",
316 "@crate_index//:quote",
317 "@crate_index//:serde",
318 "@crate_index//:serde_json",
Googler6c3de122022-03-28 11:40:41 +0000319 ],
320)
321
322rust_test(
323 name = "rs_ir_test",
Googler0611ea72022-05-04 07:03:07 -0700324 crate = ":ir",
Googler6c3de122022-03-28 11:40:41 +0000325)
326
327rust_library(
328 name = "ir_testing",
329 testonly = 1,
330 srcs = ["ir_testing.rs"],
331 deps = [
Googler0611ea72022-05-04 07:03:07 -0700332 ":ir",
Googler6c3de122022-03-28 11:40:41 +0000333 ":json_from_cc",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700334 "//common:arc_anyhow",
Googler0611ea72022-05-04 07:03:07 -0700335 "//common:ffi_types",
Devin Jeanpierre319bcac2023-03-14 17:49:08 -0700336 "@crate_index//:flagset",
Googler75c7ad02022-05-23 13:27:49 -0700337 "@crate_index//:itertools",
Devin Jeanpierre319bcac2023-03-14 17:49:08 -0700338 "@crate_index//:once_cell",
339 ],
340)
341
342rust_test(
343 name = "ir_testing_test",
344 crate = ":ir_testing",
345 deps = [
346 ":ir_matchers",
347 ":ir_testing",
348 "//common:rust_allocator_shims",
349 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000350 ],
351)
352
353cc_library(
354 name = "ir_from_cc",
355 srcs = ["ir_from_cc.cc"],
356 hdrs = ["ir_from_cc.h"],
357 deps = [
358 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700359 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000360 ":frontend_action",
Googler75c7ad02022-05-23 13:27:49 -0700361 "@absl//absl/container:flat_hash_map",
Devin Jeanpierre6ed0f602023-03-01 17:22:54 -0800362 "@absl//absl/container:flat_hash_set",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700363 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700364 "@absl//absl/status",
365 "@absl//absl/status:statusor",
366 "@absl//absl/strings",
367 "@absl//absl/types:span",
Googler75c7ad02022-05-23 13:27:49 -0700368 "@llvm-project//clang:frontend",
369 "@llvm-project//clang:tooling",
Googler6c3de122022-03-28 11:40:41 +0000370 ],
371)
372
373cc_library(
374 name = "json_from_cc",
Lukasz Anforowicz121338a2022-11-01 14:28:32 -0700375 testonly = 1,
Googler6c3de122022-03-28 11:40:41 +0000376 srcs = ["json_from_cc.cc"],
377 deps = [
378 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700379 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000380 ":ir_from_cc",
Googler0611ea72022-05-04 07:03:07 -0700381 "//common:cc_ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700382 "@absl//absl/status:statusor",
383 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000384 ],
385)
386
387rust_test(
388 name = "ir_from_cc_test",
389 srcs = ["ir_from_cc_test.rs"],
390 deps = [
Googler0611ea72022-05-04 07:03:07 -0700391 ":ir",
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700392 ":ir_matchers",
Googler6c3de122022-03-28 11:40:41 +0000393 ":ir_testing",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700394 "//common:arc_anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700395 "//common:rust_allocator_shims",
Googler75c7ad02022-05-23 13:27:49 -0700396 "@crate_index//:itertools",
Marcel Hlopkod4678de2022-05-25 01:38:13 -0700397 "@crate_index//:proc-macro2",
Googler75c7ad02022-05-23 13:27:49 -0700398 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000399 ],
400)
401
402cc_library(
403 name = "src_code_gen",
404 srcs = ["src_code_gen.cc"],
405 hdrs = ["src_code_gen.h"],
406 deps = [
Googler0611ea72022-05-04 07:03:07 -0700407 ":cc_ir",
Googler69e09632023-03-03 12:18:35 -0800408 ":cmdline",
Googler6c3de122022-03-28 11:40:41 +0000409 ":src_code_gen_impl", # buildcleaner: keep
Googler0611ea72022-05-04 07:03:07 -0700410 "//common:cc_ffi_types",
Lukasz Anforowicz6e8b3a72022-06-02 09:10:01 -0700411 "//common:status_macros",
412 "@absl//absl/status:statusor",
Googler75c7ad02022-05-23 13:27:49 -0700413 "@absl//absl/strings",
Googler75c7ad02022-05-23 13:27:49 -0700414 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000415 ],
416)
417
418rust_library(
419 name = "src_code_gen_impl",
420 srcs = ["src_code_gen.rs"],
421 deps = [
Michael VanBemmelf5cbdf42022-10-14 17:00:11 -0700422 ":error_report",
Googler0611ea72022-05-04 07:03:07 -0700423 ":ir",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700424 "//common:arc_anyhow",
Lukasz Anforowiczccf55cb2022-10-05 06:00:57 -0700425 "//common:code_gen_utils",
Googler0611ea72022-05-04 07:03:07 -0700426 "//common:ffi_types",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700427 "//common:token_stream_printer",
Devin Jeanpierre6ed0f602023-03-01 17:22:54 -0800428 "@crate_index//:flagset",
Googler75c7ad02022-05-23 13:27:49 -0700429 "@crate_index//:itertools",
Michael VanBemmel5014b3e2022-08-03 16:27:34 -0700430 "@crate_index//:once_cell",
Googler75c7ad02022-05-23 13:27:49 -0700431 "@crate_index//:proc-macro2",
432 "@crate_index//:quote",
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700433 "@crate_index//:salsa",
Googler75c7ad02022-05-23 13:27:49 -0700434 "@crate_index//:serde_json",
435 "@crate_index//:syn",
Googler6c3de122022-03-28 11:40:41 +0000436 ],
437)
438
439rust_test(
440 name = "src_code_gen_impl_test",
441 crate = ":src_code_gen_impl",
Googler6c3de122022-03-28 11:40:41 +0000442 deps = [
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700443 ":ir_matchers",
Googler6c3de122022-03-28 11:40:41 +0000444 ":ir_testing",
Googler75c7ad02022-05-23 13:27:49 -0700445 "//common:rust_allocator_shims",
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700446 "//common:token_stream_matchers",
Googler75c7ad02022-05-23 13:27:49 -0700447 "@crate_index//:static_assertions",
Googler6c3de122022-03-28 11:40:41 +0000448 ],
449)
450
Michael VanBemmelf5cbdf42022-10-14 17:00:11 -0700451rust_library(
452 name = "error_report",
453 srcs = ["error_report.rs"],
454 deps = [
455 "//common:arc_anyhow",
456 "@crate_index//:anyhow",
457 "@crate_index//:serde",
458 "@crate_index//:serde_json",
459 ],
460)
461
462rust_test(
463 name = "error_report_test",
464 crate = ":error_report",
465 deps = [
466 "@crate_index//:serde_json",
467 ],
468)
469
Googler6c3de122022-03-28 11:40:41 +0000470cc_library(
Googler6c3de122022-03-28 11:40:41 +0000471 name = "ast_convert",
472 srcs = ["ast_convert.cc"],
473 hdrs = ["ast_convert.h"],
Michael Forsterc0bc9262022-04-25 00:30:26 -0700474 visibility = ["//rs_bindings_from_cc:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000475 deps = [
Googler0611ea72022-05-04 07:03:07 -0700476 ":cc_ir",
Googler75c7ad02022-05-23 13:27:49 -0700477 "@absl//absl/functional:function_ref",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700478 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700479 "@llvm-project//clang:ast",
480 "@llvm-project//clang:basic",
Googler6c3de122022-03-28 11:40:41 +0000481 ],
482)
483
484rust_library(
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700485 name = "ir_matchers",
486 testonly = 1,
487 srcs = ["ir_matchers.rs"],
Devin Jeanpierred6f3e2a2022-07-20 18:45:42 -0700488 visibility = ["//:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000489 deps = [
Googler0611ea72022-05-04 07:03:07 -0700490 ":ir",
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700491 ":ir_testing",
492 "//common:token_stream_matchers",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700493 "//common:token_stream_printer",
Lukasz Anforowiczdd44d982022-09-22 10:09:37 -0700494 "@crate_index//:anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700495 "@crate_index//:itertools",
496 "@crate_index//:proc-macro2",
497 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000498 ],
499)
500
501rust_test(
Lukasz Anforowiczefd635d2022-09-22 10:12:49 -0700502 name = "ir_matchers_test",
503 crate = ":ir_matchers",
Googler6c3de122022-03-28 11:40:41 +0000504 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700505 "//common:rust_allocator_shims",
Googler6c3de122022-03-28 11:40:41 +0000506 ],
507)
508
Googler6c3de122022-03-28 11:40:41 +0000509filegroup(
510 name = "builtin_headers",
511 srcs = [
Googler75c7ad02022-05-23 13:27:49 -0700512 "@llvm-project//clang:builtin_headers_filegroup",
513 "@llvm-project//compiler-rt:fuzzer_filegroup",
514 "@llvm-project//compiler-rt:sanitizer_filegroup",
Googler6c3de122022-03-28 11:40:41 +0000515 ],
516 visibility = ["//visibility:public"],
517)
518
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700519cc_library(
520 name = "cc_collect_instantiations",
521 srcs = ["collect_instantiations.cc"],
522 hdrs = ["collect_instantiations.h"],
523 deps = [
524 ":collect_instantiations",
525 "//common:cc_ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700526 "@absl//absl/status:statusor",
527 "@absl//absl/types:span",
528 "@llvm-project//llvm:Support",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700529 ],
530)
531
532cc_test(
533 name = "cc_collect_instantiations_test",
534 srcs = ["collect_instantiations_test.cc"],
535 deps = [
536 ":cc_collect_instantiations",
Googler75c7ad02022-05-23 13:27:49 -0700537 "//common:rust_allocator_shims",
Luca Versaric21d92f2022-05-25 00:56:30 -0700538 "//common:status_test_matchers",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700539 "//common:test_utils",
Luca Versaric21d92f2022-05-25 00:56:30 -0700540 "@com_google_googletest//:gtest_main",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700541 ],
542)
543
544rust_library(
545 name = "collect_instantiations",
546 srcs = ["collect_instantiations.rs"],
547 deps = [
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700548 "//common:arc_anyhow",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700549 "//common:ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700550 "@crate_index//:proc-macro2",
551 "@crate_index//:serde_json",
552 "@crate_index//:syn",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700553 ],
554)
555
556rust_test(
557 name = "collect_instantiations_test",
558 args = [
559 # To prevent tests from polluting the environment variables for each other.
560 "--test-threads",
561 "1",
562 ],
563 crate = ":collect_instantiations",
564 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700565 "@crate_index//:quote",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700566 ],
567)
Rosica Dejanovska8575a842022-09-01 02:05:30 -0700568
569cc_library(
570 name = "collect_namespaces",
571 srcs = ["collect_namespaces.cc"],
572 hdrs = ["collect_namespaces.h"],
573 visibility = ["//:__subpackages__"],
574 deps = [
Rosica Dejanovska5b2e8132022-09-20 02:11:51 -0700575 ":bazel_types",
Rosica Dejanovska8575a842022-09-01 02:05:30 -0700576 ":cc_ir",
577 "@absl//absl/container:btree",
578 "@absl//absl/container:flat_hash_map",
579 "@absl//absl/strings",
580 "@llvm-project//llvm:Support",
581 ],
582)
583
584cc_test(
585 name = "collect_namespaces_test",
586 srcs = ["collect_namespaces_test.cc"],
587 deps = [
588 ":cc_ir",
589 ":collect_namespaces",
590 ":ir_from_cc",
591 "@absl//absl/status",
592 "@absl//absl/status:statusor",
593 "@absl//absl/strings",
594 "@absl//absl/types:span",
595 "@com_google_googletest//:gtest_main",
596 ],
597)