Skip to content

Commit e961202

Browse files
Updated CMAKELists.txt to support new versions of Eigen
1 parent c8934a7 commit e961202

1 file changed

Lines changed: 32 additions & 11 deletions

File tree

CMakeLists.txt

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,32 @@ endif()
5959
set(PYBIND11_FINDPYTHON ON)
6060
find_package(pybind11 CONFIG REQUIRED)
6161
find_package(OpenMP)
62-
find_package(Eigen3 3.3 NO_MODULE)
63-
if (NOT TARGET Eigen3::Eigen)
64-
message("Eigen3 not found. Installing Eigen3 from submodule:")
65-
execute_process(COMMAND cmake -S dependencies/eigen -B dependencies/eigen/build
66-
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
67-
execute_process(COMMAND cmake --build dependencies/eigen/build --target install
68-
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
69-
find_package(Eigen3 3.3 REQUIRED NO_MODULE)
62+
63+
# The version range must match the range Suzuki-Trotter-Evolver requires so
64+
# that the find_package() it performs cannot pick up a different Eigen.
65+
find_package(Eigen3 3.4...<6 NO_MODULE)
66+
if (NOT Eigen3_FOUND)
67+
message(STATUS "Eigen not found. Installing Eigen from submodule:")
68+
set(EIGEN_SUBMODULE_DIR ${CMAKE_CURRENT_BINARY_DIR}/dependencies/eigen)
69+
execute_process(COMMAND ${CMAKE_COMMAND}
70+
-S ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/eigen
71+
-B ${EIGEN_SUBMODULE_DIR}/build
72+
-DCMAKE_INSTALL_PREFIX=${EIGEN_SUBMODULE_DIR}/install
73+
-DEIGEN_BUILD_TESTING=OFF
74+
-DEIGEN_BUILD_DOC=OFF
75+
-DEIGEN_BUILD_DEMOS=OFF
76+
-DEIGEN_BUILD_BLAS=OFF
77+
-DEIGEN_BUILD_LAPACK=OFF
78+
COMMAND_ERROR_IS_FATAL ANY)
79+
execute_process(COMMAND ${CMAKE_COMMAND}
80+
--build ${EIGEN_SUBMODULE_DIR}/build
81+
--target install
82+
COMMAND_ERROR_IS_FATAL ANY)
83+
list(APPEND CMAKE_PREFIX_PATH ${EIGEN_SUBMODULE_DIR}/install)
84+
find_package(Eigen3 3.4...<6 REQUIRED NO_MODULE)
7085
endif()
86+
message(STATUS "Using Eigen ${Eigen3_VERSION} from ${Eigen3_DIR}")
7187
add_subdirectory(dependencies/Suzuki-Trotter-Evolver)
72-
add_subdirectory(dependencies/eigen)
7388

7489
macro(configure)
7590
# Set variables for configuration
@@ -152,6 +167,12 @@ set(PYBIND_SRC ${PYBIND_SRC}
152167

153168
pybind11_add_module(evolvers ${PYBIND_SRC})
154169

155-
target_link_libraries(evolvers INTERFACE Eigen3::Eigen)
156-
target_link_libraries(evolvers PUBLIC Suzuki-Trotter-Evolver)
170+
target_link_libraries(evolvers PRIVATE Eigen3::Eigen Suzuki-Trotter-Evolver)
171+
if(OpenMP_CXX_FOUND)
172+
target_link_libraries(evolvers PRIVATE OpenMP::OpenMP_CXX)
173+
else()
174+
message(WARNING "OpenMP not found. PySTE will be built without "
175+
"multithreading support: set_threads() will have no "
176+
"effect and get_threads() will always return 1.")
177+
endif()
157178
install(TARGETS evolvers DESTINATION ./py_ste)

0 commit comments

Comments
 (0)