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 | ) |
| 20 | load( |
| 21 | "//rs_bindings_from_cc/bazel_support:toolchain_headers.bzl", |
| 22 | "bindings_for_toolchain_headers", |
| 23 | ) |
| 24 | |
| 25 | licenses(["notice"]) |
| 26 | |
| 27 | with_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 | |
| 37 | rust_bindings_from_cc_binary( |
| 38 | name = "rs_bindings_from_cc", |
| 39 | binary = ":rs_bindings_from_cc_impl", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 40 | visibility = ["//:__subpackages__"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 41 | ) |
| 42 | |
| 43 | deps_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. |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 51 | "@crate_index//:memoffset", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 52 | "//rs_bindings_from_cc/support:ctor", |
Devin Jeanpierre | 2745013 | 2022-04-11 13:52:01 -0700 | [diff] [blame] | 53 | "//rs_bindings_from_cc/support:forward_declare", |
Devin Jeanpierre | b368e68 | 2022-05-03 02:23:44 -0700 | [diff] [blame] | 54 | "//rs_bindings_from_cc/support:oops", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 55 | # Required for `Copy` trait assertions added to the generated Rust |
| 56 | # code. |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 57 | "@crate_index//:static_assertions", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 58 | ], |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 59 | visibility = ["//:__subpackages__"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 60 | ) |
| 61 | |
| 62 | cc_binary( |
| 63 | name = "rs_bindings_from_cc_impl", |
| 64 | srcs = ["rs_bindings_from_cc.cc"], |
| 65 | visibility = ["//visibility:public"], |
| 66 | deps = [ |
| 67 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 68 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 69 | ":cmdline", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 70 | ":generate_bindings_and_metadata", |
Marco Poletti | 6669c69 | 2022-04-07 14:42:56 -0700 | [diff] [blame] | 71 | "//common:file_io", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 72 | "//common:rust_allocator_shims", |
Marco Poletti | c61bcc4 | 2022-04-08 12:54:30 -0700 | [diff] [blame] | 73 | "//common:status_macros", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 74 | "@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", |
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", |
| 91 | ":ir_from_cc", |
| 92 | ":src_code_gen", |
| 93 | "//common:status_macros", |
Lukasz Anforowicz | 6e8b3a7 | 2022-06-02 09:10:01 -0700 | [diff] [blame] | 94 | "@absl//absl/status:statusor", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 95 | ], |
| 96 | ) |
| 97 | |
| 98 | cc_test( |
| 99 | name = "generate_bindings_and_metadata_test", |
| 100 | srcs = ["generate_bindings_and_metadata_test.cc"], |
| 101 | deps = [ |
Rosica Dejanovska | af348cc | 2022-08-30 05:54:16 -0700 | [diff] [blame] | 102 | ":cc_ir", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 103 | ":cmdline", |
| 104 | ":generate_bindings_and_metadata", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 105 | "//common:rust_allocator_shims", |
Marcel Hlopko | 2ee2391 | 2022-05-09 06:13:55 -0700 | [diff] [blame] | 106 | "//common:test_utils", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 107 | "@absl//absl/strings", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 108 | "@com_google_googletest//:gtest_main", |
Marcel Hlopko | 3f771a9 | 2022-05-09 06:09:59 -0700 | [diff] [blame] | 109 | ], |
| 110 | ) |
| 111 | |
| 112 | cc_library( |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 113 | name = "ast_util", |
| 114 | srcs = ["ast_util.cc"], |
| 115 | hdrs = ["ast_util.h"], |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 116 | visibility = ["//:__subpackages__"], |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 117 | deps = [ |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 118 | "@llvm-project//clang:ast", |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 119 | ], |
| 120 | ) |
| 121 | |
| 122 | cc_library( |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 123 | name = "bazel_types", |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 124 | srcs = ["bazel_types.cc"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 125 | hdrs = ["bazel_types.h"], |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 126 | deps = [ |
| 127 | "//common:string_type", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 128 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 129 | "@absl//absl/strings", |
Lukasz Anforowicz | b1ff2e5 | 2022-05-16 10:54:23 -0700 | [diff] [blame] | 130 | ], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 131 | ) |
| 132 | |
Lukasz Anforowicz | 8d1e432 | 2022-06-08 07:56:06 -0700 | [diff] [blame] | 133 | cc_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 | |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 142 | cc_library( |
| 143 | name = "cmdline", |
| 144 | srcs = ["cmdline.cc"], |
| 145 | hdrs = ["cmdline.h"], |
| 146 | deps = [ |
| 147 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 148 | ":cc_ir", |
Marco Poletti | c61bcc4 | 2022-04-08 12:54:30 -0700 | [diff] [blame] | 149 | "//common:status_macros", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 150 | "@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", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 155 | ], |
| 156 | ) |
| 157 | |
| 158 | cc_test( |
| 159 | name = "cmdline_test", |
| 160 | srcs = ["cmdline_test.cc"], |
| 161 | deps = [ |
| 162 | ":bazel_types", |
| 163 | ":cmdline", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 164 | "//common:status_test_matchers", |
| 165 | "@com_google_googletest//:gtest_main", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 166 | ], |
| 167 | ) |
| 168 | |
| 169 | cc_library( |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 170 | name = "decl_importer", |
| 171 | hdrs = ["decl_importer.h"], |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 172 | visibility = ["//:__subpackages__"], |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 173 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 174 | "cc_ir", |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 175 | ":bazel_types", |
| 176 | "//lifetime_annotations", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 177 | "@absl//absl/container:flat_hash_map", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 178 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 179 | "@absl//absl/status:statusor", |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 180 | ], |
| 181 | ) |
| 182 | |
| 183 | cc_library( |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 184 | name = "frontend_action", |
| 185 | srcs = ["frontend_action.cc"], |
| 186 | hdrs = ["frontend_action.h"], |
| 187 | deps = [ |
| 188 | ":ast_consumer", |
Michael Forster | 974bf15 | 2022-05-12 00:40:59 -0700 | [diff] [blame] | 189 | ":decl_importer", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 190 | "@llvm-project//clang:ast", |
| 191 | "@llvm-project//clang:frontend", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 192 | ], |
| 193 | ) |
| 194 | |
| 195 | cc_library( |
| 196 | name = "ast_consumer", |
| 197 | srcs = ["ast_consumer.cc"], |
| 198 | hdrs = ["ast_consumer.h"], |
| 199 | deps = [ |
Michael Forster | 974bf15 | 2022-05-12 00:40:59 -0700 | [diff] [blame] | 200 | ":decl_importer", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 201 | ":importer", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 202 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 203 | "@llvm-project//clang:ast", |
| 204 | "@llvm-project//clang:frontend", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 205 | ], |
| 206 | ) |
| 207 | |
| 208 | cc_library( |
| 209 | name = "importer", |
| 210 | srcs = ["importer.cc"], |
| 211 | hdrs = ["importer.h"], |
| 212 | deps = [ |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 213 | ":ast_util", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 214 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 215 | ":cc_ir", |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 216 | ":decl_importer", |
Marco Poletti | c61bcc4 | 2022-04-08 12:54:30 -0700 | [diff] [blame] | 217 | "//common:status_macros", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 218 | "//lifetime_annotations:type_lifetimes", |
Michael Forster | b3503e0 | 2022-04-25 00:24:14 -0700 | [diff] [blame] | 219 | "//rs_bindings_from_cc/importers:class_template", |
Michael Forster | c0bc926 | 2022-04-25 00:30:26 -0700 | [diff] [blame] | 220 | "//rs_bindings_from_cc/importers:cxx_record", |
Michael Forster | 4fa849d | 2022-04-25 00:32:59 -0700 | [diff] [blame] | 221 | "//rs_bindings_from_cc/importers:enum", |
Michael VanBemmel | 7a4d4c0 | 2022-07-27 13:21:47 -0700 | [diff] [blame] | 222 | "//rs_bindings_from_cc/importers:friend", |
Michael Forster | 7e4244a | 2022-04-25 00:39:01 -0700 | [diff] [blame] | 223 | "//rs_bindings_from_cc/importers:function", |
Michael Forster | 350d531 | 2022-04-25 00:36:31 -0700 | [diff] [blame] | 224 | "//rs_bindings_from_cc/importers:function_template", |
Michael Forster | 284fb5a | 2022-04-25 00:41:14 -0700 | [diff] [blame] | 225 | "//rs_bindings_from_cc/importers:namespace", |
Michael Forster | c60df1e | 2022-04-25 00:55:44 -0700 | [diff] [blame] | 226 | "//rs_bindings_from_cc/importers:typedef_name", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 227 | "@absl//absl/container:flat_hash_map", |
| 228 | "@absl//absl/container:flat_hash_set", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 229 | "@absl//absl/log", |
| 230 | "@absl//absl/log:check", |
| 231 | "@absl//absl/log:die_if_null", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 232 | "@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", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 240 | ], |
| 241 | ) |
| 242 | |
| 243 | cc_test( |
| 244 | name = "importer_test", |
| 245 | srcs = ["importer_test.cc"], |
| 246 | deps = [ |
| 247 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 248 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 249 | ":ir_from_cc", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 250 | "//common:status_test_matchers", |
| 251 | "//common:test_utils", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 252 | "@absl//absl/status", |
| 253 | "@absl//absl/status:statusor", |
| 254 | "@absl//absl/strings", |
| 255 | "@absl//absl/types:span", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 256 | "@com_google_googletest//:gtest_main", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 257 | ], |
| 258 | ) |
| 259 | |
| 260 | cc_library( |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 261 | name = "cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 262 | srcs = ["ir.cc"], |
| 263 | hdrs = ["ir.h"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 264 | deps = [ |
| 265 | ":bazel_types", |
Marco Poletti | c61bcc4 | 2022-04-08 12:54:30 -0700 | [diff] [blame] | 266 | "//common:strong_int", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 267 | "@absl//absl/container:flat_hash_map", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 268 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 269 | "@absl//absl/status:statusor", |
| 270 | "@absl//absl/strings", |
| 271 | "@llvm-project//clang:ast", |
| 272 | "@llvm-project//llvm:Support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 273 | ], |
| 274 | ) |
| 275 | |
| 276 | rust_library( |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 277 | name = "ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 278 | srcs = ["ir.rs"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 279 | deps = [ |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 280 | "//common:arc_anyhow", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 281 | "@crate_index//:itertools", |
| 282 | "@crate_index//:proc-macro2", |
| 283 | "@crate_index//:quote", |
| 284 | "@crate_index//:serde", |
| 285 | "@crate_index//:serde_json", |
Devin Jeanpierre | a68fdbc | 2022-05-27 04:16:36 -0700 | [diff] [blame] | 286 | "@crate_index//:syn", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 287 | ], |
| 288 | ) |
| 289 | |
| 290 | rust_test( |
| 291 | name = "rs_ir_test", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 292 | crate = ":ir", |
Devin Jeanpierre | 1583cd9 | 2022-05-27 04:38:38 -0700 | [diff] [blame] | 293 | deps = [ |
| 294 | ":token_stream_matchers", |
| 295 | ], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 296 | ) |
| 297 | |
| 298 | rust_library( |
| 299 | name = "ir_testing", |
| 300 | testonly = 1, |
| 301 | srcs = ["ir_testing.rs"], |
| 302 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 303 | ":ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 304 | ":json_from_cc", |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 305 | "//common:arc_anyhow", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 306 | "//common:ffi_types", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 307 | "@crate_index//:itertools", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 308 | ], |
| 309 | ) |
| 310 | |
| 311 | cc_library( |
| 312 | name = "ir_from_cc", |
| 313 | srcs = ["ir_from_cc.cc"], |
| 314 | hdrs = ["ir_from_cc.h"], |
| 315 | deps = [ |
| 316 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 317 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 318 | ":frontend_action", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 319 | "@absl//absl/container:flat_hash_map", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 320 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 321 | "@absl//absl/status", |
| 322 | "@absl//absl/status:statusor", |
| 323 | "@absl//absl/strings", |
| 324 | "@absl//absl/types:span", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 325 | "@llvm-project//clang:frontend", |
| 326 | "@llvm-project//clang:tooling", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 327 | ], |
| 328 | ) |
| 329 | |
| 330 | cc_library( |
| 331 | name = "json_from_cc", |
| 332 | srcs = ["json_from_cc.cc"], |
| 333 | deps = [ |
| 334 | ":bazel_types", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 335 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 336 | ":ir_from_cc", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 337 | "//common:cc_ffi_types", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 338 | "@absl//absl/status:statusor", |
| 339 | "@llvm-project//llvm:Support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 340 | ], |
| 341 | ) |
| 342 | |
| 343 | rust_test( |
| 344 | name = "ir_from_cc_test", |
| 345 | srcs = ["ir_from_cc_test.rs"], |
| 346 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 347 | ":ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 348 | ":ir_testing", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 349 | ":token_stream_matchers", |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 350 | "//common:arc_anyhow", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 351 | "//common:rust_allocator_shims", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 352 | "@crate_index//:itertools", |
Marcel Hlopko | d4678de | 2022-05-25 01:38:13 -0700 | [diff] [blame] | 353 | "@crate_index//:proc-macro2", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 354 | "@crate_index//:quote", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 355 | ], |
| 356 | ) |
| 357 | |
Devin Jeanpierre | 52a14c3 | 2022-06-29 19:12:11 -0700 | [diff] [blame] | 358 | rust_library( |
| 359 | name = "salsa_utils", |
| 360 | srcs = ["salsa_utils.rs"], |
Devin Jeanpierre | 52a14c3 | 2022-06-29 19:12:11 -0700 | [diff] [blame] | 361 | ) |
| 362 | |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 363 | cc_library( |
| 364 | name = "src_code_gen", |
| 365 | srcs = ["src_code_gen.cc"], |
| 366 | hdrs = ["src_code_gen.h"], |
| 367 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 368 | ":cc_ir", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 369 | ":src_code_gen_impl", # buildcleaner: keep |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 370 | "//common:cc_ffi_types", |
Lukasz Anforowicz | 6e8b3a7 | 2022-06-02 09:10:01 -0700 | [diff] [blame] | 371 | "//common:status_macros", |
| 372 | "@absl//absl/status:statusor", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 373 | "@absl//absl/strings", |
| 374 | "@llvm-project//clang:format", |
| 375 | "@llvm-project//llvm:Support", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 376 | ], |
| 377 | ) |
| 378 | |
| 379 | rust_library( |
| 380 | name = "src_code_gen_impl", |
| 381 | srcs = ["src_code_gen.rs"], |
| 382 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 383 | ":ir", |
Devin Jeanpierre | 52a14c3 | 2022-06-29 19:12:11 -0700 | [diff] [blame] | 384 | ":salsa_utils", |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 385 | "//common:arc_anyhow", |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 386 | "//common:ffi_types", |
Marcel Hlopko | 7f14b4c | 2022-04-13 00:54:45 -0700 | [diff] [blame] | 387 | "//common:token_stream_printer", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 388 | "@crate_index//:itertools", |
Michael VanBemmel | 5014b3e | 2022-08-03 16:27:34 -0700 | [diff] [blame] | 389 | "@crate_index//:once_cell", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 390 | "@crate_index//:proc-macro2", |
| 391 | "@crate_index//:quote", |
Devin Jeanpierre | 52a14c3 | 2022-06-29 19:12:11 -0700 | [diff] [blame] | 392 | "@crate_index//:salsa", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 393 | "@crate_index//:serde_json", |
| 394 | "@crate_index//:syn", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 395 | ], |
| 396 | ) |
| 397 | |
| 398 | rust_test( |
| 399 | name = "src_code_gen_impl_test", |
| 400 | crate = ":src_code_gen_impl", |
| 401 | data = [ |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 402 | ], |
| 403 | deps = [ |
| 404 | ":ir_testing", |
| 405 | ":token_stream_matchers", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 406 | "//common:rust_allocator_shims", |
| 407 | "@crate_index//:static_assertions", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 408 | ], |
| 409 | ) |
| 410 | |
| 411 | cc_library( |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 412 | name = "ast_convert", |
| 413 | srcs = ["ast_convert.cc"], |
| 414 | hdrs = ["ast_convert.h"], |
Michael Forster | c0bc926 | 2022-04-25 00:30:26 -0700 | [diff] [blame] | 415 | visibility = ["//rs_bindings_from_cc:__subpackages__"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 416 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 417 | ":cc_ir", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 418 | "@absl//absl/functional:function_ref", |
Lukasz Anforowicz | 2c34cae | 2022-08-26 07:19:20 -0700 | [diff] [blame] | 419 | "@absl//absl/log:check", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 420 | "@llvm-project//clang:ast", |
| 421 | "@llvm-project//clang:basic", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 422 | ], |
| 423 | ) |
| 424 | |
| 425 | rust_library( |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 426 | name = "token_stream_matchers", |
| 427 | srcs = ["token_stream_matchers.rs"], |
Devin Jeanpierre | d6f3e2a | 2022-07-20 18:45:42 -0700 | [diff] [blame] | 428 | visibility = ["//:__subpackages__"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 429 | deps = [ |
Googler | 0611ea7 | 2022-05-04 07:03:07 -0700 | [diff] [blame] | 430 | ":ir", |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 431 | "//common:arc_anyhow", |
Marcel Hlopko | 7f14b4c | 2022-04-13 00:54:45 -0700 | [diff] [blame] | 432 | "//common:token_stream_printer", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 433 | "@crate_index//:itertools", |
| 434 | "@crate_index//:proc-macro2", |
| 435 | "@crate_index//:quote", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 436 | ], |
| 437 | ) |
| 438 | |
| 439 | rust_test( |
| 440 | name = "token_stream_matchers_test", |
| 441 | crate = ":token_stream_matchers", |
| 442 | data = [ |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 443 | ], |
| 444 | deps = [ |
| 445 | ":ir_testing", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 446 | "//common:rust_allocator_shims", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 447 | ], |
| 448 | ) |
| 449 | |
Rosica Dejanovska | a8aea81 | 2022-08-24 04:54:59 -0700 | [diff] [blame] | 450 | LIBCXX_HEADERS = ["ctime"] |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 451 | |
Marcel Hlopko | 457bdef | 2022-05-18 06:01:49 -0700 | [diff] [blame] | 452 | LIBC_HEADERS = [] |
| 453 | |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 454 | config_setting( |
| 455 | name = "llvm_unstable", |
| 456 | values = { |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 457 | "crosstool_top": "//nowhere/llvm:everything", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 458 | }, |
| 459 | ) |
| 460 | |
| 461 | filegroup( |
| 462 | name = "toolchain_headers", |
| 463 | srcs = select({ |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 464 | ":llvm_unstable": ["//nowhere/llvm:cc-std-headers"], |
| 465 | "//conditions:default": ["//nowhere/llvm:cc-std-headers"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 466 | }) + [ |
| 467 | "//third_party/grte/v5_x86/release/usr/grte/v5:compile", |
| 468 | ], |
Googler | 9637e85 | 2022-06-17 01:13:21 -0700 | [diff] [blame] | 469 | visibility = ["//visibility:private"], |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 470 | ) |
| 471 | |
| 472 | filegroup( |
| 473 | name = "builtin_headers", |
| 474 | srcs = [ |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 475 | "@llvm-project//clang:builtin_headers_filegroup", |
| 476 | "@llvm-project//compiler-rt:fuzzer_filegroup", |
| 477 | "@llvm-project//compiler-rt:sanitizer_filegroup", |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 478 | ], |
| 479 | visibility = ["//visibility:public"], |
| 480 | ) |
| 481 | |
| 482 | bindings_for_toolchain_headers( |
| 483 | name = "cc_std", |
| 484 | hdrs = ":toolchain_headers", |
Marcel Hlopko | 457bdef | 2022-05-18 06:01:49 -0700 | [diff] [blame] | 485 | public_libc_hdrs = LIBC_HEADERS, |
| 486 | public_libcxx_hdrs = LIBCXX_HEADERS, |
Googler | 6c3de12 | 2022-03-28 11:40:41 +0000 | [diff] [blame] | 487 | visibility = ["//visibility:public"], |
| 488 | ) |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 489 | |
| 490 | cc_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", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 497 | "@absl//absl/status:statusor", |
| 498 | "@absl//absl/types:span", |
| 499 | "@llvm-project//llvm:Support", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 500 | ], |
| 501 | ) |
| 502 | |
| 503 | cc_test( |
| 504 | name = "cc_collect_instantiations_test", |
| 505 | srcs = ["collect_instantiations_test.cc"], |
| 506 | deps = [ |
| 507 | ":cc_collect_instantiations", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 508 | "//common:rust_allocator_shims", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 509 | "//common:status_test_matchers", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 510 | "//common:test_utils", |
Luca Versari | c21d92f | 2022-05-25 00:56:30 -0700 | [diff] [blame] | 511 | "@com_google_googletest//:gtest_main", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 512 | ], |
| 513 | ) |
| 514 | |
| 515 | rust_library( |
| 516 | name = "collect_instantiations", |
| 517 | srcs = ["collect_instantiations.rs"], |
| 518 | deps = [ |
Devin Jeanpierre | 3a0cc5a | 2022-07-12 09:36:34 -0700 | [diff] [blame] | 519 | "//common:arc_anyhow", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 520 | "//common:ffi_types", |
| 521 | "//common:token_stream_printer", |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 522 | "@crate_index//:proc-macro2", |
| 523 | "@crate_index//:serde_json", |
| 524 | "@crate_index//:syn", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 525 | ], |
| 526 | ) |
| 527 | |
| 528 | rust_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 = [ |
Googler | 75c7ad0 | 2022-05-23 13:27:49 -0700 | [diff] [blame] | 537 | "@crate_index//:quote", |
Marcel Hlopko | b10e49b | 2022-05-09 03:57:32 -0700 | [diff] [blame] | 538 | ], |
| 539 | ) |
Rosica Dejanovska | 8575a84 | 2022-09-01 02:05:30 -0700 | [diff] [blame^] | 540 | |
| 541 | cc_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 | |
| 555 | cc_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 | ) |