ADIOS2
ADIOS2 copied to clipboard
ADIOS 2.7.0: Configuration errors with CMake 3.12 or 3.13
The minimum CMake version required by ADIOS 2.7.0 is 3.12
cmake_minimum_required(VERSION 3.12)
However, some errors occurred when configuring ADIOS 2.7.0 with CMake 3.12 or 3.13. CMake 3.14 or higher versions work.
It seems that ADIOS 2.7.0 needs to require CMake 3.14 as the minimum version for configuration.
This issue is reproducible on ANL Blues cluster and some other DOE supercomputers.
Steps to reproduce this issue on a login node of blues.lcrc.anl.gov:
module load cmake/3.13.4-354d6wl
wget https://github.com/ornladios/ADIOS2/archive/v2.7.0.tar.gz
tar zxf v2.7.0.tar.gz
cd ADIOS2-2.7.0
mkdir build
cd build
CC=mpicc CXX=mpicxx FC=mpif90 \
cmake -DCMAKE_INSTALL_PREFIX=/path/to/adios/installation \
-DBUILD_SHARED_LIBS=OFF \
-DADIOS2_BUILD_EXAMPLES=OFF \
-DADIOS2_BUILD_TESTING=OFF \
-DADIOS2_USE_Blosc=OFF \
-DADIOS2_USE_BZip2=OFF \
-DADIOS2_USE_ZFP=OFF \
-DADIOS2_USE_SZ=OFF \
-DADIOS2_USE_MGARD=OFF \
-DADIOS2_USE_PNG=OFF \
-DADIOS2_USE_DataMan=OFF \
-DADIOS2_USE_DataSpaces=OFF \
-DADIOS2_USE_SSC=OFF \
-DADIOS2_USE_Table=OFF \
-DADIOS2_USE_SST=OFF \
-DADIOS2_USE_ZeroMQ=OFF \
-DADIOS2_USE_HDF5=OFF \
-DADIOS2_USE_Python=OFF \
-DADIOS2_USE_Fortran=OFF \
-DADIOS2_USE_Profiling=OFF \
..
Error messages in CMakeError.log:
Run Build Command:"/usr/bin/gmake" "cmTC_ba17a/fast"
/usr/bin/gmake -f CMakeFiles/cmTC_ba17a.dir/build.make CMakeFiles/cmTC_ba17a.dir/build
gmake[1]: Entering directory `ADIOS2-2.7.0/build/thirdparty/KWSys/adios2sys/CMakeFiles/CMakeTmp'
Building CXX object CMakeFiles/cmTC_ba17a.dir/kwsysPlatformTestsCXX.cxx.o
/blues/gpfs/home/software/spack-0.10.1/opt/spack/linux-centos7-x86_64/intel-17.0.4/intel-mpi-2017.3-dfphq6kavje2olnichisvjjndtridrok/compilers_and_libraries_2017.4.196/linux/mpi/intel64/bin/mpicxx -DTEST_KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H -w -fPIE -std=gnu++11 -o CMakeFiles/cmTC_ba17a.dir/kwsysPlatformTestsCXX.cxx.o -c ADIOS2-2.7.0/thirdparty/KWSys/adios2sys/kwsysPlatformTestsCXX.cxx
ADIOS2-2.7.0/thirdparty/KWSys/adios2sys/kwsysPlatformTestsCXX.cxx: In function ‘int main()’:
ADIOS2-2.7.0/thirdparty/KWSys/adios2sys/kwsysPlatformTestsCXX.cxx:53:13: error: ‘environ’ was not declared in this scope
char* e = environ[0];
^
gmake[1]: *** [CMakeFiles/cmTC_ba17a.dir/kwsysPlatformTestsCXX.cxx.o] Error 1
gmake[1]: Leaving directory `ADIOS2-2.7.0/build/thirdparty/KWSys/adios2sys/CMakeFiles/CMakeTmp'
gmake: *** [cmTC_ba17a/fast] Error 2
Checking whether CXX compiler struct stat has st_mtimespec member failed to compile with the following output:
Change Dir: ADIOS2-2.7.0/build/thirdparty/KWSys/adios2sys/CMakeFiles/CMakeTmp
Run Build Command:"/usr/bin/gmake" "cmTC_81e7c/fast"
/usr/bin/gmake -f CMakeFiles/cmTC_81e7c.dir/build.make CMakeFiles/cmTC_81e7c.dir/build
gmake[1]: Entering directory `ADIOS2-2.7.0/build/thirdparty/KWSys/adios2sys/CMakeFiles/CMakeTmp'
Building CXX object CMakeFiles/cmTC_81e7c.dir/kwsysPlatformTestsCXX.cxx.o
/blues/gpfs/home/software/spack-0.10.1/opt/spack/linux-centos7-x86_64/intel-17.0.4/intel-mpi-2017.3-dfphq6kavje2olnichisvjjndtridrok/compilers_and_libraries_2017.4.196/linux/mpi/intel64/bin/mpicxx -DTEST_KWSYS_CXX_STAT_HAS_ST_MTIMESPEC -w -fPIE -std=gnu++11 -o CMakeFiles/cmTC_81e7c.dir/kwsysPlatformTestsCXX.cxx.o -c ADIOS2-2.7.0/thirdparty/KWSys/adios2sys/kwsysPlatformTestsCXX.cxx
ADIOS2-2.7.0/thirdparty/KWSys/adios2sys/kwsysPlatformTestsCXX.cxx: In function ‘int main()’:
ADIOS2-2.7.0/thirdparty/KWSys/adios2sys/kwsysPlatformTestsCXX.cxx:26:15: error: ‘struct stat’ has no member named ‘st_mtimespec’
(void)stat1.st_mtimespec.tv_sec;
^
ADIOS2-2.7.0/thirdparty/KWSys/adios2sys/kwsysPlatformTestsCXX.cxx:27:15: error: ‘struct stat’ has no member named ‘st_mtimespec’
(void)stat1.st_mtimespec.tv_nsec;
^
gmake[1]: *** [CMakeFiles/cmTC_81e7c.dir/kwsysPlatformTestsCXX.cxx.o] Error 1
gmake[1]: Leaving directory `ADIOS2-2.7.0/build/thirdparty/KWSys/adios2sys/CMakeFiles/CMakeTmp'
gmake: *** [cmTC_81e7c/fast] Error 2
Have you tried not using the MPI compiler wrappers? The way CMake interacts with MPI it's expected that you use the "regular" compilers, letting CMake figure out the necessary MPI bits.