forked from University-of-Delaware-IT-RCI/auto_tmpdir
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
130 lines (118 loc) · 5.88 KB
/
CMakeLists.txt
File metadata and controls
130 lines (118 loc) · 5.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
CMAKE_MINIMUM_REQUIRED (VERSION 3.6)
PROJECT (auto_tmpdir VERSION 1.0.2 LANGUAGES C)
#
# For finding packages:
#
INCLUDE(CheckIncludeFiles)
INCLUDE(FindPackageHandleStandardArgs)
IF (NOT SLURM_PREFIX)
SET (SLURM_PREFIX "/usr/local" CACHE PATH "Directory in which SLURM is installed.")
ENDIF (NOT SLURM_PREFIX)
IF (SLURM_PREFIX)
LIST(APPEND CMAKE_PREFIX_PATH ${SLURM_PREFIX})
ENDIF (SLURM_PREFIX)
#
# Extension on shared library?
#
SET (SHARED_LIB_SUFFIX ".so" CACHE STRING "String to add to end of shared library name")
FIND_PATH(SLURM_INCLUDE_DIR NAMES slurm/slurm.h)
FIND_LIBRARY(SLURM_LIBRARY NAMES libslurm.so)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SLURM DEFAULT_MSG SLURM_LIBRARY SLURM_INCLUDE_DIR)
IF (NOT SLURM_FOUND)
MESSAGE(FATAL_ERROR "SLURM library could not be found")
ENDIF (NOT SLURM_FOUND)
SET (SLURM_LIBRARIES ${SLURM_LIBRARY})
SET (SLURM_INCLUDE_DIRS ${SLURM_INCLUDE_DIR})
IF (NOT SLURM_MODULES_DIR)
# The plugins directory should be in the same directory as the library:
GET_FILENAME_COMPONENT(SLURM_LIBRARY_DIR ${SLURM_LIBRARY} DIRECTORY)
FIND_PATH(
SLURM_MODULES_DIR
NAMES slurm/task_none.so
PATHS "${SLURM_LIBRARY_DIR}"
DOC "Directory containing SLURM extensions."
)
IF (NOT SLURM_MODULES_DIR)
MESSAGE(FATAL_ERROR "SLURM extensions directory could not be found")
ENDIF (NOT SLURM_MODULES_DIR)
SET(SLURM_MODULES_DIR "${SLURM_MODULES_DIR}/slurm")
ENDIF ()
SET(SLURM_MODULES_DIR "${SLURM_MODULES_DIR}" CACHE PATH "Directory containing SLURM modules." FORCE)
MESSAGE(STATUS "SLURM modules directory: ${SLURM_MODULES_DIR}")
#
# Figure out Slurm version (for CPack):
#
TRY_RUN(DOES_SLURM_VERSION_RUN DOES_SLURM_VERSION_COMPILE
"${CMAKE_CURRENT_BINARY_DIR}/slurm-version-check" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/slurm-version-check.c"
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${SLURM_INCLUDE_DIRS}"
COMPILE_OUTPUT_VARIABLE SLURM_VERSION_COMPILE_OUTPUT
RUN_OUTPUT_VARIABLE SLURM_VERSION
)
IF (NOT DOES_SLURM_VERSION_COMPILE)
MESSAGE(FATAL_ERROR "Unable to compile Slurm version-printing helper.")
ENDIF ()
IF (DOES_SLURM_VERSION_RUN EQUAL "FAILED_TO_RUN")
MESSAGE(FATAL_ERROR "Unable to execute Slurm version-printing helper.")
ENDIF ()
TRY_RUN(DOES_SLURM_VERSION_RUN DOES_SLURM_VERSION_COMPILE
"${CMAKE_CURRENT_BINARY_DIR}/slurm-version-check" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/slurm-version-check.c"
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${SLURM_INCLUDE_DIRS}"
COMPILE_OUTPUT_VARIABLE SLURM_VERSION_COMPILE_OUTPUT
RUN_OUTPUT_VARIABLE SLURM_VERSION_MAJOR_MINOR_ONLY
ARGS --major+minor
)
IF (NOT DOES_SLURM_VERSION_COMPILE)
MESSAGE(FATAL_ERROR "Unable to compile Slurm version-printing helper.")
ENDIF ()
IF (DOES_SLURM_VERSION_RUN EQUAL "FAILED_TO_RUN")
MESSAGE(FATAL_ERROR "Unable to execute Slurm version-printing helper.")
ENDIF ()
MESSAGE(STATUS "SLURM version detected as ${SLURM_VERSION}, ${SLURM_VERSION_MAJOR_MINOR_ONLY}")
#
# Our configurable CMake variables:
#
IF (EXISTS "/dev/shm" )
SET (AUTO_TMPDIR_DEV_SHM "/dev/shm" CACHE PATH "Directory at which POSIX shm is mounted.")
SET (AUTO_TMPDIR_DEV_SHM_PREFIX "/dev/shm/slurm-" CACHE PATH "Path to which the Slurm job id will be appended to create a /dev/shm bind mountpoint")
ELSE (EXISTS "/dev/shm")
SET (AUTO_TMPDIR_DEV_SHM "" CACHE PATH "Directory at which POSIX shm is mounted.")
SET (AUTO_TMPDIR_DEV_SHM_PREFIX "" CACHE PATH "Path to which the Slurm job id will be appended to create a /dev/shm bind mountpoint")
ENDIF (EXISTS "/dev/shm")
SET (AUTO_TMPDIR_DEFAULT_LOCAL_PREFIX "/tmp/slurm-" CACHE PATH "Path to which the Slurm job id will be appended to create a local directory to hold all bind mountpoints (e.g. /tmp, /var/tmp)")
OPTION (AUTO_TMPDIR_ENABLE_SHARED_TMPDIR "Enable a global shared directory space into which temp directories can be created." OFF)
IF ( AUTO_TMPDIR_ENABLE_SHARED_TMPDIR )
SET (AUTO_TMPDIR_DEFAULT_SHARED_PREFIX "" CACHE PATH "Path to which the Slurm job id will be appended to create a shared directory to hold all bind mountpoints (e.g. /tmp, /var/tmp)")
ENDIF ( AUTO_TMPDIR_ENABLE_SHARED_TMPDIR )
OPTION(AUTO_TMPDIR_NO_GID_CHOWN "Do not set the owner gid on per-job temporary directories (always enabled for Slurm releases < 20)" OFF)
#
# Generate canned header inclusions, etc.
#
CONFIGURE_FILE(auto_tmpdir_config.h.in auto_tmpdir_config.h)
#
# Build the plugin as a library (that's what it is):
#
ADD_LIBRARY (auto_tmpdir MODULE fs-utils.c auto_tmpdir.c)
TARGET_INCLUDE_DIRECTORIES (auto_tmpdir PUBLIC ${SLURM_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR})
SET_TARGET_PROPERTIES (auto_tmpdir PROPERTIES PREFIX "" SUFFIX ${SHARED_LIB_SUFFIX} OUTPUT_NAME "auto_tmpdir")
IF (ENABLE_SHARED_STORAGE)
TARGET_COMPILE_DEFINITIONS (auto_tmpdir PUBLIC WITH_SHARED_STORAGE SHARED_STORAGE_PATH=${SHARED_STORAGE_PATH})
ENDIF (ENABLE_SHARED_STORAGE)
INSTALL (TARGETS auto_tmpdir DESTINATION ${SLURM_MODULES_DIR})
#
# CPack package generation
#
OPTION (AUTO_TMPDIR_CPACK_IGNORE_SLURM_VERSION "If enabled the package produced by CPack will only depend on some version of the 'slurm' package, not the version compiled against" OFF)
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
SET(CPACK_PACKAGE_CONTACT "Jeffrey Frey <frey@udel.edu>")
SET(CPACK_PACKAGE_DESCRIPTION "The auto_tmpdir SPANK plugin facilitates the automatic creation/removal of bind-mounted directories for Slurm jobs.")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Slurm auto_tmpdir SPANK plugin")
SET(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
SET(CPACK_PACKAGE_RELEASE "${SLURM_VERSION}")
IF (NOT CPACK_GENERATOR)
# Default to the RPM generator if not specified:
SET(CPACK_GENERATOR "RPM")
ENDIF ()
SET(CPACK_PACKAGING_INSTALL_PREFIX ${SLURM_MODULES_DIR})
INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpack-formats/${CPACK_GENERATOR}")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}.spec.in" "${CPACK_RPM_USER_BINARY_SPECFILE}" @ONLY)
INCLUDE(CPack)