Update Kokkos library in LAMMPS to v3.1
This commit is contained in:
@ -6,5 +6,4 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES(
|
||||
Core core PS REQUIRED
|
||||
Containers containers PS OPTIONAL
|
||||
Algorithms algorithms PS OPTIONAL
|
||||
Example example EX OPTIONAL
|
||||
)
|
||||
|
||||
@ -73,6 +73,9 @@ function(kokkos_check)
|
||||
# use it to check that there are variables defined for all required
|
||||
# arguments. Success or failure messages will be displayed but we are
|
||||
# responsible for signaling failure and skip the build system generation.
|
||||
if (KOKKOS_CHECK_RETURN_VALUE)
|
||||
set(Kokkos_${arg}_FIND_QUIETLY ON)
|
||||
endif()
|
||||
find_package_handle_standard_args("Kokkos_${arg}" DEFAULT_MSG
|
||||
${KOKKOS_CHECK_${arg}})
|
||||
if(NOT Kokkos_${arg}_FOUND)
|
||||
|
||||
@ -5,11 +5,19 @@
|
||||
#define KOKKOS_CORE_CONFIG_H
|
||||
#endif
|
||||
|
||||
// KOKKOS_VERSION % 100 is the patch level
|
||||
// KOKKOS_VERSION / 100 % 100 is the minor version
|
||||
// KOKKOS_VERSION / 10000 is the major version
|
||||
#cmakedefine KOKKOS_VERSION @KOKKOS_VERSION@
|
||||
|
||||
|
||||
/* Execution Spaces */
|
||||
#cmakedefine KOKKOS_ENABLE_SERIAL
|
||||
#cmakedefine KOKKOS_ENABLE_OPENMP
|
||||
#cmakedefine KOKKOS_ENABLE_OPENMPTARGET
|
||||
#cmakedefine KOKKOS_ENABLE_THREADS
|
||||
#cmakedefine KOKKOS_ENABLE_CUDA
|
||||
#cmakedefine KOKKOS_ENABLE_HIP
|
||||
#cmakedefine KOKKOS_ENABLE_HPX
|
||||
#cmakedefine KOKKOS_ENABLE_MEMKIND
|
||||
#cmakedefine KOKKOS_ENABLE_LIBRT
|
||||
@ -33,6 +41,7 @@
|
||||
#cmakedefine KOKKOS_ENABLE_CUDA_LAMBDA
|
||||
#cmakedefine KOKKOS_ENABLE_CUDA_CONSTEXPR
|
||||
#cmakedefine KOKKOS_ENABLE_CUDA_LDG_INTRINSIC
|
||||
#cmakedefine KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE
|
||||
#cmakedefine KOKKOS_ENABLE_HPX_ASYNC_DISPATCH
|
||||
#cmakedefine KOKKOS_ENABLE_DEBUG
|
||||
#cmakedefine KOKKOS_ENABLE_DEBUG_DUALVIEW_MODIFY_CHECK
|
||||
|
||||
17
lib/kokkos/cmake/KokkosTrilinosConfig.cmake.in
Normal file
17
lib/kokkos/cmake/KokkosTrilinosConfig.cmake.in
Normal file
@ -0,0 +1,17 @@
|
||||
IF (NOT TARGET Kokkos::kokkos)
|
||||
# Compute the installation prefix relative to this file.
|
||||
get_filename_component(KOKKOS_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||
get_filename_component(KOKKOS_IMPORT_PREFIX "${KOKKOS_IMPORT_PREFIX}" PATH)
|
||||
get_filename_component(KOKKOS_IMPORT_PREFIX "${KOKKOS_IMPORT_PREFIX}" PATH)
|
||||
get_filename_component(KOKKOS_IMPORT_PREFIX "${KOKKOS_IMPORT_PREFIX}" PATH)
|
||||
if(KOKKOS_IMPORT_PREFIX STREQUAL "/")
|
||||
set(KOKKOS_IMPORT_PREFIX "")
|
||||
endif()
|
||||
add_library(Kokkos::kokkos INTERFACE IMPORTED)
|
||||
set_target_properties(Kokkos::kokkos PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "@Kokkos_LIBRARIES@;@KOKKOS_LINK_OPTIONS@"
|
||||
INTERFACE_COMPILE_FEATURES "@KOKKOS_CXX_STANDARD_FEATURE@"
|
||||
INTERFACE_COMPILE_OPTIONS "@KOKKOS_ALL_COMPILE_OPTIONS@"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${KOKKOS_IMPORT_PREFIX}/include"
|
||||
)
|
||||
ENDIF()
|
||||
@ -1,8 +1,12 @@
|
||||
|
||||
IF (KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
# Note: "stubs" suffix allows CMake to find the dummy
|
||||
# libcuda.so provided by the NVIDIA CUDA Toolkit for
|
||||
# cross-compiling CUDA on a host without a GPU.
|
||||
KOKKOS_FIND_IMPORTED(CUDA INTERFACE
|
||||
LIBRARIES cudart cuda
|
||||
LIBRARY_PATHS ENV LD_LIBRARY_PATH ENV CUDA_PATH
|
||||
LIBRARY_PATHS ENV LD_LIBRARY_PATH ENV CUDA_PATH /usr/local/cuda
|
||||
LIBRARY_SUFFIXES lib lib64 lib/stubs lib64/stubs
|
||||
ALLOW_SYSTEM_PATH_FALLBACK
|
||||
)
|
||||
ELSE()
|
||||
|
||||
@ -3,15 +3,18 @@ TRY_COMPILE(KOKKOS_HAS_PTHREAD_ARG
|
||||
${KOKKOS_TOP_BUILD_DIR}/tpl_tests
|
||||
${KOKKOS_SOURCE_DIR}/cmake/compile_tests/pthread.cpp
|
||||
LINK_LIBRARIES -pthread
|
||||
COMPILE_DEFINITIONS -pthread)
|
||||
COMPILE_DEFINITIONS -pthread
|
||||
)
|
||||
# The test no longer requires C++11
|
||||
# if we did needed C++ standard support, then we should add option
|
||||
# ${CMAKE_CXX${KOKKOS_CXX_STANDARD}_STANDARD_COMPILE_OPTION}
|
||||
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PTHREAD DEFAULT_MSG KOKKOS_HAS_PTHREAD_ARG)
|
||||
|
||||
KOKKOS_CREATE_IMPORTED_TPL(PTHREAD
|
||||
INTERFACE #this is not a real library with a real location
|
||||
COMPILE_OPTIONS -pthread
|
||||
LINK_OPTIONS -pthread)
|
||||
|
||||
|
||||
|
||||
#Only create the TPL if we succeed
|
||||
IF (KOKKOS_HAS_PTHREAD_ARG)
|
||||
KOKKOS_CREATE_IMPORTED_TPL(PTHREAD
|
||||
INTERFACE #this is not a real library with a real location
|
||||
COMPILE_OPTIONS -pthread
|
||||
LINK_OPTIONS -pthread)
|
||||
ENDIF()
|
||||
|
||||
@ -67,7 +67,7 @@ Note that all of these use `PUBLIC`! Almost every Kokkos flag is not private to
|
||||
|
||||
|
||||
### Compiler Features and Compiler Options
|
||||
Compiler options are flags like `-fopenmp` that do not need to be "resolved."
|
||||
Compiler options are flags like `-fopenmp` that do not need to be "resolved."
|
||||
The flag is either on or off.
|
||||
Compiler features are more fine-grained and require conflicting requests to be resolved.
|
||||
Suppose I have
|
||||
@ -145,11 +145,11 @@ If Kokkos depends on, e.g. `hwloc` the downstream project will also need to link
|
||||
There are three stages in adding a new third-party library (TPL):
|
||||
* Finding: find the desired library on the system and verify the installation is correct
|
||||
* Importing: create a CMake target, if necessary, that is compatible with `target_link_libraries`. This is mostly relevant for TPLs not installed with CMake.
|
||||
* Exporting: make the desired library visible to downstream projects
|
||||
* Exporting: make the desired library visible to downstream projects
|
||||
|
||||
TPLs are somewhat complicated by whether the library was installed with CMake or some other build system.
|
||||
If CMake, our lives are greatly simplified. We simply use `find_package` to locate the installed CMake project then call `target_link_libraries(kokkoscore PUBLIC/PRIVATE TPL)`. For libaries not installed with CMake, the process is a bit more complex.
|
||||
It is up to the Kokkos developers to "convert" the library into a CMake target as if it had been installed as a valid modern CMake target with properties.
|
||||
It is up to the Kokkos developers to "convert" the library into a CMake target as if it had been installed as a valid modern CMake target with properties.
|
||||
There are helper functions for simplifying the process of importing TPLs in Kokkos, but we walk through the process in detail to clearly illustrate the steps involved.
|
||||
|
||||
#### TPL Search Order
|
||||
@ -166,8 +166,9 @@ There are 3 possibilities that could be used:
|
||||
The following is the search order that Kokkos follows. Note: This differs from the default search order used by CMake `find_library` and `find_header`. CMake prefers default system paths over user-provided paths.
|
||||
For Kokkos (and package managers in general), it is better to prefer user-provided paths since this usually indicates a specific version we want.
|
||||
|
||||
1. `<NAME>_ROOT`
|
||||
1. `Kokkos_<NAME>_DIR`
|
||||
1. `<NAME>_ROOT` command line option
|
||||
1. `<NAME>_ROOT` environment variable
|
||||
1. `Kokkos_<NAME>_DIR` command line option
|
||||
1. Paths added by Kokkos CMake logic
|
||||
1. Default system paths (if allowed)
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#include <omp.h>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
int main(int, char**) {
|
||||
int thr = omp_get_num_threads();
|
||||
if (thr > 0)
|
||||
return thr;
|
||||
|
||||
@ -4,6 +4,10 @@ void* kokkos_test(void* args) { return args; }
|
||||
|
||||
int main(void) {
|
||||
pthread_t thread;
|
||||
/* Use NULL to avoid C++11. Some compilers
|
||||
do not have C++11 by default. Forcing C++11
|
||||
in the compile tests can be done, but is unnecessary
|
||||
*/
|
||||
pthread_create(&thread, NULL, kokkos_test, NULL);
|
||||
pthread_join(thread, NULL);
|
||||
return 0;
|
||||
|
||||
@ -24,10 +24,6 @@ IF(NOT ${MACRO_DEFINE_NAME} STREQUAL "")
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
||||
MACRO(GLOBAL_RESET VARNAME)
|
||||
SET(${VARNAME} "" CACHE INTERNAL "" FORCE)
|
||||
ENDMACRO()
|
||||
|
||||
MACRO(GLOBAL_OVERWRITE VARNAME VALUE TYPE)
|
||||
SET(${VARNAME} ${VALUE} CACHE ${TYPE} "" FORCE)
|
||||
ENDMACRO()
|
||||
@ -88,13 +84,9 @@ MACRO(ADD_INTERFACE_LIBRARY LIB_NAME)
|
||||
SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES INTERFACE TRUE)
|
||||
ENDMACRO()
|
||||
|
||||
IF(NOT TARGET check)
|
||||
ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND} -VV -C ${CMAKE_CFG_INTDIR})
|
||||
ENDIF()
|
||||
|
||||
FUNCTION(KOKKOS_ADD_TEST)
|
||||
if (KOKKOS_HAS_TRILINOS)
|
||||
CMAKE_PARSE_ARGUMENTS(TEST
|
||||
CMAKE_PARSE_ARGUMENTS(TEST
|
||||
""
|
||||
"EXE;NAME"
|
||||
""
|
||||
@ -108,22 +100,27 @@ FUNCTION(KOKKOS_ADD_TEST)
|
||||
TRIBITS_ADD_TEST(
|
||||
${EXE_ROOT}
|
||||
NAME ${TEST_NAME}
|
||||
${ARGN}
|
||||
COMM serial mpi
|
||||
NUM_MPI_PROCS 1
|
||||
${TEST_UNPARSED_ARGUMENTS}
|
||||
)
|
||||
else()
|
||||
CMAKE_PARSE_ARGUMENTS(TEST
|
||||
CMAKE_PARSE_ARGUMENTS(TEST
|
||||
"WILL_FAIL"
|
||||
"FAIL_REGULAR_EXPRESSION;PASS_REGULAR_EXPRESSION;EXE;NAME"
|
||||
"CATEGORIES;CMD_ARGS"
|
||||
${ARGN})
|
||||
# To match Tribits, we should always be receiving
|
||||
# the root names of exes/libs
|
||||
IF(TEST_EXE)
|
||||
SET(EXE ${TEST_EXE})
|
||||
SET(EXE_ROOT ${TEST_EXE})
|
||||
ELSE()
|
||||
SET(EXE ${TEST_NAME})
|
||||
SET(EXE_ROOT ${TEST_NAME})
|
||||
ENDIF()
|
||||
# Prepend package name to the test name
|
||||
# These should be the full target name
|
||||
SET(TEST_NAME ${PACKAGE_NAME}_${TEST_NAME})
|
||||
SET(EXE ${PACKAGE_NAME}_${EXE_ROOT})
|
||||
IF(WIN32)
|
||||
ADD_TEST(NAME ${TEST_NAME} WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH} COMMAND ${EXE}${CMAKE_EXECUTABLE_SUFFIX} ${TEST_CMD_ARGS})
|
||||
ELSE()
|
||||
@ -160,7 +157,7 @@ FUNCTION(KOKKOS_TPL_FIND_INCLUDE_DIRS_AND_LIBRARIES TPL_NAME)
|
||||
if (KOKKOS_HAS_TRILINOS)
|
||||
TRIBITS_TPL_FIND_INCLUDE_DIRS_AND_LIBRARIES(${TPL_NAME} ${ARGN})
|
||||
else()
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
""
|
||||
""
|
||||
"REQUIRED_HEADERS;REQUIRED_LIBS_NAMES"
|
||||
@ -214,13 +211,13 @@ ENDFUNCTION()
|
||||
|
||||
FUNCTION(KOKKOS_TARGET_INCLUDE_DIRECTORIES TARGET)
|
||||
IF(KOKKOS_HAS_TRILINOS)
|
||||
KOKKOS_LIB_TYPE(${TARGET} INCTYPE)
|
||||
KOKKOS_LIB_TYPE(${TARGET} INCTYPE)
|
||||
#don't trust tribits to do this correctly - but need to add package name
|
||||
TARGET_INCLUDE_DIRECTORIES(${TARGET} ${INCTYPE} ${ARGN})
|
||||
ELSEIF(TARGET ${TARGET})
|
||||
ELSEIF(TARGET ${TARGET})
|
||||
#the target actually exists - this means we are doing separate libs
|
||||
#or this a test library
|
||||
KOKKOS_LIB_TYPE(${TARGET} INCTYPE)
|
||||
KOKKOS_LIB_TYPE(${TARGET} INCTYPE)
|
||||
TARGET_INCLUDE_DIRECTORIES(${TARGET} ${INCTYPE} ${ARGN})
|
||||
ELSE()
|
||||
GET_PROPERTY(LIBS GLOBAL PROPERTY KOKKOS_LIBRARIES_NAMES)
|
||||
@ -239,7 +236,7 @@ ELSE()
|
||||
SET(options INTERFACE)
|
||||
SET(oneValueArgs)
|
||||
SET(multiValueArgs)
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
"INTERFACE"
|
||||
""
|
||||
""
|
||||
@ -264,7 +261,7 @@ ELSE()
|
||||
SET(oneValueArgs)
|
||||
SET(multiValueArgs HEADERS SOURCES)
|
||||
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
"STATIC;SHARED"
|
||||
""
|
||||
"HEADERS;SOURCES"
|
||||
@ -277,10 +274,6 @@ ELSE()
|
||||
LIST(REMOVE_DUPLICATES PARSE_SOURCES)
|
||||
ENDIF()
|
||||
ADD_LIBRARY(${NAME} ${PARSE_SOURCES})
|
||||
target_link_libraries(
|
||||
${NAME}
|
||||
PUBLIC kokkos
|
||||
)
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
|
||||
@ -9,52 +9,6 @@ FUNCTION(KOKKOS_ARCH_OPTION SUFFIX DEV_TYPE DESCRIPTION)
|
||||
SET(KOKKOS_ARCH_${SUFFIX} ${KOKKOS_ARCH_${SUFFIX}} PARENT_SCOPE)
|
||||
ENDFUNCTION()
|
||||
|
||||
FUNCTION(ARCH_FLAGS)
|
||||
SET(COMPILERS NVIDIA PGI XL DEFAULT Cray Intel Clang AppleClang GNU)
|
||||
CMAKE_PARSE_ARGUMENTS(
|
||||
PARSE
|
||||
"LINK_ONLY;COMPILE_ONLY"
|
||||
""
|
||||
"${COMPILERS}"
|
||||
${ARGN})
|
||||
|
||||
SET(COMPILER ${KOKKOS_CXX_COMPILER_ID})
|
||||
|
||||
SET(FLAGS)
|
||||
SET(NEW_COMPILE_OPTIONS)
|
||||
SET(NEW_XCOMPILER_OPTIONS)
|
||||
SET(NEW_LINK_OPTIONS)
|
||||
LIST(APPEND NEW_XCOMPILER_OPTIONS ${KOKKOS_XCOMPILER_OPTIONS})
|
||||
LIST(APPEND NEW_COMPILE_OPTIONS ${KOKKOS_COMPILE_OPTIONS})
|
||||
LIST(APPEND NEW_LINK_OPTIONS ${KOKKOS_LINK_OPTIONS})
|
||||
FOREACH(COMP ${COMPILERS})
|
||||
IF (COMPILER STREQUAL "${COMP}")
|
||||
IF (PARSE_${COMPILER})
|
||||
IF (NOT "${PARSE_${COMPILER}}" STREQUAL "NO-VALUE-SPECIFIED")
|
||||
SET(FLAGS ${PARSE_${COMPILER}})
|
||||
ENDIF()
|
||||
ELSEIF(PARSE_DEFAULT)
|
||||
SET(FLAGS ${PARSE_DEFAULT})
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
|
||||
IF (NOT LINK_ONLY)
|
||||
# The funky logic here is for future handling of argument deduplication
|
||||
# If we naively pass multiple -Xcompiler flags to target_compile_options
|
||||
# -Xcompiler will get deduplicated and break the build
|
||||
IF ("-Xcompiler" IN_LIST FLAGS)
|
||||
LIST(REMOVE_ITEM FLAGS "-Xcompiler")
|
||||
GLOBAL_APPEND(KOKKOS_XCOMPILER_OPTIONS ${FLAGS})
|
||||
ELSE()
|
||||
GLOBAL_APPEND(KOKKOS_COMPILE_OPTIONS ${FLAGS})
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF (NOT COMPILE_ONLY)
|
||||
GLOBAL_APPEND(KOKKOS_LINK_OPTIONS ${FLAGS})
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
# Make sure devices and compiler ID are done
|
||||
KOKKOS_CFG_DEPENDS(ARCH COMPILER_ID)
|
||||
@ -98,14 +52,15 @@ KOKKOS_ARCH_OPTION(VOLTA70 GPU "NVIDIA Volta generation CC 7.0")
|
||||
KOKKOS_ARCH_OPTION(VOLTA72 GPU "NVIDIA Volta generation CC 7.2")
|
||||
KOKKOS_ARCH_OPTION(TURING75 GPU "NVIDIA Turing generation CC 7.5")
|
||||
KOKKOS_ARCH_OPTION(EPYC HOST "AMD Epyc architecture")
|
||||
|
||||
KOKKOS_ARCH_OPTION(VEGA900 GPU "AMD GPU MI25 GFX900")
|
||||
KOKKOS_ARCH_OPTION(VEGA906 GPU "AMD GPU MI50/MI60 GFX906")
|
||||
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_KEPLER30 OR KOKKOS_ARCH_KEPLER32 OR KOKKOS_ARCH_KEPLER35 OR KOKKOS_ARCH_KEPLER37)
|
||||
SET(KOKKOS_ARCH_KEPLER ON)
|
||||
ENDIF()
|
||||
|
||||
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_MAXWELL50 OR KOKKOS_ARCH_MAXWELL52 OR KOKKOS_ARCH_MAXWELL53)
|
||||
SET(KOKKOS_ARCH_MAXWELL ON)
|
||||
@ -126,13 +81,13 @@ ENDIF()
|
||||
|
||||
IF(KOKKOS_ENABLE_COMPILER_WARNINGS)
|
||||
SET(COMMON_WARNINGS
|
||||
"-Wall" "-Wshadow" "-pedantic"
|
||||
"-Wall" "-Wunused-parameter" "-Wshadow" "-pedantic"
|
||||
"-Wsign-compare" "-Wtype-limits" "-Wuninitialized")
|
||||
|
||||
SET(GNU_WARNINGS "-Wempty-body" "-Wclobbered" "-Wignored-qualifiers"
|
||||
${COMMON_WARNINGS})
|
||||
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
GNU ${GNU_WARNINGS}
|
||||
DEFAULT ${COMMON_WARNINGS}
|
||||
@ -141,7 +96,8 @@ ENDIF()
|
||||
|
||||
|
||||
#------------------------------- KOKKOS_CUDA_OPTIONS ---------------------------
|
||||
GLOBAL_RESET(KOKKOS_CUDA_OPTIONS)
|
||||
#clear anything that might be in the cache
|
||||
GLOBAL_SET(KOKKOS_CUDA_OPTIONS)
|
||||
# Construct the Makefile options
|
||||
IF (KOKKOS_ENABLE_CUDA_LAMBDA)
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
@ -157,6 +113,7 @@ ENDIF()
|
||||
|
||||
IF (KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
SET(CUDA_ARCH_FLAG "--cuda-gpu-arch")
|
||||
SET(AMDGPU_ARCH_FLAG "--amdgpu-target")
|
||||
GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS -x cuda)
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
SET(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND ON CACHE BOOL "enable CUDA Clang workarounds" FORCE)
|
||||
@ -171,27 +128,13 @@ IF (KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS -lineinfo)
|
||||
ENDIF()
|
||||
UNSET(_UPPERCASE_CMAKE_BUILD_TYPE)
|
||||
IF (KOKKOS_CXX_COMPILER_VERSION VERSION_GREATER 9.0 OR KOKKOS_CXX_COMPILER_VERSION VERSION_EQUAL 9.0)
|
||||
GLOBAL_APPEND(KOKKOS_CUDAFE_OPTIONS --diag_suppress=esa_on_defaulted_function_ignored)
|
||||
IF (KOKKOS_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0 AND KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 10.0)
|
||||
GLOBAL_APPEND(KOKKOS_CUDAFE_OPTIONS --diag_suppress=esa_on_defaulted_function_ignored)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(KOKKOS_ENABLE_OPENMP)
|
||||
IF (KOKKOS_CXX_COMPILER_ID STREQUAL AppleClang)
|
||||
MESSAGE(FATAL_ERROR "Apple Clang does not support OpenMP. Use native Clang instead")
|
||||
ENDIF()
|
||||
ARCH_FLAGS(
|
||||
Clang -fopenmp=libomp
|
||||
PGI -mp
|
||||
NVIDIA -Xcompiler -fopenmp
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
XL -qsmp=omp
|
||||
DEFAULT -fopenmp
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_ARMV80)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
DEFAULT -march=armv8-a
|
||||
@ -199,7 +142,7 @@ IF (KOKKOS_ARCH_ARMV80)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_ARMV81)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
DEFAULT -march=armv8.1-a
|
||||
@ -208,7 +151,7 @@ ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_ARMV8_THUNDERX)
|
||||
SET(KOKKOS_ARCH_ARMV80 ON) #Not a cache variable
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
DEFAULT -march=armv8-a -mtune=thunderx
|
||||
@ -217,7 +160,7 @@ ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_ARMV8_THUNDERX2)
|
||||
SET(KOKKOS_ARCH_ARMV81 ON) #Not a cache variable
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
DEFAULT -mcpu=thunderx2t99 -mtune=thunderx2t99
|
||||
@ -225,7 +168,7 @@ IF (KOKKOS_ARCH_ARMV8_THUNDERX2)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_EPYC)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Intel -mavx2
|
||||
DEFAULT -march=znver1 -mtune=znver1
|
||||
)
|
||||
@ -234,7 +177,7 @@ IF (KOKKOS_ARCH_EPYC)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_WSM)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Intel -xSSE4.2
|
||||
PGI -tp=nehalem
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
@ -245,7 +188,7 @@ ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_SNB OR KOKKOS_ARCH_AMDAVX)
|
||||
SET(KOKKOS_ARCH_AVX ON)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Intel -mavx
|
||||
PGI -tp=sandybridge
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
@ -255,7 +198,7 @@ ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_HSW)
|
||||
SET(KOKKOS_ARCH_AVX2 ON)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Intel -xCORE-AVX2
|
||||
PGI -tp=haswell
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
@ -265,7 +208,7 @@ ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_BDW)
|
||||
SET(KOKKOS_ARCH_AVX2 ON)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Intel -xCORE-AVX2
|
||||
PGI -tp=haswell
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
@ -275,7 +218,7 @@ ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_EPYC)
|
||||
SET(KOKKOS_ARCH_AMD_AVX2 ON)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Intel -mvax2
|
||||
DEFAULT -march=znver1 -mtune=znver1
|
||||
)
|
||||
@ -284,7 +227,7 @@ ENDIF()
|
||||
IF (KOKKOS_ARCH_KNL)
|
||||
#avx512-mic
|
||||
SET(KOKKOS_ARCH_AVX512MIC ON) #not a cache variable
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Intel -xMIC-AVX512
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
@ -294,7 +237,7 @@ ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_KNC)
|
||||
SET(KOKKOS_USE_ISA_KNC ON)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -mmic
|
||||
)
|
||||
ENDIF()
|
||||
@ -302,7 +245,7 @@ ENDIF()
|
||||
IF (KOKKOS_ARCH_SKX)
|
||||
#avx512-xeon
|
||||
SET(KOKKOS_ARCH_AVX512XEON ON)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Intel -xCORE-AVX512
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
@ -319,7 +262,7 @@ IF (KOKKOS_ARCH_BDW OR KOKKOS_ARCH_SKX)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_POWER7)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
DEFAULT -mcpu=power7 -mtune=power7
|
||||
)
|
||||
@ -327,7 +270,7 @@ IF (KOKKOS_ARCH_POWER7)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_POWER8)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
NVIDIA NO-VALUE-SPECIFIED
|
||||
DEFAULT -mcpu=power8 -mtune=power8
|
||||
@ -335,7 +278,7 @@ IF (KOKKOS_ARCH_POWER8)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_POWER9)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
PGI NO-VALUE-SPECIFIED
|
||||
NVIDIA NO-VALUE-SPECIFIED
|
||||
DEFAULT -mcpu=power9 -mtune=power9
|
||||
@ -347,33 +290,50 @@ IF (KOKKOS_ARCH_POWER8 OR KOKKOS_ARCH_POWER9)
|
||||
ENDIF()
|
||||
|
||||
IF (Kokkos_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE)
|
||||
ARCH_FLAGS(
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Clang -fcuda-rdc
|
||||
NVIDIA --relocatable-device-code=true
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
#Right now we cannot get the compiler ID when cross-compiling, so just check
|
||||
#that HIP is enabled
|
||||
IF (Kokkos_ENABLE_HIP)
|
||||
IF (Kokkos_ENABLE_HIP_RELOCATABLE_DEVICE_CODE)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fgpu-rdc
|
||||
)
|
||||
ELSE()
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fno-gpu-rdc
|
||||
)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
|
||||
SET(CUDA_ARCH_ALREADY_SPECIFIED "")
|
||||
FUNCTION(CHECK_CUDA_ARCH ARCH FLAG)
|
||||
IF(KOKKOS_ARCH_${ARCH})
|
||||
IF(CUDA_ARCH_ALREADY_SPECIFIED)
|
||||
MESSAGE(FATAL_ERROR "Multiple GPU architectures given! Already have ${CUDA_ARCH_ALREADY_SPECIFIED}, but trying to add ${ARCH}. If you are re-running CMake, try clearing the cache and running again.")
|
||||
ENDIF()
|
||||
SET(CUDA_ARCH_ALREADY_SPECIFIED ${ARCH} PARENT_SCOPE)
|
||||
IF (NOT KOKKOS_ENABLE_CUDA)
|
||||
MESSAGE(WARNING "Given CUDA arch ${ARCH}, but Kokkos_ENABLE_CUDA is OFF. Option will be ignored.")
|
||||
UNSET(KOKKOS_ARCH_${ARCH} PARENT_SCOPE)
|
||||
ELSE()
|
||||
GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}")
|
||||
IF(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE)
|
||||
GLOBAL_APPEND(KOKKOS_LINK_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}")
|
||||
IF(KOKKOS_ARCH_${ARCH})
|
||||
IF(CUDA_ARCH_ALREADY_SPECIFIED)
|
||||
MESSAGE(FATAL_ERROR "Multiple GPU architectures given! Already have ${CUDA_ARCH_ALREADY_SPECIFIED}, but trying to add ${ARCH}. If you are re-running CMake, try clearing the cache and running again.")
|
||||
ENDIF()
|
||||
SET(CUDA_ARCH_ALREADY_SPECIFIED ${ARCH} PARENT_SCOPE)
|
||||
IF (NOT KOKKOS_ENABLE_CUDA AND NOT KOKKOS_ENABLE_OPENMPTARGET)
|
||||
MESSAGE(WARNING "Given CUDA arch ${ARCH}, but Kokkos_ENABLE_CUDA and Kokkos_ENABLE_OPENMPTARGET are OFF. Option will be ignored.")
|
||||
UNSET(KOKKOS_ARCH_${ARCH} PARENT_SCOPE)
|
||||
ELSE()
|
||||
SET(KOKKOS_CUDA_ARCH_FLAG ${FLAG} PARENT_SCOPE)
|
||||
GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}")
|
||||
IF(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE)
|
||||
GLOBAL_APPEND(KOKKOS_LINK_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
|
||||
#These will define KOKKOS_CUDA_ARCH_FLAG
|
||||
#to the corresponding flag name if ON
|
||||
CHECK_CUDA_ARCH(KEPLER30 sm_30)
|
||||
CHECK_CUDA_ARCH(KEPLER32 sm_32)
|
||||
CHECK_CUDA_ARCH(KEPLER35 sm_35)
|
||||
@ -383,18 +343,76 @@ CHECK_CUDA_ARCH(MAXWELL52 sm_52)
|
||||
CHECK_CUDA_ARCH(MAXWELL53 sm_53)
|
||||
CHECK_CUDA_ARCH(PASCAL60 sm_60)
|
||||
CHECK_CUDA_ARCH(PASCAL61 sm_61)
|
||||
CHECK_CUDA_ARCH(VOLTA70 sm_70)
|
||||
CHECK_CUDA_ARCH(VOLTA72 sm_72)
|
||||
CHECK_CUDA_ARCH(VOLTA70 sm_70)
|
||||
CHECK_CUDA_ARCH(VOLTA72 sm_72)
|
||||
CHECK_CUDA_ARCH(TURING75 sm_75)
|
||||
|
||||
SET(AMDGPU_ARCH_ALREADY_SPECIFIED "")
|
||||
FUNCTION(CHECK_AMDGPU_ARCH ARCH FLAG)
|
||||
IF(KOKKOS_ARCH_${ARCH})
|
||||
IF(AMDGPU_ARCH_ALREADY_SPECIFIED)
|
||||
MESSAGE(FATAL_ERROR "Multiple GPU architectures given! Already have ${AMDGPU_ARCH_ALREADY_SPECIFIED}, but trying to add ${ARCH}. If you are re-running CMake, try clearing the cache and running again.")
|
||||
ENDIF()
|
||||
SET(AMDGPU_ARCH_ALREADY_SPECIFIED ${ARCH} PARENT_SCOPE)
|
||||
IF (NOT KOKKOS_ENABLE_HIP AND NOT KOKKOS_ENABLE_OPENMPTARGET)
|
||||
MESSAGE(WARNING "Given HIP arch ${ARCH}, but Kokkos_ENABLE_AMDGPU and Kokkos_ENABLE_OPENMPTARGET are OFF. Option will be ignored.")
|
||||
UNSET(KOKKOS_ARCH_${ARCH} PARENT_SCOPE)
|
||||
ELSE()
|
||||
SET(KOKKOS_AMDGPU_ARCH_FLAG ${FLAG} PARENT_SCOPE)
|
||||
GLOBAL_APPEND(KOKKOS_AMDGPU_OPTIONS "${AMDGPU_ARCH_FLAG}=${FLAG}")
|
||||
IF(KOKKOS_ENABLE_HIP)
|
||||
GLOBAL_APPEND(KOKKOS_LINK_OPTIONS "${AMDGPU_ARCH_FLAG}=${FLAG}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
#These will define KOKKOS_AMDGPU_ARCH_FLAG
|
||||
#to the corresponding flag name if ON
|
||||
CHECK_AMDGPU_ARCH(VEGA900 gfx900) # Radeon Instinct MI25
|
||||
CHECK_AMDGPU_ARCH(VEGA906 gfx906) # Radeon Instinct MI50 and MI60
|
||||
|
||||
IF (KOKKOS_ENABLE_OPENMPTARGET)
|
||||
SET(CLANG_CUDA_ARCH ${KOKKOS_CUDA_ARCH_FLAG})
|
||||
IF (CLANG_CUDA_ARCH)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Clang -Xopenmp-target -march=${CLANG_CUDA_ARCH} -fopenmp-targets=nvptx64-nvidia-cuda
|
||||
XL -qtgtarch=${KOKKOS_CUDA_ARCH_FLAG}
|
||||
)
|
||||
ENDIF()
|
||||
SET(CLANG_AMDGPU_ARCH ${KOKKOS_AMDGPU_ARCH_FLAG})
|
||||
IF (CLANG_AMDGPU_ARCH)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Clang -Xopenmp-target=amdgcn-amd-amdhsa -march=${CLANG_AMDGPU_ARCH} -fopenmp-targets=amdgcn-amd-amdhsa
|
||||
)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(KOKKOS_ENABLE_CUDA AND NOT CUDA_ARCH_ALREADY_SPECIFIED)
|
||||
MESSAGE(SEND_ERROR "CUDA enabled but no NVIDIA GPU architecture currently enabled. Please give one -DKokkos_ARCH_{..}=ON' to enable an NVIDIA GPU architecture.")
|
||||
ENDIF()
|
||||
|
||||
#CMake verbose is kind of pointless
|
||||
#Let's just always print things
|
||||
MESSAGE(STATUS "Execution Spaces:")
|
||||
IF(KOKKOS_ENABLE_CUDA)
|
||||
MESSAGE(STATUS " Device Parallel: CUDA")
|
||||
ELSE()
|
||||
MESSAGE(STATUS " Device Parallel: NONE")
|
||||
|
||||
FOREACH (_BACKEND CUDA OPENMPTARGET HIP)
|
||||
IF(KOKKOS_ENABLE_${_BACKEND})
|
||||
IF(_DEVICE_PARALLEL)
|
||||
MESSAGE(FATAL_ERROR "Multiple device parallel execution spaces are not allowed! "
|
||||
"Trying to enable execution space ${_BACKEND}, "
|
||||
"but execution space ${_DEVICE_PARALLEL} is already enabled. "
|
||||
"Remove the CMakeCache.txt file and re-configure.")
|
||||
ENDIF()
|
||||
SET(_DEVICE_PARALLEL ${_BACKEND})
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
IF(NOT _DEVICE_PARALLEL)
|
||||
SET(_DEVICE_PARALLEL "NONE")
|
||||
ENDIF()
|
||||
MESSAGE(STATUS " Device Parallel: ${_DEVICE_PARALLEL}")
|
||||
UNSET(_DEVICE_PARALLEL)
|
||||
|
||||
|
||||
FOREACH (_BACKEND OPENMP PTHREAD HPX)
|
||||
IF(KOKKOS_ENABLE_${_BACKEND})
|
||||
|
||||
12
lib/kokkos/cmake/kokkos_check_env.cmake
Normal file
12
lib/kokkos/cmake/kokkos_check_env.cmake
Normal file
@ -0,0 +1,12 @@
|
||||
SET(CRAYPE_VERSION $ENV{CRAYPE_VERSION})
|
||||
IF (CRAYPE_VERSION)
|
||||
SET(KOKKOS_IS_CRAYPE TRUE)
|
||||
SET(CRAYPE_LINK_TYPE $ENV{CRAYPE_LINK_TYPE})
|
||||
IF (CRAYPE_LINK_TYPE)
|
||||
IF (NOT CRAYPE_LINK_TYPE STREQUAL "dynamic")
|
||||
MESSAGE(WARNING "CRAYPE_LINK_TYPE is set to ${CRAYPE_LINK_TYPE}. Linking is likely to fail unless this is set to 'dynamic'")
|
||||
ENDIF()
|
||||
ELSE()
|
||||
MESSAGE(WARNING "CRAYPE_LINK_TYPE is not set. Linking is likely to fail unless this is set to 'dynamic'")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
@ -13,7 +13,7 @@ EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version
|
||||
|
||||
|
||||
STRING(REGEX REPLACE "^ +" ""
|
||||
INTERNAL_HAVE_COMPILER_NVCC ${INTERNAL_HAVE_COMPILER_NVCC})
|
||||
INTERNAL_HAVE_COMPILER_NVCC "${INTERNAL_HAVE_COMPILER_NVCC}")
|
||||
|
||||
|
||||
IF(INTERNAL_HAVE_COMPILER_NVCC)
|
||||
@ -31,16 +31,32 @@ IF(INTERNAL_HAVE_COMPILER_NVCC)
|
||||
SET(KOKKOS_CXX_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION} CACHE STRING INTERNAL FORCE)
|
||||
ENDIF()
|
||||
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Cray)
|
||||
|
||||
# SET nvcc's compiler version.
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
# The Cray compiler reports as Clang to most versions of CMake
|
||||
EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version
|
||||
COMMAND grep Cray
|
||||
COMMAND wc -l
|
||||
OUTPUT_VARIABLE INTERNAL_HAVE_CRAY_COMPILER
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
IF (INTERNAL_HAVE_CRAY_COMPILER) #not actually Clang
|
||||
SET(KOKKOS_CLANG_IS_CRAY TRUE)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Cray OR KOKKOS_CLANG_IS_CRAY)
|
||||
# SET Cray's compiler version.
|
||||
EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version
|
||||
OUTPUT_VARIABLE INTERNAL_CXX_COMPILER_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+$"
|
||||
STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+"
|
||||
TEMP_CXX_COMPILER_VERSION ${INTERNAL_CXX_COMPILER_VERSION})
|
||||
SET(KOKKOS_CXX_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION} CACHE STRING INTERNAL FORCE)
|
||||
IF (KOKKOS_CLANG_IS_CRAY)
|
||||
SET(KOKKOS_CLANG_CRAY_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION})
|
||||
ELSE()
|
||||
SET(KOKKOS_CXX_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION} CACHE STRING INTERNAL FORCE)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
# Enforce the minimum compilers supported by Kokkos.
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP)
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP AND NOT KOKKOS_CLANG_IS_CRAY)
|
||||
# The clang "version" doesn't actually tell you what runtimes and tools
|
||||
# were built into Clang. We should therefore make sure that libomp
|
||||
# was actually built into Clang. Otherwise the user will get nonsensical
|
||||
@ -11,7 +11,7 @@ IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP)
|
||||
#also - this is easier to use than CMakeCheckCXXSourceCompiles
|
||||
TRY_COMPILE(CLANG_HAS_OMP
|
||||
${KOKKOS_TOP_BUILD_DIR}/corner_cases
|
||||
${KOKKOS_SOURCE_DIR}/cmake/compile_tests/clang_omp.cpp
|
||||
${KOKKOS_SOURCE_DIR}/cmake/compile_tests/clang_omp.cpp
|
||||
COMPILE_DEFINITIONS -fopenmp=libomp
|
||||
LINK_LIBRARIES -fopenmp=libomp
|
||||
)
|
||||
@ -22,6 +22,30 @@ IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP)
|
||||
UNSET(CLANG_HAS_OMP CACHE) #make sure CMake always re-runs this
|
||||
ENDIF()
|
||||
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL AppleClang AND KOKKOS_ENABLE_OPENMP)
|
||||
# The clang "version" doesn't actually tell you what runtimes and tools
|
||||
# were built into Clang. We should therefore make sure that libomp
|
||||
# was actually built into Clang. Otherwise the user will get nonsensical
|
||||
# errors when they try to build.
|
||||
|
||||
#Try compile is the height of CMake nonsense
|
||||
#I can't just give it compiler and link flags
|
||||
#I have to hackily pretend that compiler flags are compiler definitions
|
||||
#and that linker flags are libraries
|
||||
#also - this is easier to use than CMakeCheckCXXSourceCompiles
|
||||
TRY_COMPILE(APPLECLANG_HAS_OMP
|
||||
${KOKKOS_TOP_BUILD_DIR}/corner_cases
|
||||
${KOKKOS_SOURCE_DIR}/cmake/compile_tests/clang_omp.cpp
|
||||
COMPILE_DEFINITIONS -Xpreprocessor -fopenmp
|
||||
LINK_LIBRARIES -lomp
|
||||
)
|
||||
IF (NOT APPLECLANG_HAS_OMP)
|
||||
UNSET(APPLECLANG_HAS_OMP CACHE) #make sure CMake always re-runs this
|
||||
MESSAGE(FATAL_ERROR "AppleClang failed OpenMP check. You have requested -DKokkos_ENABLE_OPENMP=ON, but the AppleClang compiler does not appear to have been built with OpenMP support")
|
||||
ENDIF()
|
||||
UNSET(APPLECLANG_HAS_OMP CACHE) #make sure CMake always re-runs this
|
||||
ENDIF()
|
||||
|
||||
|
||||
IF (KOKKOS_CXX_STANDARD STREQUAL 17)
|
||||
IF (KOKKOS_CXX_COMPILER_ID STREQUAL GNU AND KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 7)
|
||||
|
||||
@ -31,6 +31,41 @@ ELSE()
|
||||
SET(OMP_DEFAULT OFF)
|
||||
ENDIF()
|
||||
KOKKOS_DEVICE_OPTION(OPENMP ${OMP_DEFAULT} HOST "Whether to build OpenMP backend")
|
||||
IF(KOKKOS_ENABLE_OPENMP)
|
||||
SET(ClangOpenMPFlag -fopenmp=libomp)
|
||||
IF(KOKKOS_CLANG_IS_CRAY)
|
||||
SET(ClangOpenMPFlag -fopenmp)
|
||||
ENDIF()
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Clang ${ClangOpenMPFlag}
|
||||
AppleClang -Xpreprocessor -fopenmp
|
||||
PGI -mp
|
||||
NVIDIA -Xcompiler -fopenmp
|
||||
Cray NO-VALUE-SPECIFIED
|
||||
XL -qsmp=omp
|
||||
DEFAULT -fopenmp
|
||||
)
|
||||
COMPILER_SPECIFIC_LIBS(
|
||||
AppleClang -lomp
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
KOKKOS_DEVICE_OPTION(OPENMPTARGET OFF DEVICE "Whether to build the OpenMP target backend")
|
||||
IF (KOKKOS_ENABLE_OPENMPTARGET)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Clang -fopenmp -fopenmp=libomp
|
||||
XL -qsmp=omp -qoffload -qnoeh
|
||||
DEFAULT -fopenmp
|
||||
)
|
||||
COMPILER_SPECIFIC_DEFS(
|
||||
XL KOKKOS_IBM_XL_OMP45_WORKAROUND
|
||||
Clang KOKKOS_WORKAROUND_OPENMPTARGET_CLANG
|
||||
)
|
||||
# Are there compilers which identify as Clang and need this library?
|
||||
# COMPILER_SPECIFIC_LIBS(
|
||||
# Clang -lopenmptarget
|
||||
# )
|
||||
ENDIF()
|
||||
|
||||
IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_CUDA)
|
||||
SET(CUDA_DEFAULT ON)
|
||||
@ -59,3 +94,5 @@ ENDIF()
|
||||
KOKKOS_DEVICE_OPTION(SERIAL ${SERIAL_DEFAULT} HOST "Whether to build serial backend")
|
||||
|
||||
KOKKOS_DEVICE_OPTION(HPX OFF HOST "Whether to build HPX backend (experimental)")
|
||||
|
||||
KOKKOS_DEVICE_OPTION(HIP OFF DEVICE "Whether to build HIP backend")
|
||||
|
||||
@ -21,6 +21,7 @@ ENDFUNCTION()
|
||||
|
||||
# Certain defaults will depend on knowing the enabled devices
|
||||
KOKKOS_CFG_DEPENDS(OPTIONS DEVICES)
|
||||
KOKKOS_CFG_DEPENDS(OPTIONS COMPILER_ID)
|
||||
|
||||
# Put a check in just in case people are using this option
|
||||
KOKKOS_DEPRECATED_LIST(OPTIONS ENABLE)
|
||||
@ -28,8 +29,10 @@ KOKKOS_DEPRECATED_LIST(OPTIONS ENABLE)
|
||||
KOKKOS_ENABLE_OPTION(CUDA_RELOCATABLE_DEVICE_CODE OFF "Whether to enable relocatable device code (RDC) for CUDA")
|
||||
KOKKOS_ENABLE_OPTION(CUDA_UVM OFF "Whether to use unified memory (UM) for CUDA by default")
|
||||
KOKKOS_ENABLE_OPTION(CUDA_LDG_INTRINSIC OFF "Whether to use CUDA LDG intrinsics")
|
||||
KOKKOS_ENABLE_OPTION(HIP_RELOCATABLE_DEVICE_CODE OFF "Whether to enable relocatable device code (RDC) for HIP")
|
||||
KOKKOS_ENABLE_OPTION(HPX_ASYNC_DISPATCH OFF "Whether HPX supports asynchronous dispatch")
|
||||
KOKKOS_ENABLE_OPTION(TESTS OFF "Whether to build the unit tests")
|
||||
KOKKOS_ENABLE_OPTION(EXAMPLES OFF "Whether to build the examples")
|
||||
STRING(TOUPPER "${CMAKE_BUILD_TYPE}" UPPERCASE_CMAKE_BUILD_TYPE)
|
||||
IF(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
|
||||
KOKKOS_ENABLE_OPTION(DEBUG ON "Whether to activate extra debug features - may increase compile times")
|
||||
@ -51,12 +54,14 @@ IF (KOKKOS_ENABLE_CUDA)
|
||||
SET(KOKKOS_COMPILER_CUDA_VERSION "${KOKKOS_COMPILER_VERSION_MAJOR}${KOKKOS_COMPILER_VERSION_MINOR}")
|
||||
ENDIF()
|
||||
|
||||
IF (Trilinos_ENABLE_Kokkos AND TPL_ENABLE_CUDA AND DEFINED KOKKOS_COMPILER_CUDA_VERSION AND KOKKOS_COMPILER_CUDA_VERSION GREATER 70)
|
||||
SET(LAMBDA_DEFAULT ON)
|
||||
IF (Trilinos_ENABLE_Kokkos AND TPL_ENABLE_CUDA)
|
||||
SET(CUDA_LAMBDA_DEFAULT ON)
|
||||
ELSEIF (KOKKOS_ENABLE_CUDA AND (KOKKOS_CXX_COMPILER_ID STREQUAL Clang))
|
||||
SET(CUDA_LAMBDA_DEFAULT ON)
|
||||
ELSE()
|
||||
SET(LAMBDA_DEFAULT OFF)
|
||||
SET(CUDA_LAMBDA_DEFAULT OFF)
|
||||
ENDIF()
|
||||
KOKKOS_ENABLE_OPTION(CUDA_LAMBDA ${LAMBDA_DEFAULT} "Whether to activate experimental lambda features")
|
||||
KOKKOS_ENABLE_OPTION(CUDA_LAMBDA ${CUDA_LAMBDA_DEFAULT} "Whether to activate experimental lambda features")
|
||||
IF (Trilinos_ENABLE_Kokkos)
|
||||
SET(COMPLEX_ALIGN_DEFAULT OFF)
|
||||
ELSE()
|
||||
@ -64,7 +69,13 @@ ELSE()
|
||||
ENDIF()
|
||||
KOKKOS_ENABLE_OPTION(COMPLEX_ALIGN ${COMPLEX_ALIGN_DEFAULT} "Whether to align Kokkos::complex to 2*alignof(RealType)")
|
||||
|
||||
KOKKOS_ENABLE_OPTION(CUDA_CONSTEXPR OFF "Whether to activate experimental relaxed constexpr functions")
|
||||
|
||||
IF (KOKKOS_ENABLE_CUDA AND (KOKKOS_CXX_COMPILER_ID STREQUAL Clang))
|
||||
SET(CUDA_CONSTEXPR_DEFAULT ON)
|
||||
ELSE()
|
||||
SET(CUDA_CONSTEXPR_DEFAULT OFF)
|
||||
ENDIF()
|
||||
KOKKOS_ENABLE_OPTION(CUDA_CONSTEXPR ${CUDA_CONSTEXPR_DEFAULT} "Whether to activate experimental relaxed constexpr functions")
|
||||
|
||||
FUNCTION(check_device_specific_options)
|
||||
CMAKE_PARSE_ARGUMENTS(SOME "" "DEVICE" "OPTIONS" ${ARGN})
|
||||
@ -84,9 +95,18 @@ FUNCTION(check_device_specific_options)
|
||||
ENDFUNCTION()
|
||||
|
||||
CHECK_DEVICE_SPECIFIC_OPTIONS(DEVICE CUDA OPTIONS CUDA_UVM CUDA_RELOCATABLE_DEVICE_CODE CUDA_LAMBDA CUDA_CONSTEXPR CUDA_LDG_INTRINSIC)
|
||||
CHECK_DEVICE_SPECIFIC_OPTIONS(DEVICE HIP OPTIONS HIP_RELOCATABLE_DEVICE_CODE)
|
||||
CHECK_DEVICE_SPECIFIC_OPTIONS(DEVICE HPX OPTIONS HPX_ASYNC_DISPATCH)
|
||||
|
||||
# Needed due to change from deprecated name to new header define name
|
||||
IF (KOKKOS_ENABLE_AGGRESSIVE_VECTORIZATION)
|
||||
SET(KOKKOS_OPT_RANGE_AGGRESSIVE_VECTORIZATION ON)
|
||||
ENDIF()
|
||||
|
||||
# This is known to occur with Clang 9. We would need to use nvcc as the linker
|
||||
# http://lists.llvm.org/pipermail/cfe-dev/2018-June/058296.html
|
||||
# TODO: Through great effort we can use a different linker by hacking
|
||||
# CMAKE_CXX_LINK_EXECUTABLE in a future release
|
||||
IF (KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE AND KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
MESSAGE(FATAL_ERROR "Relocatable device code is currently not supported with Clang - must use nvcc_wrapper or turn off RDC")
|
||||
ENDIF()
|
||||
|
||||
@ -3,9 +3,9 @@
|
||||
# kokkos_option
|
||||
|
||||
# Validate options are given with correct case and define an internal
|
||||
# upper-case version for use within
|
||||
# upper-case version for use within
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
# @FUNCTION: kokkos_deprecated_list
|
||||
#
|
||||
@ -62,7 +62,7 @@ FUNCTION(kokkos_option CAMEL_SUFFIX DEFAULT TYPE DOCSTRING)
|
||||
UNSET(${opt} CACHE)
|
||||
ELSE()
|
||||
MESSAGE(FATAL_ERROR "Matching option found for ${CAMEL_NAME} with the wrong case ${opt}. Please delete your CMakeCache.txt and change option to -D${CAMEL_NAME}=${${opt}}. This is now enforced to avoid hard-to-debug CMake cache inconsistencies.")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
@ -125,7 +125,7 @@ MACRO(kokkos_export_imported_tpl NAME)
|
||||
KOKKOS_APPEND_CONFIG_LINE("IF(NOT TARGET ${NAME})")
|
||||
KOKKOS_APPEND_CONFIG_LINE("ADD_LIBRARY(${NAME} UNKNOWN IMPORTED)")
|
||||
KOKKOS_APPEND_CONFIG_LINE("SET_TARGET_PROPERTIES(${NAME} PROPERTIES")
|
||||
|
||||
|
||||
GET_TARGET_PROPERTY(TPL_LIBRARY ${NAME} IMPORTED_LOCATION)
|
||||
IF(TPL_LIBRARY)
|
||||
KOKKOS_APPEND_CONFIG_LINE("IMPORTED_LOCATION ${TPL_LIBRARY}")
|
||||
@ -198,7 +198,7 @@ MACRO(kokkos_import_tpl NAME)
|
||||
# I have still been getting errors about ROOT variables being ignored
|
||||
# I'm not sure if this is a scope issue - but make sure
|
||||
# the policy is set before we do any find_package calls
|
||||
IF(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0")
|
||||
IF(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0")
|
||||
CMAKE_POLICY(SET CMP0074 NEW)
|
||||
ENDIF()
|
||||
|
||||
@ -341,11 +341,12 @@ ENDMACRO()
|
||||
# default, custom paths are prioritized over system paths. The searched
|
||||
# order is:
|
||||
# 1. <NAME>_ROOT variable
|
||||
# 2. Kokkos_<NAME>_DIR variable
|
||||
# 3. Locations in the PATHS option
|
||||
# 4. Default system paths, if allowed.
|
||||
# 2. <NAME>_ROOT environment variable
|
||||
# 3. Kokkos_<NAME>_DIR variable
|
||||
# 4. Locations in the PATHS option
|
||||
# 5. Default system paths, if allowed.
|
||||
#
|
||||
# Default system paths are allowed if none of options (1)-(3) are specified
|
||||
# Default system paths are allowed if none of options (1)-(4) are specified
|
||||
# or if default paths are specifically allowed via ALLOW_SYSTEM_PATH_FALLBACK
|
||||
#
|
||||
# Usage::
|
||||
@ -387,33 +388,29 @@ MACRO(kokkos_find_header VAR_NAME HEADER TPL_NAME)
|
||||
"PATHS"
|
||||
${ARGN})
|
||||
|
||||
SET(${HEADER}_FOUND FALSE)
|
||||
SET(${VAR_NAME} "${VARNAME}-NOTFOUND")
|
||||
SET(HAVE_CUSTOM_PATHS FALSE)
|
||||
IF(NOT ${HEADER}_FOUND AND DEFINED ${TPL_NAME}_ROOT)
|
||||
#ONLY look in the root directory
|
||||
FIND_PATH(${VAR_NAME} ${HEADER} PATHS ${${TPL_NAME}_ROOT}/include NO_DEFAULT_PATH)
|
||||
|
||||
IF(DEFINED ${TPL_NAME}_ROOT OR
|
||||
DEFINED ENV{${TPL_NAME}_ROOT} OR
|
||||
DEFINED KOKKOS_${TPL_NAME}_DIR OR
|
||||
TPL_PATHS)
|
||||
FIND_PATH(${VAR_NAME} ${HEADER}
|
||||
PATHS
|
||||
${${TPL_NAME}_ROOT}
|
||||
$ENV{${TPL_NAME}_ROOT}
|
||||
${KOKKOS_${TPL_NAME}_DIR}
|
||||
${TPL_PATHS}
|
||||
PATH_SUFFIXES include
|
||||
NO_DEFAULT_PATH)
|
||||
SET(HAVE_CUSTOM_PATHS TRUE)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT ${HEADER}_FOUND AND DEFINED KOKKOS_${TPL_NAME}_DIR)
|
||||
#ONLY look in the root directory
|
||||
FIND_PATH(${VAR_NAME} ${HEADER} PATHS ${KOKKOS_${TPL_NAME}_DIR}/include NO_DEFAULT_PATH)
|
||||
SET(HAVE_CUSTOM_PATHS TRUE)
|
||||
IF(NOT HAVE_CUSTOM_PATHS OR TPL_ALLOW_SYSTEM_PATH_FALLBACK)
|
||||
#No-op if ${VAR_NAME} set by previous call
|
||||
FIND_PATH(${VAR_NAME} ${HEADER})
|
||||
ENDIF()
|
||||
|
||||
IF (NOT ${HEADER}_FOUND AND TPL_PATHS)
|
||||
#we got custom paths
|
||||
#ONLY look in these paths and nowhere else
|
||||
FIND_PATH(${VAR_NAME} ${HEADER} PATHS ${TPL_PATHS} NO_DEFAULT_PATH)
|
||||
SET(HAVE_CUSTOM_PATHS TRUE)
|
||||
ENDIF()
|
||||
|
||||
IF (NOT HAVE_CUSTOM_PATHS OR TPL_ALLOW_SYSTEM_PATH_FALLBACK)
|
||||
#Now go ahead and look in system paths
|
||||
IF (NOT ${HEADER}_FOUND)
|
||||
FIND_PATH(${VAR_NAME} ${HEADER})
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
||||
#
|
||||
@ -424,9 +421,10 @@ ENDMACRO()
|
||||
# default, custom paths are prioritized over system paths. The search
|
||||
# order is:
|
||||
# 1. <NAME>_ROOT variable
|
||||
# 2. Kokkos_<NAME>_DIR variable
|
||||
# 3. Locations in the PATHS option
|
||||
# 4. Default system paths, if allowed.
|
||||
# 2. <NAME>_ROOT environment variable
|
||||
# 3. Kokkos_<NAME>_DIR variable
|
||||
# 4. Locations in the PATHS option
|
||||
# 5. Default system paths, if allowed.
|
||||
#
|
||||
# Default system paths are allowed if none of options (1)-(3) are specified
|
||||
# or if default paths are specifically allowed via ALLOW_SYSTEM_PATH_FALLBACK
|
||||
@ -439,6 +437,7 @@ ENDMACRO()
|
||||
# <TPL_NAME>
|
||||
# [ALLOW_SYSTEM_PATH_FALLBACK]
|
||||
# [PATHS path1 [path2 ...]]
|
||||
# [SUFFIXES suffix1 [suffix2 ...]]
|
||||
# )
|
||||
#
|
||||
# ``<VAR_NAME>``
|
||||
@ -463,39 +462,46 @@ ENDMACRO()
|
||||
#
|
||||
# Custom paths to search for the library
|
||||
#
|
||||
# ``SUFFIXES``
|
||||
#
|
||||
# Suffixes appended to PATHS when attempting to locate
|
||||
# the library. Defaults to {lib, lib64}.
|
||||
#
|
||||
MACRO(kokkos_find_library VAR_NAME LIB TPL_NAME)
|
||||
CMAKE_PARSE_ARGUMENTS(TPL
|
||||
"ALLOW_SYSTEM_PATH_FALLBACK"
|
||||
""
|
||||
"PATHS"
|
||||
"PATHS;SUFFIXES"
|
||||
${ARGN})
|
||||
|
||||
SET(${LIB}_FOUND FALSE)
|
||||
IF(NOT TPL_SUFFIXES)
|
||||
SET(TPL_SUFFIXES lib lib64)
|
||||
ENDIF()
|
||||
|
||||
SET(${VAR_NAME} "${VARNAME}-NOTFOUND")
|
||||
SET(HAVE_CUSTOM_PATHS FALSE)
|
||||
IF(NOT ${LIB}_FOUND AND DEFINED ${TPL_NAME}_ROOT)
|
||||
FIND_LIBRARY(${VAR_NAME} ${LIB} PATHS ${${TPL_NAME}_ROOT}/lib ${${TPL_NAME}_ROOT}/lib64 NO_DEFAULT_PATH)
|
||||
|
||||
IF(DEFINED ${TPL_NAME}_ROOT OR
|
||||
DEFINED ENV{${TPL_NAME}_ROOT} OR
|
||||
DEFINED KOKKOS_${TPL_NAME}_DIR OR
|
||||
TPL_PATHS)
|
||||
FIND_LIBRARY(${VAR_NAME} ${LIB}
|
||||
PATHS
|
||||
${${TPL_NAME}_ROOT}
|
||||
$ENV{${TPL_NAME}_ROOT}
|
||||
${KOKKOS_${TPL_NAME}_DIR}
|
||||
${TPL_PATHS}
|
||||
PATH_SUFFIXES
|
||||
${TPL_SUFFIXES}
|
||||
NO_DEFAULT_PATH)
|
||||
SET(HAVE_CUSTOM_PATHS TRUE)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT ${LIB}_FOUND AND DEFINED KOKKOS_${TPL_NAME}_DIR)
|
||||
#we got root paths, only look in these paths and nowhere else
|
||||
FIND_LIBRARY(${VAR_NAME} ${LIB} PATHS ${KOKKOS_${TPL_NAME}_DIR}/lib ${KOKKOS_${TPL_NAME}_DIR}/lib64 NO_DEFAULT_PATH)
|
||||
SET(HAVE_CUSTOM_PATHS TRUE)
|
||||
IF(NOT HAVE_CUSTOM_PATHS OR TPL_ALLOW_SYSTEM_PATH_FALLBACK)
|
||||
#No-op if ${VAR_NAME} set by previous call
|
||||
FIND_LIBRARY(${VAR_NAME} ${LIB} PATH_SUFFIXES ${TPL_SUFFIXES})
|
||||
ENDIF()
|
||||
|
||||
IF (NOT ${LIB}_FOUND AND TPL_PATHS)
|
||||
#we got custom paths, only look in these paths and nowhere else
|
||||
FIND_LIBRARY(${VAR_NAME} ${LIB} PATHS ${TPL_PATHS} NO_DEFAULT_PATH)
|
||||
SET(HAVE_CUSTOM_PATHS TRUE)
|
||||
ENDIF()
|
||||
|
||||
|
||||
IF (NOT HAVE_CUSTOM_PATHS OR TPL_ALLOW_SYSTEM_PATH_FALLBACK)
|
||||
IF (NOT ${LIB}_FOUND)
|
||||
#Now go ahead and look in system paths
|
||||
FIND_LIBRARY(${VAR_NAME} ${LIB})
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
||||
#
|
||||
@ -510,26 +516,28 @@ ENDMACRO()
|
||||
# <NAME>
|
||||
# INTERFACE
|
||||
# ALLOW_SYSTEM_PATH_FALLBACK
|
||||
# LIBRARY <path_to_librarY>
|
||||
# LINK_LIBRARIES <lib1> <lib2> ...
|
||||
# COMPILE_OPTIONS <opt1> <opt2> ...
|
||||
# LINK_OPTIONS <opt1> <opt2> ...
|
||||
# MODULE_NAME <name>
|
||||
# IMPORTED_NAME <name>
|
||||
# LIBRARY <name>
|
||||
# LIBRARIES <name1> <name2> ...
|
||||
# LIBRARY_PATHS <path1> <path2> ...
|
||||
# LIBRARY_SUFFIXES <suffix1> <suffix2> ...
|
||||
# HEADER <name>
|
||||
# HEADERS <name1> <name2> ...
|
||||
# HEADER_PATHS <path1> <path2> ...
|
||||
# )
|
||||
#
|
||||
# ``INTERFACE``
|
||||
#
|
||||
# If specified, this TPL will build an INTERFACE library rather than an
|
||||
# IMPORTED target
|
||||
#
|
||||
# ``ALLOW_SYSTEM_PATH_FALLBACK"
|
||||
# ``ALLOW_SYSTEM_PATH_FALLBACK``
|
||||
#
|
||||
# If custom paths are given and the library is not found
|
||||
# should we be allowed to search default system paths
|
||||
# or error out if not found in given paths.
|
||||
#
|
||||
# ``LIBRARY <name>``
|
||||
#
|
||||
# If specified, this gives the name of the library to look for
|
||||
#
|
||||
# ``MODULE_NAME <name>``
|
||||
#
|
||||
# If specified, the name of the enclosing module passed to
|
||||
@ -541,29 +549,42 @@ ENDMACRO()
|
||||
# If specified, this gives the name of the target to build.
|
||||
# Defaults to Kokkos::<NAME>
|
||||
#
|
||||
# ``LIBRARY <name>``
|
||||
#
|
||||
# If specified, this gives the name of the library to look for
|
||||
#
|
||||
# ``LIBRARIES <name1> <name2> ...``
|
||||
#
|
||||
# If specified, this gives a list of libraries to find for the package
|
||||
#
|
||||
# ``LIBRARY_PATHS <path1> <path2> ...``
|
||||
#
|
||||
# If specified, this gives a list of paths to search for the library
|
||||
# If not given, <NAME>_ROOT/lib and <NAME>_ROOT/lib64 will be searched.
|
||||
# If specified, this gives a list of paths to search for the library.
|
||||
# If not given, <NAME>_ROOT will be searched.
|
||||
#
|
||||
# ``LIBRARY_SUFFIXES <suffix1> <suffix2> ...``
|
||||
#
|
||||
# Suffixes appended to LIBRARY_PATHS when attempting to locate
|
||||
# libraries. If not given, defaults to {lib, lib64}.
|
||||
#
|
||||
# ``HEADER <name>``
|
||||
#
|
||||
# If specified, this gives the name of a header to to look for
|
||||
#
|
||||
# ``HEADERS <name1> <name2> ...``
|
||||
#
|
||||
# If specified, this gives a list of headers to find for the package
|
||||
#
|
||||
# ``HEADER_PATHS <path1> <path2> ...``
|
||||
#
|
||||
# If specified, this gives a list of paths to search for the headers
|
||||
# If not given, <NAME>_ROOT/include and <NAME>_ROOT/include will be searched.
|
||||
#
|
||||
# ``HEADERS <name1> <name2> ...``
|
||||
#
|
||||
# If specified, this gives a list of headers to find for the package
|
||||
#
|
||||
# ``LIBRARIES <name1> <name2> ...``
|
||||
#
|
||||
# If specified, this gives a list of libraries to find for the package
|
||||
#
|
||||
MACRO(kokkos_find_imported NAME)
|
||||
CMAKE_PARSE_ARGUMENTS(TPL
|
||||
"INTERFACE;ALLOW_SYSTEM_PATH_FALLBACK"
|
||||
"HEADER;LIBRARY;IMPORTED_NAME;MODULE_NAME"
|
||||
"HEADER_PATHS;LIBRARY_PATHS;HEADERS;LIBRARIES"
|
||||
"IMPORTED_NAME;MODULE_NAME;LIBRARY;HEADER"
|
||||
"LIBRARIES;LIBRARY_PATHS;LIBRARY_SUFFIXES;HEADERS;HEADER_PATHS"
|
||||
${ARGN})
|
||||
|
||||
IF(NOT TPL_MODULE_NAME)
|
||||
@ -584,6 +605,10 @@ MACRO(kokkos_find_imported NAME)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF (NOT TPL_LIBRARY_SUFFIXES)
|
||||
SET(TPL_LIBRARY_SUFFIXES lib lib64)
|
||||
ENDIF()
|
||||
|
||||
SET(${NAME}_INCLUDE_DIRS)
|
||||
IF (TPL_HEADER)
|
||||
KOKKOS_FIND_HEADER(${NAME}_INCLUDE_DIRS ${TPL_HEADER} ${NAME} ${ALLOW_PATH_FALLBACK_OPT} PATHS ${TPL_HEADER_PATHS})
|
||||
@ -598,16 +623,22 @@ MACRO(kokkos_find_imported NAME)
|
||||
|
||||
SET(${NAME}_LIBRARY)
|
||||
IF(TPL_LIBRARY)
|
||||
KOKKOS_FIND_LIBRARY(${NAME}_LIBRARY ${TPL_LIBRARY} ${NAME} ${ALLOW_PATH_FALLBACK_OPT} PATHS ${TPL_LIBRARY_PATHS})
|
||||
KOKKOS_FIND_LIBRARY(${NAME}_LIBRARY ${TPL_LIBRARY} ${NAME}
|
||||
${ALLOW_PATH_FALLBACK_OPT}
|
||||
PATHS ${TPL_LIBRARY_PATHS}
|
||||
SUFFIXES ${TPL_LIBRARY_SUFFIXES})
|
||||
ENDIF()
|
||||
|
||||
SET(${NAME}_FOUND_LIBRARIES)
|
||||
FOREACH(LIB ${TPL_LIBRARIES})
|
||||
KOKKOS_FIND_LIBRARY(${LIB}_LOCATION ${LIB} ${NAME} ${ALLOW_PATH_FALLBACK_OPT} PATHS ${TPL_LIBRARY_PATHS})
|
||||
KOKKOS_FIND_LIBRARY(${LIB}_LOCATION ${LIB} ${NAME}
|
||||
${ALLOW_PATH_FALLBACK_OPT}
|
||||
PATHS ${TPL_LIBRARY_PATHS}
|
||||
SUFFIXES ${TPL_LIBRARY_SUFFIXES})
|
||||
IF(${LIB}_LOCATION)
|
||||
LIST(APPEND ${NAME}_FOUND_LIBRARIES ${${LIB}_LOCATION})
|
||||
ELSE()
|
||||
SET(${NAME}_FOUND_LIBRARIES ${${LIB}_LOCATION})
|
||||
SET(${NAME}_FOUND_LIBRARIES ${${LIB}_LOCATION})
|
||||
BREAK()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
@ -629,6 +660,13 @@ MACRO(kokkos_find_imported NAME)
|
||||
|
||||
MARK_AS_ADVANCED(${NAME}_INCLUDE_DIRS ${NAME}_FOUND_LIBRARIES ${NAME}_LIBRARY)
|
||||
|
||||
#this is so much fun on a Cray system
|
||||
#/usr/include should never be added as a -isystem include
|
||||
#this freaks out the compiler include search order
|
||||
IF (KOKKOS_IS_CRAYPE)
|
||||
LIST(REMOVE_ITEM ${NAME}_INCLUDE_DIRS "/usr/include")
|
||||
ENDIF()
|
||||
|
||||
IF (${TPL_MODULE_NAME}_FOUND)
|
||||
SET(IMPORT_TYPE)
|
||||
IF (TPL_INTERFACE)
|
||||
@ -698,3 +736,66 @@ FUNCTION(kokkos_link_tpl TARGET)
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
FUNCTION(COMPILER_SPECIFIC_OPTIONS_HELPER)
|
||||
SET(COMPILERS NVIDIA PGI XL DEFAULT Cray Intel Clang AppleClang GNU)
|
||||
CMAKE_PARSE_ARGUMENTS(
|
||||
PARSE
|
||||
"LINK_OPTIONS;COMPILE_OPTIONS;COMPILE_DEFINITIONS;LINK_LIBRARIES"
|
||||
""
|
||||
"${COMPILERS}"
|
||||
${ARGN})
|
||||
IF(PARSE_UNPARSED_ARGUMENTS)
|
||||
MESSAGE(SEND_ERROR "'${PARSE_UNPARSED_ARGUMENTS}' argument(s) not recognized when providing compiler specific options")
|
||||
ENDIF()
|
||||
|
||||
SET(COMPILER ${KOKKOS_CXX_COMPILER_ID})
|
||||
|
||||
SET(COMPILER_SPECIFIC_FLAGS_TMP)
|
||||
FOREACH(COMP ${COMPILERS})
|
||||
IF (COMPILER STREQUAL "${COMP}")
|
||||
IF (PARSE_${COMPILER})
|
||||
IF (NOT "${PARSE_${COMPILER}}" STREQUAL "NO-VALUE-SPECIFIED")
|
||||
SET(COMPILER_SPECIFIC_FLAGS_TMP ${PARSE_${COMPILER}})
|
||||
ENDIF()
|
||||
ELSEIF(PARSE_DEFAULT)
|
||||
SET(COMPILER_SPECIFIC_FLAGS_TMP ${PARSE_DEFAULT})
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
|
||||
IF (PARSE_COMPILE_OPTIONS)
|
||||
# The funky logic here is for future handling of argument deduplication
|
||||
# If we naively pass multiple -Xcompiler flags to target_compile_options
|
||||
# -Xcompiler will get deduplicated and break the build
|
||||
IF ("-Xcompiler" IN_LIST COMPILER_SPECIFIC_FLAGS_TMP)
|
||||
LIST(REMOVE_ITEM COMPILER_SPECIFIC_FLAGS_TMP "-Xcompiler")
|
||||
GLOBAL_APPEND(KOKKOS_XCOMPILER_OPTIONS ${COMPILER_SPECIFIC_FLAGS_TMP})
|
||||
ELSE()
|
||||
GLOBAL_APPEND(KOKKOS_COMPILE_OPTIONS ${COMPILER_SPECIFIC_FLAGS_TMP})
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF (PARSE_LINK_OPTIONS)
|
||||
GLOBAL_APPEND(KOKKOS_LINK_OPTIONS ${COMPILER_SPECIFIC_FLAGS_TMP})
|
||||
ENDIF()
|
||||
|
||||
IF (PARSE_COMPILE_DEFINITIONS)
|
||||
GLOBAL_APPEND(KOKKOS_COMPILE_DEFINITIONS ${COMPILER_SPECIFIC_FLAGS_TMP})
|
||||
ENDIF()
|
||||
|
||||
IF (PARSE_LINK_LIBRARIES)
|
||||
GLOBAL_APPEND(KOKKOS_LINK_LIBRARIES ${COMPILER_SPECIFIC_FLAGS_TMP})
|
||||
ENDIF()
|
||||
ENDFUNCTION(COMPILER_SPECIFIC_OPTIONS_HELPER)
|
||||
|
||||
FUNCTION(COMPILER_SPECIFIC_FLAGS)
|
||||
COMPILER_SPECIFIC_OPTIONS_HELPER(${ARGN} COMPILE_OPTIONS LINK_OPTIONS)
|
||||
ENDFUNCTION(COMPILER_SPECIFIC_FLAGS)
|
||||
|
||||
FUNCTION(COMPILER_SPECIFIC_DEFS)
|
||||
COMPILER_SPECIFIC_OPTIONS_HELPER(${ARGN} COMPILE_DEFINITIONS)
|
||||
ENDFUNCTION(COMPILER_SPECIFIC_DEFS)
|
||||
|
||||
FUNCTION(COMPILER_SPECIFIC_LIBS)
|
||||
COMPILER_SPECIFIC_OPTIONS_HELPER(${ARGN} LINK_LIBRARIES)
|
||||
ENDFUNCTION(COMPILER_SPECIFIC_LIBS)
|
||||
|
||||
@ -31,12 +31,11 @@ IF (NOT KOKKOS_HAS_TRILINOS)
|
||||
ELSE()
|
||||
CONFIGURE_FILE(cmake/KokkosConfigCommon.cmake.in ${Kokkos_BINARY_DIR}/KokkosConfigCommon.cmake @ONLY)
|
||||
file(READ ${Kokkos_BINARY_DIR}/KokkosConfigCommon.cmake KOKKOS_CONFIG_COMMON)
|
||||
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/KokkosConfig_install.cmake" ${KOKKOS_CONFIG_COMMON})
|
||||
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/KokkosConfig_install.cmake" "${KOKKOS_CONFIG_COMMON}")
|
||||
CONFIGURE_FILE(cmake/KokkosTrilinosConfig.cmake.in ${Kokkos_BINARY_DIR}/KokkosTrilinosConfig.cmake @ONLY)
|
||||
file(READ ${Kokkos_BINARY_DIR}/KokkosTrilinosConfig.cmake KOKKOS_TRILINOS_CONFIG)
|
||||
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/KokkosConfig_install.cmake" "${KOKKOS_TRILINOS_CONFIG}")
|
||||
ENDIF()
|
||||
|
||||
# build and install pkgconfig file
|
||||
CONFIGURE_FILE(core/src/kokkos.pc.in kokkos.pc @ONLY)
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/kokkos.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/KokkosCore_config.h DESTINATION ${KOKKOS_HEADER_DIR})
|
||||
|
||||
|
||||
@ -14,12 +14,12 @@ FUNCTION(kokkos_set_cxx_standard_feature standard)
|
||||
ENDIF()
|
||||
ELSEIF(CMAKE_CXX_EXTENSIONS)
|
||||
IF(KOKKOS_DONT_ALLOW_EXTENSIONS)
|
||||
MESSAGE(FATAL_ERROR "The chosen configuration does not support CXX extensions flags: ${KOKKOS_DONT_ALLOW_EXTENSIONS}. Must set CMAKE_CXX_EXTENSIONS=OFF to continue")
|
||||
MESSAGE(FATAL_ERROR "The chosen configuration does not support CXX extensions flags: ${KOKKOS_DONT_ALLOW_EXTENSIONS}. Must set CMAKE_CXX_EXTENSIONS=OFF to continue")
|
||||
ELSE()
|
||||
GLOBAL_SET(KOKKOS_USE_CXX_EXTENSIONS ON)
|
||||
ENDIF()
|
||||
ELSE()
|
||||
#For trilinos, we need to make sure downstream projects
|
||||
#For trilinos, we need to make sure downstream projects
|
||||
GLOBAL_SET(KOKKOS_USE_CXX_EXTENSIONS OFF)
|
||||
ENDIF()
|
||||
|
||||
@ -29,6 +29,10 @@ FUNCTION(kokkos_set_cxx_standard_feature standard)
|
||||
ELSEIF(NOT KOKKOS_USE_CXX_EXTENSIONS AND ${STANDARD_NAME})
|
||||
MESSAGE(STATUS "Using ${${STANDARD_NAME}} for C++${standard} standard as feature")
|
||||
GLOBAL_SET(KOKKOS_CXX_STANDARD_FEATURE ${FEATURE_NAME})
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
#MSVC doesn't need a command line flag, that doesn't mean it has no support
|
||||
MESSAGE(STATUS "Using no flag for C++${standard} standard as feature")
|
||||
GLOBAL_SET(KOKKOS_CXX_STANDARD_FEATURE ${FEATURE_NAME})
|
||||
ELSE()
|
||||
#nope, we can't do anything here
|
||||
MESSAGE(WARNING "C++${standard} is not supported as a compiler feature. We will choose custom flags for now, but this behavior has been deprecated. Please open an issue at https://github.com/kokkos/kokkos/issues reporting that ${KOKKOS_CXX_COMPILER_ID} ${KOKKOS_CXX_COMPILER_VERSION} failed for ${KOKKOS_CXX_STANDARD}, preferrably including your CMake command.")
|
||||
@ -119,6 +123,9 @@ IF (NOT KOKKOS_CXX_STANDARD_FEATURE)
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL Intel)
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/intel.cmake)
|
||||
kokkos_set_intel_flags(${KOKKOS_CXX_STANDARD} ${KOKKOS_CXX_INTERMEDIATE_STANDARD})
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/msvc.cmake)
|
||||
kokkos_set_msvc_flags(${KOKKOS_CXX_STANDARD} ${KOKKOS_CXX_INTERMEDIATE_STANDARD})
|
||||
ELSE()
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/gnu.cmake)
|
||||
kokkos_set_gnu_flags(${KOKKOS_CXX_STANDARD} ${KOKKOS_CXX_INTERMEDIATE_STANDARD})
|
||||
@ -128,9 +135,9 @@ IF (NOT KOKKOS_CXX_STANDARD_FEATURE)
|
||||
IF (DEFINED CXX_STD_FLAGS_ACCEPTED)
|
||||
UNSET(CXX_STD_FLAGS_ACCEPTED CACHE)
|
||||
ENDIF()
|
||||
CHECK_CXX_COMPILER_FLAG(${KOKKOS_CXX_STANDARD_FLAG} CXX_STD_FLAGS_ACCEPTED)
|
||||
CHECK_CXX_COMPILER_FLAG("${KOKKOS_CXX_STANDARD_FLAG}" CXX_STD_FLAGS_ACCEPTED)
|
||||
IF (NOT CXX_STD_FLAGS_ACCEPTED)
|
||||
CHECK_CXX_COMPILER_FLAG(${KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG} CXX_INT_STD_FLAGS_ACCEPTED)
|
||||
CHECK_CXX_COMPILER_FLAG("${KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG}" CXX_INT_STD_FLAGS_ACCEPTED)
|
||||
IF (NOT CXX_INT_STD_FLAGS_ACCEPTED)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_CXX_COMPILER_ID} did not accept ${KOKKOS_CXX_STANDARD_FLAG} or ${KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG}. You likely need to reduce the level of the C++ standard from ${KOKKOS_CXX_STANDARD}")
|
||||
ENDIF()
|
||||
|
||||
@ -15,6 +15,10 @@ KOKKOS_TPL_OPTION(CUDA Off)
|
||||
KOKKOS_TPL_OPTION(LIBRT Off)
|
||||
KOKKOS_TPL_OPTION(LIBDL On)
|
||||
|
||||
IF(KOKKOS_ENABLE_PROFILING AND NOT KOKKOS_ENABLE_LIBDL)
|
||||
MESSAGE(SEND_ERROR "Kokkos_ENABLE_PROFILING requires Kokkos_ENABLE_LIBDL=ON")
|
||||
ENDIF()
|
||||
|
||||
IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_HPX)
|
||||
SET(HPX_DEFAULT ON)
|
||||
ELSE()
|
||||
|
||||
@ -43,6 +43,8 @@ MACRO(KOKKOS_SUBPACKAGE NAME)
|
||||
SET(PACKAGE_NAME ${PACKAGE_NAME}${NAME})
|
||||
STRING(TOUPPER ${PACKAGE_NAME} PACKAGE_NAME_UC)
|
||||
SET(${PACKAGE_NAME}_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
#ADD_INTERFACE_LIBRARY(PACKAGE_${PACKAGE_NAME})
|
||||
#GLOBAL_SET(${PACKAGE_NAME}_LIBS "")
|
||||
endif()
|
||||
ENDMACRO()
|
||||
|
||||
@ -114,57 +116,63 @@ MACRO(KOKKOS_INTERNAL_ADD_LIBRARY_INSTALL LIBRARY_NAME)
|
||||
VERIFY_EMPTY(KOKKOS_ADD_LIBRARY ${PARSE_UNPARSED_ARGUMENTS})
|
||||
ENDMACRO()
|
||||
|
||||
FUNCTION(KOKKOS_ADD_EXECUTABLE EXE_NAME)
|
||||
FUNCTION(KOKKOS_ADD_EXECUTABLE ROOT_NAME)
|
||||
if (KOKKOS_HAS_TRILINOS)
|
||||
TRIBITS_ADD_EXECUTABLE(${EXE_NAME} ${ARGN})
|
||||
TRIBITS_ADD_EXECUTABLE(${ROOT_NAME} ${ARGN})
|
||||
else()
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
"TESTONLY"
|
||||
""
|
||||
"SOURCES;TESTONLYLIBS"
|
||||
${ARGN})
|
||||
|
||||
SET(EXE_NAME ${PACKAGE_NAME}_${ROOT_NAME})
|
||||
ADD_EXECUTABLE(${EXE_NAME} ${PARSE_SOURCES})
|
||||
IF (PARSE_TESTONLYLIBS)
|
||||
TARGET_LINK_LIBRARIES(${EXE_NAME} ${PARSE_TESTONLYLIBS})
|
||||
TARGET_LINK_LIBRARIES(${EXE_NAME} PRIVATE ${PARSE_TESTONLYLIBS})
|
||||
ENDIF()
|
||||
VERIFY_EMPTY(KOKKOS_ADD_EXECUTABLE ${PARSE_UNPARSED_ARGUMENTS})
|
||||
#All executables must link to all the kokkos targets
|
||||
#This is just private linkage because exe is final
|
||||
TARGET_LINK_LIBRARIES(${EXE_NAME} PRIVATE kokkos)
|
||||
endif()
|
||||
ENDFUNCTION()
|
||||
|
||||
IF(NOT TARGET check)
|
||||
ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND} -VV -C ${CMAKE_CFG_INTDIR})
|
||||
ENDIF()
|
||||
|
||||
|
||||
FUNCTION(KOKKOS_ADD_EXECUTABLE_AND_TEST ROOT_NAME)
|
||||
IF (KOKKOS_HAS_TRILINOS)
|
||||
TRIBITS_ADD_EXECUTABLE_AND_TEST(
|
||||
${ROOT_NAME}
|
||||
TESTONLYLIBS kokkos_gtest
|
||||
${ROOT_NAME}
|
||||
TESTONLYLIBS kokkos_gtest
|
||||
${ARGN}
|
||||
NUM_MPI_PROCS 1
|
||||
COMM serial mpi
|
||||
FAIL_REGULAR_EXPRESSION " FAILED "
|
||||
)
|
||||
ELSE()
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
""
|
||||
""
|
||||
"SOURCES;CATEGORIES"
|
||||
${ARGN})
|
||||
VERIFY_EMPTY(KOKKOS_ADD_EXECUTABLE_AND_TEST ${PARSE_UNPARSED_ARGUMENTS})
|
||||
SET(EXE_NAME ${PACKAGE_NAME}_${ROOT_NAME})
|
||||
KOKKOS_ADD_TEST_EXECUTABLE(${EXE_NAME}
|
||||
KOKKOS_ADD_TEST_EXECUTABLE(${ROOT_NAME}
|
||||
SOURCES ${PARSE_SOURCES}
|
||||
)
|
||||
KOKKOS_ADD_TEST(NAME ${ROOT_NAME}
|
||||
EXE ${EXE_NAME}
|
||||
KOKKOS_ADD_TEST(NAME ${ROOT_NAME}
|
||||
EXE ${ROOT_NAME}
|
||||
FAIL_REGULAR_EXPRESSION " FAILED "
|
||||
)
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
FUNCTION(KOKKOS_SET_EXE_PROPERTY ROOT_NAME)
|
||||
SET(TARGET_NAME ${PACKAGE_NAME}_${ROOT_NAME})
|
||||
IF (NOT TARGET ${TARGET_NAME})
|
||||
MESSAGE(SEND_ERROR "No target ${TARGET_NAME} exists - cannot set target properties")
|
||||
ENDIF()
|
||||
SET_PROPERTY(TARGET ${TARGET_PROPERTY} PROPERTY ${ARGN})
|
||||
ENDFUNCTION()
|
||||
|
||||
MACRO(KOKKOS_SETUP_BUILD_ENVIRONMENT)
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_compiler_id.cmake)
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_enable_devices.cmake)
|
||||
@ -178,20 +186,17 @@ MACRO(KOKKOS_SETUP_BUILD_ENVIRONMENT)
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_corner_cases.cmake)
|
||||
ENDMACRO()
|
||||
|
||||
MACRO(KOKKOS_ADD_TEST_EXECUTABLE EXE_NAME)
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
MACRO(KOKKOS_ADD_TEST_EXECUTABLE ROOT_NAME)
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
""
|
||||
""
|
||||
"SOURCES"
|
||||
${ARGN})
|
||||
KOKKOS_ADD_EXECUTABLE(${EXE_NAME}
|
||||
KOKKOS_ADD_EXECUTABLE(${ROOT_NAME}
|
||||
SOURCES ${PARSE_SOURCES}
|
||||
${PARSE_UNPARSED_ARGUMENTS}
|
||||
TESTONLYLIBS kokkos_gtest
|
||||
)
|
||||
IF (NOT KOKKOS_HAS_TRILINOS)
|
||||
ADD_DEPENDENCIES(check ${EXE_NAME})
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
||||
MACRO(KOKKOS_PACKAGE_POSTPROCESS)
|
||||
@ -201,7 +206,7 @@ MACRO(KOKKOS_PACKAGE_POSTPROCESS)
|
||||
ENDMACRO()
|
||||
|
||||
FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
"PLAIN_STYLE"
|
||||
""
|
||||
""
|
||||
@ -230,6 +235,15 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${KOKKOS_COMPILE_OPTIONS}>
|
||||
)
|
||||
|
||||
TARGET_COMPILE_DEFINITIONS(
|
||||
${LIBRARY_NAME} PUBLIC
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${KOKKOS_COMPILE_DEFINITIONS}>
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES(
|
||||
${LIBRARY_NAME} PUBLIC ${KOKKOS_LINK_LIBRARIES}
|
||||
)
|
||||
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
TARGET_COMPILE_OPTIONS(
|
||||
${LIBRARY_NAME}
|
||||
@ -240,11 +254,18 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
LIST(APPEND NODEDUP_CUDAFE_OPTIONS -Xcudafe ${OPT})
|
||||
ENDFOREACH()
|
||||
TARGET_COMPILE_OPTIONS(
|
||||
${LIBRARY_NAME}
|
||||
${LIBRARY_NAME}
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${NODEDUP_CUDAFE_OPTIONS}>
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ENABLE_HIP)
|
||||
TARGET_COMPILE_OPTIONS(
|
||||
${LIBRARY_NAME}
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${KOKKOS_AMDGPU_OPTIONS}>
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
LIST(LENGTH KOKKOS_XCOMPILER_OPTIONS XOPT_LENGTH)
|
||||
IF (XOPT_LENGTH GREATER 1)
|
||||
MESSAGE(FATAL_ERROR "CMake deduplication does not allow multiple -Xcompiler flags (${KOKKOS_XCOMPILER_OPTIONS}): will require Kokkos to upgrade to minimum 3.12")
|
||||
@ -253,12 +274,12 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
SET(NODEDUP_XCOMPILER_OPTIONS)
|
||||
FOREACH(OPT ${KOKKOS_XCOMPILER_OPTIONS})
|
||||
#I have to do this for now because we can't guarantee 3.12 support
|
||||
#I really should do this with the shell option
|
||||
LIST(APPEND NODEDUP_XCOMPILER_OPTIONS -Xcompiler)
|
||||
LIST(APPEND NODEDUP_XCOMPILER_OPTIONS ${OPT})
|
||||
#I really should do this with the shell option
|
||||
LIST(APPEND NODEDUP_XCOMPILER_OPTIONS -Xcompiler)
|
||||
LIST(APPEND NODEDUP_XCOMPILER_OPTIONS ${OPT})
|
||||
ENDFOREACH()
|
||||
TARGET_COMPILE_OPTIONS(
|
||||
${LIBRARY_NAME}
|
||||
${LIBRARY_NAME}
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${NODEDUP_XCOMPILER_OPTIONS}>
|
||||
)
|
||||
ENDIF()
|
||||
@ -276,7 +297,7 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
ENDFUNCTION()
|
||||
|
||||
FUNCTION(KOKKOS_INTERNAL_ADD_LIBRARY LIBRARY_NAME)
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
"STATIC;SHARED"
|
||||
""
|
||||
"HEADERS;SOURCES"
|
||||
@ -362,7 +383,7 @@ FUNCTION(KOKKOS_LIB_INCLUDE_DIRECTORIES TARGET)
|
||||
#ignore the target, tribits doesn't do anything directly with targets
|
||||
TRIBITS_INCLUDE_DIRECTORIES(${ARGN})
|
||||
ELSE() #append to a list for later
|
||||
KOKKOS_LIB_TYPE(${TARGET} INCTYPE)
|
||||
KOKKOS_LIB_TYPE(${TARGET} INCTYPE)
|
||||
FOREACH(DIR ${ARGN})
|
||||
TARGET_INCLUDE_DIRECTORIES(${TARGET} ${INCTYPE} $<BUILD_INTERFACE:${DIR}>)
|
||||
ENDFOREACH()
|
||||
@ -390,3 +411,15 @@ MACRO(KOKKOS_ADD_TEST_DIRECTORIES)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
||||
MACRO(KOKKOS_ADD_EXAMPLE_DIRECTORIES)
|
||||
if (KOKKOS_HAS_TRILINOS)
|
||||
TRIBITS_ADD_EXAMPLE_DIRECTORIES(${ARGN})
|
||||
else()
|
||||
IF(KOKKOS_ENABLE_EXAMPLES)
|
||||
FOREACH(EXAMPLE_DIR ${ARGN})
|
||||
ADD_SUBDIRECTORY(${EXAMPLE_DIR})
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
endif()
|
||||
ENDMACRO()
|
||||
|
||||
11
lib/kokkos/cmake/msvc.cmake
Normal file
11
lib/kokkos/cmake/msvc.cmake
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
FUNCTION(kokkos_set_msvc_flags full_standard int_standard)
|
||||
IF (CMAKE_CXX_EXTENSIONS)
|
||||
SET(KOKKOS_CXX_STANDARD_FLAG "" PARENT_SCOPE)
|
||||
SET(KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG "" PARENT_SCOPE)
|
||||
ELSE()
|
||||
SET(KOKKOS_CXX_STANDARD_FLAG "" PARENT_SCOPE)
|
||||
SET(KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG "" PARENT_SCOPE)
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
@ -55,19 +55,9 @@
|
||||
|
||||
# Check for CUDA support
|
||||
|
||||
IF (NOT TPL_ENABLE_CUDA OR CUDA_VERSION VERSION_LESS "4.1")
|
||||
MESSAGE(FATAL_ERROR "\nCUSPARSE: did not find acceptable version of CUDA libraries (4.1 or greater)")
|
||||
IF (NOT TPL_ENABLE_CUDA)
|
||||
MESSAGE(FATAL_ERROR "\nCUSPARSE requires CUDA")
|
||||
ELSE()
|
||||
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
|
||||
# FindCUDA before CMake 2.8.8 does not find cusparse library; therefore, we must
|
||||
find_library(CUDA_cusparse_LIBRARY
|
||||
cusparse
|
||||
HINTS ${CUDA_TOOLKIT_ROOT_DIR}/lib
|
||||
)
|
||||
IF(CUDA_cusparse_LIBRARY STREQUAL "CUDA_cusparse_LIBRARY-NOTFOUND")
|
||||
MESSAGE(FATAL_ERROR "\nCUSPARSE: could not find cuspasre library.")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
GLOBAL_SET(TPL_CUSPARSE_LIBRARY_DIRS)
|
||||
GLOBAL_SET(TPL_CUSPARSE_INCLUDE_DIRS ${TPL_CUDA_INCLUDE_DIRS})
|
||||
GLOBAL_SET(TPL_CUSPARSE_LIBRARIES ${CUDA_cusparse_LIBRARY})
|
||||
|
||||
Reference in New Issue
Block a user