blob: f6c2490f577c6ef9781f1d2f9f19db6dbab56600 [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",
Marcel Hlopko3f771a92022-05-09 06:09:59 -070070 ":generate_bindings_and_metadata",
Marco Poletti6669c692022-04-07 14:42:56 -070071 "//common:file_io",
Googler75c7ad02022-05-23 13:27:49 -070072 "//common:rust_allocator_shims",
Marco Polettic61bcc42022-04-08 12:54:30 -070073 "//common:status_macros",
Googler75c7ad02022-05-23 13:27:49 -070074 "@absl//absl/container:flat_hash_map",
75 "@absl//absl/flags:parse",
76 "@absl//absl/status",
77 "@absl//absl/status:statusor",
78 "@absl//absl/strings",
79 "@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",
91 ":ir_from_cc",
92 ":src_code_gen",
93 "//common:status_macros",
Lukasz Anforowicz6e8b3a72022-06-02 09:10:01 -070094 "@absl//absl/status:statusor",
Marcel Hlopko3f771a92022-05-09 06:09:59 -070095 ],
96)
97
98cc_test(
99 name = "generate_bindings_and_metadata_test",
100 srcs = ["generate_bindings_and_metadata_test.cc"],
101 deps = [
Rosica Dejanovskaaf348cc2022-08-30 05:54:16 -0700102 ":cc_ir",
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700103 ":cmdline",
104 ":generate_bindings_and_metadata",
Googler75c7ad02022-05-23 13:27:49 -0700105 "//common:rust_allocator_shims",
Marcel Hlopko2ee23912022-05-09 06:13:55 -0700106 "//common:test_utils",
Googler75c7ad02022-05-23 13:27:49 -0700107 "@absl//absl/strings",
Luca Versaric21d92f2022-05-25 00:56:30 -0700108 "@com_google_googletest//:gtest_main",
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700109 ],
110)
111
112cc_library(
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700113 name = "ast_util",
114 srcs = ["ast_util.cc"],
115 hdrs = ["ast_util.h"],
Googler75c7ad02022-05-23 13:27:49 -0700116 visibility = ["//:__subpackages__"],
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700117 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700118 "@llvm-project//clang:ast",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700119 ],
120)
121
122cc_library(
Googler6c3de122022-03-28 11:40:41 +0000123 name = "bazel_types",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700124 srcs = ["bazel_types.cc"],
Googler6c3de122022-03-28 11:40:41 +0000125 hdrs = ["bazel_types.h"],
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700126 deps = [
127 "//common:string_type",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700128 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700129 "@absl//absl/strings",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700130 ],
Googler6c3de122022-03-28 11:40:41 +0000131)
132
Lukasz Anforowicz8d1e4322022-06-08 07:56:06 -0700133cc_test(
134 name = "bazel_types_test",
135 srcs = ["bazel_types_test.cc"],
136 deps = [
137 ":bazel_types",
138 "@com_google_googletest//:gtest_main",
139 ],
140)
141
Googler6c3de122022-03-28 11:40:41 +0000142cc_library(
143 name = "cmdline",
144 srcs = ["cmdline.cc"],
145 hdrs = ["cmdline.h"],
146 deps = [
147 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700148 ":cc_ir",
Marco Polettic61bcc42022-04-08 12:54:30 -0700149 "//common:status_macros",
Googler75c7ad02022-05-23 13:27:49 -0700150 "@absl//absl/container:flat_hash_map",
151 "@absl//absl/flags:flag",
152 "@absl//absl/status:statusor",
153 "@absl//absl/strings",
154 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000155 ],
156)
157
158cc_test(
159 name = "cmdline_test",
160 srcs = ["cmdline_test.cc"],
161 deps = [
162 ":bazel_types",
163 ":cmdline",
Luca Versaric21d92f2022-05-25 00:56:30 -0700164 "//common:status_test_matchers",
165 "@com_google_googletest//:gtest_main",
Googler6c3de122022-03-28 11:40:41 +0000166 ],
167)
168
169cc_library(
Michael Forsterb3503e02022-04-25 00:24:14 -0700170 name = "decl_importer",
171 hdrs = ["decl_importer.h"],
Googler75c7ad02022-05-23 13:27:49 -0700172 visibility = ["//:__subpackages__"],
Michael Forsterb3503e02022-04-25 00:24:14 -0700173 deps = [
Googler0611ea72022-05-04 07:03:07 -0700174 "cc_ir",
Michael Forsterb3503e02022-04-25 00:24:14 -0700175 ":bazel_types",
176 "//lifetime_annotations",
Googler75c7ad02022-05-23 13:27:49 -0700177 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700178 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700179 "@absl//absl/status:statusor",
Michael Forsterb3503e02022-04-25 00:24:14 -0700180 ],
181)
182
183cc_library(
Googler6c3de122022-03-28 11:40:41 +0000184 name = "frontend_action",
185 srcs = ["frontend_action.cc"],
186 hdrs = ["frontend_action.h"],
187 deps = [
188 ":ast_consumer",
Michael Forster974bf152022-05-12 00:40:59 -0700189 ":decl_importer",
Googler75c7ad02022-05-23 13:27:49 -0700190 "@llvm-project//clang:ast",
191 "@llvm-project//clang:frontend",
Googler6c3de122022-03-28 11:40:41 +0000192 ],
193)
194
195cc_library(
196 name = "ast_consumer",
197 srcs = ["ast_consumer.cc"],
198 hdrs = ["ast_consumer.h"],
199 deps = [
Michael Forster974bf152022-05-12 00:40:59 -0700200 ":decl_importer",
Googler6c3de122022-03-28 11:40:41 +0000201 ":importer",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700202 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700203 "@llvm-project//clang:ast",
204 "@llvm-project//clang:frontend",
Googler6c3de122022-03-28 11:40:41 +0000205 ],
206)
207
208cc_library(
209 name = "importer",
210 srcs = ["importer.cc"],
211 hdrs = ["importer.h"],
212 deps = [
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700213 ":ast_util",
Googler6c3de122022-03-28 11:40:41 +0000214 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700215 ":cc_ir",
Michael Forsterb3503e02022-04-25 00:24:14 -0700216 ":decl_importer",
Marco Polettic61bcc42022-04-08 12:54:30 -0700217 "//common:status_macros",
Googler6c3de122022-03-28 11:40:41 +0000218 "//lifetime_annotations:type_lifetimes",
Michael Forsterb3503e02022-04-25 00:24:14 -0700219 "//rs_bindings_from_cc/importers:class_template",
Michael Forsterc0bc9262022-04-25 00:30:26 -0700220 "//rs_bindings_from_cc/importers:cxx_record",
Michael Forster4fa849d2022-04-25 00:32:59 -0700221 "//rs_bindings_from_cc/importers:enum",
Michael VanBemmel7a4d4c02022-07-27 13:21:47 -0700222 "//rs_bindings_from_cc/importers:friend",
Michael Forster7e4244a2022-04-25 00:39:01 -0700223 "//rs_bindings_from_cc/importers:function",
Michael Forster350d5312022-04-25 00:36:31 -0700224 "//rs_bindings_from_cc/importers:function_template",
Michael Forster284fb5a2022-04-25 00:41:14 -0700225 "//rs_bindings_from_cc/importers:namespace",
Michael Forsterc60df1e2022-04-25 00:55:44 -0700226 "//rs_bindings_from_cc/importers:typedef_name",
Googler75c7ad02022-05-23 13:27:49 -0700227 "@absl//absl/container:flat_hash_map",
228 "@absl//absl/container:flat_hash_set",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700229 "@absl//absl/log",
230 "@absl//absl/log:check",
231 "@absl//absl/log:die_if_null",
Googler75c7ad02022-05-23 13:27:49 -0700232 "@absl//absl/status",
233 "@absl//absl/status:statusor",
234 "@absl//absl/strings",
235 "@absl//absl/strings:cord",
236 "@llvm-project//clang:ast",
237 "@llvm-project//clang:basic",
238 "@llvm-project//clang:sema",
239 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000240 ],
241)
242
243cc_test(
244 name = "importer_test",
245 srcs = ["importer_test.cc"],
246 deps = [
247 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700248 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000249 ":ir_from_cc",
Luca Versaric21d92f2022-05-25 00:56:30 -0700250 "//common:status_test_matchers",
251 "//common:test_utils",
Googler75c7ad02022-05-23 13:27:49 -0700252 "@absl//absl/status",
253 "@absl//absl/status:statusor",
254 "@absl//absl/strings",
255 "@absl//absl/types:span",
Luca Versaric21d92f2022-05-25 00:56:30 -0700256 "@com_google_googletest//:gtest_main",
Googler6c3de122022-03-28 11:40:41 +0000257 ],
258)
259
260cc_library(
Googler0611ea72022-05-04 07:03:07 -0700261 name = "cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000262 srcs = ["ir.cc"],
263 hdrs = ["ir.h"],
Googler6c3de122022-03-28 11:40:41 +0000264 deps = [
265 ":bazel_types",
Marco Polettic61bcc42022-04-08 12:54:30 -0700266 "//common:strong_int",
Googler75c7ad02022-05-23 13:27:49 -0700267 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700268 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700269 "@absl//absl/status:statusor",
270 "@absl//absl/strings",
271 "@llvm-project//clang:ast",
272 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000273 ],
274)
275
276rust_library(
Googler0611ea72022-05-04 07:03:07 -0700277 name = "ir",
Googler6c3de122022-03-28 11:40:41 +0000278 srcs = ["ir.rs"],
Googler6c3de122022-03-28 11:40:41 +0000279 deps = [
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700280 "//common:arc_anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700281 "@crate_index//:itertools",
282 "@crate_index//:proc-macro2",
283 "@crate_index//:quote",
284 "@crate_index//:serde",
285 "@crate_index//:serde_json",
Devin Jeanpierrea68fdbc2022-05-27 04:16:36 -0700286 "@crate_index//:syn",
Googler6c3de122022-03-28 11:40:41 +0000287 ],
288)
289
290rust_test(
291 name = "rs_ir_test",
Googler0611ea72022-05-04 07:03:07 -0700292 crate = ":ir",
Devin Jeanpierre1583cd92022-05-27 04:38:38 -0700293 deps = [
294 ":token_stream_matchers",
295 ],
Googler6c3de122022-03-28 11:40:41 +0000296)
297
298rust_library(
299 name = "ir_testing",
300 testonly = 1,
301 srcs = ["ir_testing.rs"],
302 deps = [
Googler0611ea72022-05-04 07:03:07 -0700303 ":ir",
Googler6c3de122022-03-28 11:40:41 +0000304 ":json_from_cc",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700305 "//common:arc_anyhow",
Googler0611ea72022-05-04 07:03:07 -0700306 "//common:ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700307 "@crate_index//:itertools",
Googler6c3de122022-03-28 11:40:41 +0000308 ],
309)
310
311cc_library(
312 name = "ir_from_cc",
313 srcs = ["ir_from_cc.cc"],
314 hdrs = ["ir_from_cc.h"],
315 deps = [
316 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700317 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000318 ":frontend_action",
Googler75c7ad02022-05-23 13:27:49 -0700319 "@absl//absl/container:flat_hash_map",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700320 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700321 "@absl//absl/status",
322 "@absl//absl/status:statusor",
323 "@absl//absl/strings",
324 "@absl//absl/types:span",
Googler75c7ad02022-05-23 13:27:49 -0700325 "@llvm-project//clang:frontend",
326 "@llvm-project//clang:tooling",
Googler6c3de122022-03-28 11:40:41 +0000327 ],
328)
329
330cc_library(
331 name = "json_from_cc",
332 srcs = ["json_from_cc.cc"],
333 deps = [
334 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700335 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000336 ":ir_from_cc",
Googler0611ea72022-05-04 07:03:07 -0700337 "//common:cc_ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700338 "@absl//absl/status:statusor",
339 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000340 ],
341)
342
343rust_test(
344 name = "ir_from_cc_test",
345 srcs = ["ir_from_cc_test.rs"],
346 deps = [
Googler0611ea72022-05-04 07:03:07 -0700347 ":ir",
Googler6c3de122022-03-28 11:40:41 +0000348 ":ir_testing",
Googler6c3de122022-03-28 11:40:41 +0000349 ":token_stream_matchers",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700350 "//common:arc_anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700351 "//common:rust_allocator_shims",
Googler75c7ad02022-05-23 13:27:49 -0700352 "@crate_index//:itertools",
Marcel Hlopkod4678de2022-05-25 01:38:13 -0700353 "@crate_index//:proc-macro2",
Googler75c7ad02022-05-23 13:27:49 -0700354 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000355 ],
356)
357
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700358rust_library(
359 name = "salsa_utils",
360 srcs = ["salsa_utils.rs"],
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700361)
362
Googler6c3de122022-03-28 11:40:41 +0000363cc_library(
364 name = "src_code_gen",
365 srcs = ["src_code_gen.cc"],
366 hdrs = ["src_code_gen.h"],
367 deps = [
Googler0611ea72022-05-04 07:03:07 -0700368 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000369 ":src_code_gen_impl", # buildcleaner: keep
Googler0611ea72022-05-04 07:03:07 -0700370 "//common:cc_ffi_types",
Lukasz Anforowicz6e8b3a72022-06-02 09:10:01 -0700371 "//common:status_macros",
372 "@absl//absl/status:statusor",
Googler75c7ad02022-05-23 13:27:49 -0700373 "@absl//absl/strings",
374 "@llvm-project//clang:format",
375 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000376 ],
377)
378
379rust_library(
380 name = "src_code_gen_impl",
381 srcs = ["src_code_gen.rs"],
382 deps = [
Googler0611ea72022-05-04 07:03:07 -0700383 ":ir",
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700384 ":salsa_utils",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700385 "//common:arc_anyhow",
Googler0611ea72022-05-04 07:03:07 -0700386 "//common:ffi_types",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700387 "//common:token_stream_printer",
Googler75c7ad02022-05-23 13:27:49 -0700388 "@crate_index//:itertools",
Michael VanBemmel5014b3e2022-08-03 16:27:34 -0700389 "@crate_index//:once_cell",
Googler75c7ad02022-05-23 13:27:49 -0700390 "@crate_index//:proc-macro2",
391 "@crate_index//:quote",
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700392 "@crate_index//:salsa",
Googler75c7ad02022-05-23 13:27:49 -0700393 "@crate_index//:serde_json",
394 "@crate_index//:syn",
Googler6c3de122022-03-28 11:40:41 +0000395 ],
396)
397
398rust_test(
399 name = "src_code_gen_impl_test",
400 crate = ":src_code_gen_impl",
401 data = [
Googler6c3de122022-03-28 11:40:41 +0000402 ],
403 deps = [
404 ":ir_testing",
405 ":token_stream_matchers",
Googler75c7ad02022-05-23 13:27:49 -0700406 "//common:rust_allocator_shims",
407 "@crate_index//:static_assertions",
Googler6c3de122022-03-28 11:40:41 +0000408 ],
409)
410
411cc_library(
Googler6c3de122022-03-28 11:40:41 +0000412 name = "ast_convert",
413 srcs = ["ast_convert.cc"],
414 hdrs = ["ast_convert.h"],
Michael Forsterc0bc9262022-04-25 00:30:26 -0700415 visibility = ["//rs_bindings_from_cc:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000416 deps = [
Googler0611ea72022-05-04 07:03:07 -0700417 ":cc_ir",
Googler75c7ad02022-05-23 13:27:49 -0700418 "@absl//absl/functional:function_ref",
Lukasz Anforowicz2c34cae2022-08-26 07:19:20 -0700419 "@absl//absl/log:check",
Googler75c7ad02022-05-23 13:27:49 -0700420 "@llvm-project//clang:ast",
421 "@llvm-project//clang:basic",
Googler6c3de122022-03-28 11:40:41 +0000422 ],
423)
424
425rust_library(
Googler6c3de122022-03-28 11:40:41 +0000426 name = "token_stream_matchers",
427 srcs = ["token_stream_matchers.rs"],
Devin Jeanpierred6f3e2a2022-07-20 18:45:42 -0700428 visibility = ["//:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000429 deps = [
Googler0611ea72022-05-04 07:03:07 -0700430 ":ir",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700431 "//common:arc_anyhow",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700432 "//common:token_stream_printer",
Googler75c7ad02022-05-23 13:27:49 -0700433 "@crate_index//:itertools",
434 "@crate_index//:proc-macro2",
435 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000436 ],
437)
438
439rust_test(
440 name = "token_stream_matchers_test",
441 crate = ":token_stream_matchers",
442 data = [
Googler6c3de122022-03-28 11:40:41 +0000443 ],
444 deps = [
445 ":ir_testing",
Googler75c7ad02022-05-23 13:27:49 -0700446 "//common:rust_allocator_shims",
Googler6c3de122022-03-28 11:40:41 +0000447 ],
448)
449
Rosica Dejanovskaa8aea812022-08-24 04:54:59 -0700450LIBCXX_HEADERS = ["ctime"]
Googler6c3de122022-03-28 11:40:41 +0000451
Marcel Hlopko457bdef2022-05-18 06:01:49 -0700452LIBC_HEADERS = []
453
Googler6c3de122022-03-28 11:40:41 +0000454config_setting(
455 name = "llvm_unstable",
456 values = {
Googler75c7ad02022-05-23 13:27:49 -0700457 "crosstool_top": "//nowhere/llvm:everything",
Googler6c3de122022-03-28 11:40:41 +0000458 },
459)
460
461filegroup(
462 name = "toolchain_headers",
463 srcs = select({
Googler75c7ad02022-05-23 13:27:49 -0700464 ":llvm_unstable": ["//nowhere/llvm:cc-std-headers"],
465 "//conditions:default": ["//nowhere/llvm:cc-std-headers"],
Googler6c3de122022-03-28 11:40:41 +0000466 }) + [
467 "//third_party/grte/v5_x86/release/usr/grte/v5:compile",
468 ],
Googler9637e852022-06-17 01:13:21 -0700469 visibility = ["//visibility:private"],
Googler6c3de122022-03-28 11:40:41 +0000470)
471
472filegroup(
473 name = "builtin_headers",
474 srcs = [
Googler75c7ad02022-05-23 13:27:49 -0700475 "@llvm-project//clang:builtin_headers_filegroup",
476 "@llvm-project//compiler-rt:fuzzer_filegroup",
477 "@llvm-project//compiler-rt:sanitizer_filegroup",
Googler6c3de122022-03-28 11:40:41 +0000478 ],
479 visibility = ["//visibility:public"],
480)
481
482bindings_for_toolchain_headers(
483 name = "cc_std",
484 hdrs = ":toolchain_headers",
Marcel Hlopko457bdef2022-05-18 06:01:49 -0700485 public_libc_hdrs = LIBC_HEADERS,
486 public_libcxx_hdrs = LIBCXX_HEADERS,
Googler6c3de122022-03-28 11:40:41 +0000487 visibility = ["//visibility:public"],
488)
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700489
490cc_library(
491 name = "cc_collect_instantiations",
492 srcs = ["collect_instantiations.cc"],
493 hdrs = ["collect_instantiations.h"],
494 deps = [
495 ":collect_instantiations",
496 "//common:cc_ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700497 "@absl//absl/status:statusor",
498 "@absl//absl/types:span",
499 "@llvm-project//llvm:Support",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700500 ],
501)
502
503cc_test(
504 name = "cc_collect_instantiations_test",
505 srcs = ["collect_instantiations_test.cc"],
506 deps = [
507 ":cc_collect_instantiations",
Googler75c7ad02022-05-23 13:27:49 -0700508 "//common:rust_allocator_shims",
Luca Versaric21d92f2022-05-25 00:56:30 -0700509 "//common:status_test_matchers",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700510 "//common:test_utils",
Luca Versaric21d92f2022-05-25 00:56:30 -0700511 "@com_google_googletest//:gtest_main",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700512 ],
513)
514
515rust_library(
516 name = "collect_instantiations",
517 srcs = ["collect_instantiations.rs"],
518 deps = [
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700519 "//common:arc_anyhow",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700520 "//common:ffi_types",
521 "//common:token_stream_printer",
Googler75c7ad02022-05-23 13:27:49 -0700522 "@crate_index//:proc-macro2",
523 "@crate_index//:serde_json",
524 "@crate_index//:syn",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700525 ],
526)
527
528rust_test(
529 name = "collect_instantiations_test",
530 args = [
531 # To prevent tests from polluting the environment variables for each other.
532 "--test-threads",
533 "1",
534 ],
535 crate = ":collect_instantiations",
536 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700537 "@crate_index//:quote",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700538 ],
539)
Rosica Dejanovska8575a842022-09-01 02:05:30 -0700540
541cc_library(
542 name = "collect_namespaces",
543 srcs = ["collect_namespaces.cc"],
544 hdrs = ["collect_namespaces.h"],
545 visibility = ["//:__subpackages__"],
546 deps = [
547 ":cc_ir",
548 "@absl//absl/container:btree",
549 "@absl//absl/container:flat_hash_map",
550 "@absl//absl/strings",
551 "@llvm-project//llvm:Support",
552 ],
553)
554
555cc_test(
556 name = "collect_namespaces_test",
557 srcs = ["collect_namespaces_test.cc"],
558 deps = [
559 ":cc_ir",
560 ":collect_namespaces",
561 ":ir_from_cc",
562 "@absl//absl/status",
563 "@absl//absl/status:statusor",
564 "@absl//absl/strings",
565 "@absl//absl/types:span",
566 "@com_google_googletest//:gtest_main",
567 ],
568)