Skip to content
Snippets Groups Projects
Commit 1d92ec11 authored by Atkins, Charles Vernon's avatar Atkins, Charles Vernon Committed by GitHub
Browse files

Merge pull request #163 from chuckatkins/fix-windows-build

Fix windows build
parents 5b7a2869 b5d37622
No related branches found
No related tags found
No related merge requests found
......@@ -34,6 +34,9 @@ if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
${ADIOS2_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
endif()
# Let windows builds auto-export dll symbols
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
#------------------------------------------------------------------------------#
# Top level options
#------------------------------------------------------------------------------#
......@@ -64,14 +67,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 +83,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 +144,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()
......
......@@ -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
......@@ -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_ */
......@@ -141,7 +141,11 @@ enum class SelectionType
};
// adios defaults
#ifdef _WIN32
const std::string DefaultFileLibrary("stdio");
#else
const std::string DefaultFileLibrary("POSIX");
#endif
const std::string DefaultTimeUnit("Microseconds");
constexpr TimeUnit DefaultTimeUnitEnum(TimeUnit::Microseconds);
......
......@@ -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
......@@ -36,7 +35,6 @@ add_library(adios2
toolkit/profiling/iochrono/Timer.cpp
toolkit/transport/Transport.cpp
toolkit/transport/file/FileDescriptor.cpp
toolkit/transport/file/FilePointer.cpp
toolkit/transport/file/FileStream.cpp
......@@ -50,10 +48,19 @@ target_include_directories(adios2
$<INSTALL_INTERFACE:include>
PRIVATE ${ADIOS2_SOURCE_DIR}/source
)
target_link_libraries(adios2 PRIVATE adios2sys)
find_package(Threads REQUIRED)
target_link_libraries(adios2 PUBLIC ${CMAKE_THREAD_LIBS_INIT})
if(UNIX)
target_sources(adios2 PRIVATE toolkit/transport/file/FileDescriptor.cpp)
endif()
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
......
......@@ -14,8 +14,6 @@
#include "adios2/ADIOSMPI.h"
#include "adios2/core/IO.h"
#include "adios2/helper/adiosFunctions.h" //CheckIndexRange
#include "adios2/toolkit/transport/file/FileDescriptor.h"
#include "adios2/toolkit/transport/file/FilePointer.h"
#include "adios2/toolkit/transport/file/FileStream.h"
namespace adios2
......
......@@ -9,12 +9,11 @@
*/
#include "adiosSystem.h"
#include <sys/stat.h> //stat, mkdir
#include <sys/types.h> //CreateDirectory
#include <unistd.h> //CreateDirectory
#include <ctime> //std::ctime
#include <chrono> //system_clock, now
#include <ctime> //std::ctime
#include <adios2sys/SystemTools.hxx>
#include "adios2/ADIOSMPI.h"
#include "adios2/ADIOSTypes.h"
......@@ -25,44 +24,7 @@ namespace adios2
bool CreateDirectory(const std::string &fullPath) noexcept
{
auto lf_Mkdir = [](const std::string directory, struct stat &st) -> bool {
if (stat(directory.c_str(), &st) == -1) // doesn't exist
{
mkdir(directory.c_str(), 0777);
if (stat(directory.c_str(), &st) == -1) // doesn't exist
{
return false;
}
}
return true;
};
bool directoryExists = false;
auto directoryPosition = fullPath.find("/");
if (fullPath[0] == '/' || fullPath[0] == '.')
{ // find the second '/'
directoryPosition = fullPath.find("/", directoryPosition + 1);
}
struct stat st = {0};
if (directoryPosition == fullPath.npos) // no subdirectories
{
directoryExists = lf_Mkdir(fullPath.c_str(), st);
}
else
{
std::string directory(fullPath.substr(0, directoryPosition));
lf_Mkdir(directory.c_str(), st);
while (directoryPosition != fullPath.npos)
{
directoryPosition = fullPath.find("/", directoryPosition + 1);
directory = fullPath.substr(0, directoryPosition);
directoryExists = lf_Mkdir(directory.c_str(), st);
}
}
return directoryExists;
return adios2sys::SystemTools::MakeDirectory(fullPath);
}
bool IsLittleEndian() noexcept
......
......@@ -15,10 +15,13 @@
/// \endcond
#include "adios2/helper/adiosFunctions.h" //CreateDirectory
#include "adios2/toolkit/transport/file/FileDescriptor.h"
#include "adios2/toolkit/transport/file/FilePointer.h"
#include "adios2/toolkit/transport/file/FileStream.h"
#ifndef _WIN32
#include "adios2/toolkit/transport/file/FileDescriptor.h"
#endif
namespace adios2
{
namespace transportman
......@@ -204,12 +207,7 @@ void TransportMan::OpenFileTransport(const std::string &fileName,
{
auto lf_SetFileTransport = [&](const std::string library,
std::shared_ptr<Transport> &transport) {
if (library == "POSIX")
{
transport = std::make_shared<transport::FileDescriptor>(
m_MPIComm, m_DebugMode);
}
else if (library == "stdio")
if (library == "stdio")
{
transport = std::make_shared<transport::FilePointer>(m_MPIComm,
m_DebugMode);
......@@ -219,6 +217,13 @@ void TransportMan::OpenFileTransport(const std::string &fileName,
transport =
std::make_shared<transport::FileStream>(m_MPIComm, m_DebugMode);
}
#ifndef _WIN32
else if (library == "POSIX")
{
transport = std::make_shared<transport::FileDescriptor>(
m_MPIComm, m_DebugMode);
}
#endif
else
{
if (m_DebugMode)
......
set(KWSYS_NAMESPACE adios2sys)
set(KWSYS_USE_DynamicLoader ON)
set(KWSYS_USE_RegularExpression ON)
set(KWSYS_USE_SystemTools ON)
set(KWSYS_BUILD_SHARED OFF)
if(NOT ADIOS2_BUILD_SHARED_LIBS)
set(KWSYS_INSTALL_EXPORT_NAME adios2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment