|
|
|
cmake_minimum_required(VERSION 3.8)
|
|
|
|
project(TestFindMPI NONE)
|
|
|
|
include(CTest)
|
|
|
|
|
|
|
|
macro(source_code_mapper_helper LANG_NAME)
|
|
|
|
if("${LANG_NAME}" STREQUAL "C")
|
|
|
|
set(MPITEST_SOURCE_FILE "main.c")
|
|
|
|
elseif("${LANG_NAME}" STREQUAL "CXX")
|
|
|
|
configure_file("main.c" "main.cxx" COPYONLY)
|
|
|
|
set(MPITEST_SOURCE_FILE "main.cxx")
|
|
|
|
elseif("${LANG_NAME}" STREQUAL "Fortran")
|
|
|
|
set(MPITEST_SOURCE_FILE "main.f90")
|
|
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
foreach(c C CXX Fortran)
|
|
|
|
if("${MPI_TEST_${c}}")
|
|
|
|
message("Testing ${c}")
|
|
|
|
enable_language(${c})
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
set(MPI_CXX_SKIP_MPICXX TRUE)
|
|
|
|
set(MPI_CXX_VALIDATE_SKIP_MPICXX TRUE)
|
|
|
|
find_package(MPI REQUIRED)
|
|
|
|
|
|
|
|
foreach(c C CXX Fortran)
|
|
|
|
if(NOT "${MPI_TEST_${c}}")
|
|
|
|
continue()
|
|
|
|
endif()
|
|
|
|
if(${c} STREQUAL CXX AND MPI_MPICXX_FOUND)
|
|
|
|
message(FATAL_ERROR "Could not suppress MPI-2 C++ bindings for this MPI.")
|
|
|
|
endif()
|
|
|
|
source_code_mapper_helper(${c})
|
|
|
|
add_executable(test_tgt_${c} ${MPITEST_SOURCE_FILE})
|
|
|
|
target_link_libraries(test_tgt_${c} MPI::MPI_${c})
|
|
|
|
add_test(NAME test_tgt_${c} COMMAND test_tgt_${c})
|
|
|
|
|
|
|
|
add_executable(test_var_${c} ${MPITEST_SOURCE_FILE})
|
|
|
|
target_include_directories(test_var_${c} PRIVATE "${MPI_${c}_INCLUDE_PATH}")
|
|
|
|
target_link_libraries(test_var_${c} PRIVATE "${MPI_${c}_LINK_FLAGS}" "${MPI_${c}_LIBRARIES}")
|
|
|
|
set(copied_MPI_${c}_OPTIONS "${MPI_${c}_COMPILE_FLAGS}")
|
|
|
|
separate_arguments(copied_MPI_${c}_OPTIONS)
|
|
|
|
target_compile_options(test_var_${c} PRIVATE "${copied_MPI_${c}_OPTIONS}")
|
|
|
|
add_test(NAME test_var_${c} COMMAND test_var_${c})
|
|
|
|
endforeach()
|