From 3b1a2e5158796e00a782361635513bdbbed5c7d1 Mon Sep 17 00:00:00 2001 From: ski Date: Thu, 15 Dec 2016 12:44:36 +0300 Subject: [PATCH] 0028197: Configuration - support Eigen template library as external dependency Supporting of "Eigen" third party was added to CMake build procedure. --- CMakeLists.txt | 19 ++++++++++++ adm/cmake/eigen.cmake | 71 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 adm/cmake/eigen.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 174cdeea6f..b8ee36b09a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -588,6 +588,25 @@ else() OCCT_CHECK_AND_UNSET ("INSTALL_TBB") endif() +# EIGEN +# search for CSF_EIGEN variable in EXTERNLIB of each being used toolkit +OCCT_IS_PRODUCT_REQUIRED (CSF_EIGEN CAN_USE_EIGEN) + +if (CAN_USE_EIGEN) + set (USE_EIGEN OFF CACHE BOOL "${USE_EIGEN_DESCR}") + + if (USE_EIGEN) + add_definitions (-DHAVE_EIGEN) + OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/eigen") + else() + OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_EIGEN") + endif() +else() + OCCT_CHECK_AND_UNSET ("USE_EIGEN") + + OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_EIGEN") +endif() + # Doxygen if (BUILD_DOC_Overview) if (NOT DEFINED INSTALL_DOC_Overview) diff --git a/adm/cmake/eigen.cmake b/adm/cmake/eigen.cmake new file mode 100644 index 0000000000..a9c5e15387 --- /dev/null +++ b/adm/cmake/eigen.cmake @@ -0,0 +1,71 @@ +# eigen + +# eigen directory +if (NOT DEFINED 3RDPARTY_EIGEN_DIR) + set (3RDPARTY_EIGEN_DIR "" CACHE PATH "The directory containing eigen") +endif() + +# search for eigen in user defined directory +if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}") + if (NOT 3RDPARTY_EIGEN_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_DIR}") + FIND_PRODUCT_DIR("${3RDPARTY_DIR}" Eigen EIGEN_DIR_NAME) + if (EIGEN_DIR_NAME) + set (3RDPARTY_EIGEN_DIR "${3RDPARTY_DIR}/${EIGEN_DIR_NAME}" CACHE PATH "The directory containing eigen" FORCE) + endif() + endif() +endif() + +if (NOT DEFINED 3RDPARTY_EIGEN_INCLUDE_DIR) + set (3RDPARTY_EIGEN_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of the EIGEN") +endif() + +if (NOT 3RDPARTY_EIGEN_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}") + + set (HEADER_NAMES Eigen) + + set (3RDPARTY_EIGEN_INCLUDE_DIR "3RDPARTY_EIGEN_INCLUDE_DIR-NOTFOUND" CACHE PATH "the path to Eigen header file" FORCE) + + if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}") + find_path (3RDPARTY_EIGEN_INCLUDE_DIR NAMES ${HEADER_NAMES} + PATHS ${3RDPARTY_EIGEN_DIR} + PATH_SUFFIXES include eigen3 include/eigen3 + CMAKE_FIND_ROOT_PATH_BOTH + NO_DEFAULT_PATH) + else() + find_path (3RDPARTY_EIGEN_INCLUDE_DIR NAMES ${HEADER_NAMES} + PATH_SUFFIXES include eigen3 include/eigen3 + CMAKE_FIND_ROOT_PATH_BOTH) + endif() + + # use default (CMake) EIGEN search + if (NOT 3RDPARTY_EIGEN_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}") + # use 3RDPARTY_FREETYPE_DIR if it is specified for freetype search + if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}") + set (CACHED_EIGEN_DIR $ENV{Eigen3_DIR}) + set (ENV{Eigen3_DIR} "${3RDPARTY_EIGEN_DIR}") + endif() + + find_package(Eigen3 QUIET) + + # restore ENV{Eigen3_DIR} + if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}") + set (ENV{Eigen3_DIR} ${CACHED_EIGEN_DIR}) + endif() + + if (${EIGEN3_FOUND}) + set (3RDPARTY_EIGEN_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE PATH "the path to Eigen header file" FORCE) + set (3RDPARTY_EIGEN_DIR "${EIGEN3_ROOT_DIR}" CACHE PATH "The directory containing eigen" FORCE) + endif() + endif() +endif() + +if (3RDPARTY_EIGEN_INCLUDE_DIR AND EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}") + list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_EIGEN_INCLUDE_DIR}") +else() + list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_EIGEN_INCLUDE_DIR) + + set (3RDPARTY_EIGEN_INCLUDE_DIR "" CACHE PATH "the path to Eigen header file" FORCE) +endif() + +# unset all redundant variables +OCCT_CHECK_AND_UNSET(Eigen3_DIR)