forked from lijiext/lammps
236 lines
6.4 KiB
CMake
236 lines
6.4 KiB
CMake
IF(COMMAND TRIBITS_PACKAGE_DECL)
|
|
SET(KOKKOS_HAS_TRILINOS ON CACHE BOOL "")
|
|
ELSE()
|
|
SET(KOKKOS_HAS_TRILINOS OFF CACHE BOOL "")
|
|
ENDIF()
|
|
|
|
IF(NOT KOKKOS_HAS_TRILINOS)
|
|
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
|
|
project(Kokkos CXX)
|
|
|
|
INCLUDE(cmake/kokkos.cmake)
|
|
ELSE()
|
|
#------------------------------------------------------------------------------
|
|
#
|
|
# A) Forward delcare the package so that certain options are also defined for
|
|
# subpackages
|
|
#
|
|
|
|
TRIBITS_PACKAGE_DECL(Kokkos) # ENABLE_SHADOWING_WARNINGS)
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
#
|
|
# B) Define the common options for Kokkos first so they can be used by
|
|
# subpackages as well.
|
|
#
|
|
|
|
# mfh 01 Aug 2016: See Issue #61:
|
|
#
|
|
# https://github.com/kokkos/kokkos/issues/61
|
|
#
|
|
# Don't use TRIBITS_ADD_DEBUG_OPTION() here, because that defines
|
|
# HAVE_KOKKOS_DEBUG. We define KOKKOS_HAVE_DEBUG here instead,
|
|
# for compatibility with Kokkos' Makefile build system.
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_DEBUG
|
|
KOKKOS_HAVE_DEBUG
|
|
"Enable run-time debug checks. These checks may be expensive, so they are disabled by default in a release build."
|
|
${${PROJECT_NAME}_ENABLE_DEBUG}
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_SIERRA_BUILD
|
|
KOKKOS_FOR_SIERRA
|
|
"Configure Kokkos for building within the Sierra build system."
|
|
OFF
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Cuda
|
|
KOKKOS_HAVE_CUDA
|
|
"Enable CUDA support in Kokkos."
|
|
"${TPL_ENABLE_CUDA}"
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Cuda_UVM
|
|
KOKKOS_USE_CUDA_UVM
|
|
"Enable CUDA Unified Virtual Memory as the default in Kokkos."
|
|
OFF
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Cuda_RDC
|
|
KOKKOS_HAVE_CUDA_RDC
|
|
"Enable CUDA Relocatable Device Code support in Kokkos."
|
|
OFF
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Cuda_Lambda
|
|
KOKKOS_HAVE_CUDA_LAMBDA
|
|
"Enable CUDA LAMBDA support in Kokkos."
|
|
OFF
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Pthread
|
|
KOKKOS_HAVE_PTHREAD
|
|
"Enable Pthread support in Kokkos."
|
|
OFF
|
|
)
|
|
|
|
ASSERT_DEFINED(TPL_ENABLE_Pthread)
|
|
IF(Kokkos_ENABLE_Pthread AND NOT TPL_ENABLE_Pthread)
|
|
MESSAGE(FATAL_ERROR "You set Kokkos_ENABLE_Pthread=ON, but Trilinos' support for Pthread(s) is not enabled (TPL_ENABLE_Pthread=OFF). This is not allowed. Please enable Pthreads in Trilinos before attempting to enable Kokkos' support for Pthreads.")
|
|
ENDIF()
|
|
IF(NOT TPL_ENABLE_Pthread)
|
|
ADD_DEFINITIONS(-DGTEST_HAS_PTHREAD=0)
|
|
ENDIF()
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_OpenMP
|
|
KOKKOS_HAVE_OPENMP
|
|
"Enable OpenMP support in Kokkos."
|
|
"${${PROJECT_NAME}_ENABLE_OpenMP}"
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_QTHREAD
|
|
KOKKOS_HAVE_QTHREADS
|
|
"Enable Qthreads support in Kokkos."
|
|
"${TPL_ENABLE_QTHREAD}"
|
|
)
|
|
|
|
# TODO: No longer an option in Kokkos. Needs to be removed.
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_CXX11
|
|
KOKKOS_HAVE_CXX11
|
|
"Enable C++11 support in Kokkos."
|
|
"${${PROJECT_NAME}_ENABLE_CXX11}"
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_HWLOC
|
|
KOKKOS_HAVE_HWLOC
|
|
"Enable HWLOC support in Kokkos."
|
|
"${TPL_ENABLE_HWLOC}"
|
|
)
|
|
|
|
# TODO: This is currently not used in Kokkos. Should it be removed?
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_MPI
|
|
KOKKOS_HAVE_MPI
|
|
"Enable MPI support in Kokkos."
|
|
"${TPL_ENABLE_MPI}"
|
|
)
|
|
|
|
# Set default value of Kokkos_ENABLE_Debug_Bounds_Check option
|
|
#
|
|
# CMake is case sensitive. The Kokkos_ENABLE_Debug_Bounds_Check
|
|
# option (defined below) is annoyingly not all caps, but we need to
|
|
# keep it that way for backwards compatibility. If users forget and
|
|
# try using an all-caps variable, then make it count by using the
|
|
# all-caps version as the default value of the original, not-all-caps
|
|
# option. Otherwise, the default value of this option comes from
|
|
# Kokkos_ENABLE_DEBUG (see Issue #367).
|
|
|
|
ASSERT_DEFINED(${PACKAGE_NAME}_ENABLE_DEBUG)
|
|
IF(DEFINED Kokkos_ENABLE_DEBUG_BOUNDS_CHECK)
|
|
IF(Kokkos_ENABLE_DEBUG_BOUNDS_CHECK)
|
|
SET(Kokkos_ENABLE_Debug_Bounds_Check_DEFAULT ON)
|
|
ELSE()
|
|
SET(Kokkos_ENABLE_Debug_Bounds_Check_DEFAULT "${${PACKAGE_NAME}_ENABLE_DEBUG}")
|
|
ENDIF()
|
|
ELSE()
|
|
SET(Kokkos_ENABLE_Debug_Bounds_Check_DEFAULT "${${PACKAGE_NAME}_ENABLE_DEBUG}")
|
|
ENDIF()
|
|
ASSERT_DEFINED(Kokkos_ENABLE_Debug_Bounds_Check_DEFAULT)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Debug_Bounds_Check
|
|
KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK
|
|
"Enable Kokkos::View run-time bounds checking."
|
|
"${Kokkos_ENABLE_Debug_Bounds_Check_DEFAULT}"
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Debug_DualView_Modify_Check
|
|
KOKKOS_ENABLE_DEBUG_DUALVIEW_MODIFY_CHECK
|
|
"Enable abort when Kokkos::DualView modified on host and device without sync."
|
|
"${Kokkos_ENABLE_DEBUG}"
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Profiling
|
|
KOKKOS_ENABLE_PROFILING
|
|
"Enable KokkosP profiling support for kernel data collections."
|
|
"${TPL_ENABLE_DLlib}"
|
|
)
|
|
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Profiling_Load_Print
|
|
KOKKOS_ENABLE_PROFILING_LOAD_PRINT
|
|
"Print to standard output which profiling library was loaded."
|
|
OFF
|
|
)
|
|
|
|
# placeholder for future device...
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_ENABLE_Winthread
|
|
KOKKOS_HAVE_WINTHREAD
|
|
"Enable Winthread support in Kokkos."
|
|
"${TPL_ENABLE_Winthread}"
|
|
)
|
|
|
|
# TODO: No longer an option in Kokkos. Needs to be removed.
|
|
# use new/old View
|
|
TRIBITS_ADD_OPTION_AND_DEFINE(
|
|
Kokkos_USING_DEPRECATED_VIEW
|
|
KOKKOS_USING_DEPRECATED_VIEW
|
|
"Choose whether to use the old, deprecated Kokkos::View"
|
|
OFF
|
|
)
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
#
|
|
# C) Install Kokkos' executable scripts
|
|
#
|
|
|
|
# nvcc_wrapper is Kokkos' wrapper for NVIDIA's NVCC CUDA compiler.
|
|
# Kokkos needs nvcc_wrapper in order to build. Other libraries and
|
|
# executables also need nvcc_wrapper. Thus, we need to install it.
|
|
# If the argument of DESTINATION is a relative path, CMake computes it
|
|
# as relative to ${CMAKE_INSTALL_PATH}.
|
|
|
|
INSTALL(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/bin/nvcc_wrapper DESTINATION bin)
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
#
|
|
# D) Process the subpackages for Kokkos
|
|
#
|
|
|
|
TRIBITS_PROCESS_SUBPACKAGES()
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
#
|
|
# E) If Kokkos itself is enabled, process the Kokkos package
|
|
#
|
|
|
|
TRIBITS_PACKAGE_DEF()
|
|
|
|
TRIBITS_EXCLUDE_AUTOTOOLS_FILES()
|
|
|
|
TRIBITS_EXCLUDE_FILES(
|
|
classic/doc
|
|
classic/LinAlg/doc/CrsRefactorNotesMay2012
|
|
)
|
|
|
|
TRIBITS_PACKAGE_POSTPROCESS()
|
|
ENDIF()
|