commit | 7a7b81f4e7e1ed76fc81f066055a87c1412f01fd | [log] [tgz] |
---|---|---|
author | Lukasz Anforowicz <lukasza@google.com> | Thu Jan 12 15:50:46 2023 -0800 |
committer | Copybara-Service <copybara-worker@google.com> | Thu Jan 12 15:51:28 2023 -0800 |
tree | 15a039bca9de9b08dd4b40c0114bb3e1c1653dea | |
parent | 554ed655aea4d34ef7da79a296ff87ed700f40f1 [diff] |
C++ function declarations only need `CcPrerequsites::fwd_decls`. A Rust function that is `#[no_mangle]` and `extern "C"` only needs to be redeclared in the generated `..._cc_api.h` file - there is no need to forward the call to a thunk and therefore there is no need for a function definition. Forward declarations are sufficient for parameter types used in function declarations (i.e. these parameter types don't require a full definition before the function declaration). For the scenario described above this CL: * Adds tests * Fixes how `format_fn` populates `CcPrerequsites` PiperOrigin-RevId: 501687846
Extremely experimental interop tooling 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.
$ 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