Skip to content

geekbrother/cxx-corrosion-cmake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CMake file for using CXX and Corrosion in CMake project to call Rust functions from C++ and C++ from Rust

This is a fork of the rusty_cmake repository to use CXX and Corrosion in a CMake project with the following modifications:

cxx_corrosion.cmake file:

  • Function to get STEM is removed in a favor of one-line solution;
  • Simplify by using a simple one CMakeLists file for the project;
  • Windows-related code is removed (Linux and MacOS are supported);
  • Minor code changes to simplify and use a modern C++.

Why?

This cmake/corrosion_cxx.cmake can be imported in any CMake project to simplify Rust code usage in C++.

Current solution is a battle-tested and cmake/corrosion_cxx.cmake file is used in a Comm application development.

Current examples

Examples are located in examples folder.

This repo examples can be used as a sandbox playground for testing simple ideas of the Rust library integration in the current C++ CMake project (examples/rust-from-cpp) and as examples of the usage and calling C++ code from Rust (examples/cpp-from-rust).

Calling Rust code from C++

Code examples to call Rust functions from C++:

Dependencies

  • Linux or MacOS
  • CMake
  • Clang
  • Corrosion
  • Rustup
  • Nix (optional) or Docker (optional)

Build

Using CMake

Run CMake and build commands in the examples/rust-from-cpp folder:

cmake -B build . && make -C build -j4.

Then you can run the example app by calling:

build/cxx_cmake.

In Nix

If you are using Nix as a development environment you can use a nix shell with all dependencies:

nix-shell -p cmake -p clang -p rustup -p corrosion -p libiconv -p git --pure

And then run build commands from the CMake section above.

In Docker

There is a Docker file to build and run the example app in Docker container. To build it run the build command from the project root directory:

docker build . -t cxx-corrosion-cmake -f examples/Dockerfile

Then you can run the example app by calling:

docker run cxx-corrosion-cmake

Todo

Create a packages in package managers to help tracking updates in the project instead of manually track the changes.

  • Make it nix package
  • Make it vcpkg package

Sponsors ❤️

Comm.app is a crypto-native chat (think "Web3 Discord").