| // Part of the Crubit project, under the Apache License v2.0 with LLVM |
| // Exceptions. See /LICENSE for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| #include "rs_bindings_from_cc/generate_bindings_and_metadata.h" |
| |
| #include "common/status_macros.h" |
| #include "rs_bindings_from_cc/collect_instantiations.h" |
| #include "rs_bindings_from_cc/ir_from_cc.h" |
| #include "rs_bindings_from_cc/src_code_gen.h" |
| |
| namespace crubit { |
| |
| absl::StatusOr<BindingsAndMetadata> GenerateBindingsAndMetadata( |
| Cmdline& cmdline, std::vector<std::string> clang_args, |
| absl::flat_hash_map<const HeaderName, const std::string> |
| virtual_headers_contents) { |
| std::vector<absl::string_view> clang_args_view; |
| clang_args_view.insert(clang_args_view.end(), clang_args.begin(), |
| clang_args.end()); |
| |
| CRUBIT_ASSIGN_OR_RETURN( |
| std::vector<std::string> requested_instantiations, |
| crubit::CollectInstantiations(cmdline.rust_sources())); |
| |
| CRUBIT_ASSIGN_OR_RETURN( |
| IR ir, crubit::IrFromCc( |
| /* extra_source_code= */ "", cmdline.current_target(), |
| cmdline.public_headers(), virtual_headers_contents, |
| cmdline.headers_to_targets(), clang_args_view, |
| requested_instantiations)); |
| |
| CRUBIT_ASSIGN_OR_RETURN( |
| crubit::Bindings bindings, |
| crubit::GenerateBindings(ir, cmdline.crubit_support_path(), |
| cmdline.rustfmt_exe_path(), |
| cmdline.rustfmt_config_path())); |
| |
| return BindingsAndMetadata{ |
| .ir = ir, |
| .rs_api = bindings.rs_api, |
| .rs_api_impl = bindings.rs_api_impl, |
| }; |
| } |
| |
| } // namespace crubit |