ADIOS2
ADIOS2 copied to clipboard
Build with HDF5
I am allowed to configure, build and install ADIOS 2.8 release with either HDF5 1.12 or HDF5 1.13. But then the cmake run of an application using ADIOS2 breaks.
ADIOS build with HDF5 1.12
Build Options:
BP5 : ON
DataMan : ON
DataSpaces: OFF
HDF5 : ON
HDF5_VOL : OFF
...
$ /opt/adios2/bin/adios2-config --cxx-libs
-Wl,-rpath,/opt/hdf5-1.12.0/parallel/lib /opt/adios2/lib/libadios2_cxx11_mpi.a /opt/adios2/lib/libadios2_cxx11.a /opt/adios2/lib/libadios2_core_mpi.a /opt/adios2/lib/libadios2_core.a /usr/lib/x86_64-linux-gnu/libzmq.so /opt/adios2/lib/libadios2_evpath.a -pthread /opt/adios2/lib/libadios2_ffs.a -ldl -lm /opt/adios2/lib/libadios2_dill.a -lffi /opt/adios2/lib/libadios2_atl.a /opt/adios2/lib/libadios2_enet.a /usr/lib/x86_64-linux-gnu/libbz2.so /opt/hdf5-1.12.0/parallel/lib/libhdf5.so -lz -ldl -lm
ADIOS build with HDF5 1.13
Build Options:
BP5 : ON
DataMan : ON
DataSpaces: OFF
HDF5 : ON
HDF5_VOL : ON
...
$ /opt/adios2/bin/adios2-config --cxx-libs
-Wl,-rpath,/opt/hdf5-1.13.0/parallel/lib /opt/adios2/lib/libadios2_cxx11_mpi.a /opt/adios2/lib/libadios2_cxx11.a /opt/adios2/lib/libadios2_core_mpi.a /opt/adios2/lib/libadios2_core.a /usr/lib/x86_64-linux-gnu/libzmq.so /opt/adios2/lib/libadios2_evpath.a -pthread /opt/adios2/lib/libadios2_ffs.a -ldl -lm /opt/adios2/lib/libadios2_dill.a -lffi /opt/adios2/lib/libadios2_atl.a /opt/adios2/lib/libadios2_enet.a /usr/lib/x86_64-linux-gnu/libbz2.so /opt/hdf5-1.13.0/parallel/lib/libhdf5.so -lz -ldl -lm
Application build:
~/ADIOS2-Examples/build$ cmake -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_PREFIX_PATH="/opt/adios2" ..
...
-- Found MPI_C: /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so (found version "3.1")
-- Found MPI_CXX: /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so (found version "3.1")
-- Found MPI_Fortran: /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_usempif08.so (found version "3.1")
-- Found MPI: TRUE (found version "3.1") found components: C CXX Fortran
-- Found MPI: TRUE (found version "3.1")
-- Found BZip2: /usr/lib/x86_64-linux-gnu/libbz2.so (found version "1.0.8")
-- Looking for BZ2_bzCompressInit
-- Looking for BZ2_bzCompressInit - found
-- Found ZeroMQ: /usr/lib/x86_64-linux-gnu/libzmq.so (found version "4.3.2")
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS C) (found
version "")
Call Stack (most recent call first):
/usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
/opt/adios2/lib/cmake/adios2/upstream/FindHDF5.cmake:975 (find_package_handle_standard_args)
/opt/adios2/lib/cmake/adios2/FindHDF5.cmake:8 (include)
/usr/share/cmake-3.16/Modules/CMakeFindDependencyMacro.cmake:47 (find_package)
/opt/adios2/lib/cmake/adios2/adios2-config-common.cmake:127 (find_dependency)
/opt/adios2/lib/cmake/adios2/adios2-config.cmake:29 (include)
CMakeLists.txt:67 (find_package)
adios@SURFACE116324:~/ADIOS2/build.28$ date
Wed Apr 27 13:33:34 EDT 2022
adios@SURFACE116324:~/ADIOS2/build.28$ git status
On branch release_28
Your branch is up to date with 'upstream/release_28'.
Adding the path to HDF5 manually fixes this problem:
$ cmake -DCMAKE_INSTALL_PREFIX=/home/adios/install \
-DCMAKE_PREFIX_PATH="/opt/adios2;/opt/hdf5-1.13.0/parallel" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo ..
...
-- Found BZip2: /usr/lib/x86_64-linux-gnu/libbz2.so (found version "1.0.8")
-- Looking for BZ2_bzCompressInit
-- Looking for BZ2_bzCompressInit - found
-- Found ZeroMQ: /usr/lib/x86_64-linux-gnu/libzmq.so (found version "4.3.2")
-- Found Sodium: /usr/lib/x86_64-linux-gnu/libsodium.so
-- Found atl: /opt/adios2/lib/cmake/adios2/thirdparty/atl-config.cmake (found suitable version "2.2.1", minimum required is "2.2.1")
-- Found atl: /opt/adios2/lib/cmake/adios2/thirdparty/atl-config.cmake (found version "2.2.1")
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
-- Checking for module 'libffi'
-- Found libffi, version 3.3
-- Found LibFFI: -lffi
-- Found dill: /opt/adios2/lib/cmake/adios2/thirdparty/dill-config.cmake (found version "2.4.1")
-- Found ffs: /opt/adios2/lib/cmake/adios2/thirdparty/ffs-config.cmake (found suitable version "1.6.0", minimum required is "1.6.0")
-- Found dill: /opt/adios2/lib/cmake/adios2/thirdparty/dill-config.cmake (found suitable version "2.4.1", minimum required is "2.4.1")
-- Found enet: /opt/adios2/lib/cmake/adios2/thirdparty/enet-config.cmake (found suitable version "1.3.14", minimum required is "1.3.14")
-- Found EVPath: /opt/adios2/lib/cmake/adios2/thirdparty/EVPathConfigCommon.cmake (found version "4.5.0")
-- Found ADIOS2: /opt/adios2/lib/cmake/adios2/adios2-config.cmake (found suitable version "2.8.0.15", minimum required is "2.7.1") found components: C CXX Fortran MPI
...
Since cmake finds the other dependencies automatically, I was expecting to find HDF5 as well. True, I don't have it in the system path, but still, adios2-config exist to give the paths to automake, why can't cmake do the same thing?
I use -DADIOS2_USE_HDF5=ON -DHDF5_ROOT="${HDF5_DIR}" \ to build with HDF5 support.
https://github.com/openhpc/ohpc/blob/1dc64550895f478ff0173d4acf69162c0df47247/components/io-libs/adios2/SPECS/adios2.spec#L98
@pnorbert I guess that this is a non issue for Adios2 since it is about how cmake find packages.