blob: c0bd4b8b1bcca41e1e47dfc6309f46b4b58d5c55 [file] [log] [blame]
Googler741ed9c2021-10-01 08:00:49 +00001// Part of the Crubit project, under the Apache License v2.0 with LLVM
2// Exceptions. See /LICENSE for license information.
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4
Dmitri Gribenkoe4e77d02022-03-17 14:09:39 +00005#ifndef CRUBIT_RS_BINDINGS_FROM_CC_IR_FROM_CC_H_
6#define CRUBIT_RS_BINDINGS_FROM_CC_IR_FROM_CC_H_
Googler741ed9c2021-10-01 08:00:49 +00007
Marcel Hlopko7aa38a72021-11-11 07:39:51 +00008#include <string>
9
Lukasz Anforowiczcec7a8a2022-04-27 10:24:51 -070010#include "absl/container/flat_hash_map.h"
11#include "absl/status/statusor.h"
12#include "absl/strings/string_view.h"
13#include "absl/types/span.h"
Marcel Hlopko3b254b32022-03-09 14:10:49 +000014#include "rs_bindings_from_cc/bazel_types.h"
15#include "rs_bindings_from_cc/ir.h"
Googler741ed9c2021-10-01 08:00:49 +000016
Marcel Hlopkof15e8ce2022-04-08 08:46:09 -070017namespace crubit {
Googler741ed9c2021-10-01 08:00:49 +000018
Devin Jeanpierredf4dc8b2021-10-21 12:53:19 +000019// Parses C++ source code into IR.
20//
21// Parameters:
Marcel Hlopko7aa38a72021-11-11 07:39:51 +000022// * `extra_source_code`: C++ source code to be written into a virtual header
23// and included in binding generation. Intended for testing only.
24// * `current_target`: full label of the target for which we generate bindings.
25// If not specified `//test:testing_target` is used.
26// * `public_headers`: names of headers from which we build the Clang AST. If
27// `extra_source_code` is specified its header will be added automatically.
28// * `virtual_headers_contents`: names and contents of virtual headers that
29// will be created in the virtual filesystem. These headers have to be
30// manually added to `public_headers` if needed.
31// * `headers_to_targets`: mapping of headers to the label of the owning target.
32// If `extra_source_code` is specified it's added automatically under
33// `//test:testing_target`. Headers from `virtual_headers_contents` are not
34// added automatically.
Devin Jeanpierredf4dc8b2021-10-21 12:53:19 +000035// * `args`: additional command line arguments for Clang
36//
Michael Forster3f323be2021-10-11 07:13:28 +000037absl::StatusOr<IR> IrFromCc(
Marcel Hlopko7aa38a72021-11-11 07:39:51 +000038 absl::string_view extra_source_code,
Googler6c3de122022-03-28 11:40:41 +000039 BazelLabel current_target = BazelLabel{"//test:testing_target"},
Marcel Hlopko7aa38a72021-11-11 07:39:51 +000040 absl::Span<const HeaderName> public_headers = {},
41 absl::flat_hash_map<const HeaderName, const std::string>
42 virtual_headers_contents = {},
Googler6c3de122022-03-28 11:40:41 +000043 absl::flat_hash_map<const HeaderName, const BazelLabel> headers_to_targets =
Googlere05154d2022-01-10 08:39:03 +000044 {},
Michael Forster3f323be2021-10-11 07:13:28 +000045 absl::Span<const absl::string_view> args = {});
Googler741ed9c2021-10-01 08:00:49 +000046
Marcel Hlopkof15e8ce2022-04-08 08:46:09 -070047} // namespace crubit
Googler741ed9c2021-10-01 08:00:49 +000048
Dmitri Gribenkoe4e77d02022-03-17 14:09:39 +000049#endif // CRUBIT_RS_BINDINGS_FROM_CC_IR_FROM_CC_H_