Features • Installation • License • Documentation
Clarabel.cpp is a C/C++ wrapper of Clarabel.rs.
Note: The C++ interface is WIP and there might be breaking changes in future releases.
Clarabel.cpp uses CMake to generate the build system and requires the following dependencies:
- Rust
- Clarabel.rs (included as a submodule)
- A compiler that supports C11 and C++11
- Eigen (optional for the C++ interface)
You may install Eigen via the system package manager on Unix-like systems or vcpkg on Windows.
- Follow the vcpkg instructions to compile vcpkg and add
vcpkg.exe
toPATH
.
Ubuntu:
sudo apt install libeigen3-dev
Windows:
vcpkg install eigen3:x64-windows
- For 32-bit platforms, use
eigen3:x86-windows
instead ofeigen3:x64-windows
.
git clone --recurse-submodules https://github.com/oxfordcontrol/Clarabel.cpp.git
cd Clarabel.cpp
mkdir build
cd build
cmake ..
cmake --build .
You may specify a particular build system using the -G
flag for cmake
(e.g. -G "Unix Makefiles"
).
If you are using vcpkg on Windows, you may find the vcpkg toolchain file using:
vcpkg integrate install
and then specify the vcpkg toolchain file path and target triplet to generate the build system using:
cmake .. -DCMAKE_TOOLCHAIN_FILE=VCPKG_TOOLCHAIN_PATH -DVCPKG_TARGET_TRIPLET=x64-windows
where VCPKG_TOOLCHAIN_PATH
is the path to the vcpkg toolchain file.
- For 32-bit platforms, use
x86-windows
instead ofx64-windows
.
To enable SDP features, set the -DCLARABEL_FEATURE_SDP
option to one of the following values:
sdp-accelerate
sdp-netlib
sdp-openblas
sdp-mkl
sdp-r
By default, -DCLARABEL_FEATURE_SDP=none
and SDP support is disabled.
To enable reading and writing of problem data to JSON files, set
-DCLARABEL_FEATURE_SERDE=true
.
When reporting issues with the solver, it can be helpful to provide a JSON file that reproduces the problem.
To enable the faer-rs sparse linear algebra library as an additional solver option, set -DCLARABEL_FEATURE_FAER_SPARSE=true
.
To enable the MKL Pardiso
sparse linear algebra library as an additional solver option, set -DCLARABEL_FEATURE_PARDISO_MKL=true
.
The solver will dynamically link to the MKL library, which must be accessible via the system library path (e.g. on LD_LIBRARY_PATH
on Linux).
Alternatively, set the MKLROOT
environment variable to the root of the MKL installation or MKL_PARDISO_PATH
to the location of the MKL Pardiso library (e.g. the location of libmkl_rt.so
in Linux).
To enable the Panua Pardiso
sparse linear algebra library as an additional solver option, set -DCLARABEL_FEATURE_PARDISO_PANUA=true
. This library is not open source and requires a license.
The solver will dynamically link to the Panua Pardiso library, which must be accessible via the system library path (e.g. on LD_LIBRARY_PATH
on Linux).
Alternatively, set the PARDISO_PATH
environment variable to the location of the Panua Pardiso library (e.g. the location of libpardiso.so
in Linux).
By default, unit tests are disabled to reduce build time. To enable unit tests, set -DCLARABEL_BUILD_TESTS=true
in cmake.
The solver will build the Rust source in debug mode. To build in release mode, set -DCMAKE_BUILD_TYPE=Release
in cmake.
Examples for both C and C++ are available in examples/c
and examples/cpp
and can be run from the build
directory using:
./examples/c/C_EXAMPLE
./examples/cpp/CPP_EXAMPLE
- Link to the
libclarabel_c_shared
(shared library) orlibclarabel_c_static
(static library) target in CMake. #include <Clarabel>
in your C/C++ source files.
This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.