PROJECT(SCR) CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # Mac rpath Policy IF(POLICY CMP0042) CMAKE_POLICY(SET CMP0042 NEW) ENDIF(POLICY CMP0042) SET(CMAKE_MACOSX_RPATH ON) SET(CMAKE_POSITION_INDEPENDENT_CODE ON) # Configuration Options SET(SCR_RESOURCE_MANAGER "SLURM" CACHE STRING "Resource Manager for CLI (SLURM APRUN PMIX LSF NONE)") SET_PROPERTY(CACHE SCR_RESOURCE_MANAGER PROPERTY STRINGS SLURM APRUN PMIX LSF NONE) SET(SCR_ASYNC_API "NONE" CACHE STRING "Vendor-specific asynchronous file transfer (CRAY_DW INTEL_CPPR IBM_BBAPI NONE)") SET_PROPERTY(CACHE SCR_ASYNC_API PROPERTY STRINGS NONE CRAY_DW INTEL_CPPR IBM_BBAPI) OPTION(ENABLE_FORTRAN "Turn Fortran Support ON/OFF" ON) IF(ENABLE_FORTRAN) SET(HAVE_FORTRAN_API TRUE) ENABLE_LANGUAGE(Fortran) ENDIF(ENABLE_FORTRAN) SET(SCR_CACHE_BASE "/tmp" CACHE PATH "Default base path for SCR cache directory") SET(SCR_CNTL_BASE "/tmp" CACHE PATH "Default base path for SCR control directory") SET(SCR_CONFIG_FILE "/etc/scr/scr.conf" CACHE FILEPATH "Default full path and filename for SCR config file") SET(SCR_FILE_LOCK "FLOCK" CACHE STRING "Specify type of file locking to use (FLOCK FCNTL NONE)") SET_PROPERTY(CACHE SCR_FILE_LOCK PROPERTY STRINGS FLOCK FCNTL NONE) OPTION(SCR_LINK_STATIC "Default to static linking? (Needed for Cray)" OFF) # Find Packages & Files LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") ## MPI INCLUDE(SetupMPI) IF(MPI_C_FOUND) INCLUDE_DIRECTORIES(${MPI_C_INCLUDE_PATH}) LIST(APPEND SCR_EXTERNAL_LIBS ${MPI_C_LIBRARIES}) ELSE(MPI_C_FOUND) MESSAGE("WARNING: Could not find MPI!") MESSAGE(" Either add an MPI compiler to your path (using modules)") MESSAGE(" Or force CMake to build using the correct compiler (`export CC=mpicc`)") ENDIF(MPI_C_FOUND) ## ZLIB FIND_PACKAGE(ZLIB REQUIRED) IF(ZLIB_FOUND) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIRS}) LIST(APPEND SCR_EXTERNAL_LIBS ${ZLIB_LIBRARIES}) LIST(APPEND SCR_LINK_LINE "-lz") ENDIF(ZLIB_FOUND) ## HEADERS INCLUDE(CheckIncludeFile) CHECK_INCLUDE_FILE(byteswap.h HAVE_BYTESWAP_H) ## libdtcmp FIND_PACKAGE(DTCMP QUIET) IF(DTCMP_FOUND) SET(HAVE_LIBDTCMP TRUE) INCLUDE_DIRECTORIES(${DTCMP_INCLUDE_DIRS}) LIST(APPEND SCR_EXTERNAL_LIBS ${DTCMP_LIBRARIES}) LIST(APPEND SCR_LINK_LINE " -L${WITH_DTCMP_PREFIX}/lib -ldtcmp") ENDIF(DTCMP_FOUND) ## libyogrt FIND_PACKAGE(YOGRT QUIET) IF(YOGRT_FOUND) SET(HAVE_LIBYOGRT TRUE) INCLUDE_DIRECTORIES(${YOGRT_INCLUDE_DIRS}) LIST(APPEND SCR_EXTERNAL_LIBS ${YOGRT_LIBRARIES}) LIST(APPEND SCR_LINK_LINE " -L${WITH_YOGRT_PREFIX}/lib -lyogrt") ENDIF(YOGRT_FOUND) ## mySQL FIND_PACKAGE(MYSQL QUIET) IF(MYSQL_FOUND) SET(HAVE_LIBMYSQLCLIENT TRUE) INCLUDE_DIRECTORIES(${MYSQL_INCLUDE_DIRS}) LIST(APPEND SCR_EXTERNAL_LIBS ${MYSQL_LIBRARIES}) LIST(APPEND SCR_LINK_LINE " -L${WITH_MYSQL_PREFIX}/lib -lmysqlclient") ENDIF(MYSQL_FOUND) ## PDSH OPTION(BUILD_PDSH "Download and build the PDSH Library?" OFF) IF(BUILD_PDSH) INCLUDE(ExternalProject) EXTERNALPROJECT_ADD(PDSH GIT_REPOSITORY https://github.com/grondo/pdsh PREFIX ${CMAKE_CURRENT_BINARY_DIR}/PDSH UPDATE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/PDSH/src/PDSH/bootstrap CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/PDSH/src/PDSH/configure --prefix=${CMAKE_INSTALL_PREFIX} BUILD_COMMAND ${MAKE} ) SET(PDSH_EXE ${CMAKE_INSTALL_PREFIX}/bin/pdsh) SET(DSHBAK_EXE ${CMAKE_INSTALL_PREFIX}/bin/dshbak) ELSE(BUILD_PDSH) FIND_PACKAGE(PDSH REQUIRED) ENDIF(BUILD_PDSH) OPTION(SCR_BGQ "Enable proper BGQ compilation" OFF) ## PMIx IF(${SCR_RESOURCE_MANAGER} STREQUAL "PMIX") FIND_PACKAGE(PMIX REQUIRED) SET(HAVE_PMIX TRUE) INCLUDE_DIRECTORIES(${PMIX_INCLUDE_DIRS}) LIST(APPEND SCR_EXTERNAL_LIBS ${PMIX_LIBRARIES}) ENDIF(${SCR_RESOURCE_MANAGER} STREQUAL "PMIX") ## CPPR IF(${SCR_ASYNC_API} STREQUAL "INTEL_CPPR") FIND_PACKAGE(CPPR REQUIRED) SET(HAVE_CPPR TRUE) INCLUDE_DIRECTORIES(${CPPR_INCLUDE_DIRS}) LIST(APPEND SCR_EXTERNAL_LIBS ${CPPR_LIBRARIES}) ENDIF(${SCR_ASYNC_API} STREQUAL "INTEL_CPPR") ## DataWarp IF(${SCR_ASYNC_API} STREQUAL "CRAY_DW") FIND_PACKAGE(DataWarp REQUIRED) SET(HAVE_DATAWARP TRUE) INCLUDE_DIRECTORIES(${DATAWARP_INCLUDE_DIRS}) LIST(APPEND SCR_EXTERNAL_LIBS ${DATAWARP_LIBRARIES}) # LIST(APPEND SCR_LINK_LINE " -L${WITH_DATAWARP_PREFIX}/lib64 -ldatawarp") ENDIF(${SCR_ASYNC_API} STREQUAL "CRAY_DW") ## BBAPI IF(${SCR_ASYNC_API} STREQUAL "IBM_BBAPI") FIND_PACKAGE(BBAPI REQUIRED) SET(HAVE_BBAPI TRUE) INCLUDE_DIRECTORIES(${BBAPI_INCLUDE_DIRS}) LIST(APPEND SCR_EXTERNAL_LIBS ${BBAPI_LIBRARIES}) LIST(APPEND SCR_LINK_LINE " -L${WITH_BBAPI_PREFIX}/lib -lbbAPI") ENDIF(${SCR_ASYNC_API} STREQUAL "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") # Subdirectories #ENABLE_TESTING() INCLUDE(CTest) INCLUDE(SCR_ADD_TEST) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src) ADD_SUBDIRECTORY(man) ADD_SUBDIRECTORY(scripts) ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(doc) ADD_SUBDIRECTORY(examples) # 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(config.h.in PROPERTIES GENERATED FALSE) SET_SOURCE_FILES_PROPERTIES(${PROJECT_BINARY_DIR}/config.h PROPERTIES GENERATED TRUE) # Special Install Files INSTALL(FILES README.md DESTINATION ${CMAKE_INSTALL_DATADIR}/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}/README.md") SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.TXT") # SET(CPACK_PACKAGE_VERSION_MAJOR ${SCR_MAJOR_VERSION}) # SET(CPACK_PACKAGE_VERSION_MINOR ${SCR_MINOR_VERSION}) # SET(CPACK_PACKAGE_VERSION_PATCH ${SCR_PATCH_VERSION}) # SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") # IF(WIN32 AND NOT UNIX) # # There is a bug in NSI that does not handle full unix paths properly. Make # # sure there is at least one set of four (4) backlasshes. # SET(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") # SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe") # SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} My Famous Project") # SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.my-project-home-page.org") # SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.my-personal-home-page.com") # SET(CPACK_NSIS_CONTACT "me@my-personal-home-page.com") # SET(CPACK_NSIS_MODIFY_PATH ON) # ELSE(WIN32 AND NOT UNIX) # SET(CPACK_STRIP_FILES "bin/MyExecutable") # SET(CPACK_SOURCE_STRIP_FILES "") # ENDIF(WIN32 AND NOT UNIX) # SET(CPACK_PACKAGE_EXECUTABLES "MyExecutable" "My Executable") # INCLUDE(CPACK)