1*bf2c3715SXin Li# The file split_test_helper.h was generated at first run, 2*bf2c3715SXin Li# it is now included in test/ 3*bf2c3715SXin Liif(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/split_test_helper.h) 4*bf2c3715SXin Li file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/split_test_helper.h) 5*bf2c3715SXin Liendif() 6*bf2c3715SXin Li 7*bf2c3715SXin Li# check if we have a Fortran compiler 8*bf2c3715SXin Liinclude(CheckLanguage) 9*bf2c3715SXin Licheck_language(Fortran) 10*bf2c3715SXin Liif(CMAKE_Fortran_COMPILER) 11*bf2c3715SXin Li enable_language(Fortran) 12*bf2c3715SXin Li set(EIGEN_Fortran_COMPILER_WORKS ON) 13*bf2c3715SXin Lielse() 14*bf2c3715SXin Li set(EIGEN_Fortran_COMPILER_WORKS OFF) 15*bf2c3715SXin Li # search for a default Lapack library to complete Eigen's one 16*bf2c3715SXin Li find_package(LAPACK QUIET) 17*bf2c3715SXin Liendif() 18*bf2c3715SXin Li 19*bf2c3715SXin Li# TODO do the same for EXTERNAL_LAPACK 20*bf2c3715SXin Lioption(EIGEN_TEST_EXTERNAL_BLAS "Use external BLAS library for testsuite" OFF) 21*bf2c3715SXin Liif(EIGEN_TEST_EXTERNAL_BLAS) 22*bf2c3715SXin Li find_package(BLAS REQUIRED) 23*bf2c3715SXin Li message(STATUS "BLAS_COMPILER_FLAGS: ${BLAS_COMPILER_FLAGS}") 24*bf2c3715SXin Li add_definitions("-DEIGEN_USE_BLAS") # is adding ${BLAS_COMPILER_FLAGS} necessary? 25*bf2c3715SXin Li list(APPEND EXTERNAL_LIBS "${BLAS_LIBRARIES}") 26*bf2c3715SXin Liendif() 27*bf2c3715SXin Li 28*bf2c3715SXin Li# configure blas/lapack (use Eigen's ones) 29*bf2c3715SXin Liset(EIGEN_BLAS_LIBRARIES eigen_blas) 30*bf2c3715SXin Liset(EIGEN_LAPACK_LIBRARIES eigen_lapack) 31*bf2c3715SXin Li 32*bf2c3715SXin Liset(EIGEN_TEST_MATRIX_DIR "" CACHE STRING "Enable testing of realword sparse matrices contained in the specified path") 33*bf2c3715SXin Liif(EIGEN_TEST_MATRIX_DIR) 34*bf2c3715SXin Li if(NOT WIN32) 35*bf2c3715SXin Li message(STATUS "Test realworld sparse matrices: ${EIGEN_TEST_MATRIX_DIR}") 36*bf2c3715SXin Li add_definitions( -DTEST_REAL_CASES="${EIGEN_TEST_MATRIX_DIR}" ) 37*bf2c3715SXin Li else() 38*bf2c3715SXin Li message(STATUS "REAL CASES CAN NOT BE CURRENTLY TESTED ON WIN32") 39*bf2c3715SXin Li endif() 40*bf2c3715SXin Liendif() 41*bf2c3715SXin Li 42*bf2c3715SXin Liset(SPARSE_LIBS " ") 43*bf2c3715SXin Li 44*bf2c3715SXin Lifind_package(CHOLMOD) 45*bf2c3715SXin Liif(CHOLMOD_FOUND) 46*bf2c3715SXin Li add_definitions("-DEIGEN_CHOLMOD_SUPPORT") 47*bf2c3715SXin Li include_directories(${CHOLMOD_INCLUDES}) 48*bf2c3715SXin Li set(SPARSE_LIBS ${SPARSE_LIBS} ${CHOLMOD_LIBRARIES} ${EIGEN_BLAS_LIBRARIES} ${EIGEN_LAPACK_LIBRARIES}) 49*bf2c3715SXin Li set(CHOLMOD_ALL_LIBS ${CHOLMOD_LIBRARIES} ${EIGEN_BLAS_LIBRARIES} ${EIGEN_LAPACK_LIBRARIES}) 50*bf2c3715SXin Li ei_add_property(EIGEN_TESTED_BACKENDS "CHOLMOD, ") 51*bf2c3715SXin Lielse() 52*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "CHOLMOD, ") 53*bf2c3715SXin Liendif() 54*bf2c3715SXin Li 55*bf2c3715SXin Lifind_package(UMFPACK) 56*bf2c3715SXin Liif(UMFPACK_FOUND) 57*bf2c3715SXin Li add_definitions("-DEIGEN_UMFPACK_SUPPORT") 58*bf2c3715SXin Li include_directories(${UMFPACK_INCLUDES}) 59*bf2c3715SXin Li set(SPARSE_LIBS ${SPARSE_LIBS} ${UMFPACK_LIBRARIES} ${EIGEN_BLAS_LIBRARIES}) 60*bf2c3715SXin Li set(UMFPACK_ALL_LIBS ${UMFPACK_LIBRARIES} ${EIGEN_BLAS_LIBRARIES}) 61*bf2c3715SXin Li ei_add_property(EIGEN_TESTED_BACKENDS "UMFPACK, ") 62*bf2c3715SXin Lielse() 63*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "UMFPACK, ") 64*bf2c3715SXin Liendif() 65*bf2c3715SXin Li 66*bf2c3715SXin Lifind_package(KLU) 67*bf2c3715SXin Liif(KLU_FOUND) 68*bf2c3715SXin Li add_definitions("-DEIGEN_KLU_SUPPORT") 69*bf2c3715SXin Li include_directories(${KLU_INCLUDES}) 70*bf2c3715SXin Li set(SPARSE_LIBS ${SPARSE_LIBS} ${KLU_LIBRARIES} ${EIGEN_BLAS_LIBRARIES}) 71*bf2c3715SXin Li set(KLU_ALL_LIBS ${KLU_LIBRARIES} ${EIGEN_BLAS_LIBRARIES}) 72*bf2c3715SXin Li ei_add_property(EIGEN_TESTED_BACKENDS "KLU, ") 73*bf2c3715SXin Lielse() 74*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "KLU, ") 75*bf2c3715SXin Liendif() 76*bf2c3715SXin Li 77*bf2c3715SXin Lifind_package(SuperLU 4.0) 78*bf2c3715SXin Liif(SuperLU_FOUND) 79*bf2c3715SXin Li add_definitions("-DEIGEN_SUPERLU_SUPPORT") 80*bf2c3715SXin Li include_directories(${SUPERLU_INCLUDES}) 81*bf2c3715SXin Li set(SPARSE_LIBS ${SPARSE_LIBS} ${SUPERLU_LIBRARIES} ${EIGEN_BLAS_LIBRARIES}) 82*bf2c3715SXin Li set(SUPERLU_ALL_LIBS ${SUPERLU_LIBRARIES} ${EIGEN_BLAS_LIBRARIES}) 83*bf2c3715SXin Li ei_add_property(EIGEN_TESTED_BACKENDS "SuperLU, ") 84*bf2c3715SXin Lielse() 85*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "SuperLU, ") 86*bf2c3715SXin Liendif() 87*bf2c3715SXin Li 88*bf2c3715SXin Li 89*bf2c3715SXin Lifind_package(PASTIX QUIET COMPONENTS METIS SEQ) 90*bf2c3715SXin Li# check that the PASTIX found is a version without MPI 91*bf2c3715SXin Lifind_path(PASTIX_pastix_nompi.h_INCLUDE_DIRS 92*bf2c3715SXin Li NAMES pastix_nompi.h 93*bf2c3715SXin Li HINTS ${PASTIX_INCLUDE_DIRS} 94*bf2c3715SXin Li) 95*bf2c3715SXin Liif (NOT PASTIX_pastix_nompi.h_INCLUDE_DIRS) 96*bf2c3715SXin Li message(STATUS "A version of Pastix has been found but pastix_nompi.h does not exist in the include directory." 97*bf2c3715SXin Li " Because Eigen tests require a version without MPI, we disable the Pastix backend.") 98*bf2c3715SXin Liendif() 99*bf2c3715SXin Liif(PASTIX_FOUND AND PASTIX_pastix_nompi.h_INCLUDE_DIRS) 100*bf2c3715SXin Li add_definitions("-DEIGEN_PASTIX_SUPPORT") 101*bf2c3715SXin Li include_directories(${PASTIX_INCLUDE_DIRS_DEP}) 102*bf2c3715SXin Li if(SCOTCH_FOUND) 103*bf2c3715SXin Li include_directories(${SCOTCH_INCLUDE_DIRS}) 104*bf2c3715SXin Li set(PASTIX_LIBRARIES ${PASTIX_LIBRARIES} ${SCOTCH_LIBRARIES}) 105*bf2c3715SXin Li elseif(METIS_FOUND) 106*bf2c3715SXin Li include_directories(${METIS_INCLUDE_DIRS}) 107*bf2c3715SXin Li set(PASTIX_LIBRARIES ${PASTIX_LIBRARIES} ${METIS_LIBRARIES}) 108*bf2c3715SXin Li else() 109*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "PaStiX, ") 110*bf2c3715SXin Li endif() 111*bf2c3715SXin Li set(SPARSE_LIBS ${SPARSE_LIBS} ${PASTIX_LIBRARIES_DEP} ${ORDERING_LIBRARIES}) 112*bf2c3715SXin Li set(PASTIX_ALL_LIBS ${PASTIX_LIBRARIES_DEP}) 113*bf2c3715SXin Li ei_add_property(EIGEN_TESTED_BACKENDS "PaStiX, ") 114*bf2c3715SXin Lielse() 115*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "PaStiX, ") 116*bf2c3715SXin Liendif() 117*bf2c3715SXin Li 118*bf2c3715SXin Liif(METIS_FOUND) 119*bf2c3715SXin Li add_definitions("-DEIGEN_METIS_SUPPORT") 120*bf2c3715SXin Li include_directories(${METIS_INCLUDE_DIRS}) 121*bf2c3715SXin Li ei_add_property(EIGEN_TESTED_BACKENDS "METIS, ") 122*bf2c3715SXin Lielse() 123*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "METIS, ") 124*bf2c3715SXin Liendif() 125*bf2c3715SXin Li 126*bf2c3715SXin Lifind_package(SPQR) 127*bf2c3715SXin Liif(SPQR_FOUND AND CHOLMOD_FOUND AND (EIGEN_Fortran_COMPILER_WORKS OR LAPACK_FOUND) ) 128*bf2c3715SXin Li add_definitions("-DEIGEN_SPQR_SUPPORT") 129*bf2c3715SXin Li include_directories(${SPQR_INCLUDES}) 130*bf2c3715SXin Li set(SPQR_ALL_LIBS ${SPQR_LIBRARIES} ${CHOLMOD_LIBRARIES} ${EIGEN_LAPACK_LIBRARIES} ${EIGEN_BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) 131*bf2c3715SXin Li set(SPARSE_LIBS ${SPARSE_LIBS} ${SPQR_ALL_LIBS}) 132*bf2c3715SXin Li ei_add_property(EIGEN_TESTED_BACKENDS "SPQR, ") 133*bf2c3715SXin Lielse() 134*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "SPQR, ") 135*bf2c3715SXin Liendif() 136*bf2c3715SXin Li 137*bf2c3715SXin Lioption(EIGEN_TEST_NOQT "Disable Qt support in unit tests" OFF) 138*bf2c3715SXin Liif(NOT EIGEN_TEST_NOQT) 139*bf2c3715SXin Li find_package(Qt4) 140*bf2c3715SXin Li if(QT4_FOUND) 141*bf2c3715SXin Li include(${QT_USE_FILE}) 142*bf2c3715SXin Li ei_add_property(EIGEN_TESTED_BACKENDS "Qt4 support, ") 143*bf2c3715SXin Li else() 144*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "Qt4 support, ") 145*bf2c3715SXin Li endif() 146*bf2c3715SXin Liendif() 147*bf2c3715SXin Li 148*bf2c3715SXin Liif(TEST_LIB) 149*bf2c3715SXin Li add_definitions("-DEIGEN_EXTERN_INSTANTIATIONS=1") 150*bf2c3715SXin Liendif() 151*bf2c3715SXin Li 152*bf2c3715SXin Liset_property(GLOBAL PROPERTY EIGEN_CURRENT_SUBPROJECT "Official") 153*bf2c3715SXin Liadd_custom_target(BuildOfficial) 154*bf2c3715SXin Li 155*bf2c3715SXin Liei_add_test(rand) 156*bf2c3715SXin Liei_add_test(meta) 157*bf2c3715SXin Liei_add_test(numext) 158*bf2c3715SXin Liei_add_test(sizeof) 159*bf2c3715SXin Liei_add_test(dynalloc) 160*bf2c3715SXin Liei_add_test(nomalloc) 161*bf2c3715SXin Liei_add_test(first_aligned) 162*bf2c3715SXin Liei_add_test(type_alias) 163*bf2c3715SXin Liei_add_test(nullary) 164*bf2c3715SXin Liei_add_test(mixingtypes) 165*bf2c3715SXin Liei_add_test(io) 166*bf2c3715SXin Liei_add_test(packetmath "-DEIGEN_FAST_MATH=1") 167*bf2c3715SXin Liei_add_test(vectorization_logic) 168*bf2c3715SXin Liei_add_test(basicstuff) 169*bf2c3715SXin Liei_add_test(constructor) 170*bf2c3715SXin Liei_add_test(linearstructure) 171*bf2c3715SXin Liei_add_test(integer_types) 172*bf2c3715SXin Liei_add_test(unalignedcount) 173*bf2c3715SXin Liif(NOT EIGEN_TEST_NO_EXCEPTIONS AND NOT EIGEN_TEST_OPENMP) 174*bf2c3715SXin Li ei_add_test(exceptions) 175*bf2c3715SXin Liendif() 176*bf2c3715SXin Liei_add_test(redux) 177*bf2c3715SXin Liei_add_test(visitor) 178*bf2c3715SXin Liei_add_test(block) 179*bf2c3715SXin Liei_add_test(corners) 180*bf2c3715SXin Liei_add_test(symbolic_index) 181*bf2c3715SXin Liei_add_test(indexed_view) 182*bf2c3715SXin Liei_add_test(reshape) 183*bf2c3715SXin Liei_add_test(swap) 184*bf2c3715SXin Liei_add_test(resize) 185*bf2c3715SXin Liei_add_test(conservative_resize) 186*bf2c3715SXin Liei_add_test(product_small) 187*bf2c3715SXin Liei_add_test(product_large) 188*bf2c3715SXin Liei_add_test(product_extra) 189*bf2c3715SXin Liei_add_test(diagonalmatrices) 190*bf2c3715SXin Liei_add_test(adjoint) 191*bf2c3715SXin Liei_add_test(diagonal) 192*bf2c3715SXin Liei_add_test(miscmatrices) 193*bf2c3715SXin Liei_add_test(commainitializer) 194*bf2c3715SXin Liei_add_test(smallvectors) 195*bf2c3715SXin Liei_add_test(mapped_matrix) 196*bf2c3715SXin Liei_add_test(mapstride) 197*bf2c3715SXin Liei_add_test(mapstaticmethods) 198*bf2c3715SXin Liei_add_test(array_cwise) 199*bf2c3715SXin Liei_add_test(array_for_matrix) 200*bf2c3715SXin Liei_add_test(array_replicate) 201*bf2c3715SXin Liei_add_test(array_reverse) 202*bf2c3715SXin Liei_add_test(ref) 203*bf2c3715SXin Liei_add_test(is_same_dense) 204*bf2c3715SXin Liei_add_test(triangular) 205*bf2c3715SXin Liei_add_test(selfadjoint) 206*bf2c3715SXin Liei_add_test(product_selfadjoint) 207*bf2c3715SXin Liei_add_test(product_symm) 208*bf2c3715SXin Liei_add_test(product_syrk) 209*bf2c3715SXin Liei_add_test(product_trmv) 210*bf2c3715SXin Liei_add_test(product_trmm) 211*bf2c3715SXin Liei_add_test(product_trsolve) 212*bf2c3715SXin Liei_add_test(product_mmtr) 213*bf2c3715SXin Liei_add_test(product_notemporary) 214*bf2c3715SXin Liei_add_test(stable_norm) 215*bf2c3715SXin Liei_add_test(permutationmatrices) 216*bf2c3715SXin Liei_add_test(bandmatrix) 217*bf2c3715SXin Liei_add_test(cholesky) 218*bf2c3715SXin Liei_add_test(lu) 219*bf2c3715SXin Liei_add_test(determinant) 220*bf2c3715SXin Liei_add_test(inverse) 221*bf2c3715SXin Liei_add_test(qr) 222*bf2c3715SXin Liei_add_test(qr_colpivoting) 223*bf2c3715SXin Liei_add_test(qr_fullpivoting) 224*bf2c3715SXin Liei_add_test(upperbidiagonalization) 225*bf2c3715SXin Liei_add_test(hessenberg) 226*bf2c3715SXin Liei_add_test(schur_real) 227*bf2c3715SXin Liei_add_test(schur_complex) 228*bf2c3715SXin Liei_add_test(eigensolver_selfadjoint) 229*bf2c3715SXin Liei_add_test(eigensolver_generic) 230*bf2c3715SXin Liei_add_test(eigensolver_complex) 231*bf2c3715SXin Liei_add_test(real_qz) 232*bf2c3715SXin Liei_add_test(eigensolver_generalized_real) 233*bf2c3715SXin Liei_add_test(jacobi) 234*bf2c3715SXin Liei_add_test(jacobisvd) 235*bf2c3715SXin Liei_add_test(bdcsvd) 236*bf2c3715SXin Liei_add_test(householder) 237*bf2c3715SXin Liei_add_test(geo_orthomethods) 238*bf2c3715SXin Liei_add_test(geo_quaternion) 239*bf2c3715SXin Liei_add_test(geo_eulerangles) 240*bf2c3715SXin Liei_add_test(geo_parametrizedline) 241*bf2c3715SXin Liei_add_test(geo_alignedbox) 242*bf2c3715SXin Liei_add_test(geo_hyperplane) 243*bf2c3715SXin Liei_add_test(geo_transformations) 244*bf2c3715SXin Liei_add_test(geo_homogeneous) 245*bf2c3715SXin Liei_add_test(stdvector) 246*bf2c3715SXin Liei_add_test(stdvector_overload) 247*bf2c3715SXin Liei_add_test(stdlist) 248*bf2c3715SXin Liei_add_test(stdlist_overload) 249*bf2c3715SXin Liei_add_test(stddeque) 250*bf2c3715SXin Liei_add_test(stddeque_overload) 251*bf2c3715SXin Liei_add_test(sparse_basic) 252*bf2c3715SXin Liei_add_test(sparse_block) 253*bf2c3715SXin Liei_add_test(sparse_vector) 254*bf2c3715SXin Liei_add_test(sparse_product) 255*bf2c3715SXin Liei_add_test(sparse_ref) 256*bf2c3715SXin Liei_add_test(sparse_solvers) 257*bf2c3715SXin Liei_add_test(sparse_permutations) 258*bf2c3715SXin Liei_add_test(simplicial_cholesky) 259*bf2c3715SXin Liei_add_test(conjugate_gradient) 260*bf2c3715SXin Liei_add_test(incomplete_cholesky) 261*bf2c3715SXin Liei_add_test(bicgstab) 262*bf2c3715SXin Liei_add_test(lscg) 263*bf2c3715SXin Liei_add_test(sparselu) 264*bf2c3715SXin Liei_add_test(sparseqr) 265*bf2c3715SXin Liei_add_test(umeyama) 266*bf2c3715SXin Liei_add_test(nesting_ops "${CMAKE_CXX_FLAGS_DEBUG}") 267*bf2c3715SXin Liei_add_test(nestbyvalue) 268*bf2c3715SXin Liei_add_test(zerosized) 269*bf2c3715SXin Liei_add_test(dontalign) 270*bf2c3715SXin Liei_add_test(evaluators) 271*bf2c3715SXin Liif(NOT EIGEN_TEST_NO_EXCEPTIONS) 272*bf2c3715SXin Li ei_add_test(sizeoverflow) 273*bf2c3715SXin Liendif() 274*bf2c3715SXin Liei_add_test(prec_inverse_4x4) 275*bf2c3715SXin Liei_add_test(vectorwiseop) 276*bf2c3715SXin Liei_add_test(special_numbers) 277*bf2c3715SXin Liei_add_test(rvalue_types) 278*bf2c3715SXin Liei_add_test(dense_storage) 279*bf2c3715SXin Liei_add_test(ctorleak) 280*bf2c3715SXin Liei_add_test(mpl2only) 281*bf2c3715SXin Liei_add_test(inplace_decomposition) 282*bf2c3715SXin Liei_add_test(half_float) 283*bf2c3715SXin Liei_add_test(bfloat16_float) 284*bf2c3715SXin Liei_add_test(array_of_string) 285*bf2c3715SXin Liei_add_test(num_dimensions) 286*bf2c3715SXin Liei_add_test(stl_iterators) 287*bf2c3715SXin Liei_add_test(blasutil) 288*bf2c3715SXin Liif(EIGEN_TEST_CXX11) 289*bf2c3715SXin Li ei_add_test(initializer_list_construction) 290*bf2c3715SXin Li ei_add_test(diagonal_matrix_variadic_ctor) 291*bf2c3715SXin Liendif() 292*bf2c3715SXin Li 293*bf2c3715SXin Liadd_executable(bug1213 bug1213.cpp bug1213_main.cpp) 294*bf2c3715SXin Li 295*bf2c3715SXin Licheck_cxx_compiler_flag("-ffast-math" COMPILER_SUPPORT_FASTMATH) 296*bf2c3715SXin Liif(COMPILER_SUPPORT_FASTMATH) 297*bf2c3715SXin Li set(EIGEN_FASTMATH_FLAGS "-ffast-math") 298*bf2c3715SXin Lielse() 299*bf2c3715SXin Li check_cxx_compiler_flag("/fp:fast" COMPILER_SUPPORT_FPFAST) 300*bf2c3715SXin Li if(COMPILER_SUPPORT_FPFAST) 301*bf2c3715SXin Li set(EIGEN_FASTMATH_FLAGS "/fp:fast") 302*bf2c3715SXin Li endif() 303*bf2c3715SXin Liendif() 304*bf2c3715SXin Li 305*bf2c3715SXin Liei_add_test(fastmath " ${EIGEN_FASTMATH_FLAGS} ") 306*bf2c3715SXin Li 307*bf2c3715SXin Li# # ei_add_test(denseLM) 308*bf2c3715SXin Li 309*bf2c3715SXin Liif(QT4_FOUND) 310*bf2c3715SXin Li ei_add_test(qtvector "" "${QT_QTCORE_LIBRARY}") 311*bf2c3715SXin Liendif() 312*bf2c3715SXin Li 313*bf2c3715SXin Liif(UMFPACK_FOUND) 314*bf2c3715SXin Li ei_add_test(umfpack_support "" "${UMFPACK_ALL_LIBS}") 315*bf2c3715SXin Liendif() 316*bf2c3715SXin Li 317*bf2c3715SXin Liif(KLU_FOUND OR SuiteSparse_FOUND) 318*bf2c3715SXin Li ei_add_test(klu_support "" "${KLU_ALL_LIBS}") 319*bf2c3715SXin Liendif() 320*bf2c3715SXin Li 321*bf2c3715SXin Liif(SUPERLU_FOUND) 322*bf2c3715SXin Li ei_add_test(superlu_support "" "${SUPERLU_ALL_LIBS}") 323*bf2c3715SXin Liendif() 324*bf2c3715SXin Li 325*bf2c3715SXin Liif(CHOLMOD_FOUND) 326*bf2c3715SXin Li ei_add_test(cholmod_support "" "${CHOLMOD_ALL_LIBS}") 327*bf2c3715SXin Liendif() 328*bf2c3715SXin Li 329*bf2c3715SXin Liif(PARDISO_FOUND) 330*bf2c3715SXin Li ei_add_test(pardiso_support "" "${PARDISO_ALL_LIBS}") 331*bf2c3715SXin Liendif() 332*bf2c3715SXin Li 333*bf2c3715SXin Liif(PASTIX_FOUND AND (SCOTCH_FOUND OR METIS_FOUND)) 334*bf2c3715SXin Li ei_add_test(pastix_support "" "${PASTIX_ALL_LIBS}") 335*bf2c3715SXin Liendif() 336*bf2c3715SXin Li 337*bf2c3715SXin Liif(SPQR_FOUND AND CHOLMOD_FOUND) 338*bf2c3715SXin Li ei_add_test(spqr_support "" "${SPQR_ALL_LIBS}") 339*bf2c3715SXin Liendif() 340*bf2c3715SXin Li 341*bf2c3715SXin Liif(METIS_FOUND) 342*bf2c3715SXin Liei_add_test(metis_support "" "${METIS_LIBRARIES}") 343*bf2c3715SXin Liendif() 344*bf2c3715SXin Li 345*bf2c3715SXin Listring(TOLOWER "${CMAKE_CXX_COMPILER}" cmake_cxx_compiler_tolower) 346*bf2c3715SXin Liif(cmake_cxx_compiler_tolower MATCHES "qcc") 347*bf2c3715SXin Li set(CXX_IS_QCC "ON") 348*bf2c3715SXin Liendif() 349*bf2c3715SXin Li 350*bf2c3715SXin Liei_add_property(EIGEN_TESTING_SUMMARY "CXX: ${CMAKE_CXX_COMPILER}\n") 351*bf2c3715SXin Liif(CMAKE_COMPILER_IS_GNUCXX AND NOT CXX_IS_QCC) 352*bf2c3715SXin Li execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version COMMAND head -n 1 OUTPUT_VARIABLE EIGEN_CXX_VERSION_STRING OUTPUT_STRIP_TRAILING_WHITESPACE) 353*bf2c3715SXin Li ei_add_property(EIGEN_TESTING_SUMMARY "CXX_VERSION: ${EIGEN_CXX_VERSION_STRING}\n") 354*bf2c3715SXin Liendif() 355*bf2c3715SXin Liei_add_property(EIGEN_TESTING_SUMMARY "CXX_FLAGS: ${CMAKE_CXX_FLAGS}\n") 356*bf2c3715SXin Liif (EIGEN_TEST_CUSTOM_CXX_FLAGS) 357*bf2c3715SXin Li ei_add_property(EIGEN_TESTING_SUMMARY "Custom CXX flags: ${EIGEN_TEST_CUSTOM_CXX_FLAGS}\n") 358*bf2c3715SXin Liendif() 359*bf2c3715SXin Liei_add_property(EIGEN_TESTING_SUMMARY "Sparse lib flags: ${SPARSE_LIBS}\n") 360*bf2c3715SXin Li 361*bf2c3715SXin Lioption(EIGEN_TEST_EIGEN2 "Run whole Eigen2 test suite against EIGEN2_SUPPORT" OFF) 362*bf2c3715SXin Limark_as_advanced(EIGEN_TEST_EIGEN2) 363*bf2c3715SXin Liif(EIGEN_TEST_EIGEN2) 364*bf2c3715SXin Li message(WARNING "The Eigen2 test suite has been removed") 365*bf2c3715SXin Liendif() 366*bf2c3715SXin Li 367*bf2c3715SXin Li# boost MP unit test 368*bf2c3715SXin Lifind_package(Boost 1.53.0) 369*bf2c3715SXin Liif(Boost_FOUND) 370*bf2c3715SXin Li include_directories(${Boost_INCLUDE_DIRS}) 371*bf2c3715SXin Li ei_add_test(boostmultiprec "" "${Boost_LIBRARIES}") 372*bf2c3715SXin Li ei_add_property(EIGEN_TESTED_BACKENDS "Boost.Multiprecision, ") 373*bf2c3715SXin Lielse() 374*bf2c3715SXin Li ei_add_property(EIGEN_MISSING_BACKENDS "Boost.Multiprecision, ") 375*bf2c3715SXin Liendif() 376*bf2c3715SXin Li 377*bf2c3715SXin Li 378*bf2c3715SXin Li# CUDA unit tests 379*bf2c3715SXin Lioption(EIGEN_TEST_CUDA "Enable CUDA support in unit tests" OFF) 380*bf2c3715SXin Lioption(EIGEN_TEST_CUDA_CLANG "Use clang instead of nvcc to compile the CUDA tests" OFF) 381*bf2c3715SXin Li 382*bf2c3715SXin Liif(EIGEN_TEST_CUDA_CLANG AND NOT CMAKE_CXX_COMPILER MATCHES "clang") 383*bf2c3715SXin Li message(WARNING "EIGEN_TEST_CUDA_CLANG is set, but CMAKE_CXX_COMPILER does not appear to be clang.") 384*bf2c3715SXin Liendif() 385*bf2c3715SXin Li 386*bf2c3715SXin Liif(EIGEN_TEST_CUDA) 387*bf2c3715SXin Li 388*bf2c3715SXin Lifind_package(CUDA 5.0) 389*bf2c3715SXin Liif(CUDA_FOUND) 390*bf2c3715SXin Li 391*bf2c3715SXin Li set(CUDA_PROPAGATE_HOST_FLAGS OFF) 392*bf2c3715SXin Li 393*bf2c3715SXin Li set(EIGEN_CUDA_RELAXED_CONSTEXPR "--expt-relaxed-constexpr") 394*bf2c3715SXin Li if (${CUDA_VERSION} STREQUAL "7.0") 395*bf2c3715SXin Li set(EIGEN_CUDA_RELAXED_CONSTEXPR "--relaxed-constexpr") 396*bf2c3715SXin Li endif() 397*bf2c3715SXin Li 398*bf2c3715SXin Li if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 399*bf2c3715SXin Li set(CUDA_NVCC_FLAGS "-ccbin ${CMAKE_C_COMPILER}" CACHE STRING "nvcc flags" FORCE) 400*bf2c3715SXin Li endif() 401*bf2c3715SXin Li if(EIGEN_TEST_CUDA_CLANG) 402*bf2c3715SXin Li set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 403*bf2c3715SXin Li string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") 404*bf2c3715SXin Li foreach(GPU IN LISTS EIGEN_CUDA_COMPUTE_ARCH) 405*bf2c3715SXin Li string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${GPU}") 406*bf2c3715SXin Li endforeach() 407*bf2c3715SXin Li else() 408*bf2c3715SXin Li foreach(GPU IN LISTS EIGEN_CUDA_COMPUTE_ARCH) 409*bf2c3715SXin Li string(APPEND CUDA_NVCC_FLAGS " -gencode arch=compute_${GPU},code=sm_${GPU}") 410*bf2c3715SXin Li endforeach() 411*bf2c3715SXin Li endif() 412*bf2c3715SXin Li string(APPEND CUDA_NVCC_FLAGS " ${EIGEN_CUDA_RELAXED_CONSTEXPR}") 413*bf2c3715SXin Li set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu") 414*bf2c3715SXin Li 415*bf2c3715SXin Li ei_add_test(gpu_basic) 416*bf2c3715SXin Li 417*bf2c3715SXin Li unset(EIGEN_ADD_TEST_FILENAME_EXTENSION) 418*bf2c3715SXin Li 419*bf2c3715SXin Liendif() 420*bf2c3715SXin Li 421*bf2c3715SXin Liendif() 422*bf2c3715SXin Li 423*bf2c3715SXin Li 424*bf2c3715SXin Li# HIP unit tests 425*bf2c3715SXin Lioption(EIGEN_TEST_HIP "Add HIP support." OFF) 426*bf2c3715SXin Liif (EIGEN_TEST_HIP) 427*bf2c3715SXin Li 428*bf2c3715SXin Li set(HIP_PATH "/opt/rocm/hip" CACHE STRING "Path to the HIP installation.") 429*bf2c3715SXin Li 430*bf2c3715SXin Li if (EXISTS ${HIP_PATH}) 431*bf2c3715SXin Li 432*bf2c3715SXin Li list(APPEND CMAKE_MODULE_PATH ${HIP_PATH}/cmake) 433*bf2c3715SXin Li 434*bf2c3715SXin Li find_package(HIP REQUIRED) 435*bf2c3715SXin Li if (HIP_FOUND) 436*bf2c3715SXin Li 437*bf2c3715SXin Li execute_process(COMMAND ${HIP_PATH}/bin/hipconfig --platform OUTPUT_VARIABLE HIP_PLATFORM) 438*bf2c3715SXin Li 439*bf2c3715SXin Li if ((${HIP_PLATFORM} STREQUAL "hcc") OR (${HIP_PLATFORM} STREQUAL "amd")) 440*bf2c3715SXin Li 441*bf2c3715SXin Li include_directories(${HIP_PATH}/include) 442*bf2c3715SXin Li 443*bf2c3715SXin Li set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu") 444*bf2c3715SXin Li ei_add_test(gpu_basic) 445*bf2c3715SXin Li unset(EIGEN_ADD_TEST_FILENAME_EXTENSION) 446*bf2c3715SXin Li 447*bf2c3715SXin Li elseif ((${HIP_PLATFORM} STREQUAL "nvcc") OR (${HIP_PLATFORM} STREQUAL "nvidia")) 448*bf2c3715SXin Li message(FATAL_ERROR "HIP_PLATFORM = nvcc is not supported within Eigen") 449*bf2c3715SXin Li else () 450*bf2c3715SXin Li message(FATAL_ERROR "Unknown HIP_PLATFORM = ${HIP_PLATFORM}") 451*bf2c3715SXin Li endif() 452*bf2c3715SXin Li endif() 453*bf2c3715SXin Li else () 454*bf2c3715SXin Li message(FATAL_ERROR "EIGEN_TEST_HIP is ON, but the specified HIP_PATH (${HIP_PATH}) does not exist") 455*bf2c3715SXin Li endif() 456*bf2c3715SXin Liendif() 457*bf2c3715SXin Li 458*bf2c3715SXin Licmake_dependent_option(EIGEN_TEST_BUILD_DOCUMENTATION "Test building the doxygen documentation" OFF "EIGEN_BUILD_DOC" OFF) 459*bf2c3715SXin Liif(EIGEN_TEST_BUILD_DOCUMENTATION) 460*bf2c3715SXin Li add_dependencies(buildtests doc) 461*bf2c3715SXin Liendif() 462*bf2c3715SXin Li 463*bf2c3715SXin Li# Register all smoke tests 464*bf2c3715SXin Liinclude("EigenSmokeTestList") 465*bf2c3715SXin Liei_add_smoke_tests("${ei_smoke_test_list}") 466