Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 1 | """Generates Rust bindings from C++ headers.""" |
| 2 | |
| 3 | load( |
| 4 | "//rs_bindings_from_cc/bazel_support:deps_for_bindings.bzl", |
| 5 | "deps_for_bindings", |
| 6 | ) |
| 7 | load( |
| 8 | "//rs_bindings_from_cc/bazel_support:with_cc_toolchain_flags.bzl", |
| 9 | "with_cc_toolchain_flags", |
| 10 | ) |
| 11 | load( |
| 12 | "//rs_bindings_from_cc/bazel_support:rust_bindings_from_cc_binary.bzl", |
| 13 | "rust_bindings_from_cc_binary", |
| 14 | ) |
| 15 | load( |
Marcel Hlopko | 9a94fc4 | 2022-04-06 23:35:36 -0700 | [diff] [blame] | 16 | "@rules_rust//rust:defs.bzl", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 17 | "rust_library", |
| 18 | "rust_test", |
| 19 | ) |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 20 | |
Googler | b1f1ce1 | 2023-02-17 15:37:52 -0800 | [diff] [blame] | 21 | package(default_applicable_licenses = ["//third_party/crubit:license"]) |
| 22 | |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 23 | licenses(["notice"]) |
| 24 | |
| 25 | with_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 | |
| 35 | rust_bindings_from_cc_binary( |
| 36 | name = "rs_bindings_from_cc", |
| 37 | binary = ":rs_bindings_from_cc_impl", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 38 | visibility = ["//:__subpackages__"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 39 | ) |
| 40 | |
| 41 | deps_for_bindings( |
| 42 | name = "deps_for_bindings", |
| 43 | deps_for_generated_cc_file = [ |
Devin Jeanpierre | c19a9a8 | 2023-01-17 14:29:32 -0800 | [diff] [blame] | 44 | "//support/internal:rs_api_impl_support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 45 | ], |
| 46 | deps_for_generated_rs_file = [ |
| 47 | # Required for struct layout assertions added to the generated |
| 48 | # Rust code. |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 49 | "@crate_index//:memoffset", |
Lukasz Anforowicz | 0704c1d | 2023-01-17 08:08:39 -0800 | [diff] [blame] | 50 | "//support:ctor", |
| 51 | "//support:forward_declare", |
| 52 | "//support:oops", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 53 | # Required for `Copy` trait assertions added to the generated Rust |
| 54 | # code. |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 55 | "@crate_index//:static_assertions", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 56 | ], |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 57 | visibility = ["//:__subpackages__"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 58 | ) |
| 59 | |
| 60 | cc_binary( |
| 61 | name = "rs_bindings_from_cc_impl", |
| 62 | srcs = ["rs_bindings_from_cc.cc"], |
| 63 | visibility = ["//visibility:public"], |
| 64 | deps = [ |
| 65 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 66 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 67 | ":cmdline", |
Rosica Dejanovska | abe406f | 2022-09-02 07:06:50 -0700 | [diff] [blame] | 68 | ":collect_namespaces", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 69 | ":generate_bindings_and_metadata", |
Marco Poletti | 6669c69 | 2022-04-07 14:42:56 -0700 | [diff] [blame] | 70 | "//common:file_io", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 71 | "//common:rust_allocator_shims", |
Marco Poletti | c61bcc4 | 2022-04-08 12:54:30 -0700 | [diff] [blame] | 72 | "//common:status_macros", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 73 | "@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 Hlopko | c31d95a | 2022-09-09 05:17:32 -0700 | [diff] [blame] | 78 | "@llvm-project//clang:format", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 79 | "@llvm-project//llvm:Support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 80 | ], |
| 81 | ) |
| 82 | |
| 83 | cc_library( |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 84 | name = "generate_bindings_and_metadata", |
| 85 | srcs = ["generate_bindings_and_metadata.cc"], |
| 86 | hdrs = ["generate_bindings_and_metadata.h"], |
| 87 | deps = [ |
Marcel Hlopko | 2ee2391 | 2022-05-09 06:13:55 -0700 | [diff] [blame] | 88 | ":cc_collect_instantiations", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 89 | ":cc_ir", |
| 90 | ":cmdline", |
Rosica Dejanovska | abe406f | 2022-09-02 07:06:50 -0700 | [diff] [blame] | 91 | ":collect_namespaces", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 92 | ":ir_from_cc", |
| 93 | ":src_code_gen", |
| 94 | "//common:status_macros", |
Marcel Hlopko | 20de6de | 2022-09-13 05:28:08 -0700 | [diff] [blame] | 95 | "@absl//absl/container:flat_hash_map", |
| 96 | "@absl//absl/container:flat_hash_set", |
Lukasz Anforowicz | 6e8b3a7 | 2022-06-02 09:10:01 -0700 | [diff] [blame] | 97 | "@absl//absl/status:statusor", |
Marcel Hlopko | ab7a228 | 2022-09-05 08:17:41 -0700 | [diff] [blame] | 98 | "@absl//absl/strings", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 99 | ], |
| 100 | ) |
| 101 | |
| 102 | cc_test( |
| 103 | name = "generate_bindings_and_metadata_test", |
| 104 | srcs = ["generate_bindings_and_metadata_test.cc"], |
Lukasz Anforowicz | ebac841 | 2022-11-07 07:10:52 -0800 | [diff] [blame] | 105 | data = [ |
| 106 | ], |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 107 | deps = [ |
Rosica Dejanovska | af348cc | 2022-08-30 05:54:16 -0700 | [diff] [blame] | 108 | ":cc_ir", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 109 | ":cmdline", |
Rosica Dejanovska | abe406f | 2022-09-02 07:06:50 -0700 | [diff] [blame] | 110 | ":collect_namespaces", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 111 | ":generate_bindings_and_metadata", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 112 | "//common:rust_allocator_shims", |
Marcel Hlopko | c31d95a | 2022-09-09 05:17:32 -0700 | [diff] [blame] | 113 | "//common:status_macros", |
Marcel Hlopko | 2ee2391 | 2022-05-09 06:13:55 -0700 | [diff] [blame] | 114 | "//common:test_utils", |
Marcel Hlopko | c31d95a | 2022-09-09 05:17:32 -0700 | [diff] [blame] | 115 | "@absl//absl/status", |
| 116 | "@absl//absl/status:statusor", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 117 | "@absl//absl/strings", |
Marcel Hlopko | 68cc2b7 | 2022-09-20 01:38:29 -0700 | [diff] [blame] | 118 | "@com_google_googletest//:gtest_main", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 119 | ], |
| 120 | ) |
| 121 | |
| 122 | cc_library( |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 123 | name = "ast_util", |
| 124 | srcs = ["ast_util.cc"], |
| 125 | hdrs = ["ast_util.h"], |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 126 | visibility = ["//:__subpackages__"], |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 127 | deps = [ |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 128 | "@llvm-project//clang:ast", |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 129 | ], |
| 130 | ) |
| 131 | |
| 132 | cc_library( |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 133 | name = "bazel_types", |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 134 | srcs = ["bazel_types.cc"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 135 | hdrs = ["bazel_types.h"], |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 136 | deps = [ |
| 137 | "//common:string_type", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 138 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 139 | "@absl//absl/strings", |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 140 | ], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 141 | ) |
| 142 | |
Lukasz Anforowicz | 8d1e432 | 2022-06-08 07:56:06 -0700 | [diff] [blame] | 143 | cc_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 | |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 152 | cc_library( |
Roberto Bampi | 60292f4 | 2022-11-07 08:07:00 -0800 | [diff] [blame] | 153 | 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 | |
| 163 | cc_library( |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 164 | name = "cmdline", |
| 165 | srcs = ["cmdline.cc"], |
| 166 | hdrs = ["cmdline.h"], |
| 167 | deps = [ |
| 168 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 169 | ":cc_ir", |
Marco Poletti | c61bcc4 | 2022-04-08 12:54:30 -0700 | [diff] [blame] | 170 | "//common:status_macros", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 171 | "@absl//absl/container:flat_hash_map", |
Devin Jeanpierre | 6ed0f60 | 2023-03-01 17:22:54 -0800 | [diff] [blame] | 172 | "@absl//absl/container:flat_hash_set", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 173 | "@absl//absl/flags:flag", |
Devin Jeanpierre | 7571ece | 2023-01-13 11:39:26 -0800 | [diff] [blame] | 174 | "@absl//absl/log", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 175 | "@absl//absl/status:statusor", |
| 176 | "@absl//absl/strings", |
| 177 | "@llvm-project//llvm:Support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 178 | ], |
| 179 | ) |
| 180 | |
| 181 | cc_test( |
| 182 | name = "cmdline_test", |
| 183 | srcs = ["cmdline_test.cc"], |
| 184 | deps = [ |
| 185 | ":bazel_types", |
| 186 | ":cmdline", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 187 | "//common:status_test_matchers", |
| 188 | "@com_google_googletest//:gtest_main", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 189 | ], |
| 190 | ) |
| 191 | |
| 192 | cc_library( |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 193 | name = "decl_importer", |
| 194 | hdrs = ["decl_importer.h"], |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 195 | visibility = ["//:__subpackages__"], |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 196 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 197 | "cc_ir", |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 198 | ":bazel_types", |
| 199 | "//lifetime_annotations", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 200 | "@absl//absl/container:flat_hash_map", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 201 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 202 | "@absl//absl/status:statusor", |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 203 | ], |
| 204 | ) |
| 205 | |
| 206 | cc_library( |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 207 | name = "frontend_action", |
| 208 | srcs = ["frontend_action.cc"], |
| 209 | hdrs = ["frontend_action.h"], |
| 210 | deps = [ |
| 211 | ":ast_consumer", |
Michael Forster | 974bf15 | 2022-05-12 00:40:59 -0700 | [diff] [blame] | 212 | ":decl_importer", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 213 | "@llvm-project//clang:ast", |
| 214 | "@llvm-project//clang:frontend", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 215 | ], |
| 216 | ) |
| 217 | |
| 218 | cc_library( |
| 219 | name = "ast_consumer", |
| 220 | srcs = ["ast_consumer.cc"], |
| 221 | hdrs = ["ast_consumer.h"], |
| 222 | deps = [ |
Michael Forster | 974bf15 | 2022-05-12 00:40:59 -0700 | [diff] [blame] | 223 | ":decl_importer", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 224 | ":importer", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 225 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 226 | "@llvm-project//clang:ast", |
| 227 | "@llvm-project//clang:frontend", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 228 | ], |
| 229 | ) |
| 230 | |
| 231 | cc_library( |
| 232 | name = "importer", |
| 233 | srcs = ["importer.cc"], |
| 234 | hdrs = ["importer.h"], |
| 235 | deps = [ |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 236 | ":ast_util", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 237 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 238 | ":cc_ir", |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 239 | ":decl_importer", |
Roberto Bampi | 60292f4 | 2022-11-07 08:07:00 -0800 | [diff] [blame] | 240 | ":known_types_map", |
Marco Poletti | c61bcc4 | 2022-04-08 12:54:30 -0700 | [diff] [blame] | 241 | "//common:status_macros", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 242 | "//lifetime_annotations:type_lifetimes", |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 243 | "//rs_bindings_from_cc/importers:class_template", |
Michael Forster | c0bc926 | 2022-04-25 00:30:26 -0700 | [diff] [blame] | 244 | "//rs_bindings_from_cc/importers:cxx_record", |
Michael Forster | 4fa849d | 2022-04-25 00:32:59 -0700 | [diff] [blame] | 245 | "//rs_bindings_from_cc/importers:enum", |
Michael VanBemmel | 7a4d4c0 | 2022-07-27 13:21:47 -0700 | [diff] [blame] | 246 | "//rs_bindings_from_cc/importers:friend", |
Michael Forster | 7e4244a | 2022-04-25 00:39:01 -0700 | [diff] [blame] | 247 | "//rs_bindings_from_cc/importers:function", |
Michael Forster | 350d531 | 2022-04-25 00:36:31 -0700 | [diff] [blame] | 248 | "//rs_bindings_from_cc/importers:function_template", |
Michael Forster | 284fb5a | 2022-04-25 00:41:14 -0700 | [diff] [blame] | 249 | "//rs_bindings_from_cc/importers:namespace", |
Michael Forster | c60df1e | 2022-04-25 00:55:44 -0700 | [diff] [blame] | 250 | "//rs_bindings_from_cc/importers:typedef_name", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 251 | "@absl//absl/container:flat_hash_map", |
| 252 | "@absl//absl/container:flat_hash_set", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 253 | "@absl//absl/log", |
| 254 | "@absl//absl/log:check", |
| 255 | "@absl//absl/log:die_if_null", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 256 | "@absl//absl/status", |
| 257 | "@absl//absl/status:statusor", |
| 258 | "@absl//absl/strings", |
| 259 | "@absl//absl/strings:cord", |
Googler | 442733c | 2023-01-23 01:05:35 -0800 | [diff] [blame] | 260 | "@absl//absl/strings:str_format", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 261 | "@llvm-project//clang:ast", |
| 262 | "@llvm-project//clang:basic", |
| 263 | "@llvm-project//clang:sema", |
| 264 | "@llvm-project//llvm:Support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 265 | ], |
| 266 | ) |
| 267 | |
| 268 | cc_test( |
| 269 | name = "importer_test", |
| 270 | srcs = ["importer_test.cc"], |
| 271 | deps = [ |
| 272 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 273 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 274 | ":ir_from_cc", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 275 | "//common:status_test_matchers", |
| 276 | "//common:test_utils", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 277 | "@absl//absl/status", |
| 278 | "@absl//absl/status:statusor", |
| 279 | "@absl//absl/strings", |
| 280 | "@absl//absl/types:span", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 281 | "@com_google_googletest//:gtest_main", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 282 | ], |
| 283 | ) |
| 284 | |
| 285 | cc_library( |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 286 | name = "cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 287 | srcs = ["ir.cc"], |
| 288 | hdrs = ["ir.h"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 289 | deps = [ |
| 290 | ":bazel_types", |
Marco Poletti | c61bcc4 | 2022-04-08 12:54:30 -0700 | [diff] [blame] | 291 | "//common:strong_int", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 292 | "@absl//absl/container:flat_hash_map", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 293 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 294 | "@absl//absl/status:statusor", |
| 295 | "@absl//absl/strings", |
| 296 | "@llvm-project//clang:ast", |
| 297 | "@llvm-project//llvm:Support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 298 | ], |
| 299 | ) |
| 300 | |
| 301 | rust_library( |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 302 | name = "ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 303 | srcs = ["ir.rs"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 304 | deps = [ |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 305 | "//common:arc_anyhow", |
Devin Jeanpierre | 6ed0f60 | 2023-03-01 17:22:54 -0800 | [diff] [blame] | 306 | "@crate_index//:flagset", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 307 | "@crate_index//:itertools", |
Michael VanBemmel | f5cbdf4 | 2022-10-14 17:00:11 -0700 | [diff] [blame] | 308 | "@crate_index//:once_cell", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 309 | "@crate_index//:proc-macro2", |
| 310 | "@crate_index//:quote", |
| 311 | "@crate_index//:serde", |
| 312 | "@crate_index//:serde_json", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 313 | ], |
| 314 | ) |
| 315 | |
| 316 | rust_test( |
| 317 | name = "rs_ir_test", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 318 | crate = ":ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 319 | ) |
| 320 | |
| 321 | rust_library( |
| 322 | name = "ir_testing", |
| 323 | testonly = 1, |
| 324 | srcs = ["ir_testing.rs"], |
| 325 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 326 | ":ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 327 | ":json_from_cc", |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 328 | "//common:arc_anyhow", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 329 | "//common:ffi_types", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 330 | "@crate_index//:itertools", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 331 | ], |
| 332 | ) |
| 333 | |
| 334 | cc_library( |
| 335 | name = "ir_from_cc", |
| 336 | srcs = ["ir_from_cc.cc"], |
| 337 | hdrs = ["ir_from_cc.h"], |
| 338 | deps = [ |
| 339 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 340 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 341 | ":frontend_action", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 342 | "@absl//absl/container:flat_hash_map", |
Devin Jeanpierre | 6ed0f60 | 2023-03-01 17:22:54 -0800 | [diff] [blame] | 343 | "@absl//absl/container:flat_hash_set", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 344 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 345 | "@absl//absl/status", |
| 346 | "@absl//absl/status:statusor", |
| 347 | "@absl//absl/strings", |
| 348 | "@absl//absl/types:span", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 349 | "@llvm-project//clang:frontend", |
| 350 | "@llvm-project//clang:tooling", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 351 | ], |
| 352 | ) |
| 353 | |
| 354 | cc_library( |
| 355 | name = "json_from_cc", |
Lukasz Anforowicz | 121338a | 2022-11-01 14:28:32 -0700 | [diff] [blame] | 356 | testonly = 1, |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 357 | srcs = ["json_from_cc.cc"], |
| 358 | deps = [ |
| 359 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 360 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 361 | ":ir_from_cc", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 362 | "//common:cc_ffi_types", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 363 | "@absl//absl/status:statusor", |
| 364 | "@llvm-project//llvm:Support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 365 | ], |
| 366 | ) |
| 367 | |
| 368 | rust_test( |
| 369 | name = "ir_from_cc_test", |
| 370 | srcs = ["ir_from_cc_test.rs"], |
| 371 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 372 | ":ir", |
Lukasz Anforowicz | efd635d | 2022-09-22 10:12:49 -0700 | [diff] [blame] | 373 | ":ir_matchers", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 374 | ":ir_testing", |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 375 | "//common:arc_anyhow", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 376 | "//common:rust_allocator_shims", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 377 | "@crate_index//:itertools", |
Marcel Hlopko | d4678de | 2022-05-25 01:38:13 -0700 | [diff] [blame] | 378 | "@crate_index//:proc-macro2", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 379 | "@crate_index//:quote", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 380 | ], |
| 381 | ) |
| 382 | |
| 383 | cc_library( |
| 384 | name = "src_code_gen", |
| 385 | srcs = ["src_code_gen.cc"], |
| 386 | hdrs = ["src_code_gen.h"], |
| 387 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 388 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 389 | ":src_code_gen_impl", # buildcleaner: keep |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 390 | "//common:cc_ffi_types", |
Lukasz Anforowicz | 6e8b3a7 | 2022-06-02 09:10:01 -0700 | [diff] [blame] | 391 | "//common:status_macros", |
| 392 | "@absl//absl/status:statusor", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 393 | "@absl//absl/strings", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 394 | "@llvm-project//llvm:Support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 395 | ], |
| 396 | ) |
| 397 | |
| 398 | rust_library( |
| 399 | name = "src_code_gen_impl", |
| 400 | srcs = ["src_code_gen.rs"], |
| 401 | deps = [ |
Michael VanBemmel | f5cbdf4 | 2022-10-14 17:00:11 -0700 | [diff] [blame] | 402 | ":error_report", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 403 | ":ir", |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 404 | "//common:arc_anyhow", |
Lukasz Anforowicz | ccf55cb | 2022-10-05 06:00:57 -0700 | [diff] [blame] | 405 | "//common:code_gen_utils", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 406 | "//common:ffi_types", |
Marcel Hlopko | 7f14b4c | 2022-04-13 00:54:45 -0700 | [diff] [blame] | 407 | "//common:token_stream_printer", |
Devin Jeanpierre | 6ed0f60 | 2023-03-01 17:22:54 -0800 | [diff] [blame] | 408 | "@crate_index//:flagset", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 409 | "@crate_index//:itertools", |
Michael VanBemmel | 5014b3e | 2022-08-03 16:27:34 -0700 | [diff] [blame] | 410 | "@crate_index//:once_cell", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 411 | "@crate_index//:proc-macro2", |
| 412 | "@crate_index//:quote", |
Devin Jeanpierre | 52a14c3 | 2022-06-29 19:12:11 -0700 | [diff] [blame] | 413 | "@crate_index//:salsa", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 414 | "@crate_index//:serde_json", |
| 415 | "@crate_index//:syn", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 416 | ], |
| 417 | ) |
| 418 | |
| 419 | rust_test( |
| 420 | name = "src_code_gen_impl_test", |
| 421 | crate = ":src_code_gen_impl", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 422 | deps = [ |
Lukasz Anforowicz | efd635d | 2022-09-22 10:12:49 -0700 | [diff] [blame] | 423 | ":ir_matchers", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 424 | ":ir_testing", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 425 | "//common:rust_allocator_shims", |
Lukasz Anforowicz | efd635d | 2022-09-22 10:12:49 -0700 | [diff] [blame] | 426 | "//common:token_stream_matchers", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 427 | "@crate_index//:static_assertions", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 428 | ], |
| 429 | ) |
| 430 | |
Michael VanBemmel | f5cbdf4 | 2022-10-14 17:00:11 -0700 | [diff] [blame] | 431 | rust_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 | |
| 442 | rust_test( |
| 443 | name = "error_report_test", |
| 444 | crate = ":error_report", |
| 445 | deps = [ |
| 446 | "@crate_index//:serde_json", |
| 447 | ], |
| 448 | ) |
| 449 | |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 450 | cc_library( |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 451 | name = "ast_convert", |
| 452 | srcs = ["ast_convert.cc"], |
| 453 | hdrs = ["ast_convert.h"], |
Michael Forster | c0bc926 | 2022-04-25 00:30:26 -0700 | [diff] [blame] | 454 | visibility = ["//rs_bindings_from_cc:__subpackages__"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 455 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 456 | ":cc_ir", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 457 | "@absl//absl/functional:function_ref", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 458 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 459 | "@llvm-project//clang:ast", |
| 460 | "@llvm-project//clang:basic", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 461 | ], |
| 462 | ) |
| 463 | |
| 464 | rust_library( |
Lukasz Anforowicz | efd635d | 2022-09-22 10:12:49 -0700 | [diff] [blame] | 465 | name = "ir_matchers", |
| 466 | testonly = 1, |
| 467 | srcs = ["ir_matchers.rs"], |
Devin Jeanpierre | d6f3e2a | 2022-07-20 18:45:42 -0700 | [diff] [blame] | 468 | visibility = ["//:__subpackages__"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 469 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 470 | ":ir", |
Lukasz Anforowicz | efd635d | 2022-09-22 10:12:49 -0700 | [diff] [blame] | 471 | ":ir_testing", |
| 472 | "//common:token_stream_matchers", |
Marcel Hlopko | 7f14b4c | 2022-04-13 00:54:45 -0700 | [diff] [blame] | 473 | "//common:token_stream_printer", |
Lukasz Anforowicz | dd44d98 | 2022-09-22 10:09:37 -0700 | [diff] [blame] | 474 | "@crate_index//:anyhow", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 475 | "@crate_index//:itertools", |
| 476 | "@crate_index//:proc-macro2", |
| 477 | "@crate_index//:quote", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 478 | ], |
| 479 | ) |
| 480 | |
| 481 | rust_test( |
Lukasz Anforowicz | efd635d | 2022-09-22 10:12:49 -0700 | [diff] [blame] | 482 | name = "ir_matchers_test", |
| 483 | crate = ":ir_matchers", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 484 | deps = [ |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 485 | "//common:rust_allocator_shims", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 486 | ], |
| 487 | ) |
| 488 | |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 489 | filegroup( |
| 490 | name = "builtin_headers", |
| 491 | srcs = [ |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 492 | "@llvm-project//clang:builtin_headers_filegroup", |
| 493 | "@llvm-project//compiler-rt:fuzzer_filegroup", |
| 494 | "@llvm-project//compiler-rt:sanitizer_filegroup", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 495 | ], |
| 496 | visibility = ["//visibility:public"], |
| 497 | ) |
| 498 | |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 499 | cc_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", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 506 | "@absl//absl/status:statusor", |
| 507 | "@absl//absl/types:span", |
| 508 | "@llvm-project//llvm:Support", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 509 | ], |
| 510 | ) |
| 511 | |
| 512 | cc_test( |
| 513 | name = "cc_collect_instantiations_test", |
| 514 | srcs = ["collect_instantiations_test.cc"], |
| 515 | deps = [ |
| 516 | ":cc_collect_instantiations", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 517 | "//common:rust_allocator_shims", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 518 | "//common:status_test_matchers", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 519 | "//common:test_utils", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 520 | "@com_google_googletest//:gtest_main", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 521 | ], |
| 522 | ) |
| 523 | |
| 524 | rust_library( |
| 525 | name = "collect_instantiations", |
| 526 | srcs = ["collect_instantiations.rs"], |
| 527 | deps = [ |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 528 | "//common:arc_anyhow", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 529 | "//common:ffi_types", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 530 | "@crate_index//:proc-macro2", |
| 531 | "@crate_index//:serde_json", |
| 532 | "@crate_index//:syn", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 533 | ], |
| 534 | ) |
| 535 | |
| 536 | rust_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 = [ |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 545 | "@crate_index//:quote", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 546 | ], |
| 547 | ) |
Rosica Dejanovska | 8575a84 | 2022-09-01 02:05:30 -0700 | [diff] [blame] | 548 | |
| 549 | cc_library( |
| 550 | name = "collect_namespaces", |
| 551 | srcs = ["collect_namespaces.cc"], |
| 552 | hdrs = ["collect_namespaces.h"], |
| 553 | visibility = ["//:__subpackages__"], |
| 554 | deps = [ |
Rosica Dejanovska | 5b2e813 | 2022-09-20 02:11:51 -0700 | [diff] [blame] | 555 | ":bazel_types", |
Rosica Dejanovska | 8575a84 | 2022-09-01 02:05:30 -0700 | [diff] [blame] | 556 | ":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 | |
| 564 | cc_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 | ) |