@@ -59,17 +59,32 @@ endif()
5959set (PYBIND11_FINDPYTHON ON )
6060find_package (pybind11 CONFIG REQUIRED )
6161find_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 )
7085endif ()
86+ message (STATUS "Using Eigen ${Eigen3_VERSION} from ${Eigen3_DIR} " )
7187add_subdirectory (dependencies/Suzuki-Trotter-Evolver )
72- add_subdirectory (dependencies/eigen )
7388
7489macro (configure )
7590 # Set variables for configuration
@@ -152,6 +167,12 @@ set(PYBIND_SRC ${PYBIND_SRC}
152167
153168pybind11_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 ()
157178install (TARGETS evolvers DESTINATION ./py_ste)
0 commit comments