Skip to content

Commit b1c1508

Browse files
authored
Merge pull request #286 from nim65s/cmake
CMake: honor BUILD_STANDALONE_PYTHON_INTERFACE option
2 parents 0217fcb + bce9c67 commit b1c1508

File tree

5 files changed

+61
-65
lines changed

5 files changed

+61
-65
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [Unreleased]
99

1010
- Fix value of nEq when removeRigidContact for contact with priority > 0
11+
- update jrl-cmakemodules to v1
12+
- CMake: honor BUILD_STANDALONE_PYTHON_INTERFACE option
1113

1214
## [1.8.0] - 2025-03-29
1315

CMakeLists.txt

Lines changed: 35 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Copyright (c) 2017-2021 CNRS
33
#
44

5-
cmake_minimum_required(VERSION 3.10)
5+
cmake_minimum_required(VERSION 3.22)
66

77
# Project properties
88
set(PROJECT_ORG stack-of-tasks)
@@ -14,8 +14,6 @@ set(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}")
1414

1515
# Project options
1616
option(INSTALL_DOCUMENTATION "Build and install the documentation" OFF)
17-
option(BUILD_PYTHON_INTERFACE "Build the python bindings" ON)
18-
option(INSTALL_PYTHON_INTERFACE_ONLY "Install *ONLY* the python bindings" OFF)
1917
option(SUFFIX_SO_VERSION "Suffix library name with its version" ON)
2018
option(INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" OFF)
2119
option(EIGEN_RUNTIME_NO_MALLOC
@@ -38,9 +36,9 @@ add_definitions(-Wno-sign-conversion)
3836
add_definitions(-Werror=suggest-override)
3937

4038
# Project configuration
41-
if(NOT INSTALL_PYTHON_INTERFACE_ONLY)
39+
if(NOT BUILD_STANDALONE_PYTHON_INTERFACE)
4240
set(PROJECT_USE_CMAKE_EXPORT TRUE)
43-
endif(NOT INSTALL_PYTHON_INTERFACE_ONLY)
41+
endif()
4442
set(CXX_DISABLE_WERROR TRUE)
4543
set(DOXYGEN_USE_MATHJAX YES)
4644
set(CMAKE_VERBOSE_MAKEFILE TRUE)
@@ -57,14 +55,6 @@ else()
5755
TARGET jrl-cmakemodules::jrl-cmakemodules
5856
PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
5957
message(STATUS "JRL cmakemodules found on system at ${JRL_CMAKE_MODULES}")
60-
elseif(${CMAKE_VERSION} VERSION_LESS "3.14.0")
61-
message(
62-
FATAL_ERROR
63-
"\nCan't find jrl-cmakemodules. Please either:\n"
64-
" - use git submodule: 'git submodule update --init'\n"
65-
" - or install https://github.com/jrl-umi3218/jrl-cmakemodules\n"
66-
" - or upgrade your CMake version to >= 3.14 to allow automatic fetching\n"
67-
)
6858
else()
6959
message(STATUS "JRL cmakemodules not found. Let's fetch it.")
7060
include(FetchContent)
@@ -80,8 +70,6 @@ include("${JRL_CMAKE_MODULES}/base.cmake")
8070
include("${JRL_CMAKE_MODULES}/ide.cmake")
8171
include("${JRL_CMAKE_MODULES}/apple.cmake")
8272

83-
set_default_cmake_build_type("RelWithDebInfo")
84-
8573
# Handle APPLE Cmake policy
8674
if(APPLE)
8775
apply_default_apple_configuration()
@@ -112,6 +100,9 @@ check_minimal_cxx_standard(17 ENFORCE)
112100
if(BUILD_PYTHON_INTERFACE)
113101
set(PYWRAP ${PROJECT_NAME}_pywrap)
114102
add_project_dependency(eigenpy 2.7.12 REQUIRED)
103+
if(BUILD_STANDALONE_PYTHON_INTERFACE)
104+
add_project_dependency(${PROJECT_NAME} REQUIRED CONFIG)
105+
endif()
115106
endif(BUILD_PYTHON_INTERFACE)
116107

117108
add_project_dependency(pinocchio 2.3.1 REQUIRED)
@@ -316,45 +307,44 @@ set(${PROJECT_NAME}_SOURCES
316307
add_header_group(${PROJECT_NAME}_HEADERS)
317308
add_source_group(${PROJECT_NAME}_SOURCES)
318309

319-
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES}
320-
${${PROJECT_NAME}_HEADERS})
321-
target_include_directories(
322-
${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
323-
target_link_libraries(${PROJECT_NAME} PUBLIC pinocchio::pinocchio
324-
eiquadprog::eiquadprog)
325-
326-
if(BUILD_WITH_PROXQP)
327-
target_compile_definitions(${PROJECT_NAME} PUBLIC -DTSID_WITH_PROXSUITE)
328-
target_link_libraries(${PROJECT_NAME} PUBLIC proxsuite::proxsuite)
329-
endif()
310+
if(NOT BUILD_STANDALONE_PYTHON_INTERFACE)
311+
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES}
312+
${${PROJECT_NAME}_HEADERS})
313+
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
314+
target_include_directories(
315+
${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
316+
target_link_libraries(${PROJECT_NAME} PUBLIC pinocchio::pinocchio
317+
eiquadprog::eiquadprog)
318+
319+
if(BUILD_WITH_PROXQP)
320+
target_compile_definitions(${PROJECT_NAME} PUBLIC -DTSID_WITH_PROXSUITE)
321+
target_link_libraries(${PROJECT_NAME} PUBLIC proxsuite::proxsuite)
322+
endif()
330323

331-
if(BUILD_WITH_OSQP)
332-
target_link_libraries(${PROJECT_NAME} PUBLIC OsqpEigen::OsqpEigen)
333-
target_compile_definitions(${PROJECT_NAME} PUBLIC -DTSID_WITH_OSQP)
334-
endif()
324+
if(BUILD_WITH_OSQP)
325+
target_link_libraries(${PROJECT_NAME} PUBLIC OsqpEigen::OsqpEigen)
326+
target_compile_definitions(${PROJECT_NAME} PUBLIC -DTSID_WITH_OSQP)
327+
endif()
335328

336-
if(qpmad_FOUND)
337-
target_include_directories(${PROJECT_NAME} PUBLIC ${qpmad_INCLUDE_DIRS})
338-
target_compile_definitions(${PROJECT_NAME} PUBLIC -DTSID_QPMAD_FOUND)
339-
endif()
329+
if(qpmad_FOUND)
330+
target_include_directories(${PROJECT_NAME} PUBLIC ${qpmad_INCLUDE_DIRS})
331+
target_compile_definitions(${PROJECT_NAME} PUBLIC -DTSID_QPMAD_FOUND)
332+
endif()
340333

341-
if(SUFFIX_SO_VERSION)
342-
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
343-
endif(SUFFIX_SO_VERSION)
334+
if(SUFFIX_SO_VERSION)
335+
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION
336+
${PROJECT_VERSION})
337+
endif(SUFFIX_SO_VERSION)
344338

345-
if(NOT INSTALL_PYTHON_INTERFACE_ONLY)
346339
install(
347340
TARGETS ${PROJECT_NAME}
348341
EXPORT ${TARGETS_EXPORT_NAME}
349342
DESTINATION lib)
350-
endif(NOT INSTALL_PYTHON_INTERFACE_ONLY)
343+
endif()
351344

352-
add_subdirectory(bindings)
345+
if(BUILD_PYTHON_INTERFACE)
346+
add_subdirectory(bindings)
347+
endif()
353348
if(BUILD_TESTING)
354349
add_subdirectory(tests)
355350
endif(BUILD_TESTING)
356-
357-
# --- PACKAGING ----------------------------------------------------------------
358-
if(NOT INSTALL_PYTHON_INTERFACE_ONLY)
359-
install(FILES package.xml DESTINATION share/${PROJECT_NAME})
360-
endif(NOT INSTALL_PYTHON_INTERFACE_ONLY)

bindings/python/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ set(${PYWRAP}_HEADERS
7474
../../include/tsid/bindings/python/utils/container.hpp)
7575

7676
add_library(${PYWRAP} SHARED ${${PYWRAP}_SOURCES} ${${PYWRAP}_HEADERS})
77-
target_link_libraries(${PYWRAP} PUBLIC ${PROJECT_NAME} eigenpy::eigenpy)
77+
target_link_libraries(${PYWRAP} PUBLIC ${PROJECT_NAME}::${PROJECT_NAME}
78+
eigenpy::eigenpy)
7879

7980
if(IS_ABSOLUTE ${PYTHON_SITELIB})
8081
set(${PYWRAP}_INSTALL_DIR ${PYTHON_SITELIB}/${PROJECT_NAME})

tests/CMakeLists.txt

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,30 +29,33 @@ endmacro(ADD_TESTCASE)
2929
# --- RULES -------------------------------------------------------------------
3030
# --- RULES -------------------------------------------------------------------
3131

32-
add_testcase(constraints)
33-
add_testcase(trajectories)
32+
if(NOT BUILD_STANDALONE_PYTHON_INTERFACE)
33+
add_testcase(constraints)
34+
add_testcase(trajectories)
3435

35-
add_testcase(robot-wrapper)
36-
add_test_cflags(robot-wrapper
37-
'-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
36+
add_testcase(robot-wrapper)
37+
add_test_cflags(robot-wrapper
38+
'-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
3839

39-
add_testcase(tasks)
40-
add_test_cflags(tasks '-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
40+
add_testcase(tasks)
41+
add_test_cflags(tasks
42+
'-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
4143

42-
add_testcase(contacts)
43-
add_test_cflags(contacts
44-
'-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
44+
add_testcase(contacts)
45+
add_test_cflags(contacts
46+
'-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
4547

46-
add_testcase(tsid-formulation)
47-
add_test_cflags(tsid-formulation
48-
'-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
48+
add_testcase(tsid-formulation)
49+
add_test_cflags(tsid-formulation
50+
'-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
4951

50-
add_testcase(math_utils)
51-
add_testcase(hqp_solvers)
52+
add_testcase(math_utils)
53+
add_testcase(hqp_solvers)
5254

53-
add_testcase(set_gravity)
54-
add_test_cflags(set_gravity
55-
'-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
55+
add_testcase(set_gravity)
56+
add_test_cflags(set_gravity
57+
'-DTSID_SOURCE_DIR=\\\"${${PROJECT_NAME}_SOURCE_DIR}\\\"')
58+
endif()
5659

5760
if(BUILD_PYTHON_INTERFACE)
5861
add_subdirectory(python)

0 commit comments

Comments
 (0)