blob: 90d60362dc351fff4f02ded52800af4b9a6565de [file] [log] [blame]
// 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