commit | d0b899707b25d824d72ecffaf8ed3433bf30791e | [log] [tgz] |
---|---|---|
author | Sam McCall <sammccall@google.com> | Wed Jun 28 12:22:36 2023 -0700 |
committer | Copybara-Service <copybara-worker@google.com> | Wed Jun 28 12:23:16 2023 -0700 |
tree | c6f16907f61d16523485cc1d278772b3f0a2feba | |
parent | 89959d5cf81d21edd78e89d6555d255f1ddc80fc [diff] |
Simplify tests, drop analyze_target_for_test analyze_target_for_test forces the AST-consuming code into a callback, and doesn't simplify much. infer_nullability_constraints_test: use clang::TestAST and findValueDecl directly Also fix use-after-free: pointers returned by inferAnnotationsForTargetFunction dangled. while here, Target => target. safety_constraint_generator_test: use dataflow::test::checkDataflow. Avoid difficult-to-debug matchers-containing-callbacks by expressing the constraints as strings, assigning names to the variables we care about. While here, Target => target. safety_constraint_generator: pass Lattice/Env separately instead of in a pair type, to avoid ugly conversions (and copies!) between different pair types in tests PiperOrigin-RevId: 544127985
Crubit is an experimental bidirectional bindings generator for C++ and Rust.
Please don‘t use, this is an experiment and we don’t yet know where will it take us. There will be breaking changes without warning. Unfortunately, we can't take contributions at this point.
Crubit allows for C++ code and Rust code to call each other without manually wrapping the APIs in an FFI-friendly interop layer. For example, a C++ function like this:
bool IsAbsPath(std::string_view path);
... becomes callable from Rust as if it were defined as:
pub fn IsAbsPath(path: std::string_view) -> bool {...}
Crubit automatically generates ABI-compatible bindings for structs (which can be passed both by value and by reference), functions, and methods, for a large variety of types. (Trivial types, nontrivial types, templated types, etc.)
$ apt install clang lld bazel $ git clone git@github.com:google/crubit.git $ cd crubit $ bazel build --linkopt=-fuse-ld=/usr/bin/ld.lld //rs_bindings_from_cc:rs_bindings_from_cc_impl
$ git clone https://github.com/llvm/llvm-project $ cd llvm-project $ CC=clang CXX=clang++ cmake -S llvm -B build -DLLVM_ENABLE_PROJECTS='clang' -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install $ cmake --build build -j $ # wait... $ cmake --install build $ cd ../crubit $ LLVM_INSTALL_PATH=../llvm-project/install bazel build //rs_bindings_from_cc:rs_bindings_from_cc_impl