| 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() |