xref: /aosp_15_r20/external/eigen/test/CMakeLists.txt (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
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