Skip to content

Clarabel.cpp: C/C++ interface to the Clarabel Interior-point solver for convex conic optimisation problems.

License

Notifications You must be signed in to change notification settings

oxfordcontrol/Clarabel.cpp

Repository files navigation

FeaturesInstallationLicenseDocumentation

Clarabel.cpp is a C/C++ wrapper of Clarabel.rs.

Installation

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 to PATH.

Ubuntu:

sudo apt install libeigen3-dev

Windows:

vcpkg install eigen3:x64-windows
  • For 32-bit platforms, use eigen3:x86-windows instead of eigen3:x64-windows.

Clone this repo

git clone --recurse-submodules https://github.com/oxfordcontrol/Clarabel.cpp.git
cd Clarabel.cpp

Build

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").

Windows

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 of x64-windows.

CMake options

SDP support

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.

JSON file input/output support

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.

Alternative linear algebra libraries

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).

Unit tests

By default, unit tests are disabled to reduce build time. To enable unit tests, set -DCLARABEL_BUILD_TESTS=true in cmake.

Release mode

The solver will build the Rust source in debug mode. To build in release mode, set -DCMAKE_BUILD_TYPE=Release in cmake.

Run examples

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

Usage

  • Link to the libclarabel_c_shared (shared library) or libclarabel_c_static (static library) target in CMake.
  • #include <Clarabel> in your C/C++ source files.

License 🔍

This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.