From df92c52c20fa193c87d85bd8d26395c7a2cfcb54 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Thu, 28 Mar 2024 15:19:19 +0100 Subject: [PATCH 1/7] add include directories explicitly --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ae42f5..a1f82df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,12 @@ set(CLARABEL_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") #---------------------------------------------- # Clarabel feature configuration #---------------------------------------------- + +# Include directories +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/c) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + +# SDP feature configuration set(CLARABEL_FEATURE_SDP "none" CACHE STRING "Package for SDP to be selected") set_property(CACHE CLARABEL_FEATURE_SDP PROPERTY STRINGS none From cee39e20fbf55cd38c8b55df6b888ccddc2b85e2 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Thu, 28 Mar 2024 15:19:44 +0100 Subject: [PATCH 2/7] make building example optional --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a1f82df..2013409 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,7 +62,10 @@ endif() add_subdirectory(rust_wrapper) # Add other subdirectories -add_subdirectory(examples) +option(CLARABEL_BUILD_EXAMPLES "Build examples for Clarabel.cpp" true) +if(CLARABEL_BUILD_EXAMPLES) + add_subdirectory(examples) +endif() # Add tests option(CLARABEL_BUILD_TESTS "Build the unit tests for Clarabel.cpp" false) From 511019d3b7d214e4cbb69b5f7b28f53529a0c031 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Thu, 28 Mar 2024 15:21:29 +0100 Subject: [PATCH 3/7] allow setting CLARABEL_C_OUTPUT_DIR from outside --- rust_wrapper/CMakeLists.txt | 45 +++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/rust_wrapper/CMakeLists.txt b/rust_wrapper/CMakeLists.txt index 7cd7671..5c37ac8 100644 --- a/rust_wrapper/CMakeLists.txt +++ b/rust_wrapper/CMakeLists.txt @@ -10,13 +10,20 @@ add_library(libclarabel_c_shared INTERFACE) # Debug/Release flags if(CMAKE_BUILD_TYPE MATCHES Release) set(clarabel_c_build_flags "--release") - set(clarabel_c_output_directory "${CLARABEL_ROOT_DIR}/rust_wrapper/target/release") + set(clarabel_c_output_directory "${CMAKE_PROJECT_DIR}/rust_wrapper/target/release") else() set(clarabel_c_build_flags "") - set(clarabel_c_output_directory "${CLARABEL_ROOT_DIR}/rust_wrapper/target/debug") + set(clarabel_c_output_directory "${CMAKE_PROJECT_DIR}/rust_wrapper/target/debug") +endif() + +if (CLARABEL_C_OUTPUT_DIR) + message(STATUS "using CLARABEL_C_OUTPUT_DIR ${CLARABEL_C_OUTPUT_DIR}") +else() + set(CLARABEL_C_OUTPUT_DIR ${clarabel_c_output_directory} PARENT_SCOPE) + set(CLARABEL_C_OUTPUT_DIR ${clarabel_c_output_directory}) + message(STATUS "setting CLARABEL_C_OUTPUT_DIR to ${clarabel_c_output_directory}") endif() -set(CLARABEL_C_OUTPUT_DIR ${clarabel_c_output_directory} PARENT_SCOPE) if(NOT DEFINED CLARABEL_CARGO_FEATURES) set(CLARABEL_CARGO_FEATURES "") @@ -80,6 +87,7 @@ endfunction() if(NOT CLARABEL_FEATURE_SDP STREQUAL "none") +<<<<<<< HEAD append_feature(CLARABEL_CARGO_FEATURES "${CLARABEL_FEATURE_SDP}") endif() @@ -108,11 +116,16 @@ endif() rust_features_has_sdp(CONFIG_SDP) if(CONFIG_SDP) +======= + # Set the Rust feature flag + set(clarabel_c_build_flags "${clarabel_c_build_flags};--features;${CLARABEL_FEATURE_SDP}") +>>>>>>> ef8e4a8 (allow setting CLARABEL_C_OUTPUT_DIR from outside) # Define the FEATURE_SDP flag for all targets that link against clarabel_c target_compile_definitions(libclarabel_c_static INTERFACE FEATURE_SDP) target_compile_definitions(libclarabel_c_shared INTERFACE FEATURE_SDP) endif() +<<<<<<< HEAD rust_feature_is_enabled("faer-sparse" CONFIG_FAER_SPARSE) if(CONFIG_FAER_SPARSE) target_compile_definitions(libclarabel_c_static INTERFACE FEATURE_FAER_SPARSE) @@ -165,17 +178,31 @@ message("-- Cargo options: " "${clarabel_c_build_flags}") # ------------------------------------- # ------------------------------------- +======= +# Add the cargo project as a custom target +add_custom_target( + libclarabel_c + WORKING_DIRECTORY ${CMAKE_PROJECT_DIR}/rust_wrapper + # Commands for building the Rust library + COMMAND cargo build ${clarabel_c_build_flags} + COMMAND cargo install cbindgen --version 0.24.5 + # Generate the C header + COMMAND cbindgen --config cbindgen.toml --crate clarabel_c --output ./headers/clarabel.h --lang c + # Generate the C++ header + COMMAND cbindgen --config cbindgen.toml --crate clarabel_c --output ./headers/clarabel.hpp +) +>>>>>>> ef8e4a8 (allow setting CLARABEL_C_OUTPUT_DIR from outside) # Get the path to the Rust library for linking if(APPLE) - set(LIBCLARABEL_C_SHARED_PATH "${clarabel_c_output_directory}/libclarabel_c.dylib") - set(LIBCLARABEL_C_STATIC_PATH "${clarabel_c_output_directory}/libclarabel_c.a") + set(LIBCLARABEL_C_SHARED_PATH "${CLARABEL_C_OUTPUT_DIR}/libclarabel_c.dylib") + set(LIBCLARABEL_C_STATIC_PATH "${CLARABEL_C_OUTPUT_DIR}/libclarabel_c.a") elseif(UNIX) - set(LIBCLARABEL_C_SHARED_PATH "${clarabel_c_output_directory}/libclarabel_c.so") - set(LIBCLARABEL_C_STATIC_PATH "${clarabel_c_output_directory}/libclarabel_c.a") + set(LIBCLARABEL_C_SHARED_PATH "${CLARABEL_C_OUTPUT_DIR}/libclarabel_c.so") + set(LIBCLARABEL_C_STATIC_PATH "${CLARABEL_C_OUTPUT_DIR}/libclarabel_c.a") elseif(WIN32) - set(LIBCLARABEL_C_SHARED_PATH "${clarabel_c_output_directory}/clarabel_c.dll.lib") - set(LIBCLARABEL_C_STATIC_PATH "${clarabel_c_output_directory}/clarabel_c.lib") + set(LIBCLARABEL_C_SHARED_PATH "${CLARABEL_C_OUTPUT_DIR}/clarabel_c.dll.lib") + set(LIBCLARABEL_C_STATIC_PATH "${CLARABEL_C_OUTPUT_DIR}/clarabel_c.lib") endif() From 385148ffb24122525318f0bd90a5fbde70e3bdb3 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Tue, 2 Apr 2024 13:40:56 +0200 Subject: [PATCH 4/7] use PROJECT_SOURCE_DIR instead of CMAKE_PROJECT_DIR --- rust_wrapper/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust_wrapper/CMakeLists.txt b/rust_wrapper/CMakeLists.txt index 5c37ac8..04b9a7d 100644 --- a/rust_wrapper/CMakeLists.txt +++ b/rust_wrapper/CMakeLists.txt @@ -182,7 +182,7 @@ message("-- Cargo options: " "${clarabel_c_build_flags}") # Add the cargo project as a custom target add_custom_target( libclarabel_c - WORKING_DIRECTORY ${CMAKE_PROJECT_DIR}/rust_wrapper + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} # Commands for building the Rust library COMMAND cargo build ${clarabel_c_build_flags} COMMAND cargo install cbindgen --version 0.24.5 From 49775dd47d5ff925e4966c0d2e64bca95a647a69 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Tue, 2 Apr 2024 13:42:28 +0200 Subject: [PATCH 5/7] copy lib to CLARABEL_C_OUTPUT_DIR --- rust_wrapper/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/rust_wrapper/CMakeLists.txt b/rust_wrapper/CMakeLists.txt index 04b9a7d..ce47e44 100644 --- a/rust_wrapper/CMakeLists.txt +++ b/rust_wrapper/CMakeLists.txt @@ -190,6 +190,7 @@ add_custom_target( COMMAND cbindgen --config cbindgen.toml --crate clarabel_c --output ./headers/clarabel.h --lang c # Generate the C++ header COMMAND cbindgen --config cbindgen.toml --crate clarabel_c --output ./headers/clarabel.hpp + COMMAND cp ${PROJECT_SOURCE_DIR}/target/release/lib* ${CLARABEL_C_OUTPUT_DIR} ) >>>>>>> ef8e4a8 (allow setting CLARABEL_C_OUTPUT_DIR from outside) From cf01ad1eb0aab78ae8bbf4e4d52f85eb1ebe4751 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Thu, 25 Jul 2024 15:19:50 +0200 Subject: [PATCH 6/7] this works with acados --- CMakeLists.txt | 10 ++++++++++ rust_wrapper/CMakeLists.txt | 2 ++ 2 files changed, 12 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2013409..d9ef7ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,3 +73,13 @@ if(CLARABEL_BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() + + +message(STATUS "Clarabel.cpp: CMAKE_INSTALL_LIBDIR = ${CMAKE_INSTALL_LIBDIR}") +message(STATUS "Clarabel.cpp: LIBRARY = ${LIBRARY}") +message(STATUS "Clarabel.cpp: PROJECT_NAME = ${PROJECT_NAME}") +install(TARGETS libclarabel_c_shared EXPORT ${PROJECT_NAME} + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ) + +install(EXPORT ${PROJECT_NAME} DESTINATION cmake) diff --git a/rust_wrapper/CMakeLists.txt b/rust_wrapper/CMakeLists.txt index ce47e44..17aeb9d 100644 --- a/rust_wrapper/CMakeLists.txt +++ b/rust_wrapper/CMakeLists.txt @@ -235,3 +235,5 @@ add_dependencies(libclarabel_c_static libclarabel_c) target_link_libraries(libclarabel_c_shared INTERFACE ${LIBCLARABEL_C_SHARED_PATH}) target_include_directories(libclarabel_c_shared INTERFACE ${CLARABEL_ROOT_DIR}/include) add_dependencies(libclarabel_c_shared libclarabel_c) + +install(FILES "${CLARABEL_C_OUTPUT_DIR}/libclarabel_c.so" DESTINATION "lib") From c73eb64352f17fc18bc10fe3c082fcbf9a3c0487 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Fri, 4 Jul 2025 14:05:16 +0200 Subject: [PATCH 7/7] fix merge artifact --- rust_wrapper/CMakeLists.txt | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/rust_wrapper/CMakeLists.txt b/rust_wrapper/CMakeLists.txt index 17aeb9d..3ad17ac 100644 --- a/rust_wrapper/CMakeLists.txt +++ b/rust_wrapper/CMakeLists.txt @@ -87,7 +87,6 @@ endfunction() if(NOT CLARABEL_FEATURE_SDP STREQUAL "none") -<<<<<<< HEAD append_feature(CLARABEL_CARGO_FEATURES "${CLARABEL_FEATURE_SDP}") endif() @@ -116,16 +115,13 @@ endif() rust_features_has_sdp(CONFIG_SDP) if(CONFIG_SDP) -======= # Set the Rust feature flag set(clarabel_c_build_flags "${clarabel_c_build_flags};--features;${CLARABEL_FEATURE_SDP}") ->>>>>>> ef8e4a8 (allow setting CLARABEL_C_OUTPUT_DIR from outside) # Define the FEATURE_SDP flag for all targets that link against clarabel_c target_compile_definitions(libclarabel_c_static INTERFACE FEATURE_SDP) target_compile_definitions(libclarabel_c_shared INTERFACE FEATURE_SDP) endif() -<<<<<<< HEAD rust_feature_is_enabled("faer-sparse" CONFIG_FAER_SPARSE) if(CONFIG_FAER_SPARSE) target_compile_definitions(libclarabel_c_static INTERFACE FEATURE_FAER_SPARSE) @@ -178,7 +174,6 @@ message("-- Cargo options: " "${clarabel_c_build_flags}") # ------------------------------------- # ------------------------------------- -======= # Add the cargo project as a custom target add_custom_target( libclarabel_c @@ -192,7 +187,6 @@ add_custom_target( COMMAND cbindgen --config cbindgen.toml --crate clarabel_c --output ./headers/clarabel.hpp COMMAND cp ${PROJECT_SOURCE_DIR}/target/release/lib* ${CLARABEL_C_OUTPUT_DIR} ) ->>>>>>> ef8e4a8 (allow setting CLARABEL_C_OUTPUT_DIR from outside) # Get the path to the Rust library for linking if(APPLE) @@ -208,20 +202,20 @@ endif() # Add the cargo project as a custom target -add_custom_target( - libclarabel_c - WORKING_DIRECTORY ${CLARABEL_ROOT_DIR}/rust_wrapper - # Commands for building the Rust library - COMMAND cargo build ${clarabel_c_build_flags} - COMMAND cargo install cbindgen - # Generate the C header - COMMAND cbindgen --config cbindgen.toml --quiet --crate clarabel_c --output ./headers/clarabel.h --lang c - # Generate the C++ header - COMMAND cbindgen --config cbindgen.toml --quiet --crate clarabel_c --output ./headers/clarabel.hpp - BYPRODUCTS - "${LIBCLARABEL_C_SHARED_PATH}" - "${LIBCLARABEL_C_STATIC_PATH}" -) +# add_custom_target( +# libclarabel_c +# WORKING_DIRECTORY ${CLARABEL_ROOT_DIR}/rust_wrapper +# # Commands for building the Rust library +# COMMAND cargo build ${clarabel_c_build_flags} +# COMMAND cargo install cbindgen +# # Generate the C header +# COMMAND cbindgen --config cbindgen.toml --quiet --crate clarabel_c --output ./headers/clarabel.h --lang c +# # Generate the C++ header +# COMMAND cbindgen --config cbindgen.toml --quiet --crate clarabel_c --output ./headers/clarabel.hpp +# BYPRODUCTS +# "${LIBCLARABEL_C_SHARED_PATH}" +# "${LIBCLARABEL_C_STATIC_PATH}" +# ) # Wrap the Rust library in a CMake library target