diff --git a/CMakeLists.txt b/CMakeLists.txt index d97a54ebea76170261841a63fa885d588f0fef85..69ffaa9176a2079f0b5b8f1bf20dc81927ceb15b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,14 +64,15 @@ if(ADIOS2_ENABLE_PIC) set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() -adios_option(BZip2 "Enable support for BZip2 transforms" AUTO) -adios_option(ZFP "Enable support for ZFP transforms" AUTO) -adios_option(MPI "Enable support for MPI" AUTO) -adios_option(DataMan "Enable support for DataMan" AUTO) -adios_option(ZeroMQ "Enable support for ZeroMQ" AUTO) -adios_option(HDF5 "Enable support for the HDF5 engine" AUTO) -adios_option(ADIOS1 "Enable support for the ADIOS 1 engine" AUTO) -adios_option(Python "Enable support for Python bindings" AUTO) +adios_option(BZip2 "Enable support for BZip2 transforms" AUTO) +adios_option(ZFP "Enable support for ZFP transforms" AUTO) +adios_option(MPI "Enable support for MPI" AUTO) +adios_option(DataMan "Enable support for DataMan" AUTO) +adios_option(ZeroMQ "Enable support for ZeroMQ" AUTO) +adios_option(HDF5 "Enable support for the HDF5 engine" AUTO) +adios_option(ADIOS1 "Enable support for the ADIOS 1 engine" AUTO) +adios_option(Python "Enable support for Python bindings" AUTO) +adios_option(SysVShMem "Enable support for SysV Shared Memory IPC on *NIX" AUTO) include(${ADIOS2_SOURCE_DIR}/cmake/DetectOptions.cmake) if(ADIOS2_HAVE_MPI) @@ -79,7 +80,7 @@ if(ADIOS2_HAVE_MPI) add_definitions(-DOMPI_SKIP_MPICXX) endif() -GenerateADIOSConfig(MPI ZFP BZip2 ADIOS1 HDF5 DataMan Python) +GenerateADIOSConfig(MPI ZFP BZip2 ADIOS1 HDF5 DataMan Python SysVShMem) install( FILES ${ADIOS2_BINARY_DIR}/adios2/ADIOSConfig.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/adios2 @@ -140,8 +141,8 @@ endif() message(" Build Type: ${CMAKE_BUILD_TYPE}") message(" Testing: ${BUILD_TESTING}") message(" Build Options:") -foreach(opt BZip2 ZFP MPI DataMan ZeroMQ HDF5 ADIOS1 Python) - message_pad(" ${opt}" 13 label) +foreach(opt BZip2 ZFP MPI DataMan ZeroMQ HDF5 ADIOS1 Python SysVShMem) + message_pad(" ${opt}" 15 label) if(${ADIOS2_HAVE_${opt}}) message("${label}: ON") else() diff --git a/cmake/DetectOptions.cmake b/cmake/DetectOptions.cmake index 562a6b30f4337e79e7ea3571d02ed40cb61b12b3..29237fcc40c2de892369101077f23c1b880161f3 100644 --- a/cmake/DetectOptions.cmake +++ b/cmake/DetectOptions.cmake @@ -106,3 +106,20 @@ if(ADIOS2_USE_Python STREQUAL AUTO) elseif(ADIOS2_USE_Python) set(ADIOS2_HAVE_Python TRUE) endif() + +#SysV IPC +if(ADIOS2_USE_SysVShMem STREQUAL AUTO) + if(UNIX) + include(CheckSymbolExists) + CHECK_SYMBOL_EXISTS(shmget "sys/ipc.h;sys/shm.h" HAVE_shmget) + if(HAVE_shmget) + set(ADIOS2_HAVE_SysVShMem ON) + else() + set(ADIOS2_HAVE_SysVShMem OFF) + endif() + else() + set(ADIOS2_HAVE_SysVShMem OFF) + endif() +elseif(ADIOS2_USE_SysVShMem) + set(ADIOS2_HAVE_SysVShMem) +endif() \ No newline at end of file diff --git a/source/adios2/ADIOSConfig.h.in b/source/adios2/ADIOSConfig.h.in index 046923c2c464f4397570acf086803232b9b58e89..c917b81a8b1a06b2b43b4844cd1715e70ebff69e 100644 --- a/source/adios2/ADIOSConfig.h.in +++ b/source/adios2/ADIOSConfig.h.in @@ -45,4 +45,7 @@ /* CMake Option: ADIOS_USE_Python=ON */ #cmakedefine ADIOS2_HAVE_PYTHON +/* CMake Option: ADIOS_USE_SysVShMem=ON */ +#cmakedefine ADIOS2_HAVE_SYSVSHMEM + #endif /* ADIOSCONFIG_H_ */ diff --git a/source/adios2/CMakeLists.txt b/source/adios2/CMakeLists.txt index 7617d7b832cfb79353d1260f2d8c00bf7778e477..79e779d2362c1ea680a99bbcfe6a15017931a481 100644 --- a/source/adios2/CMakeLists.txt +++ b/source/adios2/CMakeLists.txt @@ -27,8 +27,7 @@ add_library(adios2 toolkit/capsule/Capsule.cpp toolkit/capsule/heap/STLVector.cpp - toolkit/capsule/shmem/ShmSystemV.cpp - + toolkit/format/bp1/BP1Base.cpp toolkit/format/bp1/BP1Base.tcc toolkit/format/bp1/BP1Aggregator.cpp toolkit/format/bp1/BP1Writer.cpp toolkit/format/bp1/BP1Writer.tcc @@ -54,6 +53,10 @@ target_include_directories(adios2 find_package(Threads REQUIRED) target_link_libraries(adios2 PUBLIC ${CMAKE_THREAD_LIBS_INIT}) +if(ADIOS2_HAVE_SysVShMem) + target_sources(adios2 PRIVATE toolkit/capsule/shmem/ShmSystemV.cpp) +endif() + if(ADIOS2_HAVE_DataMan) target_sources(adios2 PRIVATE engine/dataman/DataManReader.cpp