commit | bad99636a426792298ccebcedcc67ac87d5043a3 | [log] [tgz] |
---|---|---|
author | Lukasz Anforowicz <lukasza@google.com> | Fri Nov 18 16:39:13 2022 -0800 |
committer | Copybara-Service <copybara-worker@google.com> | Fri Nov 18 16:39:42 2022 -0800 |
tree | b51fb348e595f04d49ba5a6bc0643688471558c2 | |
parent | 2f849cffd6c7cb5c0988b7c805cd51e7ebdc618b [diff] |
Merge `api` and `cc_impl` fields of `BindingsSnippet`. Before this CL, (optional) thunk declarations would go into `cc_impl` and API functions would go into the `api` field of `BindingsSnippet`. `cc_impl` would be emitted in a separate `__crubit_internal` namespace that would go before `api` in the generated `...cc_api.h` file. This scheme aesthetically separates implementation details (thunk declarations in the `__crubit_internal` namespace) from the real API. Unfortunately, this scheme will break down in the future - once `struct`s can be used as function parameters, because `stucts` definitions are part of the API, but thunk declarations still need to refer to them. Therefore, after this CL, `cc_impl` and `api` fields of `BindingsSnippet` are merged into a single field. This CL also performs additional refactorings in the related code: - The `api` field is renamed to `cc` - The `rs_impl` field is renamed to `rs` - `BindingsSnippet` is renamed to `MixedSnippet` (since now it contains `cc` and `rs` fields - a mix of C++ and Rust). - Instead of having a separate `include` and `cc` fields, we A) remove the `include`, B) change the type of the `cc` field from `TokenStream` to `CcSnippet` (which internally already contains `includes` and a `TokenStream`). PiperOrigin-RevId: 489588797
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