-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathCMakeLists.txt
400 lines (353 loc) · 11 KB
/
CMakeLists.txt
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
PROJECT(SCR_TOP)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
# Find Packages & Files
LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/scr/cmake")
LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/axl/cmake")
# process SCR Cmake options
INCLUDE(SCR_OPTIONS)
# forward file lock setting on to kvtree compile
SET(KVTREE_FILE_LOCK ${SCR_FILE_LOCK})
#LIST(APPEND CMAKE_OPTS "-DZLIB_ROOT=${ZLIB_ROOT}")
## HEADERS
INCLUDE(CheckIncludeFile)
# check for byteswap file for kvtree
CHECK_INCLUDE_FILE(byteswap.h HAVE_BYTESWAP_H)
# search for common dependent libs and generate config file
INCLUDE(SCR_DEPENDENCIES)
## IBM Burst Buffer API
IF(ENABLE_IBM_BBAPI)
FIND_PACKAGE(BBAPI)
IF(BBAPI_FOUND)
SET(HAVE_BBAPI TRUE)
SET(ENABLE_BBAPI_FALLBACK OFF CACHE BOOL "Fallback to a different transfer type if BBAPI not supported")
IF(${ENABLE_BBAPI_FALLBACK})
SET(HAVE_BBAPI_FALLBACK TRUE)
ENDIF(${ENABLE_BBAPI_FALLBACK})
INCLUDE_DIRECTORIES(${BBAPI_INCLUDE_DIRS})
LIST(APPEND SCR_EXTERNAL_LIBS ${BBAPI_LIBRARIES})
LIST(APPEND SCR_EXTERNAL_SERIAL_LIBS ${BBAPI_LIBRARIES})
LIST(APPEND SCR_LINK_LINE " -L${WITH_BBAPI_PREFIX}/lib -lbbAPI")
ENDIF(BBAPI_FOUND)
ENDIF(ENABLE_IBM_BBAPI)
INCLUDE(GNUInstallDirs)
## Use X_ variable names for CLI scripts
## could use CMAKE_INSTALL_FULL_ names instead
SET(X_BINDIR ${CMAKE_INSTALL_FULL_BINDIR} CACHE INTERNAL "bin")
SET(X_DATADIR ${CMAKE_INSTALL_FULL_DATADIR} CACHE INTERNAL "share")
SET(X_INCLUDEDIR ${CMAKE_INSTALL_FULL_INCLUDEDIR} CACHE INTERNAL "include")
SET(X_LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR} CACHE INTERNAL "lib")
# Generate config.h with all our build #defs
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/cmake/config.h.in ${PROJECT_BINARY_DIR}/config.h)
SET_SOURCE_FILES_PROPERTIES(${PROJECT_BINARY_DIR}/config.h PROPERTIES GENERATED TRUE)
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}
${PROJECT_BINARY_DIR}
lwgrp/src
dtcmp/src
kvtree/src
spath/src
rankstr/src
axl/src
shuffile/src
redset/src
er/src
scr/src
)
INCLUDE(SCR_ADD_TEST)
IF(ENABLE_TESTS)
INCLUDE(CTest)
ENDIF(ENABLE_TESTS)
ADD_SUBDIRECTORY(scr/man)
ADD_SUBDIRECTORY(scr/scripts)
ADD_SUBDIRECTORY(scr/python)
IF(ENABLE_EXAMPLES)
ADD_SUBDIRECTORY(scr/examples)
ENDIF()
LIST(APPEND lwgrp_srcs
lwgrp/src/lwgrp.c
lwgrp/src/lwgrp_util.c
lwgrp/src/lwgrp_chain_ops.c
lwgrp/src/lwgrp_ring_ops.c
lwgrp/src/lwgrp_logchain_ops.c
lwgrp/src/lwgrp_logring_ops.c
lwgrp/src/lwgrp_comm.c
lwgrp/src/lwgrp_comm_split.c
)
LIST(APPEND dtcmp_srcs
dtcmp/src/dtcmp.c
dtcmp/src/dtcmp_util.c
dtcmp/src/dtcmp_ops.c
dtcmp/src/dtcmp_uniqify.c
dtcmp/src/dtcmp_search_binary.c
dtcmp/src/dtcmp_partitionz.c
dtcmp/src/dtcmp_partitionz_list.c
dtcmp/src/dtcmp_partition_local.c
dtcmp/src/dtcmp_merge_2way.c
dtcmp/src/dtcmp_merge_kway_heap.c
dtcmp/src/dtcmp_select_local_ends.c
dtcmp/src/dtcmp_select_local_randpartition.c
dtcmp/src/dtcmp_selectv_rand.c
dtcmp/src/dtcmp_selectv_medianofmedians.c
dtcmp/src/dtcmp_is_sorted.c
dtcmp/src/dtcmp_sort_local_insertionsort.c
dtcmp/src/dtcmp_sort_local_randquicksort.c
dtcmp/src/dtcmp_sort_local_mergesort.c
dtcmp/src/dtcmp_sort_local_qsort.c
dtcmp/src/dtcmp_sort_allgather.c
dtcmp/src/dtcmp_sort_bitonic.c
dtcmp/src/dtcmp_sort_samplesort.c
dtcmp/src/dtcmp_sortv_allgather.c
dtcmp/src/dtcmp_sortv_sortgather_scatter.c
dtcmp/src/dtcmp_sortv_cheng.c
dtcmp/src/dtcmp_sortz_samplesort.c
dtcmp/src/dtcmp_rankv_sort.c
dtcmp/src/dtcmp_seg_exscan.c
)
LIST(APPEND libkvtree_noMPI_srcs
kvtree/src/kvtree.c
kvtree/src/kvtree_util.c
kvtree/src/kvtree_io.c
kvtree/src/kvtree_helpers.c
kvtree/src/kvtree_err.c
)
LIST(APPEND libkvtree_srcs
kvtree/src/kvtree.c
kvtree/src/kvtree_util.c
kvtree/src/kvtree_io.c
kvtree/src/kvtree_helpers.c
kvtree/src/kvtree_err.c
)
LIST(APPEND libkvtree_srcs
kvtree/src/kvtree_mpi.c
kvtree/src/kvtree_mpi_io.c
)
#IF(TVDISPLAY)
# LIST(APPEND libkvtree_srcs
# kvtree/src/tv_data_display.c
# )
#ENDIF(TVDISPLAY)
LIST(APPEND libspath_noMPI_srcs
spath/src/spath.c
spath/src/spath_util.c
)
LIST(APPEND libspath_srcs
spath/src/spath.c
spath/src/spath_util.c
)
LIST(APPEND libspath_srcs spath/src/spath_mpi.c)
LIST(APPEND librankstr_srcs
rankstr/src/rankstr_mpi.c
)
LIST(APPEND libaxl_srcs
axl/src/axl.c
axl/src/axl_sync.c
axl/src/axl_err.c
axl/src/axl_io.c
axl/src/axl_util.c
)
IF(HAVE_PTHREADS)
LIST(APPEND libaxl_srcs axl/src/axl_pthread.c)
ENDIF(HAVE_PTHREADS)
IF(BBAPI_FOUND)
LIST(APPEND libaxl_srcs axl/src/axl_async_bbapi.c)
ENDIF(BBAPI_FOUND)
IF(HAVE_DATAWARP)
LIST(APPEND libaxl_srcs axl/src/axl_async_datawarp.c)
ENDIF(HAVE_DATAWARP)
LIST(APPEND libshuffile_srcs
shuffile/src/shuffile_util.c
shuffile/src/shuffile_io.c
shuffile/src/shuffile.c
)
LIST(APPEND redset_noMPI_srcs
redset/src/redset_err_serial.c
redset/src/redset_util.c
redset/src/redset_io.c
redset/src/redset_lofi.c
redset/src/redset_partner_serial.c
redset/src/redset_xor_serial.c
redset/src/redset_reedsolomon_common.c
redset/src/redset_reedsolomon_serial.c
)
LIST(APPEND libredset_srcs
redset/src/redset_err_mpi.c
redset/src/redset_util.c
redset/src/redset_util_mpi.c
redset/src/redset_io.c
redset/src/redset_lofi.c
redset/src/redset.c
redset/src/redset_single.c
redset/src/redset_partner.c
redset/src/redset_xor.c
redset/src/redset_reedsolomon_common.c
redset/src/redset_reedsolomon.c
)
LIST(APPEND liber_srcs
er/src/er.c
er/src/er_util.c
)
LIST(APPEND cliscr_noMPI_srcs
scr/src/scr_cache_index.c
scr/src/scr_cache_index_serial.c
scr/src/scr_config.c
scr/src/scr_config_serial.c
scr/src/scr_dataset.c
scr/src/scr_env.c
scr/src/scr_err_serial.c
scr/src/scr_filemap.c
scr/src/scr_halt.c
scr/src/scr_index_api.c
scr/src/scr_io.c
scr/src/scr_log.c
scr/src/scr_meta.c
scr/src/scr_param.c
scr/src/scr_util.c
scr/src/scr_rebuild_xor.c
scr/src/scr_rebuild_partner.c
scr/src/scr_rebuild_rs.c
scr/src/scr_flush_nompi.c
)
LIST(APPEND libscr_srcs
scr/src/scr.c
scr/src/scr_cache.c
scr/src/scr_cache_rebuild.c
scr/src/scr_cache_index.c
scr/src/scr_cache_index_mpi.c
scr/src/scr_config.c
scr/src/scr_config_mpi.c
scr/src/scr_dataset.c
scr/src/scr_dataset.c
scr/src/scr_env.c
scr/src/scr_err_mpi.c
scr/src/scr_fetch.c
scr/src/scr_filemap.c
scr/src/scr_flush.c
scr/src/scr_flush_file_mpi.c
scr/src/scr_flush_sync.c
scr/src/scr_flush_async.c
scr/src/scr_globals.c
scr/src/scr_groupdesc.c
scr/src/scr_halt.c
scr/src/scr_index_api.c
scr/src/scr_io.c
scr/src/scr_log.c
scr/src/scr_meta.c
scr/src/scr_param.c
scr/src/scr_prefix.c
scr/src/scr_reddesc.c
scr/src/scr_storedesc.c
scr/src/scr_summary.c
scr/src/scr_util.c
scr/src/scr_util_mpi.c
scr/src/axl_mpi.c
scr/src/scr_flush_nompi.c
)
ADD_LIBRARY(scr_o OBJECT
${lwgrp_srcs}
${dtcmp_srcs}
${libkvtree_srcs}
${libspath_srcs}
${librankstr_srcs}
${libaxl_srcs}
${libshuffile_srcs}
${libredset_srcs}
${liber_srcs}
${libscr_srcs}
)
# Install header files
LIST(APPEND libscr_install_headers
scr/src/scr.h
)
IF(ENABLE_FORTRAN)
LIST(APPEND libscr_install_headers scr/src/scrf.h)
ENDIF(ENABLE_FORTRAN)
INSTALL(FILES ${libscr_install_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(scr SHARED $<TARGET_OBJECTS:scr_o>)
TARGET_LINK_LIBRARIES(scr ${SCR_EXTERNAL_LIBS})
SET_TARGET_PROPERTIES(scr PROPERTIES OUTPUT_NAME scr CLEAN_DIRECT_OUTPUT 1)
INSTALL(TARGETS scr DESTINATION ${CMAKE_INSTALL_LIBDIR})
ENDIF()
ADD_LIBRARY(scr-static STATIC $<TARGET_OBJECTS:scr_o>)
IF(SCR_LINK_STATIC)
SET_TARGET_PROPERTIES(scr-static PROPERTIES LINK_SEARCH_START_STATIC 1)
SET_TARGET_PROPERTIES(scr-static PROPERTIES LINK_SEARCH_END_STATIC 1)
ENDIF(SCR_LINK_STATIC)
TARGET_LINK_LIBRARIES(scr-static ${SCR_EXTERNAL_LIBS})
SET_TARGET_PROPERTIES(scr-static PROPERTIES OUTPUT_NAME scr CLEAN_DIRECT_OUTPUT 1)
INSTALL(TARGETS scr-static DESTINATION ${CMAKE_INSTALL_LIBDIR})
# Fortran
IF(ENABLE_FORTRAN)
IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(scrf SHARED scr/src/scrf.c $<TARGET_OBJECTS:scr_o>)
TARGET_LINK_LIBRARIES(scrf ${SCR_EXTERNAL_LIBS})
SET_TARGET_PROPERTIES(scrf PROPERTIES OUTPUT_NAME scrf CLEAN_DIRECT_OUTPUT 1)
INSTALL(TARGETS scrf DESTINATION ${CMAKE_INSTALL_LIBDIR})
ENDIF()
ADD_LIBRARY(scrf-static STATIC scr/src/scrf.c $<TARGET_OBJECTS:scr_o>)
IF(SCR_LINK_STATIC)
SET_TARGET_PROPERTIES(scrf-static PROPERTIES LINK_SEARCH_START_STATIC 1)
SET_TARGET_PROPERTIES(scrf-static PROPERTIES LINK_SEARCH_END_STATIC 1)
ENDIF(SCR_LINK_STATIC)
TARGET_LINK_LIBRARIES(scrf-static ${SCR_EXTERNAL_LIBS})
SET_TARGET_PROPERTIES(scrf-static PROPERTIES OUTPUT_NAME scrf CLEAN_DIRECT_OUTPUT 1)
INSTALL(TARGETS scrf-static DESTINATION ${CMAKE_INSTALL_LIBDIR})
ENDIF(ENABLE_FORTRAN)
###########
# CLI SCR #
###########
# Non-MPI library for CLI
ADD_LIBRARY(scr_base STATIC
${libkvtree_noMPI_srcs}
${libspath_noMPI_srcs}
${redset_noMPI_srcs}
${cliscr_noMPI_srcs}
${libaxl_srcs}
)
TARGET_LINK_LIBRARIES(scr_base ${SCR_EXTERNAL_SERIAL_LIBS})
# Individual binaries generated from a single .c file
# scr_inspect_cache
LIST(APPEND cliscr_c_bins
scr_crc32
scr_flush_file
scr_halt_cntl
scr_log_event
scr_log_transfer
scr_nodes_file
scr_retries_halt
scr_copy
scr_index
scr_rebuild_xor
scr_rebuild_partner
scr_rebuild_rs
scr_print
)
# CLI binaries that require full SCR library
#LIST(APPEND cliscr_scr_bins
# scr_have_restart
#)
# Build and install C binaries
FOREACH(bin IN ITEMS ${cliscr_c_bins})
ADD_EXECUTABLE(${bin} scr/src/${bin}.c)
TARGET_LINK_LIBRARIES(${bin} scr_base ${SCR_EXTERNAL_SERIAL_LIBS})
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${bin} DESTINATION ${CMAKE_INSTALL_BINDIR})
ENDFOREACH(bin IN ITEMS ${cliscr_c_bins})
# Build and install CLI binaries that link full SCR library
FOREACH(bin IN ITEMS ${cliscr_scr_bins})
ADD_EXECUTABLE(${bin} scr/src/${bin}.c)
IF(SCR_LINK_STATIC)
TARGET_LINK_LIBRARIES(${bin} scr-static)
ELSE(SCR_LINK_STATIC)
TARGET_LINK_LIBRARIES(${bin} scr)
ENDIF(SCR_LINK_STATIC)
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${bin} DESTINATION ${CMAKE_INSTALL_BINDIR})
ENDFOREACH(bin IN ITEMS ${cliscr_scr_bins})
# some projects require a "make install" command to work,
# so define at least a basic INSTALL function
INSTALL(FILES NOTICE DESTINATION share/scr)
# Package
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Scalable Checkpoint / Restart Library")
SET(CPACK_PACKAGE_VENDOR "Lawrence Livermore National Laboratory")
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/scr/README.md")
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/scr/LICENSE.TXT")