You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.6 KiB
107 lines
3.6 KiB
cmake_minimum_required(VERSION 3.26)
|
|
project(TestFindHDF5 LANGUAGES ${TEST_LANGS})
|
|
include(CTest)
|
|
message(STATUS "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)")
|
|
|
|
if(TEST_PARALLEL)
|
|
set(HDF5_PREFER_PARALLEL 1)
|
|
endif()
|
|
|
|
find_package(HDF5 REQUIRED COMPONENTS ${TEST_LANGS} HL)
|
|
|
|
set(variables HDF5_FOUND HDF5_VERSION)
|
|
if(NOT TEST_WRAPPER_AS_COMPILER)
|
|
list(APPEND variables HDF5_INCLUDE_DIRS HDF5_LIBRARIES HDF5_HL_LIBRARIES)
|
|
foreach(lang ${TEST_LANGS})
|
|
list(APPEND variables
|
|
HDF5_${lang}_COMPILER_EXECUTABLE
|
|
HDF5_${lang}_INCLUDE_DIRS
|
|
HDF5_${lang}_LIBRARIES
|
|
HDF5_${lang}_HL_LIBRARIES
|
|
)
|
|
endforeach()
|
|
endif()
|
|
foreach(var IN LISTS variables)
|
|
message(STATUS "${var}='${${var}}'")
|
|
endforeach()
|
|
foreach(var IN LISTS variables)
|
|
if(NOT DEFINED ${var})
|
|
message(SEND_ERROR "Variable '${var}' is not defined!")
|
|
endif()
|
|
endforeach()
|
|
|
|
set(targets HDF5::HDF5)
|
|
if(CMAKE_C_COMPILER_LOADED)
|
|
list(APPEND targets hdf5::hdf5 hdf5::hdf5_hl)
|
|
endif()
|
|
if(CMAKE_CXX_COMPILER_LOADED)
|
|
list(APPEND targets hdf5::hdf5_cpp hdf5::hdf5_hl_cpp)
|
|
endif()
|
|
if(CMAKE_Fortran_COMPILER_LOADED)
|
|
list(APPEND targets hdf5::hdf5_fortran hdf5::hdf5_hl_fortran)
|
|
endif()
|
|
foreach(target IN LISTS targets)
|
|
if(NOT TARGET ${target})
|
|
message(SEND_ERROR "Target '${target}' not defined!")
|
|
endif()
|
|
endforeach()
|
|
|
|
message(STATUS "HDF5_IS_PARALLEL='${HDF5_IS_PARALLEL}'")
|
|
if(TEST_SERIAL)
|
|
if(HDF5_IS_PARALLEL)
|
|
message(SEND_ERROR "HDF5_IS_PARALLEL is true in serial test.")
|
|
endif()
|
|
endif()
|
|
if(TEST_PARALLEL)
|
|
if(NOT HDF5_IS_PARALLEL)
|
|
message(SEND_ERROR "HDF5_IS_PARALLEL is false in parallel test.")
|
|
endif()
|
|
endif()
|
|
|
|
if(TEST_PARALLEL)
|
|
set(MPI_CXX_SKIP_MPICXX TRUE)
|
|
set(MPI_CXX_VALIDATE_SKIP_MPICXX TRUE)
|
|
find_package(MPI REQUIRED)
|
|
set(mpi_C_tgt MPI::MPI_C)
|
|
set(mpi_C_inc ${MPI_C_INCLUDE_PATH})
|
|
set(mpi_C_lib ${MPI_C_LINK_FLAGS} ${MPI_C_LIBRARIES})
|
|
set(mpi_Fortran_tgt MPI::MPI_Fortran)
|
|
set(mpi_Fortran_inc ${MPI_Fortran_INCLUDE_PATH})
|
|
set(mpi_Fortran_lib ${MPI_Fortran_LIBRARIES})
|
|
endif()
|
|
|
|
if(CMAKE_C_COMPILER_LOADED)
|
|
add_executable(test_C_tgt test_C.c)
|
|
target_link_libraries(test_C_tgt PRIVATE hdf5::hdf5 ${mpi_C_tgt})
|
|
add_test(NAME test_C_tgt COMMAND test_C_tgt test_C_tgt.h5)
|
|
|
|
add_executable(test_C_var test_C.c)
|
|
target_include_directories(test_C_var PRIVATE ${HDF5_C_INCLUDE_DIRS} ${mpi_C_inc})
|
|
target_link_libraries(test_C_var PRIVATE ${HDF5_C_LIBRARIES} ${mpi_C_lib})
|
|
add_test(NAME test_C_var COMMAND test_C_var test_C_var.h5)
|
|
endif()
|
|
|
|
if(CMAKE_CXX_COMPILER_LOADED)
|
|
add_executable(test_CXX_tgt test_CXX.cxx)
|
|
target_link_libraries(test_CXX_tgt PRIVATE hdf5::hdf5_cpp
|
|
hdf5::hdf5 # FIXME: hdf5::hdf5_cpp should link hdf5::hdf5 automatically.
|
|
${mpi_C_tgt})
|
|
add_test(NAME test_CXX_tgt COMMAND test_CXX_tgt test_CXX_tgt.h5)
|
|
|
|
add_executable(test_CXX_var test_CXX.cxx)
|
|
target_include_directories(test_CXX_var PRIVATE ${HDF5_CXX_INCLUDE_DIRS} ${mpi_C_inc})
|
|
target_link_libraries(test_CXX_var PRIVATE ${HDF5_CXX_LIBRARIES} ${mpi_C_lib})
|
|
add_test(NAME test_CXX_var COMMAND test_CXX_var test_CXX_var.h5)
|
|
endif()
|
|
|
|
if(CMAKE_Fortran_COMPILER_LOADED)
|
|
add_executable(test_Fortran_tgt test_Fortran.f90)
|
|
target_link_libraries(test_Fortran_tgt PRIVATE hdf5::hdf5_fortran ${mpi_Fortran_tgt})
|
|
add_test(NAME test_Fortran_tgt COMMAND test_Fortran_tgt)
|
|
|
|
add_executable(test_Fortran_var test_Fortran.f90)
|
|
target_include_directories(test_Fortran_var PRIVATE ${HDF5_Fortran_INCLUDE_DIRS} ${mpi_Fortran_inc})
|
|
target_link_libraries(test_Fortran_var PRIVATE ${HDF5_Fortran_LIBRARIES} ${mpi_Fortran_lib})
|
|
add_test(NAME test_Fortran_var COMMAND test_Fortran_var)
|
|
endif()
|