summaryrefslogtreecommitdiffstats
path: root/Modules/Platform/CrayLinuxEnvironment.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/Platform/CrayLinuxEnvironment.cmake')
-rw-r--r--Modules/Platform/CrayLinuxEnvironment.cmake112
1 files changed, 112 insertions, 0 deletions
diff --git a/Modules/Platform/CrayLinuxEnvironment.cmake b/Modules/Platform/CrayLinuxEnvironment.cmake
new file mode 100644
index 0000000..19a0f71
--- /dev/null
+++ b/Modules/Platform/CrayLinuxEnvironment.cmake
@@ -0,0 +1,112 @@
+# 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.
+
+# Guard against multiple inclusions
+if(__CrayLinuxEnvironment)
+ return()
+endif()
+set(__CrayLinuxEnvironment 1)
+
+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}")
+else()
+ message(FATAL_ERROR "Neither the CRAYOS_VERSION or XTOS_VERSION environment variables are defined. This platform file should be used inside the Cray Linux Environment for targeting compute nodes (NIDs)")
+endif()
+message(STATUS "Cray Linux Environment ${CMAKE_SYSTEM_VERSION}")
+
+# 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")
+set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
+set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
+
+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
+)
+list(APPEND CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES
+ $ENV{SYSROOT_DIR}/usr/include
+)
+list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES
+ $ENV{SYSROOT_DIR}/usr/include
+)
+list(APPEND CMAKE_Fortran_IMPLICIT_INCLUDE_DIRECTORIES
+ $ENV{SYSROOT_DIR}/usr/include
+)
+
+# Enable use of lib64 search path variants by default.
+set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)
+
+# Check to see if we're using the cray compiler wrappers and load accordingly
+# if we are
+if(DEFINED ENV{CRAYPE_DIR})
+ set(_CRAYPE_ROOT "$ENV{CRAYPE_DIR}")
+elseif(DEFINED ENV{ASYNCPE_DIR})
+ set(_CRAYPE_ROOT "$ENV{ASYNCPE_DIR}")
+endif()
+if(_CRAYPE_ROOT AND
+ ((CMAKE_C_COMPILER MATCHES "${_CRAYPE_ROOT}") OR
+ (CMAKE_CXX_COMPILER MATCHES "${_CRAYPE_ROOT}") OR
+ (CMAKE_Fortran_COMPILER MATCHES "${_CRAYPE_ROOT}")))
+ include(Platform/CrayPrgEnv)
+endif()