blob: bfd0222bd894412960483ce9d9f1104cec434b0a [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)
20load(
21 "//rs_bindings_from_cc/bazel_support:toolchain_headers.bzl",
22 "bindings_for_toolchain_headers",
23)
24
25licenses(["notice"])
26
27with_cc_toolchain_flags(
28 name = "test_wrapper",
29 binary = ":rs_bindings_from_cc",
30 extra_args = [
31 "--rs_out=/tmp/rs_api.rs",
32 "--cc_out=/tmp/rs_api_impl.cc",
33 "--ir_out=/tmp/ir.json",
34 ],
35)
36
37rust_bindings_from_cc_binary(
38 name = "rs_bindings_from_cc",
39 binary = ":rs_bindings_from_cc_impl",
Googler75c7ad02022-05-23 13:27:49 -070040 visibility = ["//:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +000041)
42
43deps_for_bindings(
44 name = "deps_for_bindings",
45 deps_for_generated_cc_file = [
46 "//rs_bindings_from_cc/support:rs_api_impl_support",
47 ],
48 deps_for_generated_rs_file = [
49 # Required for struct layout assertions added to the generated
50 # Rust code.
Googler75c7ad02022-05-23 13:27:49 -070051 "@crate_index//:memoffset",
Googler6c3de122022-03-28 11:40:41 +000052 "//rs_bindings_from_cc/support:ctor",
Devin Jeanpierre27450132022-04-11 13:52:01 -070053 "//rs_bindings_from_cc/support:forward_declare",
Devin Jeanpierreb368e682022-05-03 02:23:44 -070054 "//rs_bindings_from_cc/support:oops",
Googler6c3de122022-03-28 11:40:41 +000055 # Required for `Copy` trait assertions added to the generated Rust
56 # code.
Googler75c7ad02022-05-23 13:27:49 -070057 "@crate_index//:static_assertions",
Googler6c3de122022-03-28 11:40:41 +000058 ],
Googler75c7ad02022-05-23 13:27:49 -070059 visibility = ["//:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +000060)
61
62cc_binary(
63 name = "rs_bindings_from_cc_impl",
64 srcs = ["rs_bindings_from_cc.cc"],
65 visibility = ["//visibility:public"],
66 deps = [
67 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -070068 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +000069 ":cmdline",
Rosica Dejanovskaabe406f2022-09-02 07:06:50 -070070 ":collect_namespaces",
Marcel Hlopko3f771a92022-05-09 06:09:59 -070071 ":generate_bindings_and_metadata",
Marco Poletti6669c692022-04-07 14:42:56 -070072 "//common:file_io",
Googler75c7ad02022-05-23 13:27:49 -070073 "//common:rust_allocator_shims",
Marco Polettic61bcc42022-04-08 12:54:30 -070074 "//common:status_macros",
Googler75c7ad02022-05-23 13:27:49 -070075 "@absl//absl/container:flat_hash_map",
76 "@absl//absl/flags:parse",
77 "@absl//absl/status",
78 "@absl//absl/status:statusor",
79 "@absl//absl/strings",
Marcel Hlopkoc31d95a2022-09-09 05:17:32 -070080 "@llvm-project//clang:format",
Googler75c7ad02022-05-23 13:27:49 -070081 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +000082 ],
83)
84
85cc_library(
Marcel Hlopko3f771a92022-05-09 06:09:59 -070086 name = "generate_bindings_and_metadata",
87 srcs = ["generate_bindings_and_metadata.cc"],
88 hdrs = ["generate_bindings_and_metadata.h"],
89 deps = [
Marcel Hlopko2ee23912022-05-09 06:13:55 -070090 ":cc_collect_instantiations",
Marcel Hlopko3f771a92022-05-09 06:09:59 -070091 ":cc_ir",
92 ":cmdline",
Rosica Dejanovskaabe406f2022-09-02 07:06:50 -070093 ":collect_namespaces",
Marcel Hlopko3f771a92022-05-09 06:09:59 -070094 ":ir_from_cc",
95 ":src_code_gen",
96 "//common:status_macros",
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"],
105 deps = [
Rosica Dejanovskaaf348cc2022-08-30 05:54:16 -0700106 ":cc_ir",
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700107 ":cmdline",
Rosica Dejanovskaabe406f2022-09-02 07:06:50 -0700108 ":collect_namespaces",
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700109 ":generate_bindings_and_metadata",
Googler75c7ad02022-05-23 13:27:49 -0700110 "//common:rust_allocator_shims",
Marcel Hlopkoc31d95a2022-09-09 05:17:32 -0700111 "//common:status_macros",
Marcel Hlopko2ee23912022-05-09 06:13:55 -0700112 "//common:test_utils",
Marcel Hlopkoc31d95a2022-09-09 05:17:32 -0700113 "@absl//absl/status",
114 "@absl//absl/status:statusor",
Googler75c7ad02022-05-23 13:27:49 -0700115 "@absl//absl/strings",
Marcel Hlopkoc31d95a2022-09-09 05:17:32 -0700116 "@com_google_googletest//:gtest_main_no_heapcheck",
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700117 ],
118)
119
120cc_library(
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700121 name = "ast_util",
122 srcs = ["ast_util.cc"],
123 hdrs = ["ast_util.h"],
Googler75c7ad02022-05-23 13:27:49 -0700124 visibility = ["//:__subpackages__"],
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700125 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700126 "@llvm-project//clang:ast",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700127 ],
128)
129
130cc_library(
Googler6c3de122022-03-28 11:40:41 +0000131 name = "bazel_types",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700132 srcs = ["bazel_types.cc"],
Googler6c3de122022-03-28 11:40:41 +0000133 hdrs = ["bazel_types.h"],
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700134 deps = [
135 "//common:string_type",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700136 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700137 "@absl//absl/strings",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700138 ],
Googler6c3de122022-03-28 11:40:41 +0000139)
140
Lukasz Anforowicz8d1e4322022-06-08 07:56:06 -0700141cc_test(
142 name = "bazel_types_test",
143 srcs = ["bazel_types_test.cc"],
144 deps = [
145 ":bazel_types",
146 "@com_google_googletest//:gtest_main",
147 ],
148)
149
Googler6c3de122022-03-28 11:40:41 +0000150cc_library(
151 name = "cmdline",
152 srcs = ["cmdline.cc"],
153 hdrs = ["cmdline.h"],
154 deps = [
155 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700156 ":cc_ir",
Marco Polettic61bcc42022-04-08 12:54:30 -0700157 "//common:status_macros",
Googler75c7ad02022-05-23 13:27:49 -0700158 "@absl//absl/container:flat_hash_map",
159 "@absl//absl/flags:flag",
160 "@absl//absl/status:statusor",
161 "@absl//absl/strings",
162 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000163 ],
164)
165
166cc_test(
167 name = "cmdline_test",
168 srcs = ["cmdline_test.cc"],
169 deps = [
170 ":bazel_types",
171 ":cmdline",
Luca Versaric21d92f2022-05-25 00:56:30 -0700172 "//common:status_test_matchers",
173 "@com_google_googletest//:gtest_main",
Googler6c3de122022-03-28 11:40:41 +0000174 ],
175)
176
177cc_library(
Michael Forsterb3503e02022-04-25 00:24:14 -0700178 name = "decl_importer",
179 hdrs = ["decl_importer.h"],
Googler75c7ad02022-05-23 13:27:49 -0700180 visibility = ["//:__subpackages__"],
Michael Forsterb3503e02022-04-25 00:24:14 -0700181 deps = [
Googler0611ea72022-05-04 07:03:07 -0700182 "cc_ir",
Michael Forsterb3503e02022-04-25 00:24:14 -0700183 ":bazel_types",
184 "//lifetime_annotations",
Googler75c7ad02022-05-23 13:27:49 -0700185 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700186 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700187 "@absl//absl/status:statusor",
Michael Forsterb3503e02022-04-25 00:24:14 -0700188 ],
189)
190
191cc_library(
Googler6c3de122022-03-28 11:40:41 +0000192 name = "frontend_action",
193 srcs = ["frontend_action.cc"],
194 hdrs = ["frontend_action.h"],
195 deps = [
196 ":ast_consumer",
Michael Forster974bf152022-05-12 00:40:59 -0700197 ":decl_importer",
Googler75c7ad02022-05-23 13:27:49 -0700198 "@llvm-project//clang:ast",
199 "@llvm-project//clang:frontend",
Googler6c3de122022-03-28 11:40:41 +0000200 ],
201)
202
203cc_library(
204 name = "ast_consumer",
205 srcs = ["ast_consumer.cc"],
206 hdrs = ["ast_consumer.h"],
207 deps = [
Michael Forster974bf152022-05-12 00:40:59 -0700208 ":decl_importer",
Googler6c3de122022-03-28 11:40:41 +0000209 ":importer",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700210 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700211 "@llvm-project//clang:ast",
212 "@llvm-project//clang:frontend",
Googler6c3de122022-03-28 11:40:41 +0000213 ],
214)
215
216cc_library(
217 name = "importer",
218 srcs = ["importer.cc"],
219 hdrs = ["importer.h"],
220 deps = [
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700221 ":ast_util",
Googler6c3de122022-03-28 11:40:41 +0000222 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700223 ":cc_ir",
Michael Forsterb3503e02022-04-25 00:24:14 -0700224 ":decl_importer",
Marco Polettic61bcc42022-04-08 12:54:30 -0700225 "//common:status_macros",
Googler6c3de122022-03-28 11:40:41 +0000226 "//lifetime_annotations:type_lifetimes",
Michael Forsterb3503e02022-04-25 00:24:14 -0700227 "//rs_bindings_from_cc/importers:class_template",
Michael Forsterc0bc9262022-04-25 00:30:26 -0700228 "//rs_bindings_from_cc/importers:cxx_record",
Michael Forster4fa849d2022-04-25 00:32:59 -0700229 "//rs_bindings_from_cc/importers:enum",
Michael VanBemmel7a4d4c02022-07-27 13:21:47 -0700230 "//rs_bindings_from_cc/importers:friend",
Michael Forster7e4244a2022-04-25 00:39:01 -0700231 "//rs_bindings_from_cc/importers:function",
Michael Forster350d5312022-04-25 00:36:31 -0700232 "//rs_bindings_from_cc/importers:function_template",
Michael Forster284fb5a2022-04-25 00:41:14 -0700233 "//rs_bindings_from_cc/importers:namespace",
Michael Forsterc60df1e2022-04-25 00:55:44 -0700234 "//rs_bindings_from_cc/importers:typedef_name",
Googler75c7ad02022-05-23 13:27:49 -0700235 "@absl//absl/container:flat_hash_map",
236 "@absl//absl/container:flat_hash_set",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700237 "@absl//absl/log",
238 "@absl//absl/log:check",
239 "@absl//absl/log:die_if_null",
Googler75c7ad02022-05-23 13:27:49 -0700240 "@absl//absl/status",
241 "@absl//absl/status:statusor",
242 "@absl//absl/strings",
243 "@absl//absl/strings:cord",
244 "@llvm-project//clang:ast",
245 "@llvm-project//clang:basic",
246 "@llvm-project//clang:sema",
247 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000248 ],
249)
250
251cc_test(
252 name = "importer_test",
253 srcs = ["importer_test.cc"],
254 deps = [
255 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700256 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000257 ":ir_from_cc",
Luca Versaric21d92f2022-05-25 00:56:30 -0700258 "//common:status_test_matchers",
259 "//common:test_utils",
Googler75c7ad02022-05-23 13:27:49 -0700260 "@absl//absl/status",
261 "@absl//absl/status:statusor",
262 "@absl//absl/strings",
263 "@absl//absl/types:span",
Luca Versaric21d92f2022-05-25 00:56:30 -0700264 "@com_google_googletest//:gtest_main",
Googler6c3de122022-03-28 11:40:41 +0000265 ],
266)
267
268cc_library(
Googler0611ea72022-05-04 07:03:07 -0700269 name = "cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000270 srcs = ["ir.cc"],
271 hdrs = ["ir.h"],
Marcel Hlopkoc31d95a2022-09-09 05:17:32 -0700272 visibility = ["//rs_bindings_from_cc:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000273 deps = [
274 ":bazel_types",
Marco Polettic61bcc42022-04-08 12:54:30 -0700275 "//common:strong_int",
Googler75c7ad02022-05-23 13:27:49 -0700276 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700277 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700278 "@absl//absl/status:statusor",
279 "@absl//absl/strings",
280 "@llvm-project//clang:ast",
281 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000282 ],
283)
284
285rust_library(
Googler0611ea72022-05-04 07:03:07 -0700286 name = "ir",
Googler6c3de122022-03-28 11:40:41 +0000287 srcs = ["ir.rs"],
Googler6c3de122022-03-28 11:40:41 +0000288 deps = [
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700289 "//common:arc_anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700290 "@crate_index//:itertools",
291 "@crate_index//:proc-macro2",
292 "@crate_index//:quote",
293 "@crate_index//:serde",
294 "@crate_index//:serde_json",
Devin Jeanpierrea68fdbc2022-05-27 04:16:36 -0700295 "@crate_index//:syn",
Googler6c3de122022-03-28 11:40:41 +0000296 ],
297)
298
299rust_test(
300 name = "rs_ir_test",
Googler0611ea72022-05-04 07:03:07 -0700301 crate = ":ir",
Devin Jeanpierre1583cd92022-05-27 04:38:38 -0700302 deps = [
303 ":token_stream_matchers",
304 ],
Googler6c3de122022-03-28 11:40:41 +0000305)
306
307rust_library(
308 name = "ir_testing",
309 testonly = 1,
310 srcs = ["ir_testing.rs"],
311 deps = [
Googler0611ea72022-05-04 07:03:07 -0700312 ":ir",
Googler6c3de122022-03-28 11:40:41 +0000313 ":json_from_cc",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700314 "//common:arc_anyhow",
Googler0611ea72022-05-04 07:03:07 -0700315 "//common:ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700316 "@crate_index//:itertools",
Googler6c3de122022-03-28 11:40:41 +0000317 ],
318)
319
320cc_library(
321 name = "ir_from_cc",
322 srcs = ["ir_from_cc.cc"],
323 hdrs = ["ir_from_cc.h"],
324 deps = [
325 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700326 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000327 ":frontend_action",
Googler75c7ad02022-05-23 13:27:49 -0700328 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700329 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700330 "@absl//absl/status",
331 "@absl//absl/status:statusor",
332 "@absl//absl/strings",
333 "@absl//absl/types:span",
Googler75c7ad02022-05-23 13:27:49 -0700334 "@llvm-project//clang:frontend",
335 "@llvm-project//clang:tooling",
Googler6c3de122022-03-28 11:40:41 +0000336 ],
337)
338
339cc_library(
340 name = "json_from_cc",
341 srcs = ["json_from_cc.cc"],
342 deps = [
343 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700344 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000345 ":ir_from_cc",
Googler0611ea72022-05-04 07:03:07 -0700346 "//common:cc_ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700347 "@absl//absl/status:statusor",
348 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000349 ],
350)
351
352rust_test(
353 name = "ir_from_cc_test",
354 srcs = ["ir_from_cc_test.rs"],
355 deps = [
Googler0611ea72022-05-04 07:03:07 -0700356 ":ir",
Googler6c3de122022-03-28 11:40:41 +0000357 ":ir_testing",
Googler6c3de122022-03-28 11:40:41 +0000358 ":token_stream_matchers",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700359 "//common:arc_anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700360 "//common:rust_allocator_shims",
Googler75c7ad02022-05-23 13:27:49 -0700361 "@crate_index//:itertools",
Marcel Hlopkod4678de2022-05-25 01:38:13 -0700362 "@crate_index//:proc-macro2",
Googler75c7ad02022-05-23 13:27:49 -0700363 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000364 ],
365)
366
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700367rust_library(
368 name = "salsa_utils",
369 srcs = ["salsa_utils.rs"],
Lukasz Anforowicz4e2e0162022-09-01 07:07:32 -0700370 deps = [
371 "@crate_index//:proc-macro2",
372 "@crate_index//:quote",
373 ],
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700374)
375
Googler6c3de122022-03-28 11:40:41 +0000376cc_library(
377 name = "src_code_gen",
378 srcs = ["src_code_gen.cc"],
379 hdrs = ["src_code_gen.h"],
380 deps = [
Googler0611ea72022-05-04 07:03:07 -0700381 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000382 ":src_code_gen_impl", # buildcleaner: keep
Googler0611ea72022-05-04 07:03:07 -0700383 "//common:cc_ffi_types",
Lukasz Anforowicz6e8b3a72022-06-02 09:10:01 -0700384 "//common:status_macros",
385 "@absl//absl/status:statusor",
Googler75c7ad02022-05-23 13:27:49 -0700386 "@absl//absl/strings",
387 "@llvm-project//clang:format",
388 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000389 ],
390)
391
392rust_library(
393 name = "src_code_gen_impl",
394 srcs = ["src_code_gen.rs"],
395 deps = [
Googler0611ea72022-05-04 07:03:07 -0700396 ":ir",
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700397 ":salsa_utils",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700398 "//common:arc_anyhow",
Googler0611ea72022-05-04 07:03:07 -0700399 "//common:ffi_types",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700400 "//common:token_stream_printer",
Googler75c7ad02022-05-23 13:27:49 -0700401 "@crate_index//:itertools",
Michael VanBemmel5014b3e2022-08-03 16:27:34 -0700402 "@crate_index//:once_cell",
Googler75c7ad02022-05-23 13:27:49 -0700403 "@crate_index//:proc-macro2",
404 "@crate_index//:quote",
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700405 "@crate_index//:salsa",
Googler75c7ad02022-05-23 13:27:49 -0700406 "@crate_index//:serde_json",
407 "@crate_index//:syn",
Googler6c3de122022-03-28 11:40:41 +0000408 ],
409)
410
411rust_test(
412 name = "src_code_gen_impl_test",
413 crate = ":src_code_gen_impl",
414 data = [
Googler6c3de122022-03-28 11:40:41 +0000415 ],
416 deps = [
417 ":ir_testing",
418 ":token_stream_matchers",
Googler75c7ad02022-05-23 13:27:49 -0700419 "//common:rust_allocator_shims",
420 "@crate_index//:static_assertions",
Googler6c3de122022-03-28 11:40:41 +0000421 ],
422)
423
424cc_library(
Googler6c3de122022-03-28 11:40:41 +0000425 name = "ast_convert",
426 srcs = ["ast_convert.cc"],
427 hdrs = ["ast_convert.h"],
Michael Forsterc0bc9262022-04-25 00:30:26 -0700428 visibility = ["//rs_bindings_from_cc:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000429 deps = [
Googler0611ea72022-05-04 07:03:07 -0700430 ":cc_ir",
Googler75c7ad02022-05-23 13:27:49 -0700431 "@absl//absl/functional:function_ref",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700432 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700433 "@llvm-project//clang:ast",
434 "@llvm-project//clang:basic",
Googler6c3de122022-03-28 11:40:41 +0000435 ],
436)
437
438rust_library(
Googler6c3de122022-03-28 11:40:41 +0000439 name = "token_stream_matchers",
440 srcs = ["token_stream_matchers.rs"],
Devin Jeanpierred6f3e2a2022-07-20 18:45:42 -0700441 visibility = ["//:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000442 deps = [
Googler0611ea72022-05-04 07:03:07 -0700443 ":ir",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700444 "//common:arc_anyhow",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700445 "//common:token_stream_printer",
Googler75c7ad02022-05-23 13:27:49 -0700446 "@crate_index//:itertools",
447 "@crate_index//:proc-macro2",
448 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000449 ],
450)
451
452rust_test(
453 name = "token_stream_matchers_test",
454 crate = ":token_stream_matchers",
455 data = [
Googler6c3de122022-03-28 11:40:41 +0000456 ],
457 deps = [
458 ":ir_testing",
Googler75c7ad02022-05-23 13:27:49 -0700459 "//common:rust_allocator_shims",
Googler6c3de122022-03-28 11:40:41 +0000460 ],
461)
462
Lukasz Anforowicz992595c2022-09-09 11:49:59 -0700463LIBCXX_HEADERS = [
464 "atomic",
465 "cassert",
466 "cctype",
467 "cerrno",
468 "cfenv",
469 "cfloat",
470 "chrono",
471 "cinttypes",
472 "climits",
473 "cmath",
474 "condition_variable",
475 "csetjmp",
476 "csignal",
477 "cstdarg",
478 "cstddef",
479 "cstdint",
480 "cstdio",
481 "cstdlib",
482 "ctime",
483 "cuchar",
484 "cwchar",
485 "cwctype",
486 "initializer_list",
487 "limits",
488 "memory",
489 "mutex",
490 "new",
491 "numeric",
492 "ratio",
493 "scoped_allocator",
494 "string_view",
495 "tuple",
496 "type_traits",
497]
Googler6c3de122022-03-28 11:40:41 +0000498
Marcel Hlopko457bdef2022-05-18 06:01:49 -0700499LIBC_HEADERS = []
500
Googler6c3de122022-03-28 11:40:41 +0000501config_setting(
502 name = "llvm_unstable",
503 values = {
Googler75c7ad02022-05-23 13:27:49 -0700504 "crosstool_top": "//nowhere/llvm:everything",
Googler6c3de122022-03-28 11:40:41 +0000505 },
506)
507
508filegroup(
509 name = "toolchain_headers",
510 srcs = select({
Googler75c7ad02022-05-23 13:27:49 -0700511 ":llvm_unstable": ["//nowhere/llvm:cc-std-headers"],
512 "//conditions:default": ["//nowhere/llvm:cc-std-headers"],
Googler6c3de122022-03-28 11:40:41 +0000513 }) + [
514 "//third_party/grte/v5_x86/release/usr/grte/v5:compile",
515 ],
Googler9637e852022-06-17 01:13:21 -0700516 visibility = ["//visibility:private"],
Googler6c3de122022-03-28 11:40:41 +0000517)
518
519filegroup(
520 name = "builtin_headers",
521 srcs = [
Googler75c7ad02022-05-23 13:27:49 -0700522 "@llvm-project//clang:builtin_headers_filegroup",
523 "@llvm-project//compiler-rt:fuzzer_filegroup",
524 "@llvm-project//compiler-rt:sanitizer_filegroup",
Googler6c3de122022-03-28 11:40:41 +0000525 ],
526 visibility = ["//visibility:public"],
527)
528
529bindings_for_toolchain_headers(
530 name = "cc_std",
531 hdrs = ":toolchain_headers",
Marcel Hlopko457bdef2022-05-18 06:01:49 -0700532 public_libc_hdrs = LIBC_HEADERS,
533 public_libcxx_hdrs = LIBCXX_HEADERS,
Googler6c3de122022-03-28 11:40:41 +0000534 visibility = ["//visibility:public"],
535)
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700536
537cc_library(
538 name = "cc_collect_instantiations",
539 srcs = ["collect_instantiations.cc"],
540 hdrs = ["collect_instantiations.h"],
541 deps = [
542 ":collect_instantiations",
543 "//common:cc_ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700544 "@absl//absl/status:statusor",
545 "@absl//absl/types:span",
546 "@llvm-project//llvm:Support",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700547 ],
548)
549
550cc_test(
551 name = "cc_collect_instantiations_test",
552 srcs = ["collect_instantiations_test.cc"],
553 deps = [
554 ":cc_collect_instantiations",
Googler75c7ad02022-05-23 13:27:49 -0700555 "//common:rust_allocator_shims",
Luca Versaric21d92f2022-05-25 00:56:30 -0700556 "//common:status_test_matchers",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700557 "//common:test_utils",
Luca Versaric21d92f2022-05-25 00:56:30 -0700558 "@com_google_googletest//:gtest_main",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700559 ],
560)
561
562rust_library(
563 name = "collect_instantiations",
564 srcs = ["collect_instantiations.rs"],
565 deps = [
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700566 "//common:arc_anyhow",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700567 "//common:ffi_types",
568 "//common:token_stream_printer",
Googler75c7ad02022-05-23 13:27:49 -0700569 "@crate_index//:proc-macro2",
570 "@crate_index//:serde_json",
571 "@crate_index//:syn",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700572 ],
573)
574
575rust_test(
576 name = "collect_instantiations_test",
577 args = [
578 # To prevent tests from polluting the environment variables for each other.
579 "--test-threads",
580 "1",
581 ],
582 crate = ":collect_instantiations",
583 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700584 "@crate_index//:quote",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700585 ],
586)
Rosica Dejanovska8575a842022-09-01 02:05:30 -0700587
588cc_library(
589 name = "collect_namespaces",
590 srcs = ["collect_namespaces.cc"],
591 hdrs = ["collect_namespaces.h"],
592 visibility = ["//:__subpackages__"],
593 deps = [
594 ":cc_ir",
595 "@absl//absl/container:btree",
596 "@absl//absl/container:flat_hash_map",
597 "@absl//absl/strings",
598 "@llvm-project//llvm:Support",
599 ],
600)
601
602cc_test(
603 name = "collect_namespaces_test",
604 srcs = ["collect_namespaces_test.cc"],
605 deps = [
606 ":cc_ir",
607 ":collect_namespaces",
608 ":ir_from_cc",
609 "@absl//absl/status",
610 "@absl//absl/status:statusor",
611 "@absl//absl/strings",
612 "@absl//absl/types:span",
613 "@com_google_googletest//:gtest_main",
614 ],
615)