1# The file split_test_helper.h was generated at first run, 2# it is now included in test/ 3if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/split_test_helper.h) 4 file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/split_test_helper.h) 5endif() 6 7set_property(GLOBAL PROPERTY EIGEN_CURRENT_SUBPROJECT "Unsupported") 8add_custom_target(BuildUnsupported) 9 10include_directories(../../test ../../unsupported ../../Eigen 11 ${CMAKE_CURRENT_BINARY_DIR}/../../test) 12 13find_package (Threads) 14 15find_package(GoogleHash) 16if(GoogleHash_FOUND) 17 add_definitions("-DEIGEN_GOOGLEHASH_SUPPORT") 18 include_directories(${GOOGLEHASH_INCLUDES}) 19 ei_add_property(EIGEN_TESTED_BACKENDS "GoogleHash, ") 20else() 21 ei_add_property(EIGEN_MISSING_BACKENDS "GoogleHash, ") 22endif() 23 24 25find_package(Adolc) 26if(Adolc_FOUND) 27 include_directories(${ADOLC_INCLUDES}) 28 ei_add_property(EIGEN_TESTED_BACKENDS "Adolc, ") 29 if(EIGEN_TEST_CXX11) 30 ei_add_test(forward_adolc "" ${ADOLC_LIBRARIES}) 31 else() 32 message(STATUS "Adolc found, but tests require C++11 mode") 33 endif() 34else() 35 ei_add_property(EIGEN_MISSING_BACKENDS "Adolc, ") 36endif() 37 38# this test seems to never have been successful on x87, so is considered to contain a FP-related bug. 39# see thread: "non-linear optimization test summary" 40ei_add_test(NonLinearOptimization) 41 42ei_add_test(NumericalDiff) 43ei_add_test(autodiff_scalar) 44ei_add_test(autodiff) 45 46ei_add_test(BVH) 47 48ei_add_test(matrix_exponential) 49ei_add_test(matrix_function) 50ei_add_test(matrix_power) 51ei_add_test(matrix_square_root) 52ei_add_test(alignedvector3) 53 54ei_add_test(FFT) 55 56ei_add_test(EulerAngles) 57 58find_package(MPREAL) 59if(MPREAL_FOUND AND EIGEN_COMPILER_SUPPORT_CPP11) 60 ei_add_property(EIGEN_TESTED_BACKENDS "MPFR C++, ") 61 include_directories(${MPREAL_INCLUDES}) 62 ei_add_test(mpreal_support "-std=c++11" "${MPREAL_LIBRARIES}" ) 63else() 64 ei_add_property(EIGEN_MISSING_BACKENDS "MPFR C++, ") 65endif() 66 67ei_add_test(sparse_extra "" "") 68 69find_package(FFTW) 70if(FFTW_FOUND) 71 ei_add_property(EIGEN_TESTED_BACKENDS "fftw, ") 72 include_directories( ${FFTW_INCLUDES} ) 73 if(FFTWL_LIB) 74 ei_add_test(FFTW "-DEIGEN_FFTW_DEFAULT -DEIGEN_HAS_FFTWL" "${FFTW_LIBRARIES}" ) 75 else() 76 ei_add_test(FFTW "-DEIGEN_FFTW_DEFAULT" "${FFTW_LIBRARIES}" ) 77 endif() 78else() 79 ei_add_property(EIGEN_MISSING_BACKENDS "fftw, ") 80endif() 81 82option(EIGEN_TEST_OPENGL "Enable OpenGL support in unit tests" OFF) 83if(EIGEN_TEST_OPENGL) 84 find_package(OpenGL) 85 find_package(GLUT) 86 find_package(GLEW) 87 if(OPENGL_FOUND AND GLUT_FOUND AND GLEW_FOUND) 88 include_directories(${OPENGL_INCLUDE_DIR} ${GLUT_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS}) 89 ei_add_property(EIGEN_TESTED_BACKENDS "OpenGL, ") 90 set(EIGEN_GL_LIB ${GLUT_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES}) 91 ei_add_test(openglsupport "" "${EIGEN_GL_LIB}" ) 92 else() 93 ei_add_property(EIGEN_MISSING_BACKENDS "OpenGL, ") 94 endif() 95else() 96 ei_add_property(EIGEN_MISSING_BACKENDS "OpenGL, ") 97endif() 98 99ei_add_test(polynomialsolver) 100ei_add_test(polynomialutils) 101ei_add_test(splines) 102ei_add_test(gmres) 103ei_add_test(dgmres) 104ei_add_test(minres) 105ei_add_test(idrs) 106ei_add_test(levenberg_marquardt) 107ei_add_test(kronecker_product) 108ei_add_test(bessel_functions) 109ei_add_test(special_functions) 110ei_add_test(special_packetmath "-DEIGEN_FAST_MATH=1") 111 112if(EIGEN_TEST_CXX11) 113 if(EIGEN_TEST_SYCL) 114 set(EIGEN_SYCL ON) 115 # Forward CMake options as preprocessor definitions 116 if(EIGEN_SYCL_USE_DEFAULT_SELECTOR) 117 add_definitions(-DEIGEN_SYCL_USE_DEFAULT_SELECTOR=${EIGEN_SYCL_USE_DEFAULT_SELECTOR}) 118 endif() 119 if(EIGEN_SYCL_NO_LOCAL_MEM) 120 add_definitions(-DEIGEN_SYCL_NO_LOCAL_MEM=${EIGEN_SYCL_NO_LOCAL_MEM}) 121 endif() 122 if(EIGEN_SYCL_LOCAL_MEM) 123 add_definitions(-DEIGEN_SYCL_LOCAL_MEM=${EIGEN_SYCL_LOCAL_MEM}) 124 endif() 125 if(EIGEN_SYCL_MAX_GLOBAL_RANGE) 126 add_definitions(-DEIGEN_SYCL_MAX_GLOBAL_RANGE=${EIGEN_SYCL_MAX_GLOBAL_RANGE}) 127 endif() 128 if(EIGEN_SYCL_LOCAL_THREAD_DIM0) 129 add_definitions(-DEIGEN_SYCL_LOCAL_THREAD_DIM0=${EIGEN_SYCL_LOCAL_THREAD_DIM0}) 130 endif() 131 if(EIGEN_SYCL_LOCAL_THREAD_DIM1) 132 add_definitions(-DEIGEN_SYCL_LOCAL_THREAD_DIM1=${EIGEN_SYCL_LOCAL_THREAD_DIM1}) 133 endif() 134 if(EIGEN_SYCL_REG_M) 135 add_definitions(-DEIGEN_SYCL_REG_M=${EIGEN_SYCL_REG_M}) 136 endif() 137 if(EIGEN_SYCL_REG_N) 138 add_definitions(-DEIGEN_SYCL_REG_N=${EIGEN_SYCL_REG_N}) 139 endif() 140 if(EIGEN_SYCL_USE_PROGRAM_CLASS) 141 add_definitions(-DEIGEN_SYCL_USE_PROGRAM_CLASS=${EIGEN_SYCL_USE_PROGRAM_CLASS}) 142 endif() 143 if(EIGEN_SYCL_ASYNC_EXECUTION) 144 add_definitions(-DEIGEN_SYCL_ASYNC_EXECUTION=${EIGEN_SYCL_ASYNC_EXECUTION}) 145 endif() 146 if(EIGEN_SYCL_DISABLE_SKINNY) 147 add_definitions(-DEIGEN_SYCL_DISABLE_SKINNY=${EIGEN_SYCL_DISABLE_SKINNY}) 148 endif() 149 if(EIGEN_SYCL_DISABLE_DOUBLE_BUFFER) 150 add_definitions(-DEIGEN_SYCL_DISABLE_DOUBLE_BUFFER=${EIGEN_SYCL_DISABLE_DOUBLE_BUFFER}) 151 endif() 152 if(EIGEN_SYCL_DISABLE_RANK1) 153 add_definitions(-DEIGEN_SYCL_DISABLE_RANK1=${EIGEN_SYCL_DISABLE_RANK1}) 154 endif() 155 if(EIGEN_SYCL_DISABLE_SCALAR) 156 add_definitions(-DEIGEN_SYCL_DISABLE_SCALAR=${EIGEN_SYCL_DISABLE_SCALAR}) 157 endif() 158 if(EIGEN_SYCL_DISABLE_GEMV) 159 add_definitions(-DEIGEN_SYCL_DISABLE_GEMV=${EIGEN_SYCL_DISABLE_GEMV}) 160 endif() 161 if(EIGEN_SYCL_DISABLE_ARM_GPU_CACHE_OPTIMISATION) 162 add_definitions(-DEIGEN_SYCL_DISABLE_ARM_GPU_CACHE_OPTIMISATION=${EIGEN_SYCL_DISABLE_ARM_GPU_CACHE_OPTIMISATION}) 163 endif() 164 165 if(EIGEN_SYCL_TRISYCL) 166 # triSYCL now requires c++17. 167 set(CMAKE_CXX_STANDARD 17) 168 else() 169 if(MSVC) 170 # Set the host and device compilers C++ standard to C++14. On Windows setting this to C++11 171 # can cause issues with the ComputeCpp device compiler parsing Visual Studio Headers. 172 set(CMAKE_CXX_STANDARD 14) 173 list(APPEND COMPUTECPP_USER_FLAGS -DWIN32) 174 else() 175 set(CMAKE_CXX_STANDARD 11) 176 list(APPEND COMPUTECPP_USER_FLAGS -Wall) 177 endif() 178 # The following flags are not supported by Clang and can cause warnings 179 # if used with -Werror so they are removed here. 180 if(COMPUTECPP_USE_COMPILER_DRIVER) 181 set(CMAKE_CXX_COMPILER ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}) 182 string(REPLACE "-Wlogical-op" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) 183 string(REPLACE "-Wno-psabi" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) 184 string(REPLACE "-ansi" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) 185 endif() 186 list(APPEND COMPUTECPP_USER_FLAGS 187 -DEIGEN_NO_ASSERTION_CHECKING=1 188 -no-serial-memop 189 -Xclang 190 -cl-mad-enable) 191 endif() 192 193 ei_add_test(cxx11_tensor_sycl ${STD_CXX_FLAG}) 194 ei_add_test(cxx11_tensor_image_op_sycl ${STD_CXX_FLAG}) 195 ei_add_test(cxx11_tensor_math_sycl ${STD_CXX_FLAG}) 196 ei_add_test(cxx11_tensor_forced_eval_sycl ${STD_CXX_FLAG}) 197 ei_add_test(cxx11_tensor_broadcast_sycl ${STD_CXX_FLAG}) 198 ei_add_test(cxx11_tensor_device_sycl ${STD_CXX_FLAG}) 199 ei_add_test(cxx11_tensor_reduction_sycl ${STD_CXX_FLAG}) 200 ei_add_test(cxx11_tensor_morphing_sycl ${STD_CXX_FLAG}) 201 ei_add_test(cxx11_tensor_shuffling_sycl ${STD_CXX_FLAG}) 202 ei_add_test(cxx11_tensor_padding_sycl ${STD_CXX_FLAG}) 203 ei_add_test(cxx11_tensor_builtins_sycl ${STD_CXX_FLAG}) 204 ei_add_test(cxx11_tensor_contract_sycl ${STD_CXX_FLAG}) 205 ei_add_test(cxx11_tensor_concatenation_sycl ${STD_CXX_FLAG}) 206 ei_add_test(cxx11_tensor_reverse_sycl ${STD_CXX_FLAG}) 207 ei_add_test(cxx11_tensor_convolution_sycl ${STD_CXX_FLAG}) 208 ei_add_test(cxx11_tensor_striding_sycl ${STD_CXX_FLAG}) 209 ei_add_test(cxx11_tensor_chipping_sycl ${STD_CXX_FLAG}) 210 ei_add_test(cxx11_tensor_layout_swap_sycl ${STD_CXX_FLAG}) 211 ei_add_test(cxx11_tensor_inflation_sycl ${STD_CXX_FLAG}) 212 ei_add_test(cxx11_tensor_random_sycl ${STD_CXX_FLAG}) 213 ei_add_test(cxx11_tensor_generator_sycl ${STD_CXX_FLAG}) 214 ei_add_test(cxx11_tensor_patch_sycl ${STD_CXX_FLAG}) 215 ei_add_test(cxx11_tensor_image_patch_sycl ${STD_CXX_FLAG}) 216 ei_add_test(cxx11_tensor_volume_patch_sycl ${STD_CXX_FLAG}) 217 ei_add_test(cxx11_tensor_argmax_sycl ${STD_CXX_FLAG}) 218 ei_add_test(cxx11_tensor_custom_op_sycl ${STD_CXX_FLAG}) 219 ei_add_test(cxx11_tensor_scan_sycl ${STD_CXX_FLAG}) 220 set(EIGEN_SYCL OFF) 221 endif() 222 223 ei_add_test(cxx11_eventcount "-pthread" "${CMAKE_THREAD_LIBS_INIT}") 224 ei_add_test(cxx11_runqueue "-pthread" "${CMAKE_THREAD_LIBS_INIT}") 225 ei_add_test(cxx11_non_blocking_thread_pool "-pthread" "${CMAKE_THREAD_LIBS_INIT}") 226 227 ei_add_test(cxx11_meta) 228 ei_add_test(cxx11_maxsizevector) 229 ei_add_test(cxx11_tensor_argmax) 230 ei_add_test(cxx11_tensor_assign) 231 ei_add_test(cxx11_tensor_block_access) 232 ei_add_test(cxx11_tensor_block_eval) 233 ei_add_test(cxx11_tensor_block_io) 234 ei_add_test(cxx11_tensor_broadcasting) 235 ei_add_test(cxx11_tensor_casts) 236 ei_add_test(cxx11_tensor_chipping) 237 ei_add_test(cxx11_tensor_comparisons) 238 ei_add_test(cxx11_tensor_concatenation) 239 ei_add_test(cxx11_tensor_const) 240 ei_add_test(cxx11_tensor_contraction) 241 ei_add_test(cxx11_tensor_convolution) 242 ei_add_test(cxx11_tensor_custom_index) 243 ei_add_test(cxx11_tensor_custom_op) 244 ei_add_test(cxx11_tensor_dimension) 245 ei_add_test(cxx11_tensor_empty) 246 ei_add_test(cxx11_tensor_executor "-pthread" "${CMAKE_THREAD_LIBS_INIT}") 247 ei_add_test(cxx11_tensor_expr) 248 ei_add_test(cxx11_tensor_fft) 249 ei_add_test(cxx11_tensor_fixed_size) 250 ei_add_test(cxx11_tensor_forced_eval) 251 ei_add_test(cxx11_tensor_generator) 252 ei_add_test(cxx11_tensor_ifft) 253 ei_add_test(cxx11_tensor_image_patch) 254 ei_add_test(cxx11_tensor_index_list) 255 ei_add_test(cxx11_tensor_inflation) 256 ei_add_test(cxx11_tensor_intdiv) 257 ei_add_test(cxx11_tensor_io) 258 ei_add_test(cxx11_tensor_layout_swap) 259 ei_add_test(cxx11_tensor_lvalue) 260 ei_add_test(cxx11_tensor_map) 261 ei_add_test(cxx11_tensor_math) 262 ei_add_test(cxx11_tensor_mixed_indices) 263 ei_add_test(cxx11_tensor_morphing) 264 ei_add_test(cxx11_tensor_move) 265 ei_add_test(cxx11_tensor_notification "-pthread" "${CMAKE_THREAD_LIBS_INIT}") 266 ei_add_test(cxx11_tensor_of_complex) 267 ei_add_test(cxx11_tensor_of_const_values) 268 ei_add_test(cxx11_tensor_of_strings) 269 ei_add_test(cxx11_tensor_padding) 270 ei_add_test(cxx11_tensor_patch) 271 ei_add_test(cxx11_tensor_random) 272 ei_add_test(cxx11_tensor_reduction) 273 ei_add_test(cxx11_tensor_ref) 274 ei_add_test(cxx11_tensor_roundings) 275 ei_add_test(cxx11_tensor_scan) 276 ei_add_test(cxx11_tensor_shuffling) 277 ei_add_test(cxx11_tensor_simple) 278 ei_add_test(cxx11_tensor_striding) 279 ei_add_test(cxx11_tensor_sugar) 280 ei_add_test(cxx11_tensor_thread_local "-pthread" "${CMAKE_THREAD_LIBS_INIT}") 281 ei_add_test(cxx11_tensor_thread_pool "-pthread" "${CMAKE_THREAD_LIBS_INIT}") 282 ei_add_test(cxx11_tensor_trace) 283 ei_add_test(cxx11_tensor_volume_patch) 284# ei_add_test(cxx11_tensor_symmetry) 285if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8" AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") 286 # This test requires __uint128_t which is only available on 64bit systems 287 ei_add_test(cxx11_tensor_uint128) 288endif() 289 290endif() 291 292# These tests needs nvcc 293find_package(CUDA 7.0) 294if(CUDA_FOUND AND EIGEN_TEST_CUDA) 295 # Make sure to compile without the -pedantic, -Wundef, -Wnon-virtual-dtor 296 # and -fno-check-new flags since they trigger thousands of compilation warnings 297 # in the CUDA runtime 298 # Also remove -ansi that is incompatible with std=c++11. 299 string(REPLACE "-pedantic" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 300 string(REPLACE "-Wundef" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 301 string(REPLACE "-Wnon-virtual-dtor" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 302 string(REPLACE "-fno-check-new" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 303 string(REPLACE "-ansi" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 304 305 message(STATUS "Flags used to compile cuda code: " ${CMAKE_CXX_FLAGS}) 306 307 if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 308 set(CUDA_NVCC_FLAGS "-ccbin ${CMAKE_C_COMPILER}" CACHE STRING "nvcc flags" FORCE) 309 endif() 310 if(EIGEN_TEST_CUDA_CLANG) 311 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 312 string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") 313 foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) 314 string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${ARCH}") 315 endforeach() 316 endif() 317 318 set(EIGEN_CUDA_RELAXED_CONSTEXPR "--expt-relaxed-constexpr") 319 if (${CUDA_VERSION} STREQUAL "7.0") 320 set(EIGEN_CUDA_RELAXED_CONSTEXPR "--relaxed-constexpr") 321 endif() 322 323 set(NVCC_ARCH_FLAGS) 324 foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) 325 string(APPEND NVCC_ARCH_FLAGS " -gencode arch=compute_${ARCH},code=sm_${ARCH}") 326 endforeach() 327 set(CUDA_NVCC_FLAGS "${EIGEN_CUDA_RELAXED_CONSTEXPR} -Xcudafe \"--display_error_number\" ${NVCC_ARCH_FLAGS} ${CUDA_NVCC_FLAGS}") 328 cuda_include_directories("${CMAKE_CURRENT_BINARY_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}/include") 329 set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu") 330 331 ei_add_test(cxx11_tensor_complex_gpu) 332 ei_add_test(cxx11_tensor_complex_cwise_ops_gpu) 333 ei_add_test(cxx11_tensor_reduction_gpu) 334 ei_add_test(cxx11_tensor_argmax_gpu) 335 ei_add_test(cxx11_tensor_cast_float16_gpu) 336 ei_add_test(cxx11_tensor_scan_gpu) 337 338 set(EIGEN_CUDA_OLDEST_COMPUTE_ARCH 9999) 339 foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) 340 if(${ARCH} LESS ${EIGEN_CUDA_OLDEST_COMPUTE_ARCH}) 341 set(EIGEN_CUDA_OLDEST_COMPUTE_ARCH ${ARCH}) 342 endif() 343 endforeach() 344 345 # Contractions require arch 3.0 or higher 346 if (${EIGEN_CUDA_OLDEST_COMPUTE_ARCH} GREATER 29) 347 ei_add_test(cxx11_tensor_device) 348 ei_add_test(cxx11_tensor_gpu) 349 ei_add_test(cxx11_tensor_contract_gpu) 350 ei_add_test(cxx11_tensor_of_float16_gpu) 351 endif() 352 353 # The random number generation code requires arch 3.5 or greater. 354 if (${EIGEN_CUDA_OLDEST_COMPUTE_ARCH} GREATER 34) 355 ei_add_test(cxx11_tensor_random_gpu) 356 endif() 357 358 359 unset(EIGEN_ADD_TEST_FILENAME_EXTENSION) 360endif() 361 362# Add HIP specific tests 363if (EIGEN_TEST_HIP) 364 365 set(HIP_PATH "/opt/rocm/hip" CACHE STRING "Path to the HIP installation.") 366 367 if (EXISTS ${HIP_PATH}) 368 369 list(APPEND CMAKE_MODULE_PATH ${HIP_PATH}/cmake) 370 371 find_package(HIP REQUIRED) 372 if (HIP_FOUND) 373 374 execute_process(COMMAND ${HIP_PATH}/bin/hipconfig --platform OUTPUT_VARIABLE HIP_PLATFORM) 375 376 if ((${HIP_PLATFORM} STREQUAL "hcc") OR (${HIP_PLATFORM} STREQUAL "amd")) 377 378 include_directories(${CMAKE_CURRENT_BINARY_DIR}) 379 include_directories(${HIP_PATH}/include) 380 381 set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu") 382 # 383 # complex datatype is not yet supported by HIP 384 # so leaving out those tests for now 385 # 386 # ei_add_test(cxx11_tensor_complex_gpu) 387 # ei_add_test(cxx11_tensor_complex_cwise_ops_gpu) 388 # 389 ei_add_test(cxx11_tensor_reduction_gpu) 390 ei_add_test(cxx11_tensor_argmax_gpu) 391 ei_add_test(cxx11_tensor_cast_float16_gpu) 392 ei_add_test(cxx11_tensor_scan_gpu) 393 ei_add_test(cxx11_tensor_device) 394 395 ei_add_test(cxx11_tensor_gpu) 396 ei_add_test(cxx11_tensor_contract_gpu) 397 ei_add_test(cxx11_tensor_of_float16_gpu) 398 ei_add_test(cxx11_tensor_random_gpu) 399 400 unset(EIGEN_ADD_TEST_FILENAME_EXTENSION) 401 402 elseif ((${HIP_PLATFORM} STREQUAL "nvcc") OR (${HIP_PLATFORM} STREQUAL "nvidia")) 403 message(FATAL_ERROR "HIP_PLATFORM = nvcc is not supported within Eigen") 404 else () 405 message(FATAL_ERROR "Unknown HIP_PLATFORM = ${HIP_PLATFORM}") 406 endif() 407 408 endif() 409 410 else () 411 412 message(FATAL_ERROR "EIGEN_TEST_HIP is ON, but the specified HIP_PATH (${HIP_PATH}) does not exist") 413 414 endif() 415 416endif() 417 418