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

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c3a7b1e · Jun 3, 2024

History

71 Commits
Sep 19, 2023
Feb 27, 2024
Jun 3, 2024
Jun 3, 2024
Jun 3, 2024
Jun 3, 2024
May 31, 2024
Aug 13, 2023
Aug 4, 2023
Jul 3, 2023
Jun 3, 2024
Oct 11, 2023
Jun 3, 2024

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 use of the faer-rs sparse linear algebra library as an additional solver option, set -DCLARABEL_FEATURE_FAER_SPARSE=true.

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.