Update Kokkos library in LAMMPS to v3.1
This commit is contained in:
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user