blob: 645727fb54ad37c394942c1ff9b66ce0c7845c56 [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 = [
102 ":cmdline",
103 ":generate_bindings_and_metadata",
Googler75c7ad02022-05-23 13:27:49 -0700104 "//common:rust_allocator_shims",
Marcel Hlopko2ee23912022-05-09 06:13:55 -0700105 "//common:test_utils",
Googler75c7ad02022-05-23 13:27:49 -0700106 "@absl//absl/strings",
Luca Versaric21d92f2022-05-25 00:56:30 -0700107 "@com_google_googletest//:gtest_main",
Marcel Hlopko3f771a92022-05-09 06:09:59 -0700108 ],
109)
110
111cc_library(
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700112 name = "ast_util",
113 srcs = ["ast_util.cc"],
114 hdrs = ["ast_util.h"],
Googler75c7ad02022-05-23 13:27:49 -0700115 visibility = ["//:__subpackages__"],
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700116 deps = [
117 "//common:check",
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 = [
Lukasz Anforowicz8d1e4322022-06-08 07:56:06 -0700127 "//common:check",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700128 "//common:string_type",
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",
178 "@absl//absl/status:statusor",
179 "@llvm-project//clang:ast",
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",
Marco Polettic61bcc42022-04-08 12:54:30 -0700202 "//common: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 = [
213 ":ast_convert",
214 ":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:check",
218 "//common:status_macros",
Googler6c3de122022-03-28 11:40:41 +0000219 "//lifetime_annotations:type_lifetimes",
Lukasz Anforowiczb1ff2e52022-05-16 10:54:23 -0700220 "//rs_bindings_from_cc:ast_util",
Michael Forsterb3503e02022-04-25 00:24:14 -0700221 "//rs_bindings_from_cc/importers:class_template",
Michael Forsterc0bc9262022-04-25 00:30:26 -0700222 "//rs_bindings_from_cc/importers:cxx_record",
Michael Forster4fa849d2022-04-25 00:32:59 -0700223 "//rs_bindings_from_cc/importers:enum",
Michael VanBemmel7a4d4c02022-07-27 13:21:47 -0700224 "//rs_bindings_from_cc/importers:friend",
Michael Forster7e4244a2022-04-25 00:39:01 -0700225 "//rs_bindings_from_cc/importers:function",
Michael Forster350d5312022-04-25 00:36:31 -0700226 "//rs_bindings_from_cc/importers:function_template",
Michael Forster284fb5a2022-04-25 00:41:14 -0700227 "//rs_bindings_from_cc/importers:namespace",
Michael Forsterc60df1e2022-04-25 00:55:44 -0700228 "//rs_bindings_from_cc/importers:typedef_name",
Googler75c7ad02022-05-23 13:27:49 -0700229 "@absl//absl/container:flat_hash_map",
230 "@absl//absl/container:flat_hash_set",
231 "@absl//absl/status",
232 "@absl//absl/status:statusor",
233 "@absl//absl/strings",
234 "@absl//absl/strings:cord",
235 "@llvm-project//clang:ast",
236 "@llvm-project//clang:basic",
237 "@llvm-project//clang:sema",
238 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000239 ],
240)
241
242cc_test(
243 name = "importer_test",
244 srcs = ["importer_test.cc"],
245 deps = [
246 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700247 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000248 ":ir_from_cc",
Luca Versaric21d92f2022-05-25 00:56:30 -0700249 "//common:status_test_matchers",
250 "//common:test_utils",
Googler75c7ad02022-05-23 13:27:49 -0700251 "@absl//absl/status",
252 "@absl//absl/status:statusor",
253 "@absl//absl/strings",
254 "@absl//absl/types:span",
Luca Versaric21d92f2022-05-25 00:56:30 -0700255 "@com_google_googletest//:gtest_main",
Googler6c3de122022-03-28 11:40:41 +0000256 ],
257)
258
259cc_library(
Googler0611ea72022-05-04 07:03:07 -0700260 name = "cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000261 srcs = ["ir.cc"],
262 hdrs = ["ir.h"],
Googler6c3de122022-03-28 11:40:41 +0000263 deps = [
264 ":bazel_types",
Marco Polettic61bcc42022-04-08 12:54:30 -0700265 "//common:check",
266 "//common:strong_int",
Googler75c7ad02022-05-23 13:27:49 -0700267 "@absl//absl/container:flat_hash_map",
268 "@absl//absl/status:statusor",
269 "@absl//absl/strings",
270 "@llvm-project//clang:ast",
271 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000272 ],
273)
274
275rust_library(
Googler0611ea72022-05-04 07:03:07 -0700276 name = "ir",
Googler6c3de122022-03-28 11:40:41 +0000277 srcs = ["ir.rs"],
Googler6c3de122022-03-28 11:40:41 +0000278 deps = [
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700279 "//common:arc_anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700280 "@crate_index//:itertools",
281 "@crate_index//:proc-macro2",
282 "@crate_index//:quote",
283 "@crate_index//:serde",
284 "@crate_index//:serde_json",
Devin Jeanpierrea68fdbc2022-05-27 04:16:36 -0700285 "@crate_index//:syn",
Googler6c3de122022-03-28 11:40:41 +0000286 ],
287)
288
289rust_test(
290 name = "rs_ir_test",
Googler0611ea72022-05-04 07:03:07 -0700291 crate = ":ir",
Devin Jeanpierre1583cd92022-05-27 04:38:38 -0700292 deps = [
293 ":token_stream_matchers",
294 ],
Googler6c3de122022-03-28 11:40:41 +0000295)
296
297rust_library(
298 name = "ir_testing",
299 testonly = 1,
300 srcs = ["ir_testing.rs"],
301 deps = [
Googler0611ea72022-05-04 07:03:07 -0700302 ":ir",
Googler6c3de122022-03-28 11:40:41 +0000303 ":json_from_cc",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700304 "//common:arc_anyhow",
Googler0611ea72022-05-04 07:03:07 -0700305 "//common:ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700306 "@crate_index//:itertools",
Googler6c3de122022-03-28 11:40:41 +0000307 ],
308)
309
310cc_library(
311 name = "ir_from_cc",
312 srcs = ["ir_from_cc.cc"],
313 hdrs = ["ir_from_cc.h"],
314 deps = [
315 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700316 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000317 ":frontend_action",
318 ":importer",
Marco Polettic61bcc42022-04-08 12:54:30 -0700319 "//common:check",
Googler75c7ad02022-05-23 13:27:49 -0700320 "@absl//absl/container:flat_hash_map",
321 "@absl//absl/status",
322 "@absl//absl/status:statusor",
323 "@absl//absl/strings",
324 "@absl//absl/types:span",
325 "@llvm-project//clang:basic",
326 "@llvm-project//clang:frontend",
327 "@llvm-project//clang:tooling",
Googler6c3de122022-03-28 11:40:41 +0000328 ],
329)
330
331cc_library(
332 name = "json_from_cc",
333 srcs = ["json_from_cc.cc"],
334 deps = [
335 ":bazel_types",
Googler0611ea72022-05-04 07:03:07 -0700336 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000337 ":ir_from_cc",
Googler0611ea72022-05-04 07:03:07 -0700338 "//common:cc_ffi_types",
Googler75c7ad02022-05-23 13:27:49 -0700339 "@absl//absl/status:statusor",
340 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000341 ],
342)
343
344rust_test(
345 name = "ir_from_cc_test",
346 srcs = ["ir_from_cc_test.rs"],
Googlerc3b67552022-08-03 04:55:15 -0700347 tags = [
348 "notap", # b/240563701
349 ],
Googler6c3de122022-03-28 11:40:41 +0000350 deps = [
Googler0611ea72022-05-04 07:03:07 -0700351 ":ir",
Googler6c3de122022-03-28 11:40:41 +0000352 ":ir_testing",
Googler6c3de122022-03-28 11:40:41 +0000353 ":token_stream_matchers",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700354 "//common:arc_anyhow",
Googler75c7ad02022-05-23 13:27:49 -0700355 "//common:rust_allocator_shims",
Googler75c7ad02022-05-23 13:27:49 -0700356 "@crate_index//:itertools",
Marcel Hlopkod4678de2022-05-25 01:38:13 -0700357 "@crate_index//:proc-macro2",
Googler75c7ad02022-05-23 13:27:49 -0700358 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000359 ],
360)
361
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700362rust_library(
363 name = "salsa_utils",
364 srcs = ["salsa_utils.rs"],
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700365)
366
Googler6c3de122022-03-28 11:40:41 +0000367cc_library(
368 name = "src_code_gen",
369 srcs = ["src_code_gen.cc"],
370 hdrs = ["src_code_gen.h"],
371 deps = [
Googler0611ea72022-05-04 07:03:07 -0700372 ":cc_ir",
Googler6c3de122022-03-28 11:40:41 +0000373 ":src_code_gen_impl", # buildcleaner: keep
Googler0611ea72022-05-04 07:03:07 -0700374 "//common:cc_ffi_types",
Lukasz Anforowicz6e8b3a72022-06-02 09:10:01 -0700375 "//common:status_macros",
376 "@absl//absl/status:statusor",
Googler75c7ad02022-05-23 13:27:49 -0700377 "@absl//absl/strings",
378 "@llvm-project//clang:format",
379 "@llvm-project//llvm:Support",
Googler6c3de122022-03-28 11:40:41 +0000380 ],
381)
382
383rust_library(
384 name = "src_code_gen_impl",
385 srcs = ["src_code_gen.rs"],
386 deps = [
Googler0611ea72022-05-04 07:03:07 -0700387 ":ir",
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700388 ":salsa_utils",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700389 "//common:arc_anyhow",
Googler0611ea72022-05-04 07:03:07 -0700390 "//common:ffi_types",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700391 "//common:token_stream_printer",
Googler75c7ad02022-05-23 13:27:49 -0700392 "@crate_index//:itertools",
Michael VanBemmel5014b3e2022-08-03 16:27:34 -0700393 "@crate_index//:once_cell",
Googler75c7ad02022-05-23 13:27:49 -0700394 "@crate_index//:proc-macro2",
395 "@crate_index//:quote",
Devin Jeanpierre52a14c32022-06-29 19:12:11 -0700396 "@crate_index//:salsa",
Googler75c7ad02022-05-23 13:27:49 -0700397 "@crate_index//:serde_json",
398 "@crate_index//:syn",
Googler6c3de122022-03-28 11:40:41 +0000399 ],
400)
401
402rust_test(
403 name = "src_code_gen_impl_test",
404 crate = ":src_code_gen_impl",
405 data = [
Googler6c3de122022-03-28 11:40:41 +0000406 ],
Googlerc3b67552022-08-03 04:55:15 -0700407 tags = [
408 "notap", # b/240563701
409 ],
Googler6c3de122022-03-28 11:40:41 +0000410 deps = [
411 ":ir_testing",
412 ":token_stream_matchers",
Googler75c7ad02022-05-23 13:27:49 -0700413 "//common:rust_allocator_shims",
414 "@crate_index//:static_assertions",
Googler6c3de122022-03-28 11:40:41 +0000415 ],
416)
417
418cc_library(
Googler6c3de122022-03-28 11:40:41 +0000419 name = "ast_convert",
420 srcs = ["ast_convert.cc"],
421 hdrs = ["ast_convert.h"],
Michael Forsterc0bc9262022-04-25 00:30:26 -0700422 visibility = ["//rs_bindings_from_cc:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000423 deps = [
Googler0611ea72022-05-04 07:03:07 -0700424 ":cc_ir",
Marco Polettic61bcc42022-04-08 12:54:30 -0700425 "//common:check",
Googler75c7ad02022-05-23 13:27:49 -0700426 "@absl//absl/functional:function_ref",
427 "@llvm-project//clang:ast",
428 "@llvm-project//clang:basic",
Googler6c3de122022-03-28 11:40:41 +0000429 ],
430)
431
432rust_library(
Googler6c3de122022-03-28 11:40:41 +0000433 name = "token_stream_matchers",
434 srcs = ["token_stream_matchers.rs"],
Devin Jeanpierred6f3e2a2022-07-20 18:45:42 -0700435 visibility = ["//:__subpackages__"],
Googler6c3de122022-03-28 11:40:41 +0000436 deps = [
Googler0611ea72022-05-04 07:03:07 -0700437 ":ir",
Devin Jeanpierre3a0cc5a2022-07-12 09:36:34 -0700438 "//common:arc_anyhow",
Marcel Hlopko7f14b4c2022-04-13 00:54:45 -0700439 "//common:token_stream_printer",
Googler75c7ad02022-05-23 13:27:49 -0700440 "@crate_index//:itertools",
441 "@crate_index//:proc-macro2",
442 "@crate_index//:quote",
Googler6c3de122022-03-28 11:40:41 +0000443 ],
444)
445
446rust_test(
447 name = "token_stream_matchers_test",
448 crate = ":token_stream_matchers",
449 data = [
Googler6c3de122022-03-28 11:40:41 +0000450 ],
451 deps = [
452 ":ir_testing",
Googler75c7ad02022-05-23 13:27:49 -0700453 "//common:rust_allocator_shims",
Googler6c3de122022-03-28 11:40:41 +0000454 ],
455)
456
Marcel Hlopko457bdef2022-05-18 06:01:49 -0700457LIBCXX_HEADERS = [
Googler6c3de122022-03-28 11:40:41 +0000458 "cstddef",
459 "cstdlib",
460 "version",
461 "limits",
462 "climits",
463 "cfloat",
464 "cstdint",
465 "new",
466 "typeinfo",
Googler6c3de122022-03-28 11:40:41 +0000467 "exception",
468 "initializer_list",
469 "compare",
470 "csignal",
471 "csetjmp",
472 "cstdarg",
473 "string",
474 "memory",
475 "stdint.h",
476 "stddef.h",
477 "stdlib.h",
478]
479
Marcel Hlopko457bdef2022-05-18 06:01:49 -0700480LIBC_HEADERS = []
481
Googler6c3de122022-03-28 11:40:41 +0000482config_setting(
483 name = "llvm_unstable",
484 values = {
Googler75c7ad02022-05-23 13:27:49 -0700485 "crosstool_top": "//nowhere/llvm:everything",
Googler6c3de122022-03-28 11:40:41 +0000486 },
487)
488
489filegroup(
490 name = "toolchain_headers",
491 srcs = select({
Googler75c7ad02022-05-23 13:27:49 -0700492 ":llvm_unstable": ["//nowhere/llvm:cc-std-headers"],
493 "//conditions:default": ["//nowhere/llvm:cc-std-headers"],
Googler6c3de122022-03-28 11:40:41 +0000494 }) + [
495 "//third_party/grte/v5_x86/release/usr/grte/v5:compile",
496 ],
Googler9637e852022-06-17 01:13:21 -0700497 visibility = ["//visibility:private"],
Googler6c3de122022-03-28 11:40:41 +0000498)
499
500filegroup(
501 name = "builtin_headers",
502 srcs = [
Googler75c7ad02022-05-23 13:27:49 -0700503 "@llvm-project//clang:builtin_headers_filegroup",
504 "@llvm-project//compiler-rt:fuzzer_filegroup",
505 "@llvm-project//compiler-rt:sanitizer_filegroup",
Googler6c3de122022-03-28 11:40:41 +0000506 ],
507 visibility = ["//visibility:public"],
508)
509
510bindings_for_toolchain_headers(
511 name = "cc_std",
512 hdrs = ":toolchain_headers",
Marcel Hlopko457bdef2022-05-18 06:01:49 -0700513 public_libc_hdrs = LIBC_HEADERS,
514 public_libcxx_hdrs = LIBCXX_HEADERS,
Googler6c3de122022-03-28 11:40:41 +0000515 visibility = ["//visibility:public"],
516)
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700517
518cc_library(
519 name = "cc_collect_instantiations",
520 srcs = ["collect_instantiations.cc"],
521 hdrs = ["collect_instantiations.h"],
522 deps = [
523 ":collect_instantiations",
524 "//common:cc_ffi_types",
525 "//common:check",
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",
550 "//common:token_stream_printer",
Googler75c7ad02022-05-23 13:27:49 -0700551 "@crate_index//:proc-macro2",
552 "@crate_index//:serde_json",
553 "@crate_index//:syn",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700554 ],
555)
556
557rust_test(
558 name = "collect_instantiations_test",
559 args = [
560 # To prevent tests from polluting the environment variables for each other.
561 "--test-threads",
562 "1",
563 ],
564 crate = ":collect_instantiations",
565 deps = [
Googler75c7ad02022-05-23 13:27:49 -0700566 "@crate_index//:quote",
Marcel Hlopkob10e49b2022-05-09 03:57:32 -0700567 ],
568)