KOKKOS_CFG_DEPENDS(TPLS OPTIONS) KOKKOS_CFG_DEPENDS(TPLS DEVICES) KOKKOS_CFG_DEPENDS(TPLS COMPILER_ID) FUNCTION(KOKKOS_TPL_OPTION PKG DEFAULT) CMAKE_PARSE_ARGUMENTS(PARSED "" "TRIBITS" "" ${ARGN}) IF (PARSED_TRIBITS) #this is also a TPL option you can activate with Tribits IF (NOT "${TPL_ENABLE_${PARSED_TRIBITS}}" STREQUAL "") #Tribits brought its own default that should take precedence SET(DEFAULT ${TPL_ENABLE_${PARSED_TRIBITS}}) ENDIF() ENDIF() KOKKOS_ENABLE_OPTION(${PKG} ${DEFAULT} "Whether to enable the ${PKG} library") KOKKOS_OPTION(${PKG}_DIR "" PATH "Location of ${PKG} library") SET(KOKKOS_ENABLE_${PKG} ${KOKKOS_ENABLE_${PKG}} PARENT_SCOPE) SET(KOKKOS_${PKG}_DIR ${KOKKOS_${PKG}_DIR} PARENT_SCOPE) IF (KOKKOS_HAS_TRILINOS AND KOKKOS_ENABLE_${PKG} AND NOT PARSED_TRIBITS) #this TPL was enabled, but it is not valid to use inside of TriBITS MESSAGE(FATAL_ERROR "Enabled TPL ${PKG} inside TriBITS build, " "but this can only be enabled in a standalone build") ENDIF() ENDFUNCTION() KOKKOS_TPL_OPTION(HWLOC Off TRIBITS HWLOC) KOKKOS_TPL_OPTION(CUDA ${Kokkos_ENABLE_CUDA} TRIBITS CUDA) IF(KOKKOS_ENABLE_HIP AND NOT KOKKOS_CXX_COMPILER_ID STREQUAL HIPCC AND NOT KOKKOS_HAS_TRILINOS) SET(ROCM_DEFAULT ON) ELSE() SET(ROCM_DEFAULT OFF) ENDIF() IF(KOKKOS_ENABLE_HIP AND NOT KOKKOS_HAS_TRILINOS) SET(ROCTHRUST_DEFAULT ON) ELSE() SET(ROCTHRUST_DEFAULT OFF) ENDIF() KOKKOS_TPL_OPTION(ROCM ${ROCM_DEFAULT}) KOKKOS_TPL_OPTION(ROCTHRUST ${ROCTHRUST_DEFAULT}) IF(KOKKOS_ENABLE_SYCL AND NOT KOKKOS_HAS_TRILINOS) SET(ONEDPL_DEFAULT ON) ELSE() SET(ONEDPL_DEFAULT OFF) ENDIF() KOKKOS_TPL_OPTION(ONEDPL ${ONEDPL_DEFAULT}) IF (WIN32) SET(LIBDL_DEFAULT Off) ELSE() SET(LIBDL_DEFAULT On) ENDIF() KOKKOS_TPL_OPTION(LIBDL ${LIBDL_DEFAULT} TRIBITS DLlib) IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_HPX) SET(HPX_DEFAULT ON) ELSE() SET(HPX_DEFAULT OFF) ENDIF() KOKKOS_TPL_OPTION(HPX ${HPX_DEFAULT}) KOKKOS_TPL_OPTION(THREADS ${Kokkos_ENABLE_THREADS} TRIBITS Pthread) IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_quadmath) SET(LIBQUADMATH_DEFAULT ON) ELSE() SET(LIBQUADMATH_DEFAULT OFF) ENDIF() KOKKOS_TPL_OPTION(LIBQUADMATH ${LIBQUADMATH_DEFAULT} TRIBITS quadmath) #Make sure we use our local FindKokkosCuda.cmake KOKKOS_IMPORT_TPL(HPX INTERFACE) KOKKOS_IMPORT_TPL(CUDA INTERFACE) KOKKOS_IMPORT_TPL(HWLOC) KOKKOS_IMPORT_TPL(LIBDL) IF (NOT WIN32) KOKKOS_IMPORT_TPL(THREADS INTERFACE) ENDIF() IF (NOT KOKKOS_ENABLE_COMPILE_AS_CMAKE_LANGUAGE) KOKKOS_IMPORT_TPL(ROCM INTERFACE) ENDIF() KOKKOS_IMPORT_TPL(ONEDPL INTERFACE) KOKKOS_IMPORT_TPL(LIBQUADMATH) KOKKOS_IMPORT_TPL(ROCTHRUST) IF (Kokkos_ENABLE_DESUL_ATOMICS_EXTERNAL) find_package(desul REQUIRED COMPONENTS atomics) KOKKOS_EXPORT_CMAKE_TPL(desul REQUIRED COMPONENTS atomics) ENDIF() if (Kokkos_ENABLE_IMPL_MDSPAN AND Kokkos_ENABLE_MDSPAN_EXTERNAL) find_package(mdspan REQUIRED) KOKKOS_EXPORT_CMAKE_TPL(mdspan REQUIRED) endif() IF (Kokkos_ENABLE_OPENMP) find_package(OpenMP REQUIRED COMPONENTS CXX) # FIXME_TRILINOS Trilinos doesn't allow for Kokkos to use find_dependency # so we just append the flags here instead of linking with the OpenMP target. IF(KOKKOS_HAS_TRILINOS) COMPILER_SPECIFIC_FLAGS(DEFAULT ${OpenMP_CXX_FLAGS}) ELSE() KOKKOS_EXPORT_CMAKE_TPL(OpenMP REQUIRED COMPONENTS CXX) ENDIF() IF(Kokkos_ENABLE_HIP AND KOKKOS_COMPILE_LANGUAGE STREQUAL HIP) GLOBAL_APPEND(KOKKOS_AMDGPU_OPTIONS ${OpenMP_CXX_FLAGS}) ENDIF() IF(Kokkos_ENABLE_CUDA AND KOKKOS_COMPILE_LANGUAGE STREQUAL CUDA) GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS -Xcompiler ${OpenMP_CXX_FLAGS}) ENDIF() ENDIF() #Convert list to newlines (which CMake doesn't always like in cache variables) STRING(REPLACE ";" "\n" KOKKOS_TPL_EXPORT_TEMP "${KOKKOS_TPL_EXPORTS}") #Convert to a regular variable UNSET(KOKKOS_TPL_EXPORTS CACHE) SET(KOKKOS_TPL_EXPORTS ${KOKKOS_TPL_EXPORT_TEMP})