find_package(GSL) if(GSL_FOUND AND GSL_VERSION_MINOR LESS 9) set(GSL_FOUND "") endif(GSL_FOUND AND GSL_VERSION_MINOR LESS 9) if(GSL_FOUND) add_definitions("-DHAS_GSL" ${GSL_DEFINITIONS}) include_directories(${GSL_INCLUDE_DIR}) else(GSL_FOUND) set(GSL_LIBRARIES " ") endif(GSL_FOUND) set(SPARSE_LIBS "") set(EIGEN_TESTED_BACKENDS "") set(EIGEN_MISSING_BACKENDS "") find_package(Taucs) if(TAUCS_FOUND) add_definitions("-DEIGEN_TAUCS_SUPPORT") include_directories(${TAUCS_INCLUDES}) set(SPARSE_LIBS ${SPARSE_LIBS} ${TAUCS_LIBRARIES}) set(EIGEN_TESTED_BACKENDS ${EIGEN_TESTED_BACKENDS} Taucs) else(TAUCS_FOUND) set(EIGEN_MISSING_BACKENDS ${EIGEN_MISSING_BACKENDS} Taucs) endif(TAUCS_FOUND) find_package(Cholmod) if(CHOLMOD_FOUND) add_definitions("-DEIGEN_CHOLMOD_SUPPORT") include_directories(${CHOLMOD_INCLUDES}) set(SPARSE_LIBS ${SPARSE_LIBS} ${CHOLMOD_LIBRARIES}) set(EIGEN_TESTED_BACKENDS ${EIGEN_TESTED_BACKENDS} Cholmod) else(CHOLMOD_FOUND) set(EIGEN_MISSING_BACKENDS ${EIGEN_MISSING_BACKENDS} Cholmod) endif(CHOLMOD_FOUND) find_package(Umfpack) if(UMFPACK_FOUND) add_definitions("-DEIGEN_UMFPACK_SUPPORT") include_directories(${UMFPACK_INCLUDES}) set(SPARSE_LIBS ${SPARSE_LIBS} ${UMFPACK_LIBRARIES}) set(EIGEN_TESTED_BACKENDS ${EIGEN_TESTED_BACKENDS} UmfPack) else(UMFPACK_FOUND) set(EIGEN_MISSING_BACKENDS ${EIGEN_MISSING_BACKENDS} UmfPack) endif(UMFPACK_FOUND) find_package(SuperLU) if(SUPERLU_FOUND) add_definitions("-DEIGEN_SUPERLU_SUPPORT") include_directories(${SUPERLU_INCLUDES}) set(SPARSE_LIBS ${SPARSE_LIBS} ${SUPERLU_LIBRARIES}) set(EIGEN_TESTED_BACKENDS ${EIGEN_TESTED_BACKENDS} SuperLU) else(SUPERLU_FOUND) set(EIGEN_MISSING_BACKENDS ${EIGEN_MISSING_BACKENDS} SuperLU) endif(SUPERLU_FOUND) find_package(GoogleHash) if(GOOGLEHASH_FOUND) add_definitions("-DEIGEN_GOOGLEHASH_SUPPORT") include_directories(${GOOGLEHASH_INCLUDES}) set(EIGEN_TESTED_BACKENDS ${EIGEN_TESTED_BACKENDS} GoogleHash) else(GOOGLEHASH_FOUND) set(EIGEN_MISSING_BACKENDS ${EIGEN_MISSING_BACKENDS} GoogleHash) endif(GOOGLEHASH_FOUND) option(EIGEN_TEST_NOQT "Disable Qt support in unit tests" OFF) if(NOT EIGEN_TEST_NOQT) find_package(Qt4) endif(NOT EIGEN_TEST_NOQT) if(QT4_FOUND) include(${QT_USE_FILE}) set(EIGEN_TESTED_BACKENDS ${EIGEN_TESTED_BACKENDS} "Qt4 support") else(QT4_FOUND) set(EIGEN_MISSING_BACKENDS ${EIGEN_MISSING_BACKENDS} "Qt4 support") endif(QT4_FOUND) if(CMAKE_COMPILER_IS_GNUCXX) if(CMAKE_SYSTEM_NAME MATCHES Linux) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g2") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2 -g2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-inline-functions") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g2") endif(CMAKE_SYSTEM_NAME MATCHES Linux) set(EI_OFLAG "-O2") # MSVC fails with: # cl : Command line warning D9025 : overriding '/Od' with '/O2' # cl : Command line error D8016 : '/RTC1' and '/O2' command-line options are incompatible # elseif(MSVC) # set(EI_OFLAG "/O2") else(CMAKE_COMPILER_IS_GNUCXX) set(EI_OFLAG "") endif(CMAKE_COMPILER_IS_GNUCXX) include(EigenTesting) enable_testing() if(TEST_LIB) add_definitions("-DEIGEN_EXTERN_INSTANTIATIONS=1") endif(TEST_LIB) ei_add_test(meta) ei_add_test(sizeof) ei_add_test(dynalloc) ei_add_test(nomalloc) ei_add_test(mixingtypes) ei_add_test(packetmath) ei_add_test(unalignedassert) ei_add_test(vectorization_logic) ei_add_test(basicstuff) ei_add_test(linearstructure) ei_add_test(cwiseop) ei_add_test(sum) ei_add_test(product_small) ei_add_test(product_large ${EI_OFLAG}) ei_add_test(adjoint) ei_add_test(submatrices) ei_add_test(miscmatrices) ei_add_test(commainitializer) ei_add_test(smallvectors) ei_add_test(map) ei_add_test(array) ei_add_test(triangular) ei_add_test(cholesky " " "${GSL_LIBRARIES}") ei_add_test(lu ${EI_OFLAG}) ei_add_test(determinant) ei_add_test(inverse) ei_add_test(qr) ei_add_test(eigensolver " " "${GSL_LIBRARIES}") ei_add_test(svd) ei_add_test(geometry) ei_add_test(hyperplane) ei_add_test(parametrizedline) ei_add_test(alignedbox) ei_add_test(regression) ei_add_test(stdvector) ei_add_test(resize) if(QT4_FOUND) if(QT_QTCORE_LIBRARY_DEBUG) set(QT_QTCORE_LIBRARY ${QT_QTCORE_LIBRARY_DEBUG}) else(QT_QTCORE_LIBRARY_DEBUG) set(QT_QTCORE_LIBRARY ${QT_QTCORE_LIBRARY_RELEASE}) endif(QT_QTCORE_LIBRARY_DEBUG) ei_add_test(qtvector " " ${QT_QTCORE_LIBRARY}) endif(QT4_FOUND) ei_add_test(sparse_vector) ei_add_test(sparse_basic) ei_add_test(sparse_solvers " " "${SPARSE_LIBS}") ei_add_test(reverse) # print a summary of the different options message("************************************************************") message("*** Eigen's unit tests configuration summary ***") message("************************************************************") if(GSL_FOUND) message("Comparison with GSL: ON") else(GSL_FOUND) message("Comparison with GSL: OFF") endif(GSL_FOUND) message("Enabled backends: ${EIGEN_TESTED_BACKENDS}") message("Disabled backends: ${EIGEN_MISSING_BACKENDS}") if(EIGEN_TEST_SSE2) message("SSE2: ON") else(EIGEN_TEST_SSE2) message("SSE2: AUTO") endif(EIGEN_TEST_SSE2) if(EIGEN_TEST_SSE3) message("SSE3: ON") else(EIGEN_TEST_SSE3) message("SSE3: AUTO") endif(EIGEN_TEST_SSE3) if(EIGEN_TEST_SSSE3) message("SSSE3: ON") else(EIGEN_TEST_SSSE3) message("SSSE3: AUTO") endif(EIGEN_TEST_SSSE3) if(EIGEN_TEST_ALTIVEC) message("Altivec: ON") else(EIGEN_TEST_ALTIVEC) message("Altivec: AUTO") endif(EIGEN_TEST_ALTIVEC) if(EIGEN_TEST_NO_EXPLICIT_VECTORIZATION) message("Explicit vec: OFF") else(EIGEN_TEST_NO_EXPLICIT_VECTORIZATION) message("Explicit vec: AUTO") endif(EIGEN_TEST_NO_EXPLICIT_VECTORIZATION) message("CXX: ${CMAKE_CXX_COMPILER}") if(CMAKE_COMPILER_IS_GNUCXX) execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version COMMAND head -n 1 OUTPUT_VARIABLE EIGEN_CXX_VERSION_STRING OUTPUT_STRIP_TRAILING_WHITESPACE) message("CXX_VERSION: ${EIGEN_CXX_VERSION_STRING}") endif(CMAKE_COMPILER_IS_GNUCXX) message("CXX_FLAGS: ${CMAKE_CXX_FLAGS}") message("Sparse lib flags: ${SPARSE_LIBS}") message("************************************************************")