123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- # Compute Node Linux doesn't quite work the same as native Linux so all of this
- # needs to be custom. We use the variables defined through Cray's environment
- # modules to set up the right paths for things.
- set(UNIX 1)
- if(DEFINED ENV{CRAYOS_VERSION})
- set(CMAKE_SYSTEM_VERSION "$ENV{CRAYOS_VERSION}")
- elseif(DEFINED ENV{XTOS_VERSION})
- set(CMAKE_SYSTEM_VERSION "$ENV{XTOS_VERSION}")
- elseif(EXISTS /etc/opt/cray/release/cle-release)
- file(STRINGS /etc/opt/cray/release/cle-release release REGEX "^RELEASE=.*")
- string(REGEX REPLACE "^RELEASE=(.*)$" "\\1" CMAKE_SYSTEM_VERSION "${release}")
- unset(release)
- elseif(EXISTS /etc/opt/cray/release/clerelease)
- file(READ /etc/opt/cray/release/clerelease CMAKE_SYSTEM_VERSION)
- endif()
- # Guard against multiple messages
- if(NOT __CrayLinuxEnvironment_message)
- set(__CrayLinuxEnvironment_message 1 CACHE INTERNAL "")
- if(NOT CMAKE_SYSTEM_VERSION)
- message(STATUS "CrayLinuxEnvironment: Unable to determine CLE version. This platform file should only be used from inside the Cray Linux Environment for targeting compute nodes (NIDs).")
- else()
- message(STATUS "Cray Linux Environment ${CMAKE_SYSTEM_VERSION}")
- endif()
- endif()
- # All cray systems are x86 CPUs and have been for quite some time
- # Note: this may need to change in the future with 64-bit ARM
- set(CMAKE_SYSTEM_PROCESSOR "x86_64")
- set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
- set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
- set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
- set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
- set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
- # Don't override shared lib support if it's already been set and possibly
- # overridden elsewhere by the CrayPrgEnv module
- if(NOT CMAKE_FIND_LIBRARY_SUFFIXES)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
- set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
- endif()
- set(CMAKE_DL_LIBS dl)
- # Note: Much of this is pulled from UnixPaths.cmake but adjusted to the Cray
- # environment accordingly
- # Get the install directory of the running cmake to the search directories
- # CMAKE_ROOT is CMAKE_INSTALL_PREFIX/share/cmake, so we need to go two levels up
- get_filename_component(__cmake_install_dir "${CMAKE_ROOT}" PATH)
- get_filename_component(__cmake_install_dir "${__cmake_install_dir}" PATH)
- # Note: Some Cray's have the SYSROOT_DIR variable defined, pointing to a copy
- # of the NIDs userland. If so, then we'll use it. Otherwise, just assume
- # the userland from the login node is ok
- # List common installation prefixes. These will be used for all
- # search types.
- list(APPEND CMAKE_SYSTEM_PREFIX_PATH
- # Standard
- $ENV{SYSROOT_DIR}/usr/local $ENV{SYSROOT_DIR}/usr $ENV{SYSROOT_DIR}/
- # CMake install location
- "${__cmake_install_dir}"
- )
- if (NOT CMAKE_FIND_NO_INSTALL_PREFIX)
- list(APPEND CMAKE_SYSTEM_PREFIX_PATH
- # Project install destination.
- "${CMAKE_INSTALL_PREFIX}"
- )
- if(CMAKE_STAGING_PREFIX)
- list(APPEND CMAKE_SYSTEM_PREFIX_PATH
- # User-supplied staging prefix.
- "${CMAKE_STAGING_PREFIX}"
- )
- endif()
- endif()
- list(APPEND CMAKE_SYSTEM_INCLUDE_PATH
- $ENV{SYSROOT_DIR}/usr/include
- $ENV{SYSROOT_DIR}/usr/include/X11
- )
- list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
- $ENV{SYSROOT_DIR}/usr/local/lib64
- $ENV{SYSROOT_DIR}/usr/lib64
- $ENV{SYSROOT_DIR}/lib64
- )
- list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
- $ENV{SYSROOT_DIR}/usr/local/lib64
- $ENV{SYSROOT_DIR}/usr/lib64
- $ENV{SYSROOT_DIR}/lib64
- )
- # Compute the intersection of several lists
- function(__cray_list_intersect OUTPUT INPUT0)
- if(ARGC EQUAL 2)
- list(APPEND ${OUTPUT} ${${INPUT0}})
- else()
- foreach(I IN LISTS ${INPUT0})
- set(__is_common 1)
- foreach(L IN LISTS ARGN)
- list(FIND ${L} "${I}" __idx)
- if(__idx EQUAL -1)
- set(__is_common 0)
- break()
- endif()
- endforeach()
- if(__is_common)
- list(APPEND ${OUTPUT} "${I}")
- endif()
- endforeach()
- endif()
- set(${OUTPUT} ${${OUTPUT}} PARENT_SCOPE)
- endfunction()
- macro(__list_clean_dupes var)
- if(${var})
- list(REMOVE_DUPLICATES ${var})
- endif()
- endmacro()
- get_property(__langs GLOBAL PROPERTY ENABLED_LANGUAGES)
- set(__cray_inc_path_vars)
- set(__cray_lib_path_vars)
- foreach(__lang IN LISTS __langs)
- list(APPEND __cray_inc_path_vars CMAKE_${__lang}_IMPLICIT_INCLUDE_DIRECTORIES)
- list(APPEND __cray_lib_path_vars CMAKE_${__lang}_IMPLICIT_LINK_DIRECTORIES)
- endforeach()
- if(__cray_inc_path_vars)
- __cray_list_intersect(__cray_implicit_include_dirs ${__cray_inc_path_vars})
- if(__cray_implicit_include_dirs)
- list(INSERT CMAKE_SYSTEM_INCLUDE_PATH 0 ${__cray_implicit_include_dirs})
- endif()
- endif()
- if(__cray_lib_path_vars)
- __cray_list_intersect(__cray_implicit_library_dirs ${__cray_lib_path_vars})
- if(__cray_implicit_library_dirs)
- list(INSERT CMAKE_SYSTEM_LIBRARY_PATH 0 ${__cray_implicit_library_dirs})
- endif()
- endif()
- __list_clean_dupes(CMAKE_SYSTEM_PREFIX_PATH)
- __list_clean_dupes(CMAKE_SYSTEM_INCLUDE_PATH)
- __list_clean_dupes(CMAKE_SYSTEM_LIBRARY_PATH)
- __list_clean_dupes(CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES)
- # Enable use of lib64 search path variants by default.
- set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)
|