Update Kokkos library in LAMMPS to v3.1

This commit is contained in:
Stan Moore
2020-04-16 09:06:08 -06:00
parent fa6922a182
commit ba8d043c7e
554 changed files with 24628 additions and 14871 deletions

View File

@ -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)