@@ -56,6 +56,15 @@ include("${JRL_CMAKE_MODULES}/apple.cmake")
5656option (GENERATE_PYTHON_STUBS
5757 "Generate the Python stubs associated to the Python library" OFF )
5858
59+ option (BUILD_WITH_CHOLMOD_SUPPORT "Build EigenPy with the Cholmod support" OFF )
60+
61+ if (APPLE )
62+ option (BUILD_WITH_ACCELERATE_SUPPORT
63+ "Build EigenPy with the Accelerate support" OFF )
64+ else (APPLE )
65+ set (BUILD_WITH_ACCELERATE_SUPPORT FALSE )
66+ endif (APPLE )
67+
5968string (REPLACE "-pedantic" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} )
6069
6170# If needed, fix CMake policy for APPLE systems
@@ -99,6 +108,35 @@ export_boost_default_options()
99108find_package (Boost REQUIRED)
100109search_for_boost_python(REQUIRED)
101110
111+ if (BUILD_WITH_CHOLMOD_SUPPORT)
112+ set (CMAKE_MODULE_PATH ${JRL_CMAKE_MODULES} /find -external/CHOLMOD
113+ ${CMAKE_MODULE_PATH} )
114+ add_project_dependency(CHOLMOD REQUIRED FIND_EXTERNAL "CHOLMOD" )
115+ message (
116+ STATUS
117+ "Build with CHOLDOD support (LGPL). See CHOLMOD/Doc/License.txt for further details."
118+ )
119+ add_definitions (-DEIGENPY_WITH_CHOLMOD_SUPPORT)
120+ endif (BUILD_WITH_CHOLMOD_SUPPORT)
121+
122+ if (BUILD_WITH_ACCELERATE_SUPPORT)
123+ if (NOT ${Eigen3_VERSION} VERSION_GREATER_EQUAL "3.4.90" )
124+ message (
125+ FATAL_ERROR
126+ "Your version of Eigen is too low. Should be at least 3.4.90. Current version is ${Eigen3_VERSION} ."
127+ )
128+ endif ()
129+
130+ set (CMAKE_MODULE_PATH ${JRL_CMAKE_MODULES} /find -external/Accelerate
131+ ${CMAKE_MODULE_PATH} )
132+ find_package (
133+ Accelerate REQUIRED # FIND_EXTERNAL "Accelerate" # We don't export yet as
134+ # there might be an issue on AMR64 platforms
135+ )
136+ message (STATUS "Build with Accelerate support framework." )
137+ add_definitions (-DEIGENPY_WITH_ACCELERATE_SUPPORT)
138+ endif (BUILD_WITH_ACCELERATE_SUPPORT)
139+
102140# ----------------------------------------------------
103141# --- INCLUDE ----------------------------------------
104142# ----------------------------------------------------
@@ -117,9 +155,39 @@ set(${PROJECT_NAME}_SOLVERS_HEADERS
117155 include /eigenpy/solvers/BasicPreconditioners.hpp
118156 include /eigenpy/solvers/BFGSPreconditioners.hpp)
119157
158+ set (${PROJECT_NAME} _EIGEN_HEADERS include /eigenpy/eigen/EigenBase.hpp)
159+
160+ set (${PROJECT_NAME} _DECOMPOSITIONS_SPARSE_CHOLMOD_HEADERS
161+ include /eigenpy/decompositions/sparse/cholmod/CholmodBase.hpp
162+ include /eigenpy/decompositions/sparse/cholmod/CholmodDecomposition.hpp
163+ include /eigenpy/decompositions/sparse/cholmod/CholmodSimplicialLDLT.hpp
164+ include /eigenpy/decompositions/sparse/cholmod/CholmodSimplicialLLT.hpp
165+ include /eigenpy/decompositions/sparse/cholmod/CholmodSupernodalLLT.hpp)
166+
167+ set (${PROJECT_NAME} _DECOMPOSITIONS_SPARSE_ACCELERATE_HEADERS
168+ include /eigenpy/decompositions/sparse/accelerate/accelerate.hpp)
169+
170+ set (${PROJECT_NAME} _DECOMPOSITIONS_SPARSE_HEADERS
171+ include /eigenpy/decompositions/sparse/LLT.hpp
172+ include /eigenpy/decompositions/sparse/LDLT.hpp
173+ include /eigenpy/decompositions/sparse/SimplicialCholesky.hpp
174+ include /eigenpy/decompositions/sparse/SparseSolverBase.hpp)
175+
176+ if (BUILD_WITH_CHOLMOD_SUPPORT)
177+ list (APPEND ${PROJECT_NAME} _DECOMPOSITIONS_SPARSE_HEADERS
178+ ${${PROJECT_NAME} _DECOMPOSITIONS_SPARSE_CHOLMOD_HEADERS})
179+ endif (BUILD_WITH_CHOLMOD_SUPPORT)
180+
181+ if (BUILD_WITH_ACCELERATE_SUPPORT)
182+ list (APPEND ${PROJECT_NAME} _DECOMPOSITIONS_SPARSE_HEADERS
183+ ${${PROJECT_NAME} _DECOMPOSITIONS_SPARSE_ACCELERATE_HEADERS})
184+ endif (BUILD_WITH_ACCELERATE_SUPPORT)
185+
120186set (${PROJECT_NAME} _DECOMPOSITIONS_HEADERS
187+ ${${PROJECT_NAME} _DECOMPOSITIONS_SPARSE_HEADERS}
121188 include /eigenpy/decompositions/decompositions.hpp
122189 include /eigenpy/decompositions/EigenSolver.hpp
190+ include /eigenpy/decompositions/PermutationMatrix.hpp
123191 include /eigenpy/decompositions/LDLT.hpp
124192 include /eigenpy/decompositions/LLT.hpp
125193 include /eigenpy/decompositions/SelfAdjointEigenSolver.hpp
@@ -128,6 +196,7 @@ set(${PROJECT_NAME}_DECOMPOSITIONS_HEADERS
128196set (${PROJECT_NAME} _HEADERS
129197 ${${PROJECT_NAME} _UTILS_HEADERS}
130198 ${${PROJECT_NAME} _SOLVERS_HEADERS}
199+ ${${PROJECT_NAME} _EIGEN_HEADERS}
131200 ${${PROJECT_NAME} _DECOMPOSITIONS_HEADERS}
132201 include /eigenpy/alignment.hpp
133202 include /eigenpy/computation-info.hpp
@@ -188,6 +257,16 @@ set(${PROJECT_NAME}_SOLVERS_SOURCES src/solvers/preconditioners.cpp
188257set (${PROJECT_NAME} _DECOMPOSITIONS_SOURCES
189258 src/decompositions/decompositions.cpp)
190259
260+ if (BUILD_WITH_CHOLMOD_SUPPORT)
261+ list (APPEND ${PROJECT_NAME} _DECOMPOSITIONS_SOURCES
262+ src/decompositions/cholmod.cpp)
263+ endif (BUILD_WITH_CHOLMOD_SUPPORT)
264+
265+ if (BUILD_WITH_ACCELERATE_SUPPORT)
266+ list (APPEND ${PROJECT_NAME} _DECOMPOSITIONS_SOURCES
267+ src/decompositions/accelerate.cpp)
268+ endif (BUILD_WITH_ACCELERATE_SUPPORT)
269+
191270set (${PROJECT_NAME} _SOURCES
192271 ${${PROJECT_NAME} _SOLVERS_SOURCES}
193272 ${${PROJECT_NAME} _DECOMPOSITIONS_SOURCES}
@@ -239,6 +318,19 @@ modernize_target_link_libraries(
239318 ${NUMPY_INCLUDE_DIRS}
240319 ${PYTHON_INCLUDE_DIR} )
241320
321+ # Links against CholMod
322+ if (BUILD_WITH_CHOLMOD_SUPPORT)
323+ modernize_target_link_libraries(${PROJECT_NAME} SCOPE PUBLIC TARGETS
324+ CHOLMOD::CHOLMOD)
325+ endif (BUILD_WITH_CHOLMOD_SUPPORT)
326+
327+ # Links against accelerate
328+ if (BUILD_WITH_ACCELERATE_SUPPORT)
329+ # modernize_target_link_libraries(${PROJECT_NAME} SCOPE PUBLIC TARGETS
330+ # Accelerate)
331+ target_link_libraries (${PROJECT_NAME} PRIVATE "-framework accelerate" )
332+ endif (BUILD_WITH_ACCELERATE_SUPPORT)
333+
242334if (SUFFIX_SO_VERSION)
243335 set_target_properties (${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION} )
244336endif (SUFFIX_SO_VERSION)
0 commit comments