From 787d9c244ff6cdc699c6455e97a5ae671b0d57be Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Thu, 28 Mar 2024 15:19:19 +0100 Subject: [PATCH 1/6] add include directories explicitly --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f3eef7..ad5282d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,11 @@ set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED True) + +# 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 From f67a068ddf78a40b7b3f285c5eff26104fa23083 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Thu, 28 Mar 2024 15:19:44 +0100 Subject: [PATCH 2/6] make building example optional --- CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ad5282d..51d79e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ 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 +set_property(CACHE CLARABEL_FEATURE_SDP PROPERTY STRINGS none sdp-accelerate sdp-netlib @@ -42,7 +42,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 ef8e4a87e0f07f2cd15d1e023354c8c56d7446a0 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Thu, 28 Mar 2024 15:21:29 +0100 Subject: [PATCH 3/6] allow setting CLARABEL_C_OUTPUT_DIR from outside --- rust_wrapper/CMakeLists.txt | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/rust_wrapper/CMakeLists.txt b/rust_wrapper/CMakeLists.txt index 46cf701..e86a972 100644 --- a/rust_wrapper/CMakeLists.txt +++ b/rust_wrapper/CMakeLists.txt @@ -10,19 +10,25 @@ 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 "${CMAKE_SOURCE_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 "${CMAKE_SOURCE_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) # SDP feature flag if(NOT CLARABEL_FEATURE_SDP STREQUAL "none") # Set the Rust feature flag set(clarabel_c_build_flags "${clarabel_c_build_flags};--features;${CLARABEL_FEATURE_SDP}") - # 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) @@ -31,7 +37,7 @@ endif() # Add the cargo project as a custom target add_custom_target( libclarabel_c - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/rust_wrapper + 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 @@ -43,14 +49,14 @@ add_custom_target( # 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() # Wrap the Rust library in a CMake library target From 76461c1107556568f4936cd4dcecdbb66352571d Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Tue, 2 Apr 2024 13:40:56 +0200 Subject: [PATCH 4/6] 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 e86a972..6b4e60b 100644 --- a/rust_wrapper/CMakeLists.txt +++ b/rust_wrapper/CMakeLists.txt @@ -37,7 +37,7 @@ endif() # 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 47f1bebdc764d605342381785c2a7c2e3a5c4518 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Tue, 2 Apr 2024 13:42:28 +0200 Subject: [PATCH 5/6] 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 6b4e60b..9a40a40 100644 --- a/rust_wrapper/CMakeLists.txt +++ b/rust_wrapper/CMakeLists.txt @@ -45,6 +45,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} ) # Get the path to the Rust library for linking From a959fad1a4a2a958796b56983f57708b87d7fde3 Mon Sep 17 00:00:00 2001 From: Jonathan Frey Date: Thu, 25 Jul 2024 15:19:50 +0200 Subject: [PATCH 6/6] this works with acados --- CMakeLists.txt | 12 +++++++++++- rust_wrapper/CMakeLists.txt | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 51d79e1..854eb08 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,4 +52,14 @@ option(CLARABEL_BUILD_TESTS "Build the unit tests for Clarabel.cpp" false) if(CLARABEL_BUILD_TESTS) enable_testing() add_subdirectory(tests) -endif() \ No newline at end of file +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 9a40a40..367f133 100644 --- a/rust_wrapper/CMakeLists.txt +++ b/rust_wrapper/CMakeLists.txt @@ -71,3 +71,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 ${CMAKE_SOURCE_DIR}/include) add_dependencies(libclarabel_c_shared libclarabel_c) + +install(FILES "${CLARABEL_C_OUTPUT_DIR}/libclarabel_c.so" DESTINATION "lib")